@simplybusiness/mobius 9.3.1 → 9.3.2
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/CHANGELOG.md +6 -0
- package/dist/cjs/components/AddressLookup/AddressLookup.js.map +2 -2
- package/dist/cjs/components/AddressLookup/index.js.map +2 -2
- package/dist/cjs/components/Checkbox/Checkbox.js.map +2 -2
- package/dist/cjs/components/Checkbox/CheckboxGroup.js.map +2 -2
- package/dist/cjs/components/Checkbox/index.js.map +2 -2
- package/dist/cjs/components/Combobox/Combobox.js.map +2 -2
- package/dist/cjs/components/Combobox/index.js.map +2 -2
- package/dist/cjs/components/DateField/DateField.js.map +2 -2
- package/dist/cjs/components/DateField/index.js.map +2 -2
- package/dist/cjs/components/ErrorMessage/ErrorMessage.js.map +2 -2
- package/dist/cjs/components/ErrorMessage/index.js.map +2 -2
- package/dist/cjs/components/ExpandableText/ExpandableText.js.map +2 -2
- package/dist/cjs/components/ExpandableText/index.js.map +2 -2
- package/dist/cjs/components/MaskedField/MaskedField.js.map +2 -2
- package/dist/cjs/components/MaskedField/index.js.map +2 -2
- package/dist/cjs/components/NumberField/NumberField.js.map +2 -2
- package/dist/cjs/components/NumberField/index.js.map +2 -2
- package/dist/cjs/components/PasswordField/PasswordField.js.map +2 -2
- package/dist/cjs/components/PasswordField/ShowHideButton.js.map +2 -2
- package/dist/cjs/components/PasswordField/index.js.map +2 -2
- package/dist/cjs/components/Popover/Popover.js +21 -1
- package/dist/cjs/components/Popover/Popover.js.map +2 -2
- package/dist/cjs/components/Popover/index.js +21 -1
- package/dist/cjs/components/Popover/index.js.map +2 -2
- package/dist/cjs/components/Radio/Radio.js.map +2 -2
- package/dist/cjs/components/Radio/RadioGroup.js.map +2 -2
- package/dist/cjs/components/Radio/index.js.map +2 -2
- package/dist/cjs/components/Select/Select.js.map +2 -2
- package/dist/cjs/components/Select/index.js.map +2 -2
- package/dist/cjs/components/TextArea/TextArea.js.map +2 -2
- package/dist/cjs/components/TextArea/index.js.map +2 -2
- package/dist/cjs/components/TextField/TextField.js.map +2 -2
- package/dist/cjs/components/TextField/index.js.map +2 -2
- package/dist/cjs/components/index.js +21 -1
- package/dist/cjs/components/index.js.map +2 -2
- package/dist/cjs/index.js +21 -1
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/meta.json +42 -42
- package/dist/esm/{chunk-ASLEVOVU.js → chunk-MXQ4PJF4.js} +1 -1
- package/dist/esm/{chunk-IS74FB4O.js → chunk-O5YEU5TG.js} +23 -3
- package/dist/esm/chunk-O5YEU5TG.js.map +7 -0
- package/dist/esm/components/AddressLookup/AddressLookup.js +2 -2
- package/dist/esm/components/AddressLookup/index.js +2 -2
- package/dist/esm/components/Checkbox/Checkbox.js +2 -2
- package/dist/esm/components/Checkbox/CheckboxGroup.js +2 -2
- package/dist/esm/components/Checkbox/index.js +2 -2
- package/dist/esm/components/Combobox/Combobox.js +2 -2
- package/dist/esm/components/Combobox/index.js +2 -2
- package/dist/esm/components/DateField/DateField.js +2 -2
- package/dist/esm/components/DateField/index.js +2 -2
- package/dist/esm/components/ErrorMessage/ErrorMessage.js +2 -2
- package/dist/esm/components/ErrorMessage/index.js +2 -2
- package/dist/esm/components/ExpandableText/ExpandableText.js +2 -2
- package/dist/esm/components/ExpandableText/index.js +2 -2
- package/dist/esm/components/MaskedField/MaskedField.js +2 -2
- package/dist/esm/components/MaskedField/index.js +2 -2
- package/dist/esm/components/NumberField/NumberField.js +2 -2
- package/dist/esm/components/NumberField/index.js +2 -2
- package/dist/esm/components/PasswordField/PasswordField.js +2 -2
- package/dist/esm/components/PasswordField/ShowHideButton.js +2 -2
- package/dist/esm/components/PasswordField/index.js +2 -2
- package/dist/esm/components/Popover/Popover.js +1 -1
- package/dist/esm/components/Popover/index.js +1 -1
- package/dist/esm/components/Radio/Radio.js +2 -2
- package/dist/esm/components/Radio/RadioGroup.js +2 -2
- package/dist/esm/components/Radio/index.js +2 -2
- package/dist/esm/components/Select/Select.js +2 -2
- package/dist/esm/components/Select/index.js +2 -2
- package/dist/esm/components/TextArea/TextArea.js +2 -2
- package/dist/esm/components/TextArea/index.js +2 -2
- package/dist/esm/components/TextField/TextField.js +2 -2
- package/dist/esm/components/TextField/index.js +2 -2
- package/dist/esm/components/index.js +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/meta.json +72 -72
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/src/components/Combobox/Combobox.mdx +50 -6
- package/src/components/Popover/Popover.test.tsx +94 -0
- package/src/components/Popover/Popover.tsx +30 -2
- package/dist/esm/chunk-IS74FB4O.js.map +0 -7
- /package/dist/esm/{chunk-ASLEVOVU.js.map → chunk-MXQ4PJF4.js.map} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/utils/changeCSS.ts", "../../../../src/utils/delay.ts", "../../../../src/utils/excludeControls.ts", "../../../../src/utils/filterUndefinedProps.ts", "../../../../src/utils/getSpacingValue.ts", "../../../../src/utils/mergeRefs.ts", "../../../../src/utils/polyfill-tests.ts", "../../../../src/utils/sizeClasses.ts", "../../../../src/utils/sizeOptions.ts", "../../../../src/utils/spaceDelimitedList.ts", "../../../../src/utils/index.ts", "../../../../src/components/Flex/propUtils.ts", "../../../../src/components/Flex/Flex.tsx", "../../../../src/components/Flex/types.ts", "../../../../src/components/Flex/index.tsx", "../../../../src/components/Icon/Icon.tsx", "../../../../src/components/Icon/types.ts", "../../../../src/components/Icon/index.tsx", "../../../../src/components/Accordion/AccordionLink.tsx", "../../../../src/components/Accordion/Accordion.tsx", "../../../../src/components/Divider/Divider.tsx", "../../../../src/components/Divider/index.tsx", "../../../../src/components/Accordion/AccordionList.tsx", "../../../../src/components/Accordion/index.tsx", "../../../../src/hooks/useBreakpoint/useBreakpoint.tsx", "../../../../src/hooks/useBreakpoint/index.tsx", "../../../../src/hooks/useButton/useButton.tsx", "../../../../src/hooks/useButton/index.tsx", "../../../../src/hooks/useDialogPolyfill/useDialogPolyfill.ts", "../../../../src/hooks/useDialogPolyfill/index.ts", "../../../../src/hooks/useDialog/useDialog.ts", "../../../../src/hooks/useDialog/index.ts", "../../../../src/hooks/useLabel/useLabel.tsx", "../../../../src/hooks/useLabel/index.tsx", "../../../../src/hooks/useTextField/useTextField.tsx", "../../../../src/hooks/useTextField/types.tsx", "../../../../src/hooks/useTextField/index.tsx", "../../../../src/hooks/useValidationClasses/useValidationClasses.ts", "../../../../src/hooks/useValidationClasses/index.ts", "../../../../src/hooks/index.tsx", "../../../../src/components/Label/Label.tsx", "../../../../src/components/Label/index.tsx", "../../../../src/components/Stack/Stack.tsx", "../../../../src/components/Stack/index.tsx", "../../../../src/components/TextField/adornmentWithClassName.ts", "../../../../src/components/TextField/TextField.tsx", "../../../../src/components/TextField/index.tsx", "../../../../src/components/VisuallyHidden/VisuallyHidden.tsx", "../../../../src/components/VisuallyHidden/index.tsx", "../../../../src/components/Combobox/utils.tsx", "../../../../src/components/Combobox/Option.tsx", "../../../../src/components/Combobox/Listbox.tsx", "../../../../src/components/Combobox/useComboboxHighlight.tsx", "../../../../src/components/Combobox/useComboboxOptions.ts", "../../../../src/components/Combobox/Combobox.tsx", "../../../../src/components/Combobox/types.tsx", "../../../../src/components/Combobox/index.tsx", "../../../../src/components/AddressLookup/utils.ts", "../../../../src/components/AddressLookup/AddressLookup.tsx", "../../../../src/components/AddressLookup/LoqateAddressLookupService.tsx", "../../../../src/components/AddressLookup/types.tsx", "../../../../src/components/AddressLookup/index.tsx", "../../../../src/components/Alert/Alert.tsx", "../../../../src/components/Alert/index.tsx", "../../../../src/components/Box/Box.tsx", "../../../../src/components/Box/index.tsx", "../../../../src/components/Breadcrumbs/Breadcrumbs.tsx", "../../../../src/components/Breadcrumbs/BreadcrumbItem.tsx", "../../../../src/components/Breadcrumbs/index.tsx", "../../../../src/components/Button/Loading.tsx", "../../../../src/components/Button/Success.tsx", "../../../../src/components/Button/Button.tsx", "../../../../src/components/Button/index.tsx", "../../../../src/components/Checkbox/CheckboxGroup.tsx", "../../../../src/components/Checkbox/types.ts", "../../../../src/components/Checkbox/index.tsx", "../../../../src/components/Container/Container.tsx", "../../../../src/components/Container/index.tsx", "../../../../src/components/DateField/validation.ts", "../../../../src/components/DateField/DateField.tsx", "../../../../src/components/DateField/index.tsx", "../../../../src/components/Drawer/Content.tsx", "../../../../src/components/Drawer/DrawerContext.tsx", "../../../../src/components/Drawer/Drawer.tsx", "../../../../src/components/Drawer/useDrawer.ts", "../../../../src/components/Drawer/Header.tsx", "../../../../src/components/Drawer/index.tsx", "../../../../src/components/DropdownMenu/DropdownMenu.tsx", "../../../../src/components/DropdownMenu/Item.tsx", "../../../../src/components/DropdownMenu/index.tsx", "../../../../src/components/Fieldset/Fieldset.tsx", "../../../../src/components/Fieldset/index.tsx", "../../../../src/components/Grid/Grid.tsx", "../../../../src/components/Grid/Item.tsx", "../../../../src/components/Grid/index.tsx", "../../../../src/components/Image/Image.tsx", "../../../../src/components/Image/index.tsx", "../../../../src/components/Link/Link.tsx", "../../../../src/components/Link/index.tsx", "../../../../src/components/LinkButton/LinkButton.tsx", "../../../../src/components/LinkButton/index.tsx", "../../../../src/components/List/List.tsx", "../../../../src/components/List/ListItem.tsx", "../../../../src/components/List/index.tsx", "../../../../src/components/LoadingIndicator/LoadingIndicator.tsx", "../../../../src/components/LoadingIndicator/index.tsx", "../../../../src/components/Logo/Logo.tsx", "../../../../src/components/Logo/index.tsx", "../../../../src/components/Modal/Content.tsx", "../../../../src/components/Modal/ModalContext.tsx", "../../../../src/components/Modal/useModal.ts", "../../../../src/components/Modal/Header.tsx", "../../../../src/components/Modal/Modal.tsx", "../../../../src/components/Modal/index.tsx", "../../../../src/components/NumberField/NumberField.tsx", "../../../../src/components/NumberField/index.tsx", "../../../../src/components/Option/Option.tsx", "../../../../src/components/Option/index.tsx", "../../../../src/components/PasswordField/ShowHideButton.tsx", "../../../../src/components/PasswordField/PasswordField.tsx", "../../../../src/components/PasswordField/index.tsx", "../../../../src/components/Popover/Popover.tsx", "../../../../src/components/Popover/index.tsx", "../../../../src/components/Progress/Progress.tsx", "../../../../src/components/Progress/index.tsx", "../../../../src/components/Radio/Radio.tsx", "../../../../src/components/Radio/RadioGroup.tsx", "../../../../src/components/Radio/index.tsx", "../../../../src/components/Segment/SegmentGroup.tsx", "../../../../src/components/Segment/Segment.tsx", "../../../../src/components/Segment/index.tsx", "../../../../src/components/Select/Select.tsx", "../../../../src/components/Select/index.tsx", "../../../../src/components/Slider/Slider.tsx", "../../../../src/components/Slider/index.tsx", "../../../../src/components/SVG/SVG.tsx", "../../../../src/components/SVG/index.tsx", "../../../../src/components/Switch/Switch.tsx", "../../../../src/components/Switch/index.tsx", "../../../../src/components/Table/Table.tsx", "../../../../src/components/Table/Head.tsx", "../../../../src/components/Table/Body.tsx", "../../../../src/components/Table/Foot.tsx", "../../../../src/components/Table/Row.tsx", "../../../../src/components/Table/HeaderCell.tsx", "../../../../src/components/Table/Cell.tsx", "../../../../src/components/Table/index.tsx", "../../../../src/components/Text/Text.tsx", "../../../../src/components/Text/index.tsx", "../../../../src/components/TextAreaInput/TextAreaInput.tsx", "../../../../src/components/TextAreaInput/index.tsx", "../../../../src/components/TextArea/TextArea.tsx", "../../../../src/components/TextArea/index.tsx", "../../../../src/components/TextOrHTML/TextOrHTML.tsx", "../../../../src/components/TextOrHTML/index.tsx", "../../../../src/components/Title/Title.tsx", "../../../../src/components/Title/index.tsx", "../../../../src/components/Toast/index.tsx", "../../../../src/components/Trust/Trust.tsx", "../../../../src/components/Trust/types.ts", "../../../../src/components/Trust/index.tsx", "../../../../src/components/ExpandableText/ExpandableText.tsx", "../../../../src/components/ExpandableText/index.tsx", "../../../../src/components/MaskedField/MaskedField.tsx", "../../../../src/components/MaskedField/index.tsx", "../../../../src/components/index.tsx", "../../../../src/types/dom.ts", "../../../../src/types/events.ts", "../../../../src/types/icon.ts", "../../../../src/types/size.ts", "../../../../src/types/index.tsx", "../../../../src/index.tsx", "../../../../src/components/ErrorMessage/ErrorMessage.tsx", "../../../../src/components/ErrorMessage/index.tsx", "../../../../src/components/Checkbox/Checkbox.tsx"],
|
|
4
|
-
"sourcesContent": ["const CSS_LINK_ID = \"sb-theme\";\n\nexport const changeCSS = (cssUrl: string) => {\n // Find CSS <link> element with id = \"sb-theme\"\n const theme: HTMLElement | null = document.getElementById(CSS_LINK_ID);\n\n if (theme) {\n theme.setAttribute(\"href\", cssUrl);\n } else {\n // Append a new link to document and set href\n const link = document.createElement(\"link\");\n link.setAttribute(\"type\", \"text/css\");\n link.setAttribute(\"rel\", \"stylesheet\");\n link.setAttribute(\"href\", cssUrl);\n link.setAttribute(\"id\", CSS_LINK_ID);\n document.head.appendChild(link);\n }\n};\n", "export function delay(ms: number, { signal }: { signal?: AbortSignal } = {}) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(resolve, ms);\n if (signal) {\n signal.addEventListener(\"abort\", () => {\n clearTimeout(timeout);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n });\n }\n });\n}\n", "// This function generates data structure required to hide specified\n// prop from individual stories. Key 'table' is where specified key\n// is disabled.\n//\n// The above is documented here:\n// https://storybook.js.org/docs/react/essentials/controls#disable-controls-for-specific-properties\n//\n// The expected usage looks as follows:\n//\n// <Meta\n// title=\"Components/MyComponent\"\n// component={MyComponent}\n// argTypes={{\n// label: {\n// control: {\n// type: \"text\",\n// },\n// table: {\n// disable: true,\n// },\n// },\n// }}\n// />\nexport const excludeControls = (...args: string[]) =>\n args.reduce(\n (prev, acc) => ({ ...prev, [acc]: { table: { disable: true } } }),\n {},\n );\n", "export const filterUndefinedProps = (props: Record<string, unknown>) => {\n const filteredProps: Record<string, unknown> = {};\n Object.keys(props).forEach(key => {\n if (props[key] !== undefined) {\n filteredProps[key] = props[key];\n }\n });\n return filteredProps;\n};\n", "import type { SpacingType } from \"../types\";\n\nexport const getSpacingValue = (\n padding: SpacingType | undefined,\n): string | undefined => {\n if (typeof padding === \"string\") {\n return `var(--size-${padding})`;\n }\n\n if (typeof padding === \"number\") {\n return `${padding}px`;\n }\n\n return undefined;\n};\n", "// Ref: https://github.com/gregberge/react-merge-refs/blob/812fefa4390884a4a2d1bc489d869bd088df8ff5/src/index.tsx\nimport type { MutableRefObject, LegacyRef, RefCallback } from \"react\";\n\nexport function mergeRefs<T = unknown>(\n refs: Array<MutableRefObject<T> | LegacyRef<T> | undefined>,\n): RefCallback<T> {\n return value => {\n refs.forEach(ref => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n (ref as MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n", "// Browser support HTML Dialog element\nexport const supportsDialog = () => typeof HTMLDialogElement === \"function\";\n", "import type { SizeType } from \"../types/size\";\n\nexport const sizeClasses = (size: SizeType | undefined) => {\n if (!size) {\n return {};\n }\n\n return {\n \"--is-xxs\": size === \"xxs\",\n \"--is-xs\": size === \"xs\",\n \"--is-sm\": size === \"sm\",\n \"--is-md\": size === \"md\",\n \"--is-lg\": size === \"lg\",\n \"--is-xl\": size === \"xl\",\n \"--is-xxl\": size === \"xxl\",\n };\n};\n", "import type { SizeType } from \"../types\";\n\nexport const sizeOptions: Array<SizeType | \"\"> = [\n \"\",\n \"xxs\",\n \"xs\",\n \"sm\",\n \"md\",\n \"lg\",\n \"xl\",\n \"xxl\",\n];\n", "export function spaceDelimitedList(\n list: (string | null | undefined)[],\n): string | undefined {\n return list.filter(Boolean).join(\" \") || undefined;\n}\n", "export * from \"./changeCSS\";\nexport * from \"./delay\";\nexport * from \"./excludeControls\";\nexport * from \"./filterUndefinedProps\";\nexport * from \"./getSpacingValue\";\nexport * from \"./mergeRefs\";\nexport * from \"./polyfill-tests\";\nexport * from \"./sizeClasses\";\nexport * from \"./sizeOptions\";\nexport * from \"./spaceDelimitedList\";\n", "import { getSpacingValue } from \"../../utils\";\nimport { filterUndefinedProps } from \"../../utils/filterUndefinedProps\";\nimport type { FlexNonStyleProps, FlexProps, FlexStyleProps } from \"./types\";\n\nexport const buildFlexStyles = (props: FlexStyleProps) => {\n const {\n flexDirection,\n flexWrap,\n flexGrow,\n flex,\n justifyContent,\n alignItems,\n alignContent,\n gap,\n rowGap,\n columnGap,\n } = props;\n\n const styleProps = {\n flexDirection,\n flexWrap,\n flexGrow,\n flex,\n justifyContent,\n alignItems,\n alignContent,\n gap: getSpacingValue(gap),\n columnGap: getSpacingValue(columnGap),\n rowGap: getSpacingValue(rowGap),\n };\n\n return filterUndefinedProps(styleProps);\n};\n\nexport const splitProps = (\n props: FlexProps,\n): [FlexStyleProps, FlexNonStyleProps] => {\n const {\n flexDirection,\n flexWrap,\n flexGrow,\n flex,\n justifyContent,\n alignItems,\n alignContent,\n gap,\n rowGap,\n columnGap,\n ...otherProps\n } = props;\n\n return [\n {\n flexDirection,\n flexWrap,\n flexGrow,\n flex,\n justifyContent,\n alignItems,\n alignContent,\n gap,\n rowGap,\n columnGap,\n },\n otherProps,\n ];\n};\n", "import classNames from \"classnames/dedupe\";\nimport type { FlexProps } from \"./types\";\nimport { buildFlexStyles, splitProps } from \"./propUtils\";\nimport \"./Flex.css\";\n\nconst Flex = ({ ref, ...props }: FlexProps) => {\n const {\n elementType: Element = \"div\",\n style,\n className,\n ...otherProps\n } = props;\n const classes = classNames(\"mobius\", \"mobius-flex\", className);\n\n const [styleProps, restProps] = splitProps(otherProps);\n const flexStyles = buildFlexStyles(styleProps);\n\n return (\n <Element\n ref={ref}\n style={{\n ...flexStyles,\n ...style,\n }}\n className={classes}\n {...restProps}\n />\n );\n};\n\nFlex.displayName = \"Flex\";\nexport { Flex };\n", "import type { ReactNode, RefAttributes, AriaRole } from \"react\";\nimport type { Property } from \"csstype\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { SpacingType } from \"../../types\";\n\nexport type FlexElementType = HTMLDivElement;\n\nexport interface FlexStyleProps {\n elementType?: React.ElementType;\n flexDirection?: Property.FlexDirection;\n flexWrap?: Property.FlexWrap;\n flexGrow?: Property.FlexGrow;\n flex?: Property.Flex;\n /** Aligns grid items along the block (column) axis */\n alignItems?: Property.AlignItems;\n /** Aligns the grid along the inline (row) axis */\n alignContent?: Property.AlignContent;\n /** Aligns the grid along the inline (row) axis */\n justifyContent?: Property.JustifyContent;\n /** How big a gap between the columns and rows */\n gap?: SpacingType;\n /** How big a gap between the rows */\n rowGap?: SpacingType;\n /** How big a gap between the columns */\n columnGap?: SpacingType;\n style?: React.CSSProperties;\n role?: AriaRole;\n}\n\nexport interface FlexNonStyleProps\n extends DOMProps, RefAttributes<FlexElementType> {\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nexport interface FlexProps extends FlexStyleProps, FlexNonStyleProps {}\n", "export * from \"./Flex\";\nexport * from \"./types\";\n", "import classNames from \"classnames/dedupe\";\nimport type { IconProps } from \"./types\";\nimport \"./Icon.css\";\n\nconst ICON_PREFIX = \"mobius-icon\";\n\nconst capitaliseFirstLetter = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\nexport function Icon({\n ref,\n icon,\n className,\n size = \"xs\",\n color,\n fixedWidth,\n spin,\n spinReverse,\n title,\n ...otherProps\n}: IconProps) {\n if (!icon) {\n throw new Error(\"Must specify icon object\");\n }\n\n const classes = classNames(\n \"mobius\",\n \"mobius-icon\",\n `svg-inline--${ICON_PREFIX}`,\n `--size-${size}`,\n className,\n {\n [`${ICON_PREFIX}-fw`]: fixedWidth,\n [`${ICON_PREFIX}-spin`]: spin || spinReverse,\n [`${ICON_PREFIX}-spin-reverse`]: spinReverse,\n },\n );\n\n const { iconName, width, height, svgPathData } = icon;\n const formattedIconName = iconName.split(\"-\").join(\" \");\n\n const defaultTitle = `${capitaliseFirstLetter(formattedIconName)} icon`;\n const titleText = title || defaultTitle;\n\n return (\n <svg\n ref={ref}\n focusable=\"false\"\n data-icon={iconName}\n className={classes}\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${width} ${height}`}\n style={{ color }}\n {...otherProps}\n >\n <title>{titleText}</title>\n <path fill=\"currentColor\" d={svgPathData} />\n </svg>\n );\n}\n", "import type { RefAttributes } from \"react\";\nimport type { IconDefinition } from \"../../types/icon\";\n\nexport type IconSizeProp = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport interface IconProps extends RefAttributes<SVGSVGElement> {\n icon?: IconDefinition;\n className?: string;\n size?: IconSizeProp;\n color?: string;\n fixedWidth?: boolean;\n title?: string;\n\n // Animations\n spin?: boolean;\n spinReverse?: boolean;\n}\n", "export * from \"./Icon\";\nexport * from \"./types\";\n", "import type { KeyboardEvent, ReactNode } from \"react\";\nimport type { DOMProps } from \"../../types\";\nimport classNames from \"classnames/dedupe\";\nimport { Flex } from \"../Flex\";\nimport { Icon } from \"../Icon\";\nimport { chevronDown } from \"@simplybusiness/icons\";\n\nexport type AccordionLinkElementType =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"span\";\nexport type AccordionElementType = HTMLDivElement;\n\nexport interface AccordionLinkProps extends DOMProps {\n text: string | ReactNode;\n elementType?: AccordionLinkElementType;\n onClick?: (e?: React.MouseEvent) => void;\n toggle: () => void;\n headerChildren?: ReactNode;\n ariaExpanded: boolean | undefined;\n accordionId: string;\n contentId: string;\n}\n\nexport const AccordionLink = ({\n text,\n elementType: LinkElement = \"span\",\n toggle,\n onClick,\n headerChildren,\n ariaExpanded,\n accordionId,\n contentId,\n}: AccordionLinkProps) => {\n const linkClasses = classNames(\"mobius-accordion__link\", {\n \"--is-open\": ariaExpanded,\n });\n const iconClasses = classNames(\"mobius-accordion__link-icon\", {\n \"--is-open\": ariaExpanded,\n });\n const handleOnClick = (e?: React.MouseEvent): void => {\n if (onClick) {\n onClick(e);\n }\n toggle();\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n toggle();\n }\n };\n\n if (headerChildren) {\n return (\n <Flex\n justifyContent=\"space-between\"\n alignItems=\"center\"\n className=\"mobius-accordion__header\"\n >\n <div\n id={accordionId}\n className={linkClasses}\n onClick={handleOnClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-expanded={!!ariaExpanded}\n aria-controls={contentId}\n >\n <LinkElement className=\"mobius-accordion__link-text\">\n {text}\n </LinkElement>\n <Icon icon={chevronDown} className={iconClasses} />\n </div>\n {headerChildren}\n </Flex>\n );\n }\n\n return (\n <div\n id={accordionId}\n className={linkClasses}\n onClick={handleOnClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-expanded={!!ariaExpanded}\n aria-controls={contentId}\n >\n <LinkElement className=\"mobius-accordion__link-text\">{text}</LinkElement>\n <Icon icon={chevronDown} className={iconClasses} />\n </div>\n );\n};\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport { useEffect, useState, useId } from \"react\";\nimport { usePrefersReducedMotion } from \"@simplybusiness/mobius-hooks\";\nimport type { DOMProps } from \"../../types\";\n\nimport type {\n AccordionElementType,\n AccordionLinkElementType,\n} from \"./AccordionLink\";\nimport { AccordionLink } from \"./AccordionLink\";\nimport \"./Accordion.css\";\n\nexport interface AccordionProps\n extends DOMProps, RefAttributes<AccordionElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Link text to show accordion content */\n showText?: string | ReactNode;\n /** Link text to hide accordion content */\n hideText?: string | ReactNode;\n /** Whether header is above or below content */\n headerPosition?: \"top\" | \"bottom\";\n /** Whether to expand the accordion initially */\n startOpen?: boolean | undefined;\n /** Semantic heading for title link (default is span) */\n linkElementType?: AccordionLinkElementType;\n /** Callback that fires when the accordion link is clicked (fires before toggle) */\n onClick?: (e?: React.MouseEvent) => void;\n /** Callback that fires each time the accordion is opened */\n onOpen?: () => void;\n /** Callback that fires each time the accordion is closed */\n onClose?: () => void;\n /** Callback that fires each time the accordion state changes */\n onChange?: (state: boolean) => void;\n children?: ReactNode;\n headerChildren?: ReactNode;\n}\n\nexport const Accordion = ({ ref, ...props }: AccordionProps) => {\n const {\n showText = \"See more\",\n hideText = \"See less\",\n headerPosition = \"top\",\n startOpen = false,\n linkElementType,\n onClick,\n onOpen,\n onClose,\n onChange = () => {},\n headerChildren,\n ...rest\n } = props;\n\n const [accordionState, setAccordionState] = useState({\n open: startOpen,\n withAnimation: false,\n });\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-accordion\",\n props.className,\n {\n \"--should-animate\": accordionState.withAnimation && !prefersReducedMotion,\n \"--is-open\": accordionState.open,\n },\n );\n const contentContainerClasses = classNames(\n \"mobius-accordion__content-container\",\n {\n \"--is-open\": accordionState.open,\n },\n );\n const contentClasses = classNames(\"mobius-accordion__content\", {\n \"--is-open\": accordionState.open,\n });\n\n const linkText = accordionState.open ? hideText : showText;\n\n const handleChange = () => {\n // Fire events\n if (!accordionState.open && onOpen) {\n onOpen();\n }\n if (accordionState.open && onClose) {\n onClose();\n }\n if (onChange) {\n onChange(!accordionState.open);\n }\n setAccordionState({\n open: !accordionState.open,\n withAnimation: true,\n });\n };\n\n useEffect(() => {\n setAccordionState({\n open: startOpen,\n withAnimation: true,\n });\n }, [startOpen]);\n\n // Generate unique IDs for accessibility\n const baseId = useId();\n const accordionId = `accordion-header-${baseId}`;\n const contentId = `accordion-panel-${baseId}`;\n\n return (\n <div ref={ref} {...rest} className={containerClasses}>\n {headerPosition === \"top\" && (\n <AccordionLink\n text={linkText}\n elementType={linkElementType}\n toggle={handleChange}\n onClick={onClick}\n ariaExpanded={accordionState.open}\n headerChildren={headerChildren}\n accordionId={accordionId}\n contentId={contentId}\n />\n )}\n <div\n id={contentId}\n className={contentContainerClasses}\n aria-hidden={!accordionState.open}\n aria-labelledby={accordionId}\n role=\"region\"\n >\n <div className={contentClasses}>{props.children}</div>\n </div>\n {headerPosition === \"bottom\" && (\n <AccordionLink\n text={linkText}\n toggle={handleChange}\n onClick={onClick}\n ariaExpanded={accordionState.open}\n headerChildren={headerChildren}\n accordionId={accordionId}\n contentId={contentId}\n />\n )}\n </div>\n );\n};\n\nAccordion.displayName = \"Accordion\";\n", "import classNames from \"classnames/dedupe\";\nimport type { AriaAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Divider.css\";\n\nexport interface DividerProps extends DOMProps {\n className?: string;\n \"aria-orientation\"?: AriaAttributes[\"aria-orientation\"];\n}\n\nconst Divider = ({\n \"aria-orientation\": ariaOrientation = \"horizontal\",\n className,\n ...rest\n}: DividerProps) => {\n const classes = classNames(\"mobius\", \"mobius-divider\", className);\n\n return (\n <div\n className={classes}\n role=\"separator\"\n aria-orientation={ariaOrientation}\n {...rest}\n >\n <div className=\"mobius-divider__inner\" />\n </div>\n );\n};\n\nDivider.displayName = \"Divider\";\nexport { Divider };\n", "export * from \"./Divider\";\n", "\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useState, Fragment } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Accordion } from \"./Accordion\";\nimport { Divider } from \"../Divider\";\nimport \"./AccordionList.css\";\n\nexport interface AccordionListProps extends DOMProps {\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Array of accordion items with header and details content */\n content: Array<{\n /** Unique identifier for the accordion item (used as React key) */\n id: string;\n header: string | ReactNode;\n details: string | ReactNode;\n }>;\n /** Callback that fires when an accordion is opened */\n onOpen?: (id: string) => void;\n /** Callback that fires when an accordion is closed */\n onClose?: (id: string) => void;\n /** Allow multiple accordions to be open at the same time (default: false) */\n allowMultiple?: boolean;\n}\n\nconst AccordionList = (props: AccordionListProps) => {\n const {\n className,\n content,\n onOpen,\n onClose,\n allowMultiple = false,\n ...rest\n } = props;\n const [openIds, setOpenIds] = useState<Set<string>>(new Set());\n\n const classes = classNames(\"mobius\", \"mobius-accordion-list\", className);\n\n const handleAccordionChange = (id: string, isOpen: boolean) => {\n setOpenIds(prev => {\n const newSet = new Set(prev);\n if (isOpen) {\n if (!allowMultiple) {\n newSet.clear();\n }\n newSet.add(id);\n } else {\n newSet.delete(id);\n }\n return newSet;\n });\n\n if (isOpen) {\n onOpen?.(id);\n } else {\n onClose?.(id);\n }\n };\n\n return (\n <div className={classes} {...rest}>\n {content.map((item, index) => {\n const { id, header, details } = item;\n const isOpen = openIds.has(id);\n return (\n <Fragment key={id}>\n <Accordion\n startOpen={isOpen}\n showText={header}\n hideText={header}\n onChange={isOpen => handleAccordionChange(id, isOpen)}\n >\n {details}\n </Accordion>\n {index < content.length - 1 && <Divider />}\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nAccordionList.displayName = \"AccordionList\";\nexport { AccordionList };\n", "export * from \"./Accordion\";\nexport * from \"./AccordionList\";\n", "\"use client\";\n\nimport {\n useDebouncedValue,\n useIsClient,\n useWindowEvent,\n} from \"@simplybusiness/mobius-hooks\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { SizeType } from \"../../types\";\n\nexport type Breakpoint = {\n size: SizeType;\n value: number;\n};\nexport type BreakpointsType = Breakpoint[];\nexport type UseBreakpointType = {\n breakpoint: Breakpoint;\n up: (size: SizeType) => boolean | undefined;\n down: (size: SizeType) => boolean | undefined;\n};\n\n// Hard code breakpoints for SB designs\nexport const DEFAULT_BREAKPOINTS = [\n { size: \"xs\", value: 320 },\n { size: \"sm\", value: 480 },\n { size: \"md\", value: 670 },\n { size: \"lg\", value: 960 },\n { size: \"xl\", value: 1200 },\n { size: \"xxl\", value: 1320 },\n] as BreakpointsType;\n\nconst PASSIVE: AddEventListenerOptions = { passive: true };\n\nconst getBreakpoint = (breakpoints: BreakpointsType, windowWidth: number) => {\n // When breakpoint size and windowWidth are a match\n // The addition of 1px ensures the right breakpoint\n const closest = breakpoints.findIndex(\n breakpoint => breakpoint.value >= windowWidth + 1,\n );\n const smallest = breakpoints[0];\n const largest = breakpoints[breakpoints.length - 1];\n const match = breakpoints[closest - 1];\n\n if (closest === 0) return smallest;\n if (closest === -1) return largest;\n\n return match;\n};\n\nconst useBreakpoint = (\n customBreakpoints?: BreakpointsType,\n): UseBreakpointType => {\n const isClientSide = useIsClient();\n const breakpoints = customBreakpoints || DEFAULT_BREAKPOINTS;\n const defaultBreakpoint = breakpoints[0];\n\n const [windowWidth, setWindowWidth] = useState<number>(\n typeof globalThis?.window !== \"undefined\"\n ? window.innerWidth\n : defaultBreakpoint.value,\n );\n\n useWindowEvent(\"resize\", () => setWindowWidth(window.innerWidth), PASSIVE);\n\n const debouncedWidth = useDebouncedValue(windowWidth, 200);\n\n // Gate on isClientSide so up()/down() also return default-based values\n // during SSR and hydration, matching the server render.\n const currentBreakpoint = useMemo(\n () =>\n !isClientSide || breakpoints.length === 0\n ? defaultBreakpoint\n : getBreakpoint(breakpoints, debouncedWidth),\n [isClientSide, breakpoints, defaultBreakpoint, debouncedWidth],\n );\n\n const up = useCallback(\n (size: SizeType) => {\n const sizeIndex = breakpoints.findIndex(item => item.size === size);\n if (sizeIndex === -1) {\n return false;\n }\n const currentIndex = breakpoints.findIndex(\n item => item.size === currentBreakpoint.size,\n );\n\n return currentIndex >= sizeIndex;\n },\n [currentBreakpoint, breakpoints],\n );\n\n const down = useCallback(\n (size: SizeType) => {\n const sizeIndex = breakpoints.findIndex(item => item.size === size);\n if (sizeIndex === -1) {\n return true;\n }\n const currentIndex = breakpoints.findIndex(\n item => item.size === currentBreakpoint.size,\n );\n\n return currentIndex <= sizeIndex;\n },\n [currentBreakpoint, breakpoints],\n );\n\n return {\n breakpoint: currentBreakpoint,\n up,\n down,\n };\n};\n\nexport { useBreakpoint };\n", "export * from \"./useBreakpoint\";\n", "import type { JSXElementConstructor } from \"react\";\nimport { useCallback } from \"react\";\n\nexport interface UseButtonProps {\n elementType?:\n | \"button\"\n | \"a\"\n | \"span\"\n | \"input\"\n | JSXElementConstructor<unknown>\n | undefined;\n type?: \"button\" | \"submit\" | \"reset\";\n isDisabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onPress?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n href?: string;\n target?: string;\n rel?: string;\n role?: string;\n name?: string | undefined;\n value?: string | undefined;\n}\n\nexport function useButton({\n elementType = \"button\",\n type = \"button\",\n isDisabled = false,\n href,\n target,\n rel,\n role,\n name,\n value,\n onClick,\n onPress,\n}: UseButtonProps) {\n const realOnClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n onClick?.(event);\n onPress?.(event);\n },\n [isDisabled, onClick, onPress],\n );\n\n function getRole() {\n if (role) {\n return role;\n }\n\n if (elementType === \"a\") {\n return undefined;\n }\n\n return \"button\";\n }\n\n const extraProps =\n elementType === \"button\"\n ? { type }\n : {\n role: getRole(),\n };\n\n return {\n buttonProps: {\n href: elementType === \"a\" ? href : undefined,\n target: elementType === \"a\" ? target : undefined,\n rel: elementType === \"a\" ? rel : undefined,\n tabIndex: isDisabled ? -1 : 0,\n disabled: isDisabled || undefined,\n \"aria-disabled\": isDisabled || undefined,\n name:\n elementType === \"input\" || elementType === \"button\" ? name : undefined,\n value:\n elementType === \"input\" || elementType === \"button\" ? value : undefined,\n ...extraProps,\n onClick: realOnClick,\n },\n };\n}\n", "export * from \"./useButton\";\n", "import type { MutableRefObject } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { supportsDialog } from \"../../utils\";\n\n// Add polyfill for HTML Dialog in old browsers\nexport const useDialogPolyfill = () => {\n const [hasDialogSupport, setHasDialogSupport] = useState(false);\n const hasAlreadyLoaded = useRef(false);\n\n useEffect(() => {\n setHasDialogSupport(supportsDialog());\n }, []);\n\n const polyfillDialog = async (\n ref: MutableRefObject<HTMLDialogElement | null>,\n ) => {\n if (\n !hasAlreadyLoaded.current &&\n !hasDialogSupport &&\n typeof window !== \"undefined\" &&\n ref.current !== null\n ) {\n const { default: dialogPolyfill } = await import(\"dialog-polyfill\");\n\n hasAlreadyLoaded.current = true;\n try {\n if (ref.current) {\n dialogPolyfill.registerDialog(ref.current);\n }\n } catch (error) {\n console.error(\"Failed to load dialog-polyfill\", error);\n }\n }\n };\n\n return {\n polyfillDialog,\n };\n};\n", "export * from \"./useDialogPolyfill\";\n", "import type { MutableRefObject, SyntheticEvent } from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { supportsDialog } from \"../../utils\";\nimport { useBodyScrollLock } from \"@simplybusiness/mobius-hooks\";\nimport { useDialogPolyfill } from \"../useDialogPolyfill\";\n\nexport type TransitionProps = {\n isEnabled: boolean;\n CSSVariable: string;\n};\n\nexport type useDialogProps = {\n ref: MutableRefObject<HTMLDialogElement | null>;\n transition: TransitionProps;\n isOpen: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n};\n\nconst TRANSITION_CLASS_NAME = \"--transition\";\nconst FALLBACK_TRANSITION_DURATION = 0;\n\nexport const useDialog = (props: useDialogProps) => {\n const { ref, isOpen, transition, onOpen, onClose } = props;\n const [hasDialogSupport, setHasDialogSupport] = useState(false);\n const shouldTransition = hasDialogSupport && transition.isEnabled;\n const { polyfillDialog } = useDialogPolyfill();\n\n useEffect(() => {\n setHasDialogSupport(supportsDialog());\n }, []);\n\n // Read CSS variable value as number\n const TRANSITION_DURATION_IN_MS =\n (ref.current &&\n Number(\n getComputedStyle(ref.current)\n .getPropertyValue(transition.CSSVariable)\n .replace(\"ms\", \"\"),\n )) ||\n FALLBACK_TRANSITION_DURATION;\n\n useBodyScrollLock({ enabled: isOpen });\n\n const open = useCallback(() => {\n ref.current?.showModal();\n onOpen?.();\n }, [onOpen, ref]);\n\n const close = useCallback(() => {\n ref.current?.close();\n onClose?.();\n }, [onClose, ref]);\n\n // Add close handler, to enable closing transitions\n const handleClose = useCallback(\n (event?: SyntheticEvent<HTMLElement, Event>) => {\n if (event) {\n // Prevent default event coming from onCancel,\n // which is triggered by pressing ESC key\n event.preventDefault();\n // Ensure that nested `<dialog>` elements\n // don't close the parent\n event.stopPropagation();\n }\n\n if (shouldTransition) {\n ref.current?.classList.remove(TRANSITION_CLASS_NAME);\n // Delay close to allow exit transition\n setTimeout(() => close(), TRANSITION_DURATION_IN_MS);\n } else {\n close();\n }\n },\n [TRANSITION_DURATION_IN_MS, close, ref, shouldTransition],\n );\n\n useEffect(() => {\n async function toggleDialog() {\n if (isOpen && !ref.current?.open) {\n await polyfillDialog(ref);\n\n open();\n // Fix opening transition in Safari being skipped\n // by wrapping with setTimeout\n setTimeout(() => {\n ref.current?.classList.add(TRANSITION_CLASS_NAME);\n }, 0);\n } else if (!isOpen && ref.current?.open) {\n handleClose();\n }\n }\n\n void toggleDialog();\n }, [handleClose, isOpen, open, ref, polyfillDialog]);\n\n return {\n open,\n close: handleClose,\n };\n};\n", "export * from \"./useDialog\";\n", "import type { LabelHTMLAttributes } from \"react\";\nimport { useId, useRef } from \"react\";\n\nexport type UseLabelProps = {\n id?: string | undefined;\n label?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n labelElementType?: \"label\" | \"span\" | undefined;\n};\n\nexport type UseLabelReturn = {\n labelProps: {\n id?: string | undefined;\n } & LabelHTMLAttributes<HTMLLabelElement>;\n fieldProps: LabellingProps;\n};\n\nexport type LabellingProps = {\n id?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n \"aria-describedby\"?: string | undefined;\n \"aria-details\"?: string | undefined;\n};\n\nexport function useLabel({\n id: providedId,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n labelElementType = \"label\",\n}: UseLabelProps) {\n let labelProps: UseLabelReturn[\"labelProps\"] = {};\n let fieldProps: UseLabelReturn[\"fieldProps\"] = {};\n\n const hasWarnedAboutMissingLabels = useRef(false);\n\n const fallbackId = useId();\n const id = providedId || fallbackId;\n const labelId = useId();\n\n if (label) {\n ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;\n labelProps = {\n id: labelId,\n htmlFor: labelElementType === \"label\" ? id : undefined,\n };\n } else if (\n !ariaLabelledby &&\n !ariaLabel &&\n !hasWarnedAboutMissingLabels.current\n ) {\n hasWarnedAboutMissingLabels.current = true;\n console.warn(\n \"If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility\",\n );\n }\n\n fieldProps = {\n id,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n };\n\n return {\n labelProps,\n fieldProps,\n };\n}\n", "export * from \"./useLabel\";\n", "import { useId } from \"react\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { useLabel } from \"../useLabel/useLabel\";\nimport type { UseTextFieldProps, UseTextFieldReturn } from \"./types\";\n\nexport function useTextField(props: UseTextFieldProps): UseTextFieldReturn {\n const {\n isDisabled = false,\n isReadOnly = false,\n isRequired = false,\n inputElementType = \"input\",\n } = props;\n const { labelProps, fieldProps } = useLabel(props);\n\n const descriptionId = useId();\n const descriptionProps = { id: descriptionId };\n\n const errorMessageId = useId();\n const errorMessageProps = { id: errorMessageId };\n\n const ariaDescribedBy = spaceDelimitedList([\n props.description && descriptionId,\n props.errorMessage && errorMessageId,\n props[\"aria-describedby\"],\n ]);\n\n return {\n descriptionProps,\n errorMessageProps,\n labelProps,\n inputProps: {\n defaultValue: props.defaultValue,\n value: props.value,\n onChange: props.onChange,\n disabled: isDisabled,\n readOnly: isReadOnly,\n required: isRequired,\n \"aria-required\": isRequired === true ? true : undefined,\n \"aria-invalid\": props.isInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-errormessage\": props[\"aria-errormessage\"],\n role: props.role,\n\n type: inputElementType === \"input\" ? props.type : undefined,\n pattern: inputElementType === \"input\" ? props.pattern : undefined,\n\n autoComplete: props.autoComplete,\n maxLength: props.maxLength,\n minLength: props.minLength,\n name: props.name,\n placeholder: props.placeholder,\n inputMode: props.inputMode,\n\n // Clipboard events\n onCopy: props.onCopy,\n onCut: props.onCut,\n onPaste: props.onPaste,\n\n // Composition events\n onCompositionEnd: props.onCompositionEnd,\n onCompositionStart: props.onCompositionStart,\n onCompositionUpdate: props.onCompositionUpdate,\n\n // Selection events\n onSelect: props.onSelect,\n\n // Input events\n onBeforeInput: props.onBeforeInput,\n onInput: props.onInput,\n\n // Focus events\n onFocus: props.onFocus,\n onBlur: props.onBlur,\n\n ...fieldProps,\n },\n };\n}\n", "import type { AriaRole, InputHTMLAttributes } from \"react\";\nimport type { UseLabelProps, UseLabelReturn } from \"../useLabel/useLabel\";\nimport type { FocusEvents, Validation } from \"../../types\";\n\nexport type UseTextFieldProps = UseLabelProps &\n FocusEvents &\n Validation &\n Pick<\n InputHTMLAttributes<HTMLInputElement>,\n | \"defaultValue\"\n | \"value\"\n | \"onChange\"\n | \"autoComplete\"\n | \"maxLength\"\n | \"minLength\"\n | \"name\"\n | \"placeholder\"\n | \"inputMode\"\n | \"type\"\n | \"pattern\"\n\n // Clipboard events\n | \"onCopy\"\n | \"onCut\"\n | \"onPaste\"\n\n // Keyboard events\n | \"onKeyDown\"\n | \"onKeyUp\"\n | \"onKeyPress\"\n\n // Composition events\n | \"onCompositionEnd\"\n | \"onCompositionStart\"\n | \"onCompositionUpdate\"\n\n // Selection events\n | \"onSelect\"\n\n // Input events\n | \"onBeforeInput\"\n | \"onInput\"\n\n // Number types\n | \"min\"\n | \"max\"\n | \"step\"\n > & {\n inputElementType?: \"input\" | \"textarea\" | undefined;\n defaultValue?: string | undefined;\n value?: string | undefined;\n isDisabled?: boolean | undefined;\n isReadOnly?: boolean | undefined;\n isRequired?: boolean | undefined;\n description?: string | undefined;\n errorMessage?: string | undefined;\n \"aria-describedby\"?: string | undefined;\n \"aria-errormessage\"?: string | undefined;\n role?: AriaRole | undefined;\n };\n\nexport type UseTextFieldReturn = {\n labelProps: UseLabelReturn[\"labelProps\"];\n inputProps: InputHTMLAttributes<HTMLInputElement>;\n descriptionProps: { id?: string | undefined };\n errorMessageProps: { id?: string | undefined };\n};\n", "export * from \"./useTextField\";\nexport * from \"./types\";\n", "import type { Validation } from \"../../types\";\n\nexport type GetValidationClassesProps = Pick<Validation, \"isInvalid\">;\n\nexport const useValidationClasses = (props: GetValidationClassesProps) => {\n const { isInvalid } = props;\n\n if (isInvalid) {\n return \"--is-invalid\";\n }\n\n if (isInvalid === false) {\n return \"--is-valid\";\n }\n\n return \"\";\n};\n", "export * from \"./useValidationClasses\";\n", "export * from \"./useBreakpoint\";\nexport * from \"./useButton\";\nexport * from \"./useDialog\";\nexport * from \"./useDialogPolyfill\";\nexport * from \"./useLabel\";\nexport * from \"./useTextField\";\nexport * from \"./useValidationClasses\";\n", "import type React from \"react\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Label.css\";\n\nexport type LabelElementType = HTMLLabelElement;\nexport type IntrinsicLabel = Omit<\n React.JSX.IntrinsicElements[\"label\"],\n \"css\" | \"color\" | \"ref\"\n>;\n\nexport interface LabelProps\n extends IntrinsicLabel, DOMProps, RefAttributes<LabelElementType> {\n children?: ReactNode;\n className?: string;\n elementType?: \"label\" | \"span\";\n}\n\nconst Label = ({ ref, ...props }: LabelProps) => {\n const { elementType: Element = \"label\", children, ...otherProps } = props;\n\n const classes = classNames(\"mobius\", \"mobius-label\", props.className);\n otherProps.className = classes;\n\n return (\n <Element ref={ref} {...otherProps} className={classes}>\n {children}\n </Element>\n );\n};\n\nLabel.displayName = \"Label\";\nexport { Label };\n", "export * from \"./Label\";\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport type React from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { SpacingType } from \"../../types\";\nimport \"./Stack.css\";\n\nexport type StackElementType = HTMLDivElement;\n\nexport interface StackProps extends DOMProps, RefAttributes<StackElementType> {\n children?: ReactNode;\n /** How big a gap between items */\n gap?: SpacingType;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n}\n\nexport type StackRef = Ref<StackElementType>;\n\nexport const Stack = ({ ref, ...props }: StackProps) => {\n const { elementType: Element = \"div\", gap, ...otherProps } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-stack\",\n {\n [`--gap-${gap}`]: gap,\n },\n otherProps.className,\n );\n\n return <Element ref={ref} {...otherProps} className={classes} />;\n};\n\nStack.displayName = \"Stack\";\n", "export * from \"./Stack\";\n", "import classNames from \"classnames/dedupe\";\nimport type { ReactElement } from \"react\";\nimport { cloneElement } from \"react\";\n\nexport const adornmentWithClassName = (\n component?: ReactElement,\n validationClasses?: string,\n className?: string,\n) => {\n if (!component) return null;\n\n return cloneElement(component, {\n className: classNames(\n (component.props as { className?: string }).className,\n validationClasses,\n className,\n ),\n } as { className: string });\n};\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type {\n HTMLInputTypeAttribute,\n ReactElement,\n ReactNode,\n Ref,\n RefAttributes,\n} from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps, FocusEvents } from \"../../types\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { adornmentWithClassName } from \"./adornmentWithClassName\";\nimport \"./TextField.css\";\n\nexport type TextFieldElementType = HTMLInputElement;\nexport interface TextFieldProps\n extends\n DOMProps,\n FocusEvents,\n UseTextFieldProps,\n RefAttributes<TextFieldElementType> {\n className?: string;\n errorMessage?: string;\n children?: ReactNode;\n label?: string;\n type?: Exclude<\n HTMLInputTypeAttribute,\n | \"button\"\n | \"checkbox\"\n | \"color\"\n | \"date\"\n | \"datetime-local\"\n | \"file\"\n | \"image\"\n | \"month\"\n | \"radio\"\n | \"range\"\n | \"reset\"\n | \"submit\"\n | \"week\"\n >;\n prefixInside?: ReactElement;\n prefixOutside?: ReactElement;\n suffixInside?: ReactElement;\n suffixOutside?: ReactElement;\n}\n\nexport type TextFieldRef = Ref<TextFieldElementType>;\n\nconst TextField = ({ ref, ...props }: TextFieldProps) => {\n const {\n isDisabled,\n type = \"text\",\n isInvalid,\n className,\n label,\n errorMessage,\n children,\n isRequired,\n prefixInside,\n prefixOutside,\n suffixInside,\n suffixOutside,\n\n isReadOnly,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField({\n ...props,\n \"aria-errormessage\": errorMessage,\n });\n\n const hidden = type === \"hidden\";\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const textfieldClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n \"--is-hidden\": hidden,\n [className || \"\"]: true,\n };\n\n const sharedClasses = classNames(validationClasses, textfieldClasses);\n\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-text-field\",\n sharedClasses,\n );\n\n const inputClasses = classNames(\n \"mobius\",\n \"mobius-text-field__input\",\n sharedClasses,\n );\n\n const inputWrapperClasses = classNames(\n \"mobius-text-field__input-wrapper\",\n sharedClasses,\n );\n\n return (\n <Stack gap=\"xs\" className={containerClasses}>\n {label && !hidden && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-text-field__inner-container\">\n {adornmentWithClassName(\n prefixOutside,\n labelClasses,\n \"mobius-text-field__prefix-outside\",\n )}\n <div className={inputWrapperClasses}>\n {adornmentWithClassName(\n prefixInside,\n labelClasses,\n \"mobius-text-field__prefix-inside\",\n )}\n <input\n {...otherProps}\n {...inputProps}\n ref={ref}\n type={type}\n className={inputClasses}\n />\n {adornmentWithClassName(\n suffixInside,\n labelClasses,\n \"mobius-text-field__suffix-inside\",\n )}\n </div>\n {adornmentWithClassName(\n suffixOutside,\n labelClasses,\n \"mobius-text-field__suffix-outside\",\n )}\n </div>\n {children && (\n <div className=\"mobius-text-field__children\">{children}</div>\n )}\n\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextField.displayName = \"TextField\";\nexport { TextField };\n", "export * from \"./TextField\";\n", "import type { AriaRole, JSXElementConstructor, ReactNode } from \"react\";\n\nexport interface VisuallyHiddenProps {\n /** The content to visually hide. */\n children?: ReactNode;\n id?: string;\n role?: AriaRole;\n\n className?: string;\n\n /**\n * The element type for the container. Defaults to 'div'\n */\n elementType?: string | JSXElementConstructor<any>;\n}\n\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n const {\n className,\n children,\n elementType: Component = \"div\",\n ...otherProps\n } = props;\n\n return (\n <Component\n className={className}\n style={{\n border: 0,\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n }}\n {...otherProps}\n >\n {children}\n </Component>\n );\n}\n", "export * from \"./VisuallyHidden\";\n", "import type {\n ComboboxOption,\n ComboboxOptionGroup,\n ComboboxOptions,\n} from \"./types\";\n\n// FIXME: This might be better handled with Zod\nexport function isOptionGroup<T extends ComboboxOption>(\n options: ComboboxOptions<T> | undefined,\n): options is ComboboxOptionGroup<T>[] {\n if (!options) return false;\n return (\n typeof options[0] === \"object\" &&\n \"options\" in options[0] &&\n options[0].options !== undefined &&\n \"heading\" in options[0] &&\n options[0].heading !== undefined\n );\n}\n\nexport const getOptionValue = (option: ComboboxOption | undefined) =>\n typeof option === \"string\" ? option : option?.value;\n\nexport const getOptionLabel = (option: ComboboxOption | undefined) =>\n typeof option === \"string\" ? option : option?.label;\n\nexport function filterOptions<T extends ComboboxOption>(\n options: ComboboxOptions<T>,\n inputValue: string,\n): ComboboxOptions<T> {\n if (isOptionGroup(options)) {\n return options\n .map(optionGroup => ({\n ...optionGroup,\n options: optionGroup.options.filter(option =>\n getOptionLabel(option)!\n .toLowerCase()\n .includes(inputValue.toLowerCase()),\n ),\n }))\n .filter(optionGroup => optionGroup.options.length > 0);\n }\n\n return options.filter(option =>\n getOptionLabel(option)!.toLowerCase().includes(inputValue.toLowerCase()),\n );\n}\n\nexport function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max);\n}\n\nexport const buildOptionTestId = (prefix: string, value: string): string =>\n `${prefix}-${value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")}`;\n", "import { useEffect, useRef } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { getOptionValue, getOptionLabel, buildOptionTestId } from \"./utils\";\nimport type { ComboboxOption, ComboboxOptionProps } from \"./types\";\n\nexport const Option = <T extends ComboboxOption>({\n option,\n isHighlighted,\n onOptionSelect,\n optionComponent: OptionComponent,\n optionTestIdPrefix,\n id,\n}: ComboboxOptionProps<T>) => {\n const optionRef = useRef<HTMLLIElement>(null);\n const optionValue = getOptionValue(option) || \"\";\n const testId = buildOptionTestId(\n optionTestIdPrefix || \"combobox-option\",\n optionValue,\n );\n\n useEffect(() => {\n if (\n isHighlighted &&\n optionRef.current &&\n optionRef.current.scrollIntoView\n ) {\n optionRef.current.scrollIntoView({ block: \"nearest\" });\n }\n }, [isHighlighted]);\n\n return (\n <li\n ref={optionRef}\n role=\"option\"\n data-testid={testId}\n key={getOptionValue(option)}\n id={id}\n aria-selected={isHighlighted}\n onMouseDown={() => onOptionSelect(option)}\n className={classNames(\"mobius-combobox__option\", \"has-pii\", {\n \"mobius-combobox__option--is-highlighted\": isHighlighted,\n })}\n >\n {OptionComponent ? (\n <OptionComponent option={option} isHighlighted={isHighlighted} />\n ) : (\n getOptionLabel(option)\n )}\n </li>\n );\n};\n", "import classNames from \"classnames/dedupe\";\nimport { Option } from \"./Option\";\nimport type {\n ComboboxBaseProps,\n ComboboxOption,\n ComboboxOptions,\n} from \"./types\";\nimport { isOptionGroup } from \"./utils\";\n\nconst getOptionKey = (\n option: ComboboxOption,\n index: number,\n groupIndex?: number,\n): string => {\n let key: string;\n if (typeof option === \"object\" && option.id) key = option.id;\n else if (typeof option === \"object\") key = `${option.value}::${option.label}`;\n else if (typeof option === \"string\") key = option;\n else key = String(index);\n\n return groupIndex !== undefined ? `${groupIndex}:${key}` : key;\n};\n\nexport type ListboxProps<T extends ComboboxOption> = {\n id: string;\n isOpen?: boolean;\n isLoading?: boolean;\n options: ComboboxOptions<T> | undefined;\n highlightedIndex: number;\n highlightedGroupIndex: number;\n onOptionSelect: (option: T) => void;\n optionComponent?: ComboboxBaseProps<T>[\"optionComponent\"];\n optionTestIdPrefix?: string;\n};\n\nexport const Listbox = <T extends ComboboxOption>({\n id,\n isOpen = false,\n options,\n highlightedIndex,\n highlightedGroupIndex,\n onOptionSelect,\n optionComponent,\n optionTestIdPrefix,\n}: ListboxProps<T>) => {\n const classes = classNames(\"mobius-combobox__list\", {\n \"mobius-combobox__list--hidden\": !isOpen,\n });\n\n function getOptionId(\n option: ComboboxOption,\n groupIndex: number,\n index: number,\n ) {\n if (\n typeof option === \"object\" &&\n \"id\" in option &&\n typeof option.id === \"string\"\n ) {\n return option.id;\n }\n return isOptionGroup(options)\n ? `${id}-option-${groupIndex}-${index}`\n : `${id}-option-${index}`;\n }\n\n // If not open, render empty listbox but keep it in DOM for accessibility\n if (!isOpen) {\n return <div role=\"listbox\" id={id} className={classes} />;\n }\n\n if (options && options.length === 0) {\n return (\n <div role=\"listbox\" id={id} className={classes}>\n <div className=\"mobius-combobox__no-options\">No options</div>\n </div>\n );\n }\n\n return (\n <div role=\"listbox\" id={id} className={classes}>\n {isOptionGroup(options)\n ? options.map((option, groupIndex) => (\n <ul\n role=\"group\"\n key={option.heading}\n aria-labelledby={`${id}-group-${groupIndex}`}\n className=\"mobius-combobox__group\"\n >\n <li\n role=\"presentation\"\n id={`${id}-group-${groupIndex}`}\n className=\"mobius-combobox__group-label\"\n >\n {option.heading}\n </li>\n {option.options.map((groupOption, index) => (\n <Option\n key={getOptionKey(groupOption, index, groupIndex)}\n option={groupOption}\n isHighlighted={\n highlightedIndex === index &&\n highlightedGroupIndex === groupIndex\n }\n onOptionSelect={onOptionSelect}\n optionComponent={optionComponent}\n optionTestIdPrefix={optionTestIdPrefix}\n id={getOptionId(groupOption, groupIndex, index)}\n />\n ))}\n </ul>\n ))\n : typeof options !== \"undefined\"\n ? options.map((option, index) => (\n <Option\n key={getOptionKey(option, index)}\n option={option}\n isHighlighted={highlightedIndex === index}\n onOptionSelect={onOptionSelect}\n optionComponent={optionComponent}\n optionTestIdPrefix={optionTestIdPrefix}\n id={getOptionId(option, 0, index)}\n />\n ))\n : null}\n </div>\n );\n};\n", "import { useState } from \"react\";\nimport type { ComboboxOptions } from \"./types\";\nimport { isOptionGroup } from \"./utils\";\n\nexport function useComboboxHighlight(options: ComboboxOptions | undefined) {\n const [highlightedIndex, setHighlightedIndex] = useState(\n options && options.length ? 0 : -1,\n );\n const [highlightedGroupIndex, setHighlightedGroupIndex] = useState(0);\n\n function highlightNextOption() {\n const isGroup = isOptionGroup(options);\n\n if (!options) {\n return;\n }\n\n if (isGroup) {\n const group = options[highlightedGroupIndex];\n if (highlightedIndex === group.options.length - 1) {\n if (highlightedGroupIndex === options.length - 1) {\n return; // At the end of last group\n }\n // Move to next group\n setHighlightedIndex(0);\n setHighlightedGroupIndex(highlightedGroupIndex + 1);\n } else {\n setHighlightedIndex(highlightedIndex + 1);\n }\n } else {\n if (highlightedIndex === options.length - 1) {\n return; // At the end of options\n }\n setHighlightedIndex(highlightedIndex + 1);\n }\n }\n\n function highlightPreviousOption() {\n const isGroup = isOptionGroup(options);\n\n if (highlightedIndex === 0 && highlightedGroupIndex === 0) {\n return; // Already at start\n }\n\n if (isGroup) {\n if (highlightedIndex === 0) {\n // Move to previous group\n const prevGroupIndex = highlightedGroupIndex - 1;\n const prevGroup = options[prevGroupIndex];\n setHighlightedGroupIndex(prevGroupIndex);\n setHighlightedIndex(prevGroup.options.length - 1);\n } else {\n setHighlightedIndex(highlightedIndex - 1);\n }\n } else {\n setHighlightedIndex(highlightedIndex - 1);\n }\n }\n\n function highlightFirstOption() {\n setHighlightedIndex(0);\n setHighlightedGroupIndex(0);\n }\n\n function highlightLastOption() {\n const isGroup = isOptionGroup(options);\n\n if (!options) {\n return;\n }\n\n if (isGroup) {\n const lastGroupIndex = options.length - 1;\n const lastGroup = options[lastGroupIndex];\n setHighlightedGroupIndex(lastGroupIndex);\n setHighlightedIndex(lastGroup.options.length - 1);\n } else {\n setHighlightedIndex(options.length - 1);\n }\n }\n\n const clearHighlight = () => {\n setHighlightedIndex(\n typeof options === \"undefined\" || options.length ? 0 : -1,\n );\n setHighlightedGroupIndex(0);\n };\n\n return {\n highlightedIndex,\n highlightedGroupIndex,\n highlightPreviousOption,\n highlightNextOption,\n highlightFirstOption,\n highlightLastOption,\n clearHighlight,\n };\n}\n", "import { useDebouncedValue } from \"@simplybusiness/mobius-hooks\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ComboboxOption, ComboboxOptions, ComboboxProps } from \"./types\";\nimport { filterOptions } from \"./utils\";\n\nexport type UseComboboxOptionsProps<T extends ComboboxOption> = Pick<\n ComboboxProps<T>,\n \"options\" | \"asyncOptions\" | \"delay\" | \"minSearchLength\"\n> & {\n skipNextDebounceRef?: React.MutableRefObject<boolean>;\n inputValue?: string;\n onSearched?: (searchTerm: string) => void;\n};\n\nexport function useComboboxOptions<T extends ComboboxOption>({\n options,\n asyncOptions,\n delay = 300,\n minSearchLength = 3,\n inputValue = \"\",\n skipNextDebounceRef,\n onSearched,\n}: UseComboboxOptionsProps<T>) {\n const [filteredOptions, setFilteredOptions] = useState<\n ComboboxOptions<T> | undefined\n >(undefined);\n const debouncedInputValue = useDebouncedValue(\n inputValue,\n // Don't debounce synchronous options\n options ? 0 : delay,\n );\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Keep refs to latest callbacks so the fetch effect doesn't re-run when\n // their references change (e.g. due to un-memoised props in parent)\n const asyncOptionsRef = useRef(asyncOptions);\n asyncOptionsRef.current = asyncOptions;\n const onSearchedRef = useRef(onSearched);\n onSearchedRef.current = onSearched;\n\n useEffect(() => {\n const controller = new AbortController();\n const { signal } = controller;\n\n const fetchOptions = async () => {\n setIsLoading(true);\n setError(null);\n try {\n if (asyncOptionsRef.current) {\n if (debouncedInputValue.length < minSearchLength) {\n setFilteredOptions(undefined);\n return;\n }\n const result = await asyncOptionsRef.current(debouncedInputValue, {\n signal,\n });\n setFilteredOptions(result);\n onSearchedRef.current?.(debouncedInputValue);\n } else if (options) {\n setFilteredOptions(filterOptions(options, debouncedInputValue));\n } else {\n setError(new Error(\"No options provided\"));\n }\n } catch (e: unknown) {\n if (e instanceof DOMException && e.name === \"AbortError\") {\n // Ignore abort errors\n return;\n }\n setError(e as Error);\n } finally {\n setIsLoading(false);\n }\n };\n\n if (!skipNextDebounceRef?.current) {\n void fetchOptions();\n } else {\n skipNextDebounceRef.current = false;\n }\n\n return () => {\n controller.abort();\n };\n }, [\n debouncedInputValue,\n options,\n delay,\n minSearchLength,\n skipNextDebounceRef,\n ]);\n\n function updateFilteredOptions(newOptions: Promise<ComboboxOptions<T>>) {\n setIsLoading(true);\n return newOptions\n .then(setFilteredOptions)\n .catch(setError)\n .finally(() => setIsLoading(false));\n }\n\n return {\n filteredOptions,\n updateFilteredOptions,\n isLoading,\n error,\n isError: error != null,\n };\n}\n", "import { useOnUnmount } from \"@simplybusiness/mobius-hooks\";\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { FocusEvent } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { useBreakpoint } from \"../../hooks\";\nimport { TextField } from \"../TextField\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { Listbox } from \"./Listbox\"; // Import Listbox component\nimport type { ComboboxOption, ComboboxProps, ComboboxRef } from \"./types\";\nimport { useComboboxHighlight } from \"./useComboboxHighlight\";\nimport { useComboboxOptions } from \"./useComboboxOptions\";\nimport { getOptionLabel, getOptionValue, isOptionGroup } from \"./utils\";\nimport \"./Combobox.css\";\n\nconst ComboboxInner = <T extends ComboboxOption>({\n ref,\n ...props\n}: ComboboxProps<T>) => {\n const {\n id,\n defaultValue,\n value,\n options,\n asyncOptions,\n delay,\n minSearchLength,\n onSelected,\n className,\n placeholder,\n icon,\n onBlur,\n onFocus,\n onChange,\n // onSearched, // unused prop, consider removing\n optionComponent,\n optionTestIdPrefix,\n errorMessage,\n ...otherProps\n } = props;\n // Avoid re-fetching after selecting an option\n const skipNextDebounceRef = useRef(false);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState(defaultValue || \"\");\n const [isOpen, setIsOpen] = useState(false);\n const [isChanging, setIsChanging] = useState(false);\n const { filteredOptions, updateFilteredOptions, isLoading, error } =\n useComboboxOptions({\n options,\n asyncOptions,\n inputValue,\n delay,\n minSearchLength,\n skipNextDebounceRef,\n });\n const [validationError, setValidationError] = useState(\n error?.message || errorMessage,\n );\n const {\n highlightedIndex,\n highlightedGroupIndex,\n highlightNextOption,\n highlightPreviousOption,\n highlightFirstOption,\n highlightLastOption,\n clearHighlight,\n } = useComboboxHighlight(filteredOptions);\n\n const inputRef = ref || fallbackRef;\n const listboxId = useId();\n const statusId = useId();\n const blurTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const userInteractedRef = useRef(false);\n const justSelectedRef = useRef(false);\n const { down } = useBreakpoint();\n const isMobile = down(\"md\");\n\n useEffect(() => {\n setValidationError(error?.message || errorMessage);\n }, [error, errorMessage]);\n\n // Helper to create properly-typed empty value based on option type\n const getEmptyValue = (): T => {\n // Check first available option to determine if we're using string or object options\n const firstOption = filteredOptions\n ? isOptionGroup(filteredOptions)\n ? filteredOptions[0]?.options[0]\n : filteredOptions[0]\n : options\n ? isOptionGroup(options)\n ? options[0]?.options[0]\n : options[0]\n : undefined;\n\n // If options are strings, return empty string\n if (typeof firstOption === \"string\") {\n return \"\" as T;\n }\n\n // If options are objects, return empty object with same shape\n return { label: \"\", value: \"\" } as T;\n };\n\n const handleFocus = (e: FocusEvent) => {\n onFocus?.(e);\n if (!filteredOptions || filteredOptions.length === 0) return;\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n blurTimeoutRef.current = null;\n }\n\n // Check if this is natural focus (user click/Tab) or programmatic focus\n const isNaturalFocus =\n userInteractedRef.current || e.relatedTarget !== null;\n if (userInteractedRef.current) {\n userInteractedRef.current = false;\n }\n\n // Block opening only if programmatic focus right after selection\n if (justSelectedRef.current && !isNaturalFocus) {\n return;\n }\n\n // Open dropdown for natural focus\n if (isNaturalFocus) {\n setIsOpen(true);\n justSelectedRef.current = false;\n }\n };\n\n useEffect(() => {\n if (!inputRef || typeof inputRef === \"function\") return;\n const inputElement = inputRef.current;\n if (!inputElement) return;\n\n const handleMouseDown = () => {\n // Track that user clicked/interacted with input\n userInteractedRef.current = true;\n };\n\n inputElement.addEventListener(\"mousedown\", handleMouseDown);\n return () => {\n inputElement.removeEventListener(\"mousedown\", handleMouseDown);\n };\n }, [inputRef]);\n\n useOnUnmount(() => {\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n }\n });\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setValidationError(undefined);\n justSelectedRef.current = false;\n setIsChanging(true);\n // Only open immediately for sync options; async options controlled by useEffect\n if (!asyncOptions) {\n setIsOpen(true);\n }\n clearHighlight();\n onChange?.(e);\n };\n\n const handleOptionSelect = (option: T) => {\n const val = getOptionValue(option);\n\n // Allow empty values to pass through\n if (!val && val !== \"\") return;\n\n if (\n typeof option === \"object\" &&\n \"callback\" in option &&\n option.callback &&\n typeof option.callback === \"function\"\n ) {\n justSelectedRef.current = true;\n setTimeout(() => {\n if (inputRef && typeof inputRef !== \"function\" && inputRef.current) {\n inputRef.current.focus();\n }\n }, 0);\n const callbackPromise = option.callback();\n updateFilteredOptions(callbackPromise);\n callbackPromise\n .then(() => {\n setIsOpen(true);\n setIsChanging(true);\n })\n .catch(() => {\n // error handled inside updateFilteredOptions via setError\n });\n return;\n }\n\n // Prevent re-fetching options after selecting an option\n skipNextDebounceRef.current = true;\n justSelectedRef.current = true;\n\n setIsChanging(false);\n setValidationError(undefined);\n setIsOpen(false);\n setInputValue(val);\n onSelected?.(option);\n };\n\n const getFirstOption = () => {\n if (!filteredOptions) return undefined;\n if (isOptionGroup(filteredOptions)) {\n return filteredOptions[0]?.options[0];\n }\n\n return filteredOptions[0];\n };\n\n const getHighlightedOption = () => {\n if (!filteredOptions) return undefined;\n if (highlightedIndex === -1) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n const group = filteredOptions[highlightedGroupIndex];\n return group?.options[highlightedIndex];\n }\n\n return filteredOptions[highlightedIndex];\n };\n\n const getHighlightedOptionId = () => {\n const option = getHighlightedOption();\n if (!option) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n return `${listboxId}-option-${highlightedGroupIndex}-${highlightedIndex}`;\n }\n\n return `${listboxId}-option-${highlightedIndex}`;\n };\n\n const handleBlur = (e: FocusEvent<Element, Element>) => {\n // Force selection if user has matched an entry by typing (not already selected)\n // Defer this to allow natural focus flow to complete first\n if (!justSelectedRef.current) {\n const typedText = inputValue.trim();\n const typedTextLower = typedText.toLowerCase();\n const highlightedOption = getHighlightedOption();\n const label = getOptionLabel(highlightedOption);\n\n if (typedTextLower === label?.toLowerCase()) {\n // Exact match with an option\n setTimeout(() => {\n handleOptionSelect(highlightedOption as T);\n }, 0);\n } else if (typedText === \"\") {\n // Allow empty values\n setTimeout(() => {\n handleOptionSelect(getEmptyValue());\n }, 0);\n } else {\n // Invalid value (not in options and not empty)\n setValidationError(\n errorMessage || \"Please select an option from the list\",\n );\n setTimeout(() => {\n setInputValue(\"\");\n }, 0);\n }\n }\n\n blurTimeoutRef.current = setTimeout(() => {\n onBlur?.(e);\n setIsOpen(false);\n setIsChanging(false);\n }, 150);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightNextOption();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightPreviousOption();\n break;\n case \"Home\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightFirstOption();\n break;\n case \"End\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightLastOption();\n break;\n case \"Enter\":\n e.preventDefault();\n if (isOpen) {\n const selectedOption = getHighlightedOption() || getFirstOption();\n if (selectedOption) {\n handleOptionSelect(selectedOption);\n }\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setInputValue(\"\");\n setIsOpen(false);\n clearHighlight();\n break;\n default:\n // Do nothing\n }\n };\n\n useEffect(() => {\n if (value) {\n setInputValue(value);\n }\n }, [value]);\n\n // Open and close the combobox based on async filtered options\n useEffect(() => {\n if (asyncOptions && isChanging) {\n setIsOpen(!!filteredOptions && filteredOptions.length > 0);\n }\n }, [filteredOptions, asyncOptions, isChanging]);\n\n const classes = classNames(\n \"mobius mobius-combobox\",\n {\n \"mobius-combobox--is-expanded\": isOpen,\n \"mobius-combobox--is-loading\": isLoading,\n \"mobius-combobox--is-mobile\": isMobile,\n },\n className,\n );\n\n const getStatusMessage = () => {\n if (isLoading) return \"Loading options\";\n if (!filteredOptions || filteredOptions.length === 0) {\n return isChanging ? \"No options found\" : \"\";\n }\n const count = isOptionGroup(filteredOptions)\n ? filteredOptions.reduce((sum, group) => sum + group.options.length, 0)\n : filteredOptions.length;\n return isOpen && isChanging\n ? `${count} option${count === 1 ? \"\" : \"s\"} available`\n : \"\";\n };\n\n return (\n <div id={id} data-testid=\"mobius-combobox__wrapper\" className={classes}>\n <VisuallyHidden\n role=\"status\"\n aria-live=\"polite\"\n id={statusId}\n elementType=\"div\"\n className=\"mobius-combobox__status\"\n >\n {getStatusMessage()}\n </VisuallyHidden>\n <TextField\n {...otherProps}\n className=\"mobius-combobox__input\"\n role=\"combobox\"\n value={inputValue}\n placeholder={placeholder}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n autoComplete=\"off\"\n aria-describedby={isLoading ? statusId : undefined}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-owns={listboxId}\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-activedescendant={\n highlightedIndex === -1 ? undefined : getHighlightedOptionId()\n }\n prefixInside={icon}\n ref={inputRef}\n errorMessage={errorMessage || validationError || error?.message}\n />\n <Listbox\n id={listboxId}\n isOpen={isOpen}\n isLoading={isLoading}\n options={filteredOptions}\n highlightedIndex={highlightedIndex}\n highlightedGroupIndex={highlightedGroupIndex}\n onOptionSelect={handleOptionSelect}\n optionComponent={optionComponent}\n optionTestIdPrefix={optionTestIdPrefix}\n />\n </div>\n );\n};\n\nexport const Combobox = ComboboxInner as <T extends ComboboxOption>(\n props: ComboboxProps<T> & { ref?: ComboboxRef },\n) => React.JSX.Element;\n", "import type { ReactElement, Ref } from \"react\";\nimport type { TextFieldElementType, TextFieldProps } from \"../TextField\";\n\nexport type ComboboxOption =\n | string\n | { id?: string; label: string; value: string };\n\nexport type ComboboxBaseProps<T extends ComboboxOption = ComboboxOption> =\n TextFieldProps & {\n /** An icon to display in TextField (left side) */\n icon?: ReactElement;\n /** The default value of the selected option */\n defaultValue?: string | undefined;\n /** Callback when the selected option changes */\n onSelected?: ((value: T) => void) | undefined;\n optionComponent?: (\n props: Pick<ComboboxOptionProps<T>, \"option\" | \"isHighlighted\">,\n ) => ReactElement;\n /** Prefix for option data-testid attributes (default: \"combobox-option\") */\n optionTestIdPrefix?: string;\n };\n\nexport type ComboboxSyncProps<T extends ComboboxOption = ComboboxOption> =\n ComboboxBaseProps<T> & {\n /** The list of options to display in the dropdown */\n options: ComboboxOptions<T>;\n asyncOptions?: never;\n delay?: never;\n minSearchLength?: never;\n onSearched?: never;\n };\n\nexport type ComboboxAsyncProps<T extends ComboboxOption = ComboboxOption> =\n ComboboxBaseProps<T> & {\n options?: never;\n delay?: number;\n minSearchLength?: number | undefined;\n /** A function that returns a list of options to display in the dropdown */\n asyncOptions:\n | ((inputValue: string) => ComboboxOptions<T>)\n | ((\n inputValue: string,\n options?: { signal?: AbortSignal },\n ) => Promise<ComboboxOptions<T>>);\n onSearched?: (searchTerm: string) => void;\n };\n\nexport type ComboboxProps<T extends ComboboxOption = ComboboxOption> =\n | ComboboxAsyncProps<T>\n | ComboboxSyncProps<T>;\n\nexport type ComboboxOptionGroup<T extends ComboboxOption = ComboboxOption> = {\n heading: string;\n options: readonly T[];\n};\n\nexport type ComboboxOptions<T extends ComboboxOption = ComboboxOption> =\n | T[]\n | ComboboxOptionGroup<T>[];\n\nexport type ComboboxElementType = TextFieldElementType;\n\nexport type ComboboxRef = Ref<ComboboxElementType>;\n\nexport type ComboboxOptionProps<T extends ComboboxOption = ComboboxOption> = {\n option: T;\n optionComponent?: ComboboxBaseProps<T>[\"optionComponent\"];\n isHighlighted: boolean;\n onOptionSelect: (option: T) => void;\n id: string;\n optionTestIdPrefix?: string;\n};\n", "export * from \"./Combobox\";\nexport * from \"./types\";\nexport { buildOptionTestId } from \"./utils\";\n", "import type { LoqateErrorResponse } from \"./types\";\n\nexport function isLoqateErrorResponse(\n response: unknown,\n): response is LoqateErrorResponse {\n return Array.isArray(response) && response.some(item => \"Error\" in item);\n}\n", "import { search } from \"@simplybusiness/icons\";\nimport { useCallback, useState } from \"react\";\nimport type { ComboboxOption } from \"../Combobox\";\nimport { Combobox } from \"../Combobox\";\nimport { Icon } from \"../Icon\";\nimport type {\n AddressLookupProps,\n AddressLookupService,\n LoqateSearchResponse,\n LoqateSearchResultItem,\n} from \"./types\";\nimport { isLoqateErrorResponse } from \"./utils\";\n\nfunction optionsFromResponse(\n { Items }: LoqateSearchResponse,\n addressLookupService: AddressLookupService,\n) {\n if (!Items || !Array.isArray(Items)) {\n throw Error(\"No address found\");\n }\n\n if (isLoqateErrorResponse(Items)) {\n throw Error(Items[0].Description);\n }\n\n return (Items as LoqateSearchResultItem[]).map(item => ({\n id: item.Id,\n label: `${item.Text}, ${item.Description}`,\n value: item.Text,\n // Add a callback to trigger secondary search\n // if the address type is not \"Address\"\n callback:\n item.Type === \"Address\"\n ? undefined\n : async () => {\n const result = await addressLookupService.findById(item.Id);\n return optionsFromResponse(result, addressLookupService);\n },\n }));\n}\n\nexport const AddressLookup = ({\n ref,\n addressLookupService,\n onAddressSelected,\n onOptionsDisplayed,\n onError,\n errorMessage,\n ...otherProps\n}: AddressLookupProps) => {\n const [error, _setError] = useState<Error | null>(null);\n\n const setError = useCallback(\n (newError: Error | null) => {\n if (newError != null) onError?.(newError);\n _setError(newError);\n },\n [onError],\n );\n\n const asyncOptions = useCallback(\n async (searchTerm: string) => {\n try {\n const response = await addressLookupService.search(searchTerm);\n setError(null);\n const options = optionsFromResponse(response, addressLookupService);\n onOptionsDisplayed?.();\n return options;\n } catch (e) {\n setError(e as Error);\n return [];\n }\n },\n [addressLookupService, setError, onOptionsDisplayed],\n );\n\n const handleSelected = (selected: ComboboxOption) => {\n setError(null);\n\n if (typeof selected === \"string\" || !selected.id) {\n setError(new Error(\"Selected option missing id\"));\n return Promise.resolve();\n }\n\n return addressLookupService\n .get(selected.id)\n .then(onAddressSelected)\n .catch(setError);\n };\n\n const realErrorMessage = (error && \"An error occurred\") || errorMessage;\n\n return (\n <Combobox\n {...otherProps}\n ref={ref}\n onSelected={handleSelected}\n asyncOptions={asyncOptions}\n errorMessage={realErrorMessage}\n icon={<Icon icon={search} />}\n />\n );\n};\n\nAddressLookup.displayName = \"AddressLookup\";\n", "import { LoqateAddressLookupError } from \"./LoqateAddressLookupError\";\nimport type {\n LoqateAddressDetailsItem,\n LoqateAddressDetailsResponse,\n LoqateSearchResponse,\n} from \"./types\";\n\nconst LOQATE_BASE_URL = \"https://api.addressy.com/Capture/Interactive\";\nconst LOQATE_FIND_URL = \"/Find/v1.00/json3.ws\";\nconst LOQATE_RETRIEVE_URL = \"/Retrieve/v1.2/json3.ws\";\nconst DEFAULT_COUNTRIES = [\"GB\"];\n\nexport class LoqateAddressLookupService {\n /**\n * Base URL for the Loqate API\n */\n #baseUrl: string;\n\n /**\n * API key for the Loqate API\n */\n #apiKey?: string;\n\n /**\n * List of allowed country codes for the Loqate API\n * 2 or 3 character ISO country codes\n */\n #countries?: string[];\n\n /**\n * Optional filters for the Loqate API\n * E.g., { AdministrativeArea: \"CA\", PostalCode: \"90210\" }\n */\n #filters?: Record<string, string>;\n\n constructor({\n baseUrl,\n apiKey,\n countries,\n filters,\n }: {\n baseUrl?: string;\n apiKey?: string;\n countries?: string[];\n filters?: Record<string, string>;\n }) {\n this.#apiKey = apiKey;\n this.#baseUrl = baseUrl || LOQATE_BASE_URL;\n this.#countries = countries || DEFAULT_COUNTRIES;\n this.#filters = filters;\n }\n\n private fetchFromApi<TResponse = unknown>(url: string): Promise<TResponse> {\n return fetch(`${this.#baseUrl}${url}`)\n .then(response => response.json())\n .then(json => {\n if (json.Items?.some((item: any) => item.Error)) {\n throw new LoqateAddressLookupError(json);\n }\n return json;\n });\n }\n\n /**\n * Builds the Filters query parameter for Loqate API requests.\n * - Filter keys (e.g., \"AdministrativeArea\", \"PostalCode\") are predefined by Loqate API (no need to encode)\n * - Filter values (e.g., \"New York\", \"90210\") contain user input that may have special characters (need encoding)\n *\n * @returns Empty string if no filters, otherwise \"&Filters=key1:value1&key2:value2\" (Loqate's expected format for Filters)\n */\n private buildFiltersQuery(): string {\n if (!this.#filters || Object.keys(this.#filters).length === 0) {\n return \"\";\n }\n\n // Transform Record<string, string> to Loqate's \"key:value&key:value\" format\n const encodedFilters = Object.entries(this.#filters)\n .map(([key, value]) => `${key}:${encodeURIComponent(value)}`)\n .join(\"&\");\n\n return `&Filters=${encodedFilters}`;\n }\n\n search(searchTerm: string): Promise<LoqateSearchResponse> {\n let url = `${LOQATE_FIND_URL}?Key=${this.#apiKey}&Text=${searchTerm}&Countries=${this.#countries?.join(\",\")}`;\n url += this.buildFiltersQuery();\n return this.fetchFromApi<LoqateSearchResponse>(url);\n }\n\n findById(id: string): Promise<LoqateSearchResponse> {\n let url = `${LOQATE_FIND_URL}?Key=${this.#apiKey}&Container=${id}&Countries=${this.#countries?.join(\",\")}`;\n url += this.buildFiltersQuery();\n return this.fetchFromApi<LoqateSearchResponse>(url);\n }\n\n async get(id: string): Promise<LoqateAddressDetailsItem> {\n const url = `${LOQATE_RETRIEVE_URL}?Key=${this.#apiKey}&Id=${id}`;\n const response = await this.fetchFromApi<LoqateAddressDetailsResponse>(url);\n return response.Items[0];\n }\n}\n", "import type { RefAttributes } from \"react\";\nimport type { ComboboxElementType, ComboboxProps } from \"../Combobox\";\n\nexport interface AddressLookupService {\n search(searchTerm: string): Promise<LoqateSearchResponse>;\n findById(id: string): Promise<LoqateSearchResponse>;\n get(id: string): Promise<LoqateAddressDetailsItem>;\n}\n\nexport type AddressLookupProps = Omit<\n ComboboxProps,\n \"options\" | \"asyncOptions\" | \"onSelected\"\n> &\n RefAttributes<ComboboxElementType> & {\n addressLookupService: AddressLookupService;\n onAddressSelected?: (address: LoqateAddressDetailsItem) => void;\n onOptionsDisplayed?: () => void;\n onError?: (error: Error) => void;\n };\n\n// Loqate API response types\nexport type LoqateErrorItem = {\n Error: string;\n Description: string;\n Cause: string;\n Resolution: string;\n};\n\nexport type LoqateSearchResultItem = {\n Id: string;\n Type: string;\n Text: string;\n Highlight: string;\n Description: string;\n};\n\nexport type LoqateErrorResponse = { Items: LoqateErrorItem[] };\n\nexport type LoqateSearchResponse = { Items: LoqateSearchResultItem[] };\n\nexport type LoqateAddressDetailsItem = {\n Id: string;\n Type: string;\n City: string;\n Line1: string;\n Line2: string;\n PostalCode: string;\n Label: string;\n // US only fields\n SubBuilding?: string;\n BuildingNumber?: string;\n Street?: string;\n};\n\nexport type LoqateAddressDetailsResponse = {\n Items: LoqateAddressDetailsItem[];\n};\n", "export * from \"./AddressLookup\";\nexport * from \"./LoqateAddressLookupService\";\nexport * from \"./types\";\n", "import { circleInfo, circleTick, error, warning } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Icon } from \"../Icon\";\nimport \"./Alert.css\";\n\nexport type AlertElementType = HTMLDivElement;\n\nexport interface AlertProps extends DOMProps, RefAttributes<AlertElementType> {\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n variant?: string;\n show?: boolean;\n header?: string;\n}\n\ntype AlertVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nfunction isAlertVariant(value: string): value is AlertVariant {\n return (\n value === \"info\" ||\n value === \"success\" ||\n value === \"warning\" ||\n value === \"error\"\n );\n}\n\nconst Alert = ({ ref, ...props }: AlertProps) => {\n const {\n elementType: Element = \"div\",\n variant: variantProp,\n show = true,\n header,\n children,\n ...otherProps\n } = props;\n\n if (!show) return null;\n\n const variant: AlertVariant =\n variantProp && isAlertVariant(variantProp) ? variantProp : \"info\";\n\n const colorValue =\n variant === \"success\" ? `var(--color-valid)` : `var(--color-${variant})`;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-alert\",\n {\n \"--info\": variant === \"info\",\n \"--success\": variant === \"success\",\n \"--warning\": variant === \"warning\",\n \"--error\": variant === \"error\",\n \"--has-header\": header,\n },\n otherProps.className,\n );\n const icon = {\n info: circleInfo,\n success: circleTick,\n warning,\n error,\n };\n\n const headerClasses = classNames(\"mobius\", \"mobius-alert__header\");\n const iconClasses = classNames(\"mobius\", \"mobius-alert__icon\");\n const contentClasses = classNames(\"mobius\", \"mobius-alert__content\");\n\n return (\n <Element ref={ref} role=\"alert\" {...otherProps} className={classes}>\n <span className={iconClasses}>\n <Icon icon={icon[variant]} color={colorValue} />\n </span>\n <div>\n {header && <p className={headerClasses}>{header}</p>}\n <div className={contentClasses}>{children}</div>\n </div>\n </Element>\n );\n};\n\nAlert.displayName = \"Alert\";\nexport { Alert };\n", "export * from \"./Alert\";\n", "import classNames from \"classnames/dedupe\";\nimport type { BoxProps } from \"./types\";\nimport { getSpacingValue, filterUndefinedProps } from \"../../utils\";\nimport \"./Box.css\";\n\nconst Box = ({ ref, ...props }: BoxProps) => {\n const {\n elementType: Element = \"div\",\n padding,\n paddingX,\n paddingInline,\n paddingInlineStart,\n paddingInlineEnd,\n paddingY,\n paddingBlock,\n paddingBlockStart,\n paddingBlockEnd,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n width,\n height,\n style,\n ...otherProps\n } = props;\n\n const classes = classNames(\"mobius\", \"mobius-box\", otherProps.className);\n\n const styleProps = filterUndefinedProps({\n padding: getSpacingValue(padding),\n paddingInline: getSpacingValue(paddingInline || paddingX),\n paddingBlock: getSpacingValue(paddingBlock || paddingY),\n paddingTop: getSpacingValue(paddingTop || paddingBlockStart),\n paddingRight: getSpacingValue(paddingRight || paddingInlineEnd),\n paddingBottom: getSpacingValue(paddingBottom || paddingBlockEnd),\n paddingLeft: getSpacingValue(paddingLeft || paddingInlineStart),\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n width,\n height,\n ...style,\n });\n\n return (\n <Element ref={ref} style={styleProps} {...otherProps} className={classes} />\n );\n};\n\nBox.displayName = \"Box\";\nexport { Box };\n", "export * from \"./Box\";\n", "\"use client\";\n\nimport type { ReactElement, RefAttributes, ReactNode } from \"react\";\nimport { Children, cloneElement } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport \"./Breadcrumbs.css\";\n\nexport type BreadcrumbsElementType = HTMLUListElement;\n\nexport interface BreadcrumbsProps extends RefAttributes<BreadcrumbsElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n children?: ReactNode;\n \"aria-label\"?: string;\n}\n\nconst Breadcrumbs = ({ ref, ...props }: BreadcrumbsProps) => {\n const { \"aria-label\": ariaLabel = \"Breadcrumbs\" } = props;\n const { navProps } = { navProps: { \"aria-label\": ariaLabel } };\n const { children, ...otherProps } = props;\n const childArray = Children.toArray(children);\n\n // Reshape class name and apply to outer element\n const classes = classNames(\n \"mobius\",\n \"mobius-breadcrumb\",\n otherProps.className,\n );\n\n return (\n <nav ref={ref} {...otherProps} {...navProps} className={classes}>\n <ul>\n {childArray.map((child, i) =>\n cloneElement(\n child as ReactElement,\n {\n key: i,\n isCurrent: i === childArray.length - 1,\n } as { key: number; isCurrent: boolean },\n ),\n )}\n </ul>\n </nav>\n );\n};\n\nBreadcrumbs.displayName = \"Breadcrumbs\";\nexport { Breadcrumbs };\n", "\"use client\";\n\nimport type { ReactNode, ReactElement, RefAttributes } from \"react\";\nimport { cloneElement, Children } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Box } from \"../Box\";\n\nexport type BreadcrumbItemElementType = HTMLLIElement;\n\nexport interface BreadcrumbItemProps\n extends DOMProps, RefAttributes<BreadcrumbItemElementType> {\n \"aria-current\"?:\n | \"page\"\n | \"step\"\n | \"location\"\n | \"date\"\n | \"time\"\n | boolean\n | \"true\"\n | \"false\";\n isDisabled?: boolean;\n isCurrent?: boolean;\n separator?: ReactNode;\n className?: string;\n children: ReactNode;\n}\n\nconst BreadcrumbItem = ({ ref, ...props }: BreadcrumbItemProps) => {\n const {\n isDisabled = false,\n isCurrent = false,\n \"aria-current\": ariaCurrent = \"page\",\n children,\n separator = (\n <Box className=\"mobius-breadcrumb__separator\" aria-hidden=\"true\">\n {\">\"}\n </Box>\n ),\n ...otherProps\n } = props;\n const { itemProps } = {\n itemProps: {\n \"aria-current\": isCurrent ? ariaCurrent : undefined,\n \"aria-disabled\": isDisabled || isCurrent,\n ...otherProps,\n },\n };\n\n // Reshape class name and apply to outer element\n const classes = classNames(\n \"mobius\",\n \"mobius-breadcrumb__item\",\n props.className,\n );\n\n const child: ReactElement =\n typeof children === \"string\" ? (\n <span {...itemProps}>{children}</span>\n ) : (\n (Children.only(children) as ReactElement)\n );\n\n return (\n <li className={classes}>\n {cloneElement(child, {\n ...(child.props as Record<string, unknown>),\n ...itemProps,\n ref,\n } as Record<string, unknown>)}\n {!props.isCurrent && separator}\n </li>\n );\n};\n\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\nexport { BreadcrumbItem };\n", "export * from \"./Breadcrumbs\";\nexport * from \"./BreadcrumbItem\";\n", "import type { ReactNode } from \"react\";\nimport { loading } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\ntype LoadingProps = {\n children: ReactNode;\n};\n\nconst Loading = (props: LoadingProps) => {\n const { children } = props;\n\n return (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={loading} spin size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__loading-text\">\n Loading\n </VisuallyHidden>\n {children}\n </>\n );\n};\n\nexport { Loading };\n", "import { tick } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\nconst Success = () => (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={tick} size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__success-text\">\n Success\n </VisuallyHidden>\n </>\n);\n\nexport { Success };\n", "\"use client\";\n\nimport type { MouseEvent, ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Loading } from \"./Loading\";\nimport type { UseButtonProps } from \"../../hooks/useButton\";\nimport { useButton } from \"../../hooks/useButton\";\nimport { Success } from \"./Success\";\nimport \"./Button.css\";\n\nexport type ButtonElementType = HTMLButtonElement;\n\nexport type Variant = \"primary\" | \"secondary\" | \"ghost\" | \"basic\" | \"link\";\n\nexport type Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends UseButtonProps, DOMProps, RefAttributes<ButtonElementType> {\n /** The name of the button when submitted in a form */\n name?: string | undefined;\n /** The value of the button when submitted in a form */\n value?: string | undefined;\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Shortlist of styles */\n variant?: Variant;\n size?: Size;\n /** Display loading spinner */\n isLoading?: boolean;\n /** Display success style */\n isSuccess?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n children?: ReactNode;\n}\n\nconst Button = ({ ref, ...props }: ButtonProps) => {\n const {\n children,\n elementType: Component = \"button\" as React.ElementType,\n isDisabled,\n isLoading,\n isSuccess,\n variant = \"primary\",\n size = \"md\",\n\n onPress,\n\n onClick,\n ...otherProps\n } = props;\n const { buttonProps } = useButton(props);\n\n // Reshape class name and apply to outer element\n otherProps.className = classNames(\n \"mobius\",\n \"mobius-button\",\n `--variant-${variant}`,\n `--size-${size}`,\n {\n \"--is-disabled\": isDisabled,\n \"--is-loading\": isLoading,\n \"--is-success\": isSuccess && !isLoading,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...buttonProps} {...otherProps}>\n {isLoading ? <Loading>{children}</Loading> : children}\n {isSuccess && !isLoading && <Success />}\n </Component>\n );\n};\n\nButton.displayName = \"Button\";\nexport { Button };\n", "export * from \"./Button\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n type ChangeEvent,\n type ReactElement,\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Checkbox } from \"./Checkbox\";\nimport type { CheckboxElementType, CheckboxGroupProps } from \"./types\";\nimport \"./CheckboxGroup.css\";\n\nexport const CheckboxGroup = ({ ref, ...props }: CheckboxGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n onChange,\n className,\n errorMessage,\n children,\n defaultValue = [],\n isReadOnly,\n itemsPerRow,\n lastItemDisables = false,\n ...rest\n } = props;\n const [selected, setSelected] = useState<string[]>(defaultValue);\n\n // Handle controlled behavior - update state when defaultValue prop changes\n // Use a ref to track if we've initialized to avoid infinite re-renders\n const isInitializedRef = useRef(false);\n const prevDefaultValueRef = useRef<string[]>(defaultValue);\n\n useEffect(() => {\n // Only update if defaultValue has actually changed (shallow comparison)\n const hasChanged =\n defaultValue.length !== prevDefaultValueRef.current.length ||\n defaultValue.some(\n (val, index) => val !== prevDefaultValueRef.current[index],\n );\n\n if (hasChanged || !isInitializedRef.current) {\n setSelected(defaultValue);\n prevDefaultValueRef.current = defaultValue;\n isInitializedRef.current = true;\n }\n }, [defaultValue]);\n\n const checkboxGroupClasses = classNames(\n \"mobius\",\n \"mobius-checkbox-group\",\n className,\n {\n \"--is-horizontal\": orientation === \"horizontal\",\n \"--is-vertical\": orientation === \"vertical\",\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n );\n const validationClasses = useValidationClasses({ isInvalid });\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n const handleChange = (\n event: ChangeEvent<CheckboxElementType>,\n isLastItem = false,\n ) => {\n const {\n target: { value, checked },\n } = event;\n let newValue = [...selected];\n\n if (!checked) {\n newValue = selected.filter(item => item !== value);\n }\n\n if (checked) {\n newValue = [...selected, value];\n }\n\n if (checked && lastItemDisables && isLastItem) {\n newValue = [value];\n }\n\n setSelected(newValue);\n onChange?.(newValue);\n };\n\n const childrenArray = Children.toArray(children);\n const lastCheckbox = childrenArray\n .filter(\n child =>\n isValidElement(child) && (child as ReactElement).type === Checkbox,\n )\n .pop() as ReactElement<CheckboxElementType> | undefined;\n const lastCheckboxIsChecked =\n lastCheckbox && selected.includes(lastCheckbox.props.value);\n\n return (\n <div\n {...rest}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n ref={ref}\n className={checkboxGroupClasses}\n role=\"group\"\n style={\n {\n \"--checkbox-items-per-row\": itemsPerRow || Children.count(children),\n } as React.CSSProperties\n }\n >\n {label && (\n <Label elementType=\"span\" id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-checkbox-group__wrapper\">\n {childrenArray.map(child => {\n if (isValidElement(child)) {\n // lastItemDisables support\n const isLastItem = child === lastCheckbox;\n const isChildDisabled =\n isDisabled ||\n (lastItemDisables && lastCheckboxIsChecked && !isLastItem);\n\n const childProps = child.props as {\n value: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n };\n\n return cloneElement(\n child as ReactElement,\n {\n isDisabled: isChildDisabled,\n isRequired,\n isReadOnly,\n isInvalid,\n isLastItem,\n selected: selected.includes(childProps.value),\n onChange: childProps.onChange || handleChange,\n \"aria-describedby\": describedBy,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </div>\n );\n};\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n", "import type { ChangeEvent, ReactNode, RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { Validation } from \"../../types\";\n\nexport type CheckboxElementType = HTMLInputElement;\n\nexport interface CheckboxProps\n extends DOMProps, Validation, RefAttributes<CheckboxElementType> {\n className?: string;\n // The content to display as the label.\n label?: ReactNode;\n errorMessage?: string;\n /** The name of the input */\n name?: string;\n /** The current value (controlled). */\n value?: string;\n // Whether the input is disabled.\n isDisabled?: boolean;\n onChange?: (\n event: ChangeEvent<CheckboxElementType>,\n isLastItem?: boolean,\n ) => void;\n // The default value (uncontrolled).\n defaultSelected?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Identifies the element that provides an error message for the object.\n \"aria-errormessage\"?: string;\n /**\n * Identifies the element (or elements) that describes the object.\n */\n \"aria-describedby\"?: string;\n /**\n * Whether the checkbox is the last item of a group.\n */\n isLastItem?: boolean;\n /**\n * **Internal:** Do not use\n */\n groupDisabled?: boolean;\n /**\n * Whether the checkbox is selected.\n */\n selected?: boolean;\n}\n\nexport type CheckboxGroupElementType = HTMLDivElement;\ninterface CheckboxGroupPropsInternal\n extends DOMProps, Validation, RefAttributes<CheckboxGroupElementType> {\n children: ReactNode;\n className?: string;\n orientation?: \"horizontal\" | \"vertical\";\n // Defines number of items to be displayed on a single row when used with orientation=\"horizontal\". Defaults to number of items in the group.\n itemsPerRow?: number;\n errorMessage?: string;\n onChange?: (values: string[]) => void;\n // Defines a string value that labels the current element.\n // \"aria-label\"?: string;\n // Identifies the element (or elements) that labels the current element.\n \"aria-labelledby\"?: string;\n // Identifies the element that provides an error message for the object.\n // \"aria-errormessage\"?: string;\n // Identifies the element (or elements) that describes the object.\n \"aria-describedby\"?: string;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Whether the input is disabled.\n isDisabled?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // The default value (uncontrolled).\n defaultValue?: string[];\n // The content to display as the label.\n label?: ReactNode;\n /**\n * The value of the radio button, used when submitting an HTML form.\n * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio#Value).\n */\n value?: string;\n /**\n * This determines if the last item in the group should disable the other items when selected.\n */\n lastItemDisables?: boolean;\n}\n\ninterface HorizontalCheckboxGroupProps extends CheckboxGroupPropsInternal {\n orientation?: \"horizontal\";\n itemsPerRow: number;\n}\n\ninterface VerticalCheckboxGroupProps extends CheckboxGroupPropsInternal {\n orientation?: \"vertical\";\n itemsPerRow?: never;\n}\n\nexport type CheckboxGroupProps =\n | HorizontalCheckboxGroupProps\n | VerticalCheckboxGroupProps;\n", "export * from \"./Checkbox\";\nexport * from \"./CheckboxGroup\";\nexport * from \"./types\";\n", "import type {\n RefAttributes,\n ReactNode,\n ElementType,\n CSSProperties,\n} from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { SizeType } from \"../../types\";\nimport { sizeClasses } from \"../../utils\";\nimport \"./Container.css\";\n\nexport type ContainerElementType = HTMLElement;\n\nexport interface ContainerProps\n extends DOMProps, RefAttributes<ContainerElementType> {\n id?: string;\n /** Custom class name for setting specific CSS */\n className?: string;\n /** HTML element for the Box */\n elementType?: ElementType;\n size?: SizeType;\n children?: ReactNode;\n style?: CSSProperties;\n}\n\nconst Container = ({ ref, ...props }: ContainerProps) => {\n const { elementType: Element = \"div\", size = \"md\", ...otherProps } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-container\",\n sizeClasses(size),\n otherProps.className,\n );\n\n return <Element ref={ref} {...otherProps} className={classes} />;\n};\n\nContainer.displayName = \"Container\";\nexport { Container };\n", "export * from \"./Container\";\n", "// Convert a custom format date string to the format \"yyyy-mm-dd\".\nexport const convertToDateFormat = (date: string, format?: string): string => {\n const dateParts = date.split(/[-/]/);\n const formatParts = format ? format.split(/[-/]/) : [\"yyyy\", \"mm\", \"dd\"];\n const dateObj: { [key: string]: number } = {};\n const formattedDate: string[] = [];\n\n for (let i = 0; i < formatParts.length; i++) {\n dateObj[formatParts[i]] = dateParts[i] ? parseInt(dateParts[i], 10) : 0;\n }\n\n formattedDate.push(dateObj[\"yyyy\"]?.toString() || \"0000\");\n formattedDate.push(\n (dateObj[\"mm\"] < 10 ? \"0\" : \"\") + (dateObj[\"mm\"]?.toString() || \"00\"),\n );\n formattedDate.push(\n (dateObj[\"dd\"] < 10 ? \"0\" : \"\") + (dateObj[\"dd\"]?.toString() || \"00\"),\n );\n\n return formattedDate.join(\"-\");\n};\n\nexport const isValidDate = (date?: string, format = \"yyyy-mm-dd\"): boolean => {\n if (!date) return true;\n\n // Convert date to standard format\n const standardDate = convertToDateFormat(date, format);\n\n // Parse the standardized date\n const [yearStr, monthStr, dayStr] = standardDate.split(\"-\");\n const year = parseInt(yearStr, 10);\n const month = parseInt(monthStr, 10);\n const day = parseInt(dayStr, 10);\n\n // Validate month range\n if (month < 1 || month > 12) {\n return false;\n }\n\n // Check if day is valid for the month\n const daysInMonth = new Date(year, month, 0).getDate();\n return day > 0 && day <= daysInMonth;\n};\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { FocusEvent, RefAttributes } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { convertToDateFormat, isValidDate } from \"./validation\";\n\nexport interface DateFieldProps\n extends Omit<TextFieldProps, \"type\">, RefAttributes<TextFieldElementType> {\n /** The earliest date allowed for the input. */\n min?: string;\n /** The latest date allowed for the input. */\n max?: string;\n /** Date format to use. */\n format?: string;\n}\n\nexport const MIN_MAX_ERROR =\n '\"min\" value should not be greater than \"max\" value.';\n\nexport const DateField = ({ ref, ...props }: DateFieldProps) => {\n const {\n min,\n max,\n format,\n className,\n errorMessage,\n defaultValue,\n value,\n ...otherProps\n } = props;\n const [error, setError] = useState<string | undefined>(errorMessage);\n const [isInvalid, setIsInvalid] = useState<boolean | undefined>(undefined);\n const localRef = useRef<TextFieldElementType>(null);\n const classes = classNames(\"mobius-date-field\", className);\n\n // If a custom format is provided, convert the min, max,\n // and defaultValue dates to that format\n const formattedMin = min ? convertToDateFormat(min, format) : undefined;\n const formattedMax = max ? convertToDateFormat(max, format) : undefined;\n const formattedDefaultValue = defaultValue\n ? convertToDateFormat(defaultValue, format)\n : undefined;\n const formattedValue = value ? convertToDateFormat(value, format) : undefined;\n\n const setInvalidState = (error?: string) => {\n setError(error);\n setIsInvalid(true);\n };\n\n const setValidState = () => {\n setError(props.errorMessage);\n setIsInvalid(false);\n };\n\n // Validate min and max values\n useEffect(() => {\n if (!isValidDate(min, format)) {\n setInvalidState(`Invalid min date: ${min}`);\n return;\n }\n if (!isValidDate(max, format)) {\n setInvalidState(`Invalid max date: ${max}`);\n return;\n }\n\n if (min && max) {\n const minDate = new Date(min);\n const maxDate = new Date(max);\n if (minDate > maxDate) {\n setInvalidState(MIN_MAX_ERROR);\n } else {\n setValidState();\n }\n } else {\n setValidState();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [min, max, format]);\n\n const validate = () => {\n // If 'min' or 'max' values are provided, checkValidity() will\n // validate the date and return a boolean\n const isValidInput = localRef.current?.checkValidity();\n\n if (!isValidInput) {\n setInvalidState(\"Invalid date input\");\n } else {\n setValidState();\n }\n };\n\n // User has interacted with the component and navigated away\n const handleBlur = (event: FocusEvent<Element>) => {\n validate();\n otherProps.onBlur?.(event);\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n type=\"date\"\n min={formattedMin}\n max={formattedMax}\n errorMessage={errorMessage ?? error}\n isInvalid={isInvalid}\n defaultValue={formattedDefaultValue}\n value={formattedValue}\n onBlur={handleBlur}\n {...otherProps}\n />\n );\n};\n\nDateField.displayName = \"DateField\";\n", "export * from \"./DateField\";\nexport * from \"./validation\";\n", "import type { PropsWithChildren, RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type DivElementType = HTMLDivElement;\nexport interface ContentProps\n extends DOMProps, RefAttributes<DivElementType>, PropsWithChildren {}\n\nconst Content = ({ ref, children, ...otherProps }: ContentProps) => (\n <div ref={ref} {...otherProps} className=\"mobius-drawer__content\">\n {children}\n </div>\n);\n\nContent.displayName = \"Content\";\nexport { Content };\n", "import { createContext } from \"react\";\nimport type { DrawerContextProps } from \"./types\";\n\nexport const DrawerContext = createContext<DrawerContextProps>({\n onClose: () => {},\n closeLabel: undefined,\n headerId: undefined,\n});\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { useDialog } from \"../../hooks\";\nimport { mergeRefs, supportsDialog } from \"../../utils\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { DrawerContext } from \"./DrawerContext\";\nimport type { DrawerProps } from \"./types\";\nimport \"./Drawer.css\";\n\nexport type DialogElementType = HTMLDialogElement;\n\nconst TRANSITION_CSS_VARIABLE = \"--drawer-transition-duration\";\n\nconst Drawer = ({ ref, ...props }: DrawerProps) => {\n const {\n isOpen,\n className,\n closeLabel,\n direction,\n announce = \"Drawer opened on screen\",\n onOpen,\n onClose,\n children,\n } = props;\n const dialogRef = useRef<HTMLDialogElement | null>(null);\n const [shouldTransition, setShouldTransition] = useState(false);\n const { close } = useDialog({\n ref: dialogRef,\n isOpen,\n onOpen,\n onClose,\n transition: {\n isEnabled: true,\n CSSVariable: TRANSITION_CSS_VARIABLE,\n },\n });\n const hiddenId = `dialog-screen-reader-announce-${useId()}`;\n const headerId = `dialog-header-${useId()}`;\n\n const dialogClasses = classNames(\n \"mobius\",\n \"mobius-drawer\",\n `--${direction}`,\n className,\n {\n \"--should-transition\": shouldTransition,\n },\n );\n\n useEffect(() => {\n setShouldTransition(supportsDialog());\n }, []);\n\n const contextValue = useMemo(\n () => ({\n onClose: close,\n closeLabel,\n headerId,\n }),\n [close, closeLabel, headerId],\n );\n\n return (\n <dialog\n id={useId()}\n ref={mergeRefs([dialogRef, ref])}\n onCancel={close}\n className={dialogClasses}\n aria-describedby={hiddenId}\n aria-labelledby={headerId}\n >\n <VisuallyHidden>\n <div id={hiddenId}>{announce}</div>\n </VisuallyHidden>\n <DrawerContext.Provider value={contextValue}>\n {children}\n </DrawerContext.Provider>\n </dialog>\n );\n};\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer };\n", "import { useContext } from \"react\";\nimport { DrawerContext } from \"./DrawerContext\";\n\nexport const useDrawer = () => {\n const { onClose, closeLabel, headerId } = useContext(DrawerContext);\n\n return { onClose, closeLabel, headerId };\n};\n", "import type { PropsWithChildren, RefAttributes } from \"react\";\n\nimport { cross } from \"@simplybusiness/icons\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { useDrawer } from \"./useDrawer\";\n\nexport type HeaderElementType = HTMLDivElement;\n\nexport interface HeaderProps\n extends DOMProps, RefAttributes<HeaderElementType>, PropsWithChildren {}\n\nconst Header = ({ ref, children, ...otherProps }: HeaderProps) => {\n const { onClose, closeLabel, headerId } = useDrawer();\n\n return (\n <header ref={ref} {...otherProps} className=\"mobius-drawer__header\">\n <h2 id={headerId}>{children}</h2>\n <Button\n aria-label=\"Close\"\n variant=\"basic\"\n onPress={onClose}\n className=\"mobius-drawer__close\"\n size=\"sm\"\n >\n <Icon icon={cross} /> {closeLabel}\n </Button>\n </header>\n );\n};\n\nHeader.displayName = \"Header\";\nexport { Header };\n", "import type {\n DivElementType as DrawerContentDivElementType,\n ContentProps as DrawerContentProps,\n} from \"./Content\";\nimport { Content } from \"./Content\";\nimport { Drawer as DrawerComponent } from \"./Drawer\";\nimport type { DrawerProps, DrawerContextProps } from \"./types\";\nimport { useDrawer } from \"./useDrawer\";\nimport type {\n HeaderElementType as DrawerHeaderElementType,\n HeaderProps as DrawerHeaderProps,\n} from \"./Header\";\nimport { Header } from \"./Header\";\n\nconst Drawer = Object.assign(DrawerComponent, {\n Header,\n Content,\n});\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer, useDrawer };\n\nexport type {\n DrawerContextProps,\n DrawerContentDivElementType,\n DrawerContentProps,\n DrawerHeaderElementType,\n DrawerHeaderProps,\n DrawerProps,\n};\n", "\"use client\";\n\nimport type { Ref, RefAttributes, ReactNode, ReactElement } from \"react\";\nimport { Children, isValidElement, cloneElement, useState } from \"react\";\nimport useDropdownMenu from \"react-accessible-dropdown-menu-hook\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nimport { Button } from \"../Button\";\nimport \"./DropdownMenu.css\";\n\nexport type DropdownMenuElementType = HTMLElement;\n\nexport interface DropdownMenuProps\n extends DOMProps, RefAttributes<DropdownMenuElementType> {\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n label?: string;\n trigger?: ReactElement;\n}\n\nexport type DropdownMenuRef = Ref<DropdownMenuElementType>;\n\ntype ChildClickProps = {\n onClick?: () => void;\n};\n\nconst DropdownMenu = ({ ref, ...props }: DropdownMenuProps) => {\n const {\n elementType: Element = \"nav\",\n trigger,\n label = \"Menu\",\n children,\n ...otherProps\n } = props;\n const [activeId, setActiveId] = useState<number | null>(null);\n const numberOfItems = Children.count(children);\n const {\n buttonProps,\n itemProps,\n isOpen: open,\n setIsOpen,\n } = useDropdownMenu(numberOfItems);\n\n const classes = classNames(\n \"mobius\",\n \"mobius-dropdown-menu\",\n otherProps.className,\n );\n const triggerClasses = classNames(\"mobius\", \"mobius-dropdown-menu__trigger\");\n const listClasses = classNames(\"mobius\", \"mobius-dropdown-menu__list\", {\n \"--is-open\": open,\n });\n\n const handleChildClick = ({ onClick }: ChildClickProps, index: number) => {\n setActiveId(index);\n setIsOpen(false);\n\n if (onClick) {\n onClick();\n }\n };\n\n return (\n <Element ref={ref} {...otherProps} className={classes}>\n {trigger ? (\n cloneElement(trigger, {\n className: triggerClasses,\n open,\n label,\n ...buttonProps,\n } as Record<string, unknown>)\n ) : (\n <Button className={triggerClasses} {...buttonProps}>\n {label}\n </Button>\n )}\n <ul className={listClasses} role=\"menu\">\n {Children.map(children, (child, index) => {\n if (isValidElement(child)) {\n // DropdownMenu items accept onClick and active props\n return cloneElement(child, {\n onClick: () =>\n handleChildClick(child.props as Record<string, unknown>, index),\n active: index === activeId,\n ...itemProps[index],\n } as {\n onClick?: () => void;\n active?: boolean;\n [key: string]: unknown;\n });\n }\n\n return child;\n })}\n </ul>\n </Element>\n );\n};\n\nDropdownMenu.displayName = \"DropdownMenu\";\nexport { DropdownMenu };\n", "import type { Ref, RefAttributes, ReactNode, ReactElement } from \"react\";\nimport { cloneElement, isValidElement, Children } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type ItemElementType = HTMLLIElement;\n\nexport interface ItemProps extends DOMProps, RefAttributes<ItemElementType> {\n elementType?: React.ElementType;\n /** Custom class name for setting specific CSS */\n className?: string;\n active?: boolean;\n children?: ReactNode;\n onClick?: () => void;\n}\n\nexport type ItemRef = Ref<ItemElementType>;\n\nconst Item = ({ ref, ...props }: ItemProps) => {\n const {\n elementType: Element = \"li\",\n active,\n onClick,\n children,\n ...otherProps\n } = props;\n const classes = classNames(\n \"mobius\",\n \"mobius-dropdown-menu__item\",\n { \"--is-active\": active },\n otherProps.className,\n );\n\n return (\n <Element ref={ref} onClick={onClick} {...otherProps}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childClasses = classNames(\n (child.props as { className?: string }).className,\n classes,\n );\n return cloneElement(\n child as ReactElement,\n {\n className: childClasses,\n } as { className: string },\n );\n }\n\n return <span className={classes}>{child}</span>;\n })}\n </Element>\n );\n};\n\nItem.displayName = \"DropdownMenu.Item\";\nexport { Item };\n", "import { DropdownMenu as DropdownMenuComponent } from \"./DropdownMenu\";\nimport { Item } from \"./Item\";\n\nimport type {\n DropdownMenuElementType,\n DropdownMenuProps,\n DropdownMenuRef,\n} from \"./DropdownMenu\";\nimport type {\n ItemProps as DropdownMenuItemProps,\n ItemRef as DropdownMenuItemRef,\n ItemElementType as DropdownMenuItemElementType,\n} from \"./Item\";\n\nexport interface DropdownMenuCompound extends React.FC<DropdownMenuProps> {\n Item: React.FC<DropdownMenuItemProps>;\n}\n\nconst DropdownMenu: DropdownMenuCompound = Object.assign(\n DropdownMenuComponent,\n {\n Item,\n },\n);\n\nexport type {\n DropdownMenuElementType,\n DropdownMenuProps,\n DropdownMenuRef,\n DropdownMenuItemProps,\n DropdownMenuItemRef,\n DropdownMenuItemElementType,\n};\n\nDropdownMenu.displayName = \"DropdownMenu\";\nexport { DropdownMenu };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { cloneElement, useId } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Flex } from \"../Flex\";\nimport \"./Fieldset.css\";\n\nexport type LegendProps = {\n id?: string;\n className?: string;\n};\n\ntype ContainerProps = {\n \"aria-labelledby\"?: string;\n role: string;\n};\n\nconst useFieldset = (\n props: FieldsetProps,\n): { legendProps: LegendProps; containerProps: ContainerProps } => {\n const { legend } = props;\n\n let legendProps: LegendProps = {};\n let containerProps: ContainerProps = {\n role: \"group\",\n };\n\n const legendId = useId();\n if (legend) {\n legendProps = {\n ...legendProps,\n id: legendId,\n };\n containerProps = {\n ...containerProps,\n \"aria-labelledby\": legendId,\n };\n }\n\n return {\n legendProps,\n containerProps,\n };\n};\n\nexport type FieldsetElementType = HTMLDivElement;\nexport interface FieldsetProps\n extends DOMProps, RefAttributes<FieldsetElementType> {\n legend?: string;\n children: ReactNode;\n className?: string;\n legendComponent?: ReactElement;\n}\n\nconst Fieldset = ({ ref: _ref, ...props }: FieldsetProps) => {\n const {\n children,\n legend,\n legendComponent = <legend />,\n ...otherProps\n } = props;\n\n const { legendProps, containerProps } = useFieldset(props);\n\n const classes = classNames(\"mobius\", \"mobius-fieldset\", props.className);\n\n // Set class on legend\n legendProps.className = \"mobius-fieldset__legend\";\n\n return (\n <Flex {...containerProps} {...otherProps} className={classes}>\n {legend && cloneElement(legendComponent, { ...legendProps }, [legend])}\n {children}\n </Flex>\n );\n};\n\nFieldset.displayName = \"Fieldset\";\nexport { Fieldset };\n", "export * from \"./Fieldset\";\n", "import type { ReactNode, RefAttributes, CSSProperties } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { filterUndefinedProps, getSpacingValue } from \"../../utils\";\nimport type { SpacingType } from \"../../types\";\n\nexport type GridElementType = HTMLDivElement;\n\nexport interface GridProps extends RefAttributes<GridElementType>, DOMProps {\n children?: ReactNode;\n /** The number of columns */\n columns?: number;\n /** How big a gap between the columns and rows */\n gap?: SpacingType;\n /** How big a gap between the columns */\n columnGap?: SpacingType;\n /** How big a gap between the rows */\n rowGap?: SpacingType;\n /** Aligns the grid along the block (column) axis */\n alignContent?:\n | \"center\"\n | \"space-around\"\n | \"space-between\"\n | \"space-evenly\"\n | \"stretch\";\n /** Aligns the grid along the inline (row) axis */\n justifyContent?:\n | \"center\"\n | \"start\"\n | \"end\"\n | \"space-around\"\n | \"space-between\"\n | \"space-evenly\";\n /** Aligns grid items along the block (column) axis */\n alignItems?: \"center\" | \"start\" | \"end\" | \"stretch\" | \"baseline\";\n /** Aligns grid items along the inline (row) axis */\n justifyItems?: \"start\" | \"end\" | \"center\" | \"stretch\";\n /** Custom class name for setting specific CSS */\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst Grid = ({ ref: _ref, ...props }: GridProps) => {\n const {\n columns = 12,\n gap,\n columnGap,\n rowGap,\n alignContent,\n alignItems,\n justifyContent,\n justifyItems,\n className,\n style,\n ...rest\n } = props;\n const classes = classNames(\"mobius\", \"mobius-grid\", className);\n\n const styles: CSSProperties = filterUndefinedProps({\n boxSizing: \"border-box\",\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: getSpacingValue(gap),\n columnGap: getSpacingValue(columnGap),\n rowGap: getSpacingValue(rowGap),\n alignContent,\n alignItems,\n justifyContent,\n justifyItems,\n ...style,\n });\n\n return <div style={styles} className={classes} {...rest} />;\n};\n\nGrid.displayName = \"Grid\";\nexport { Grid };\n", "\"use client\";\n\nimport type { RefAttributes, CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { useBreakpoint } from \"../../hooks\";\nimport type { SizeType } from \"../../types\";\n\nexport type GridItemElementType = HTMLDivElement;\n\nexport interface GridItemProps\n extends RefAttributes<GridItemElementType>, DOMProps {\n /** How many columns the item spans */\n span?: number | number[];\n /** React children */\n children?: React.ReactNode;\n /** How many columns the item spans on the smallest breakpoint */\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n /** How many columns the item spans on the largest breakpoint */\n xxl?: number;\n /** Aligns the grid item along the block (column) axis */\n alignSelf?: \"center\" | \"start\" | \"end\" | \"stretch\";\n /** Aligns the grid item along the inline (row) axis */\n justifySelf?: \"center\" | \"start\" | \"end\" | \"stretch\";\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nexport const getBreakpointMap = (config: Partial<Record<SizeType, number>>) =>\n Object.entries(config).reduce<Record<string, number | undefined>>(\n (prev, [key, value]) => {\n const previous = Object.values(prev);\n const lastDefined = previous[previous.length - 1];\n return { ...prev, [key]: value || lastDefined };\n },\n {},\n );\n\nexport const DEFAULT_SPAN = 12;\n\nconst GridItem = ({ ref: _ref, ...props }: GridItemProps) => {\n const {\n breakpoint: { size: breakpointSize },\n } = useBreakpoint();\n const {\n span,\n xs = Array.isArray(span) ? DEFAULT_SPAN : span,\n sm,\n md,\n lg,\n xl,\n xxl,\n alignSelf,\n justifySelf,\n className,\n ...rest\n } = props;\n const breakpointMap = getBreakpointMap({\n xs,\n sm,\n md,\n lg,\n xl,\n xxl,\n });\n const [responsiveSpan, setResponsiveSpan] = useState<number | undefined>();\n const classes = classNames(\"mobius-grid__item\", className);\n\n useEffect(() => {\n setResponsiveSpan(breakpointMap[breakpointSize]);\n }, [breakpointSize, breakpointMap]);\n\n const styles: CSSProperties = {\n gridColumn: responsiveSpan ? `span ${responsiveSpan}` : undefined,\n alignSelf,\n justifySelf,\n };\n\n return <div style={{ ...styles }} className={classes} {...rest} />;\n};\n\nGridItem.displayName = \"GridItem\";\nexport { GridItem };\n", "import type { GridElementType, GridProps } from \"./Grid\";\nimport { Grid as GridComponent } from \"./Grid\";\nimport type { GridItemProps, GridItemElementType } from \"./Item\";\nimport { GridItem } from \"./Item\";\n\nexport interface GridCompound extends React.FC<GridProps> {\n Item: React.FC<GridItemProps>;\n}\n\nconst Grid: GridCompound = Object.assign(GridComponent, {\n Item: GridItem,\n});\n\nGrid.displayName = \"Grid\";\nexport { Grid };\nexport type { GridProps, GridItemProps, GridElementType, GridItemElementType };\n", "import type React from \"react\";\nimport type { RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type IntrinsicImage = Omit<\n React.JSX.IntrinsicElements[\"img\"],\n \"css\" | \"width\" | \"height\" | \"color\"\n> &\n RefAttributes<HTMLImageElement>;\n\nexport interface ImageProps extends DOMProps, IntrinsicImage {\n /** HTML element for the Box */\n elementType?: React.ElementType;\n /** Alternative text for accessibility */\n alt: string;\n /** Path to image asset */\n src: string;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nconst Image = ({\n ref,\n alt,\n elementType: Component = \"img\",\n ...otherProps\n}: ImageProps) => {\n const classes = classNames(\"mobius\", \"mobius-image\", otherProps.className);\n\n return <Component alt={alt} ref={ref} {...otherProps} className={classes} />;\n};\n\nImage.displayName = \"Image\";\nexport { Image };\n", "export * from \"./Image\";\n", "import type {\n HTMLAttributeAnchorTarget,\n CSSProperties,\n MouseEvent,\n RefAttributes,\n} from \"react\";\nimport type React from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport \"./Link.css\";\n\nexport type LinkElementType = HTMLAnchorElement;\n\nexport interface LinkProps extends RefAttributes<LinkElementType> {\n id?: string;\n children?: React.ReactNode;\n /** Path to link resource or page */\n href?: string;\n /** Custom class name for setting specific CSS */\n className?: string;\n title?: string;\n style?: React.CSSProperties;\n referrerPolicy?: ReferrerPolicy;\n download?: boolean | string;\n rel?: string;\n target?: HTMLAttributeAnchorTarget;\n isDisabled?: boolean;\n onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;\n to?: unknown;\n elementType?: React.ElementType;\n /** Visual style variant for the link */\n variant?: \"primary\" | \"secondary\";\n}\n\nconst Link = ({ ref, ...props }: LinkProps) => {\n const {\n isDisabled = false,\n elementType: Component = \"a\",\n style,\n className,\n variant = \"primary\",\n ...otherProps\n } = props;\n\n const disabledStyles: CSSProperties = {\n pointerEvents: \"none\",\n };\n\n const styles = { ...style, ...(isDisabled && disabledStyles) };\n const classes = classNames(\n \"mobius\",\n \"mobius-link\",\n className,\n `mobius-link--${variant}`,\n {\n \"--is-disabled\": isDisabled,\n },\n );\n\n return (\n <Component\n ref={ref}\n style={styles}\n className={classes}\n aria-disabled={isDisabled ? true : undefined}\n {...otherProps}\n >\n {props.children}\n </Component>\n );\n};\n\nLink.displayName = \"Link\";\nexport { Link };\n", "export * from \"./Link\";\n", "import classNames from \"classnames/dedupe\";\nimport type { HTMLAttributeAnchorTarget, MouseEvent } from \"react\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface LinkButtonProps extends ButtonProps {\n href: string;\n title?: string;\n style?: React.CSSProperties;\n referrerPolicy?: ReferrerPolicy;\n download?: boolean | string;\n rel?: string;\n target?: HTMLAttributeAnchorTarget;\n onClick?: (event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;\n to?: unknown;\n}\n\nexport function LinkButton({\n href,\n children,\n className,\n elementType = \"a\",\n ...rest\n}: LinkButtonProps) {\n if (!href) {\n throw new Error(\"LinkButton requires a href prop\");\n }\n\n const classes = classNames(\"mobius\", \"mobius-link-button\", className);\n\n return (\n <Button elementType={elementType} href={href} className={classes} {...rest}>\n {children}\n </Button>\n );\n}\n", "export * from \"./LinkButton\";\n", "import type { ReactNode, Ref } from \"react\";\nimport { Children, cloneElement, isValidElement } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./List.css\";\n\nexport type ListStyleType =\n | \"disc\"\n | \"circle\"\n | \"square\"\n | \"decimal\"\n | \"georgian\"\n | \"trad-chinese-informal\"\n | \"kannada\";\n\nexport interface ListProps extends DOMProps {\n children?: ReactNode;\n isOrdered?: boolean;\n isReversed?: boolean;\n start?: number;\n liststyletype?: ListStyleType;\n icon?: ReactNode;\n className?: string;\n ref?: Ref<HTMLOListElement & HTMLUListElement>;\n}\n\nconst List = ({ ref, ...props }: ListProps) => {\n const Component: \"ol\" | \"ul\" = props.isOrdered ? \"ol\" : \"ul\";\n const { children, icon, ...otherProps } = props;\n\n // Remove props that should not exist on ol or ul element\n\n const { isOrdered, liststyletype, isReversed, ...restProps } = otherProps;\n\n const mappedProps = {\n ...restProps,\n reversed: isReversed,\n };\n\n const classes = classNames(\n \"mobius\",\n \"mobius-list\",\n {\n \"--has-icon\": icon,\n [`--is-${liststyletype}`]: liststyletype,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...mappedProps} className={classes}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n // List items accept a parentIcon prop which is not part of standard HTML\n return cloneElement(child, {\n parentIcon: icon,\n } as { parentIcon?: ReactNode });\n }\n\n return child;\n })}\n </Component>\n );\n};\n\nList.displayName = \"List\";\nexport { List };\n", "import type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type ListItemElementType = HTMLLIElement;\nexport interface ListItemProps\n extends DOMProps, RefAttributes<ListItemElementType> {\n children?: ReactNode;\n value?: number;\n className?: string;\n parentIcon?: ReactNode;\n icon?: ReactNode;\n}\n\nconst ListItem = ({ ref, ...props }: ListItemProps) => {\n const { parentIcon, icon, children, ...otherProps } = props;\n const iconContent = icon || parentIcon;\n const classes = classNames(\n \"mobius\",\n \"mobius-list__item\",\n {\n \"--has-icon\": iconContent,\n },\n props.className,\n );\n const contentClasses = classNames(\"mobius\", \"mobius-list__item-content\");\n const iconClasses = classNames(\"mobius\", \"mobius-list__icon\");\n\n if (iconContent) {\n return (\n <li ref={ref} {...otherProps} className={classes}>\n <span className={contentClasses}>\n <span className={iconClasses}>{iconContent}</span>\n {children}\n </span>\n </li>\n );\n }\n\n return (\n <li ref={ref} {...otherProps} className={classes}>\n {children}\n </li>\n );\n};\n\nListItem.displayName = \"ListItem\";\nexport { ListItem };\n", "export * from \"./List\";\nexport * from \"./ListItem\";\n", "import type { RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { loading } from \"@simplybusiness/icons\";\nimport type { IconProps } from \"../Icon\";\nimport { Icon } from \"../Icon\";\nimport \"./LoadingIndicator.css\";\n\nexport interface LoadingIndicatorProps\n extends RefAttributes<SVGSVGElement>, IconProps {}\n\nconst LoadingIndicator = ({ ref, ...props }: LoadingIndicatorProps) => {\n const { icon = loading, ...otherProps } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-loading-indicator\",\n otherProps.className,\n );\n\n return (\n <Icon icon={icon} spin ref={ref} {...otherProps} className={classes} />\n );\n};\n\nLoadingIndicator.displayName = \"LoadingIndicator\";\nexport { LoadingIndicator };\n", "export * from \"./LoadingIndicator\";\n", "import type { RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type LogoElementType = SVGSVGElement;\n\nexport interface LogoProps extends DOMProps, RefAttributes<LogoElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Custom width. When defined along with height, it will scale proportionally */\n width?: string;\n /** Custom height. When defined along with width, it will scale proportionally */\n height?: string;\n}\n\nexport const Logo = ({ ref, ...props }: LogoProps) => {\n const { className, width, height, ...otherProps } = props;\n\n const classes = classNames(\"mobius\", \"mobius-logo\", className);\n\n return (\n <svg\n width={width}\n height={height}\n ref={ref}\n className={classes}\n viewBox=\"0 0 144 37\"\n {...otherProps}\n >\n <defs>\n <linearGradient\n id=\"logo-gradient\"\n x1=\"83.508%\"\n x2=\"11.891%\"\n y1=\"76.042%\"\n y2=\"26.973%\"\n >\n <stop stopColor=\"#4632D8\" offset=\"0%\" />\n <stop stopColor=\"#9084E8\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <g>\n <path\n fill=\"#0E0A2B\"\n d=\"M68.788 11.307c0-2.486-2.027-3.345-3.833-4.1-1.332-.562-2.471-1.036-2.471-2.072 0-.873.77-1.42 1.968-1.42 1.051 0 1.806.444 2.294.725.193.103.474.222.755.133.192-.06.34-.207.459-.444l.34-.621c.266-.474.163-.888-.281-1.2-.533-.384-1.88-1.05-3.537-1.05-2.738 0-4.647 1.643-4.647 4.01 0 2.413 2.012 3.301 3.788 4.07 1.347.593 2.516 1.096 2.516 2.161 0 .873-.754 1.45-1.924 1.45-1.287 0-2.22-.65-2.678-.961l-.03-.015c-.533-.296-.903-.237-1.228.192l-.415.607c-.444.607-.148.992.134 1.228.828.637 2.427 1.392 4.203 1.392 2.708 0 4.587-1.673 4.587-4.085zm4.44 2.975V6.186c0-.577-.31-.888-.873-.888h-.843c-.563 0-.874.311-.874.888v8.096c0 .577.296.888.874.888h.843c.563 0 .873-.311.873-.888zM71.482 4.203h.755c.518 0 .814-.281.814-.8v-.517c0-.518-.296-.814-.814-.814h-.755c-.518 0-.8.281-.8.814v.518c.016.518.297.8.8.8zM92.645 24.48h.755c.518 0 .814-.282.814-.8v-.518c0-.518-.296-.814-.814-.814h-.755c-.518 0-.799.282-.799.814v.518c0 .518.281.8.8.8zm-6.26-19.42c-1.539 0-2.397.962-2.945 1.895-.444-1.243-1.435-1.895-2.871-1.895-1.362 0-2.146.888-2.723 1.806v-.68c0-.578-.311-.889-.873-.889h-.74c-.563 0-.873.311-.873.888v8.096c0 .577.295.888.873.888h.843c.577 0 .873-.311.873-.888V10.73c0-2.25.888-3.271 2.058-3.271 1.006 0 1.198.71 1.198 1.85v4.987c0 .578.311.888.888.888h.844c.577 0 .873-.31.873-.888v-3.551c0-2.25.873-3.271 2.013-3.271 1.036 0 1.243.74 1.243 1.85v4.987c0 .577.31.888.888.888h.814c.577 0 .888-.31.888-.888V8.835c0-2.5-1.095-3.774-3.27-3.774zm10.804 10.33c2.679 0 4.558-2.13 4.558-5.164 0-3.094-1.776-5.166-4.425-5.166-1.761 0-2.708 1.036-3.049 1.51v-.533c0-.459-.34-.755-.873-.755h-.607c-.562 0-.888.326-.888.888v11.9c0 .576.311.887.888.887h.814c.578 0 .888-.31.888-.888v-3.404c0-.207-.014-.4-.014-.532.325.429 1.184 1.258 2.708 1.258zm-2.768-5.105c0-1.362.622-2.975 2.368-2.975 1.377 0 2.309 1.184 2.309 2.945 0 1.746-.947 2.916-2.338 2.916-1.54 0-2.339-1.45-2.339-2.886zm12.965 4.07v-.652c0-.444-.252-.725-.681-.784-.34-.03-.68-.192-.68-1.066v-9.47c0-.563-.326-.888-.874-.888h-.843c-.563 0-.874.31-.874.888v9.679c0 1.258.34 2.16 1.021 2.678.637.489 1.466.533 2.013.533.607 0 .918-.325.918-.917zm9.457-9.073h-.962c-.518 0-.844.237-.977.726l-1.717 4.972c-.089.311-.192.71-.251.977-.074-.281-.193-.71-.296-1.021l-1.835-4.943c-.163-.489-.489-.71-.977-.71h-1.036c-.415 0-.622.162-.71.295-.09.134-.163.385.014.755l3.685 8.57-.34.813c-.252.592-.77 1.229-1.45 1.229-.267 0-.474-.09-.652-.163h-.014c-.43-.104-.755.074-.962.488l-.163.415c-.119.251-.148.517-.06.725.075.192.237.34.474.429.326.118.814.296 1.391.296 1.628 0 2.975-.977 3.597-2.605l3.996-10.226c.103-.296.088-.563-.045-.755-.163-.163-.4-.267-.71-.267zM67.634 28.297c.977-.592 1.54-1.658 1.54-2.886 0-2.176-1.688-3.567-4.293-3.567h-4.04c-.562 0-.873.311-.873.888v11.899c0 .577.296.888.873.888h4.1c1.346 0 2.5-.34 3.33-.962.932-.71 1.42-1.761 1.42-3.049.03-1.524-.784-2.767-2.057-3.211zm-5.017-.962v-3.212h2.25c1.02 0 1.628.592 1.628 1.584 0 .991-.607 1.643-1.57 1.643h-2.308v-.015zm4.396 4.01c0 1.155-.71 1.865-1.865 1.865h-2.53v-3.714h2.53c1.14.014 1.865.74 1.865 1.85zm12.638-5.712h-.814c-.577 0-.888.31-.888.888v3.655c0 2.176-1.361 3.182-2.634 3.182-1.006 0-1.406-.547-1.406-1.88v-4.942c0-.578-.31-.888-.888-.888h-.814c-.562 0-.888.325-.888.888v5.431c0 2.516 1.17 3.774 3.463 3.774a3.937 3.937 0 003.286-1.761v.651c0 .577.296.888.873.888h.74c.577 0 .888-.31.888-.888v-8.095c-.03-.578-.355-.903-.918-.903zm6.956 3.937c-.917-.311-1.702-.592-1.702-1.184 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.193-.341c.251-.518.133-.947-.326-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.213.222l-.222.34c-.178.252-.237.504-.178.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.03-2.042-1.761-2.649-3.138-3.122zm6.897-3.937h-.844c-.562 0-.873.31-.873.888v8.095c0 .577.296.888.873.888h.844c.577 0 .873-.31.873-.888v-8.095c0-.563-.31-.888-.873-.888zm9.324-.237c-1.924 0-2.93 1.154-3.36 1.806v-.681c0-.577-.31-.888-.873-.888h-.74c-.563 0-.873.31-.873.888v8.095c0 .577.296.888.873.888h.843c.578 0 .874-.31.874-.888v-3.744c0-1.79 1.14-3.078 2.708-3.078 1.021 0 1.436.547 1.436 1.88v4.942c0 .577.31.888.887.888h.814c.578 0 .888-.31.888-.888v-5.431c0-2.516-1.169-3.789-3.477-3.789zm10.448 0c-2.96 0-5.032 2.131-5.032 5.165 0 2.99 2.235 5.165 5.313 5.165 1.48 0 2.635-.533 3.345-.977.444-.266.562-.695.296-1.198l-.222-.385c-.266-.459-.651-.563-1.184-.31h-.015a3.885 3.885 0 01-2.042.606c-1.54 0-2.634-.962-2.812-2.472h5.816a.935.935 0 00.933-.917c.014-2.827-1.717-4.677-4.396-4.677zm-.044 2.013c1.065 0 1.79.77 1.864 1.968h-4.1c.253-1.213 1.096-1.968 2.236-1.968zm10.152 2.16c-.917-.31-1.702-.591-1.702-1.183 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.192-.341c.252-.518.134-.947-.325-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.214.222l-.222.34c-.177.252-.236.504-.177.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.015-2.042-1.747-2.649-3.138-3.122zm8.791 0c-.917-.31-1.702-.591-1.702-1.183 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.192-.341c.252-.518.134-.947-.325-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.214.222l-.222.34c-.177.252-.236.504-.177.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.015-2.042-1.747-2.649-3.138-3.122z\"\n />\n <path\n fill=\"url(#logo-gradient)\"\n d=\"M22.747 22.288c.607 1.214.918 2.59.918 4.144 0 1.45-.267 2.827-.8 4.1a10.018 10.018 0 01-2.279 3.36c-.991.961-2.235 1.73-3.744 2.278-1.51.563-3.167.829-4.988.829-2.264 0-4.35-.385-6.29-1.14-1.938-.77-3.492-1.598-4.676-2.5-.31-.252-.548-.504-.696-.77a1.332 1.332 0 01-.177-.71.718.718 0 010-.252c.03-.37.207-.785.547-1.199l1.14-1.598c.4-.548.829-.844 1.288-.918a.896.896 0 01.222-.03c.4 0 .873.163 1.39.474 2.487 1.776 4.914 2.679 7.252 2.679 1.643 0 2.96-.385 3.922-1.14.962-.755 1.45-1.746 1.45-2.96 0-.725-.192-1.39-.562-1.983a5.347 5.347 0 00-1.539-1.569 18.207 18.207 0 00-2.235-1.287 56.102 56.102 0 00-2.649-1.214c-.917-.4-1.835-.814-2.752-1.258a19.282 19.282 0 01-2.62-1.539 14.014 14.014 0 01-2.22-1.924c-.666-.695-1.169-1.539-1.554-2.545-.37-.992-.562-2.087-.562-3.271 0-2.042.533-3.863 1.598-5.446 1.066-1.584 2.516-2.797 4.336-3.641C8.303.414 10.345 0 12.624 0c1.91 0 3.685.281 5.358.844 1.657.562 2.96 1.198 3.892 1.88.68.473 1.006 1.035 1.006 1.671 0 .385-.118.785-.37 1.2l-.917 1.657c-.385.74-.903 1.11-1.554 1.11-.4 0-.83-.133-1.318-.4a42.421 42.421 0 00-1.687-.947c-.473-.237-1.14-.488-1.998-.71a9.458 9.458 0 00-2.56-.356c-1.672 0-3.004.37-3.981 1.11-.992.74-1.48 1.717-1.48 2.946 0 .902.31 1.701.932 2.412.622.695 1.421 1.302 2.398 1.79.977.489 2.057.977 3.256 1.466a54.048 54.048 0 013.552 1.628 20.795 20.795 0 013.24 2.042c.948.755 1.732 1.732 2.354 2.945zm31.257 2.945c0 3.197-1.155 6.083-3.256 8.14-2.265 2.205-5.506 3.36-9.368 3.36H30.71c-2.443 0-4.278-1.836-4.278-4.278V4.53c0-1.2.43-2.28 1.214-3.064C28.43.681 29.51.252 30.709.252h9.013c3.419 0 6.32 1.095 8.377 3.182 1.909 1.923 2.945 4.558 2.945 7.429 0 2.294-.622 4.203-1.91 5.816 1.377.77 2.487 1.776 3.286 2.99 1.066 1.583 1.584 3.448 1.584 5.564zm-12.106-7.68c.044-.03 4.913-3.02 4.913-6.675 0-1.761-.607-3.345-1.717-4.455-1.568-1.584-3.788-1.924-5.372-1.924H30.68v28h10.7c2.738 0 4.958-.754 6.408-2.16 1.273-1.243 1.983-3.049 1.983-5.106 0-1.272-.296-2.353-.858-3.196v-.03c-1.362-2.353-6.838-3.774-6.897-3.789l-.844-.222.726-.444z\"\n />\n <path\n fill=\"#0E0A2B\"\n d=\"M138.199 25.455c0-.4.074-.784.222-1.14.148-.354.355-.665.606-.932.267-.266.563-.473.903-.621.34-.148.725-.222 1.11-.222.4 0 .784.074 1.125.222.355.148.666.355.917.621.267.267.474.578.622.933.148.355.222.74.222 1.14 0 .399-.074.784-.222 1.139a2.86 2.86 0 01-.622.932 3.087 3.087 0 01-.917.637 2.646 2.646 0 01-1.125.236c-.4 0-.77-.074-1.11-.236a2.777 2.777 0 01-.903-.637 2.821 2.821 0 01-.606-.932 2.898 2.898 0 01-.222-1.14zm.71 0c0 .326.06.622.163.903.103.281.266.518.459.725a2.051 2.051 0 001.524.666c.31 0 .592-.059.858-.177a2.175 2.175 0 001.155-1.214c.118-.281.162-.577.162-.903 0-.325-.059-.621-.162-.902a2.422 2.422 0 00-.46-.726 2.112 2.112 0 00-.695-.488 2.073 2.073 0 00-.858-.178c-.31 0-.592.06-.844.178a2.051 2.051 0 00-.68.488 2.45 2.45 0 00-.46.726 2.636 2.636 0 00-.162.902zm1.154-1.14c0-.221.119-.34.34-.34h.889c.296 0 .532.09.695.252.178.163.267.4.267.68a.623.623 0 01-.06.297.557.557 0 01-.133.222.512.512 0 01-.163.148c-.059.044-.118.059-.162.074v.014l.03.03c.014.015.014.03.029.06l.044.088.34.666c.06.118.075.207.045.281-.03.074-.104.104-.207.104h-.104c-.192 0-.31-.089-.385-.252l-.384-.829h-.4v.74c0 .222-.104.34-.31.34h-.06c-.207 0-.31-.118-.31-.34v-2.234zm1.051 1.037c.133 0 .252-.045.31-.119.075-.074.104-.192.104-.325s-.03-.252-.103-.326a.413.413 0 00-.296-.118h-.385v.873h.37v.015z\"\n />\n </g>\n </svg>\n );\n};\n\nLogo.displayName = \"Logo\";\n", "export * from \"./Logo\";\n", "import type { PropsWithChildren, RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type DivElementType = HTMLDivElement;\nexport interface ContentProps\n extends DOMProps, RefAttributes<DivElementType>, PropsWithChildren {}\n\nconst Content = ({ ref, children, ...otherProps }: ContentProps) => (\n <div ref={ref} {...otherProps} className=\"mobius-modal__content\">\n {children}\n </div>\n);\n\nContent.displayName = \"Content\";\nexport { Content };\n", "import { createContext } from \"react\";\nimport type { ModalContextProps } from \"./types\";\n\nexport const ModalContext = createContext<ModalContextProps>({\n onClose: () => {},\n closeLabel: undefined,\n});\n", "import { useContext } from \"react\";\nimport { ModalContext } from \"./ModalContext\";\n\nexport const useModal = () => {\n const { onClose, closeLabel } = useContext(ModalContext);\n\n return { onClose, closeLabel };\n};\n", "import type { PropsWithChildren, RefAttributes } from \"react\";\n\nimport { cross } from \"@simplybusiness/icons\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { useModal } from \"./useModal\";\n\nexport type HeaderElementType = HTMLDivElement;\n\nexport interface HeaderProps\n extends DOMProps, RefAttributes<HeaderElementType>, PropsWithChildren {}\n\nconst Header = ({ ref, children, ...otherProps }: HeaderProps) => {\n const { onClose, closeLabel } = useModal();\n\n return (\n <header ref={ref} {...otherProps} className=\"mobius-modal__header\">\n {children}\n <Button\n aria-label=\"Close\"\n variant=\"basic\"\n onPress={onClose}\n className=\"mobius-modal__close\"\n >\n <Icon icon={cross} /> {closeLabel}\n </Button>\n </header>\n );\n};\n\nHeader.displayName = \"Header\";\nexport { Header };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useDialog } from \"../../hooks\";\nimport { mergeRefs } from \"../../utils\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\nimport { ModalContext } from \"./ModalContext\";\nimport type { ModalProps } from \"./types\";\nimport \"./Modal.css\";\n\nexport type ModalElementType = HTMLDialogElement;\n\nconst TRANSITION_CSS_VARIABLE = \"--modal-transition-duration\";\n\nconst Modal = ({ ref, ...props }: ModalProps) => {\n const {\n isOpen,\n onClose,\n onOpen,\n children,\n className,\n closeLabel,\n isFullScreen,\n animation,\n ...rest\n } = props;\n const [shouldTransition, setShouldTransition] = useState(false);\n\n useEffect(() => {\n setShouldTransition(supportsDialog());\n }, []);\n\n const dialogRef = useRef<HTMLDialogElement | null>(null);\n const { close } = useDialog({\n ref: dialogRef,\n isOpen,\n onOpen,\n onClose,\n transition: {\n isEnabled: !!animation,\n CSSVariable: TRANSITION_CSS_VARIABLE,\n },\n });\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius-modal\",\n {\n \"--no-dialog-support\": !shouldTransition, // This class is used to correctly position modal in x/y middle on iOS <= 15.2\n \"--should-transition\": shouldTransition && animation,\n \"--slide-up\": animation === \"slideUp\",\n \"--fade\": animation === \"fade\",\n \"--is-fullscreen\": isFullScreen,\n },\n className,\n );\n\n const contextValue = useMemo(\n () => ({\n onClose: close,\n closeLabel,\n }),\n [close, closeLabel],\n );\n\n return (\n <dialog\n ref={mergeRefs([dialogRef, ref])}\n onCancel={close}\n className={modalClasses}\n {...rest}\n >\n <ModalContext.Provider value={contextValue}>\n {children}\n </ModalContext.Provider>\n </dialog>\n );\n};\n\nModal.displayName = \"Modal\";\nexport { Modal };\n", "import type {\n DivElementType as ModalContentDivElementType,\n ContentProps as ModalContentProps,\n} from \"./Content\";\nimport { Content } from \"./Content\";\nimport type {\n HeaderElementType as ModalHeaderElementType,\n HeaderProps as ModalHeaderProps,\n} from \"./Header\";\nimport { Header } from \"./Header\";\nimport { Modal as ModalComponent } from \"./Modal\";\nimport type { ModalProps, ModalContextProps } from \"./types\";\nimport { useModal } from \"./useModal\";\n\nconst Modal = Object.assign(ModalComponent, {\n Header,\n Content,\n});\n\nModal.displayName = \"Modal\";\nexport { Modal, useModal };\n\nexport type {\n ModalContextProps,\n ModalContentDivElementType,\n ModalContentProps,\n ModalHeaderElementType,\n ModalHeaderProps,\n ModalProps,\n};\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport { type RefAttributes, useCallback, useEffect, useRef } from \"react\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport \"./NumberField.css\";\n\nexport type NumberFieldElementType = TextFieldElementType;\n\nexport interface NumberFieldProps\n extends\n Omit<TextFieldProps, \"type\" | \"defaultValue\" | \"inputElementType\">,\n RefAttributes<NumberFieldElementType> {\n /** The smallest value allowed for the input. */\n minValue?: number;\n /** The largest value allowed for the input. */\n maxValue?: number;\n /** The amount that the input value changes with each increment or decrement \"tick\". */\n step?: number; // ??\n /** The default value for the input. */\n defaultValue?: number;\n /** Flag to hide the spin buttons. */\n hideSpinButtons?: boolean;\n}\n\nexport const NumberField = ({ ref, ...props }: NumberFieldProps) => {\n const {\n minValue,\n maxValue,\n step,\n defaultValue,\n hideSpinButtons,\n className,\n ...otherProps\n } = props;\n const {\n onFocus: customOnFocus,\n onBlur: customOnBlur,\n ...rest\n } = otherProps as Omit<TextFieldProps, \"onFocus\" | \"onBlur\"> & {\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n };\n\n const focusedInputRef = useRef<HTMLInputElement | null>(null);\n const wheelHandler = useCallback((ev: Event) => ev.preventDefault(), []);\n\n useEffect(() => {\n return () => {\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = null;\n };\n }, [wheelHandler]);\n\n const containerClasses = classNames(\"mobius-number-field\", className, {\n \"--hide-spin-buttons\": hideSpinButtons,\n });\n\n const handleBeforeInput = (\n event: React.FormEvent<NumberFieldElementType>,\n ) => {\n const { data } = event.nativeEvent as InputEvent;\n if (step && Number.isInteger(step) && data === \".\") {\n event.preventDefault();\n }\n if (minValue && minValue >= 0 && data === \"-\") {\n event.preventDefault();\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const { value } = event.target;\n const numValue = parseFloat(value);\n\n // On blur, snap to nearest valid step value if step is defined\n if (step && step > 1 && !isNaN(numValue)) {\n const baseValue = minValue ?? 0;\n const steps = Math.round((numValue - baseValue) / step);\n const snappedValue = baseValue + steps * step;\n\n // Only update if the value changed\n if (snappedValue !== numValue) {\n event.target.value = snappedValue.toString();\n // Trigger change event for the corrected value\n const changeEvent = new Event(\"change\", { bubbles: true });\n event.target.dispatchEvent(changeEvent);\n // Also call the onChange handler if provided\n const syntheticChangeEvent = {\n ...event,\n target: event.target,\n currentTarget: event.currentTarget,\n } as React.ChangeEvent<HTMLInputElement>;\n otherProps.onChange?.(syntheticChangeEvent);\n }\n }\n\n customOnBlur?.(event);\n };\n\n const forwardedProps: TextFieldProps = {\n ...rest,\n onFocus: e => {\n const el = e.currentTarget as HTMLInputElement;\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = el;\n el.addEventListener(\"wheel\", wheelHandler, { passive: false });\n customOnFocus?.(e as React.FocusEvent<HTMLInputElement>);\n },\n onBlur: e => handleBlur(e as React.FocusEvent<HTMLInputElement>),\n };\n\n return (\n <TextField\n {...forwardedProps}\n className={containerClasses}\n onBeforeInput={handleBeforeInput}\n type=\"number\"\n min={minValue ?? undefined}\n max={maxValue ?? undefined}\n step={step}\n ref={ref}\n defaultValue={\n defaultValue != null ? defaultValue?.toString() : defaultValue\n }\n />\n );\n};\n\nNumberField.displayName = \"NumberField\";\n", "export * from \"./NumberField\";\n", "import type { RefAttributes } from \"react\";\n\nexport interface OptionProps extends RefAttributes<HTMLOptionElement> {\n value?: string;\n children?: string;\n isDisabled?: boolean;\n}\n\nconst Option = ({ ref, ...props }: OptionProps) => {\n const { isDisabled, ...rest } = props;\n const mappedProps = {\n ...rest,\n disabled: isDisabled,\n };\n return <option {...mappedProps} ref={ref} />;\n};\n\nOption.displayName = \"Option\";\nexport { Option };\n", "export * from \"./Option\";\n", "import { eye, eyeSlash } from \"@simplybusiness/icons\";\nimport { Icon } from \"../..\";\n\nexport interface ShowHideButtonProps {\n show?: boolean;\n onClick: () => void;\n}\n\nexport const ShowHideButton = ({\n show = false,\n onClick,\n}: ShowHideButtonProps) => (\n <button\n className=\"mobius-password-field__show-button\"\n type=\"button\"\n onClick={e => {\n e.preventDefault();\n onClick();\n }}\n aria-label={`${show ? \"Hide\" : \"Show\"} password`}\n data-testid=\"show-hide-button\"\n >\n <Icon icon={show ? eyeSlash : eye} aria-hidden=\"true\" />\n </button>\n);\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { ShowHideButton } from \"./ShowHideButton\";\nimport \"./PasswordField.css\";\n\nexport interface PasswordFieldProps extends TextFieldProps {}\n\nexport const PasswordField = ({\n ref,\n className,\n ...props\n}: PasswordFieldProps) => {\n const [show, setShow] = useState(false);\n const type = show ? \"text\" : \"password\";\n const classes = classNames(\"mobius-password-field\", className);\n const localRef = useRef<TextFieldElementType>(null);\n\n const handleShowHideButtonClick = () => {\n const selectionStart = localRef.current?.selectionStart;\n const selectionEnd = localRef.current?.selectionEnd;\n\n setShow(oldShow => !oldShow);\n requestAnimationFrame(() => {\n localRef.current?.focus();\n if (selectionStart != null && selectionEnd != null) {\n localRef.current?.setSelectionRange(selectionStart, selectionEnd);\n }\n });\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n {...props}\n type={type}\n suffixInside={\n <ShowHideButton onClick={handleShowHideButtonClick} show={show} />\n }\n />\n );\n};\n\nPasswordField.displayName = \"PasswordField\";\n", "export * from \"./PasswordField\";\n", "import {\n FloatingArrow,\n arrow,\n autoUpdate,\n flip,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { cross } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { cloneElement, useRef, useState } from \"react\";\nimport { useWindowEvent } from \"@simplybusiness/mobius-hooks\";\nimport type { DOMProps } from \"../../types\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport \"./Popover.css\";\n\nexport type PopoverElementType = HTMLDivElement;\n\nexport interface PopoverProps\n extends DOMProps, RefAttributes<PopoverElementType> {\n children?: ReactNode;\n trigger: ReactElement;\n /** Callback that fires each time the accordion is opened */\n onOpen?: () => void;\n /** Callback that fires each time the accordion is closed */\n onClose?: () => void;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nconst OFFSET_FROM_CONTENT_DEFAULT = 10;\n\nexport const Popover = (props: PopoverProps) => {\n const { trigger, children, onOpen, onClose, className } = props;\n const arrowRef = useRef(null);\n const [isOpen, setIsOpen] = useState(false);\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n arrow({\n element: arrowRef,\n }),\n offset(OFFSET_FROM_CONTENT_DEFAULT),\n shift(),\n flip(),\n ],\n });\n const dismiss = useDismiss(context, {\n bubbles: true,\n outsidePress: (event: MouseEvent) => {\n // Prevent 'onClose' from firing when clicking the toggle to close\n const toggle = refs.reference.current as HTMLElement;\n const isToggleClick = !toggle?.contains(event.target as HTMLElement);\n if (isToggleClick) {\n onClose?.();\n }\n return true;\n },\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-popover__container\",\n className,\n );\n\n const toggleVisibility = () => {\n if (isOpen) {\n setIsOpen(false);\n onClose?.();\n return;\n }\n\n setIsOpen(true);\n onOpen?.();\n };\n\n const triggerComponent = cloneElement(trigger, {\n ref: refs.setReference,\n className: classNames(\n (trigger.props as { className?: string }).className,\n \"mobius-popover__toggle\",\n ),\n onClick: toggleVisibility,\n ...getReferenceProps(),\n } as Record<string, unknown>);\n\n useWindowEvent(\"keydown\", e => {\n if (e.key === \"Escape\") {\n onClose?.();\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n return (\n <>\n {triggerComponent}\n {isOpen && (\n <div\n className={containerClasses}\n ref={refs.setFloating}\n style={floatingStyles}\n {...getFloatingProps()}\n >\n <div className=\"mobius-popover\">\n <header className=\"mobius-popover__header\">\n <Button\n type=\"button\"\n className=\"mobius-popover__close-button\"\n onClick={toggleVisibility}\n aria-label=\"Close\"\n variant=\"ghost\"\n >\n <Icon\n icon={cross}\n size=\"md\"\n className=\"mobius-popover__close-icon\"\n />\n </Button>\n </header>\n <div className=\"mobius-popover__body\">{children}</div>\n </div>\n <FloatingArrow\n ref={arrowRef}\n context={context}\n width={20}\n className=\"mobius-popover__arrow-icon\"\n />\n </div>\n )}\n </>\n );\n};\n", "export * from \"./Popover\";\n", "\"use client\";\n\n/* eslint no-console: \"off\" */\nimport type { AriaProgressBarProps } from \"@react-types/progress\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport { useId } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Label } from \"../Label\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport \"./Progress.css\";\n\nexport type ProgressElementType = HTMLDivElement;\n\nexport interface ProgressProps\n extends\n Omit<AriaProgressBarProps, \"label\">,\n DOMProps,\n RefAttributes<ProgressElementType> {\n label: ReactNode;\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n id?: string;\n className?: string;\n showLabel?: boolean;\n showValueLabel?: boolean;\n variant?: \"primary\" | \"secondary\" | \"success\" | \"danger\" | \"warning\" | \"info\";\n value?: number;\n minValue?: number;\n maxValue?: number;\n valueFormatter?: (\n value: number,\n minValue: number,\n maxValue: number,\n ) => string;\n}\n\nfunction warnAboutInvalidValues(\n value: number,\n minValue: number,\n maxValue: number,\n) {\n if (minValue > maxValue) {\n console.warn(\"minValue is greater than maxValue\");\n }\n if (value < minValue) {\n console.warn(\"Progress value is less than minValue\");\n }\n if (value > maxValue) {\n console.warn(\"Progress value is greater than maxValue\");\n }\n}\n\nconst sanitizedValue = (\n value: number | undefined,\n defaultValue: number,\n): number => {\n if (value === undefined || Number.isNaN(value)) {\n return defaultValue;\n }\n return value;\n};\n\nconst getLabelComponent = (\n label: ReactNode,\n progressLabelId: string,\n showLabel: boolean,\n) => {\n if (showLabel) {\n return (\n <Label\n id={progressLabelId}\n className=\"mobius-progress__label\"\n elementType=\"span\"\n >\n {label}\n </Label>\n );\n }\n\n return (\n <VisuallyHidden>\n <Label\n id={progressLabelId}\n className=\"mobius-progress__label\"\n elementType=\"span\"\n >\n {label}\n </Label>\n </VisuallyHidden>\n );\n};\n\nconst DEFAULT_VALUE = 0;\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100;\n\nconst Progress = ({ ref, ...props }: ProgressProps) => {\n const progressId = useId();\n const progressLabelId = useId();\n const {\n id,\n label,\n showLabel = true,\n showValueLabel = !!label,\n valueFormatter,\n variant = \"primary\",\n className,\n } = props;\n\n let { value, minValue, maxValue } = props;\n\n value = sanitizedValue(value, DEFAULT_VALUE);\n minValue = sanitizedValue(minValue, DEFAULT_MIN_VALUE);\n maxValue = sanitizedValue(maxValue, DEFAULT_MAX_VALUE);\n\n // Will never happen but lets appease the typescript gods\n if (value === undefined || minValue === undefined || maxValue === undefined) {\n return null;\n }\n\n warnAboutInvalidValues(value, minValue, maxValue);\n\n // Calculate the width of the progress bar as a percentage\n const clamp = (num: number, min: number, max: number): number =>\n Math.min(Math.max(num, min), max);\n const percentage = clamp(\n Math.round(((value - minValue) / (maxValue - minValue)) * 100),\n 0,\n 100,\n );\n const barWidth = `${percentage}%`;\n\n const classes = classNames(\"mobius\", \"mobius-progress\", className, {\n \"--is-primary\": variant === \"primary\",\n \"--is-secondary\": variant === \"secondary\",\n });\n\n // Set progress aria values\n const progressBarProps: Record<string, string> = {};\n progressBarProps[\"aria-valuemin\"] = minValue.toString();\n progressBarProps[\"aria-valuemax\"] = maxValue.toString();\n progressBarProps[\"aria-valuenow\"] = value.toString();\n progressBarProps[\"aria-valuetext\"] =\n valueFormatter instanceof Function\n ? valueFormatter(value, minValue, maxValue)\n : barWidth;\n const labelComponent = getLabelComponent(label, progressLabelId, showLabel);\n\n return (\n <div\n id={id || progressId}\n {...progressBarProps}\n ref={ref}\n className={classes}\n role=\"progressbar\"\n aria-labelledby={progressLabelId}\n >\n {labelComponent}\n <div className=\"mobius-progress__track\">\n <div className=\"mobius-progress__bar\" style={{ width: barWidth }} />\n </div>\n {showValueLabel && (\n <Label data-testid=\"value-label\" elementType=\"span\">\n {progressBarProps[\"aria-valuetext\"]}\n </Label>\n )}\n </div>\n );\n};\n\nProgress.displayName = \"Progress\";\nexport { Progress };\n", "export * from \"./Progress\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n isValidElement,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport \"./Radio.css\";\n\nexport type RadioElementType = HTMLInputElement;\n\nexport type RadioOverflowInfo = {\n vertical: boolean;\n horizontal: boolean;\n};\n\nexport type AriaRadioProps = {\n /**\n * Defines a string value that labels the current element.\n */\n \"aria-label\"?: string;\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n \"aria-labelledby\"?: string;\n /**\n * Identifies the element (or elements) that describes the object.\n */\n \"aria-describedby\"?: string;\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n \"aria-details\"?: string;\n};\n\nexport interface RadioProps\n extends DOMProps, AriaRadioProps, RefAttributes<RadioElementType> {\n children?: ReactNode;\n className?: string;\n label?: ReactNode;\n errorMessage?: string;\n value: string;\n isDisabled?: boolean;\n onChange?: (event: HTMLElementEvent<RadioElementType>) => void;\n defaultChecked?: boolean;\n /**\n * Callback fired when label overflow state changes.\n * Only invoked when the Radio is in horizontal orientation to prevent infinite loops with autoStack.\n * Provides information about vertical and horizontal overflow.\n */\n onOverflow?: (overflow: RadioOverflowInfo) => void;\n // Internal:** Do not use\n groupDisabled?: boolean;\n // Internal:** Do not use\n name?: string;\n // Internal:** Do not use\n selected?: string;\n // Internal:** Do not use\n setSelected?: React.Dispatch<React.SetStateAction<string>>;\n isRequired?: boolean;\n /**\n * **Internal:** Passed via cloneElement from RadioGroup.\n * @internal\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst Radio = ({ ref, ...props }: RadioProps) => {\n const {\n children,\n value,\n label,\n className,\n isDisabled,\n errorMessage,\n onChange,\n defaultChecked,\n groupDisabled,\n name,\n selected,\n setSelected,\n isRequired,\n onOverflow,\n orientation,\n ...otherProps\n } = props;\n const realDisabled = groupDisabled || isDisabled;\n const isMultiline = label && children;\n const isControlled = selected !== undefined;\n const isChecked = isControlled ? selected === value : defaultChecked;\n\n const contentRef = useRef<HTMLDivElement>(null);\n const prevOverflowRef = useRef<RadioOverflowInfo>({\n vertical: false,\n horizontal: false,\n });\n\n const hasIconFirst = useMemo(() => {\n if (!children || Children.count(children) === 0) return false;\n\n const firstChild = Children.toArray(children)[0];\n if (!isValidElement(firstChild)) return false;\n\n const props = firstChild.props as Record<string, unknown>;\n return \"icon\" in props && props.icon !== undefined;\n }, [children]);\n\n // Detect overflow and call callback\n useLayoutEffect(() => {\n if (!contentRef.current || !onOverflow) return;\n\n // Only detect overflow when in horizontal orientation\n // This prevents infinite loops when autoStack switches to vertical\n if (orientation === \"vertical\") {\n return;\n }\n\n const element = contentRef.current;\n\n // Check for content being cut off (true overflow)\n const scrollOverflowVertical = element.scrollHeight > element.clientHeight;\n const scrollOverflowHorizontal = element.scrollWidth > element.clientWidth;\n\n // Check for multi-line text wrapping by comparing height to single line height\n const styles = window.getComputedStyle(element);\n const lineHeight = parseFloat(styles.lineHeight);\n const fontSize = parseFloat(styles.fontSize);\n const singleLineHeight = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight;\n\n // Tolerance multiplier to account for sub-pixel rendering and line-height variations.\n // If element height is greater than single line, text has wrapped.\n const WRAP_DETECTION_TOLERANCE = 1.1;\n const hasWrapped =\n element.clientHeight > singleLineHeight * WRAP_DETECTION_TOLERANCE;\n\n const vertical = scrollOverflowVertical || hasWrapped;\n const horizontal = scrollOverflowHorizontal;\n\n const newOverflowState = { vertical, horizontal };\n const prevOverflow = prevOverflowRef.current;\n\n // Only call callback if state actually changed\n if (\n newOverflowState.vertical !== prevOverflow.vertical ||\n newOverflowState.horizontal !== prevOverflow.horizontal\n ) {\n prevOverflowRef.current = newOverflowState;\n onOverflow(newOverflowState);\n }\n }, [label, children, onOverflow, orientation]);\n\n const radioClasses = {\n \"--is-disabled\": realDisabled,\n \"--is-selected\": selected === value,\n \"--is-multiline\": !!isMultiline,\n \"--is-required\": isRequired,\n };\n const containerClasses = classNames(\n \"mobius-radio__label\",\n radioClasses,\n className,\n { \"--has-icon-first\": hasIconFirst },\n );\n\n const inputClasses = classNames(\"mobius-radio__input\", radioClasses);\n\n // Exclude props that are passed via cloneElement in `<RadioGroup />`\n const { \"aria-describedby\": _ariaDescribedBy, ...rest } = otherProps;\n\n // Handle all interactions through onChange event\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n // Update internal state for RadioGroup\n if (setSelected) {\n setSelected(event.target.value);\n }\n\n // Call parent onChange callback\n if (onChange) {\n // Create an HTMLElementEvent-compatible object\n const adaptedEvent: HTMLElementEvent<HTMLInputElement> = {\n ...event.nativeEvent,\n target: event.target,\n };\n onChange(adaptedEvent);\n }\n };\n\n return (\n <>\n <Label className={containerClasses}>\n <input\n aria-describedby={otherProps[\"aria-describedby\"]}\n disabled={realDisabled}\n ref={ref}\n className={inputClasses}\n value={value}\n tabIndex={0}\n type=\"radio\"\n onChange={handleChange}\n {...(isControlled\n ? { checked: isChecked }\n : { defaultChecked: isChecked })}\n name={name}\n required={isRequired}\n {...rest}\n />\n {isMultiline ? (\n <div ref={contentRef} className=\"mobius-radio__content--multiline\">\n <div className=\"mobius-radio__content-first-line\">{label}</div>\n <div className=\"mobius-radio__extra-content\">{children}</div>\n </div>\n ) : (\n <div ref={contentRef} className=\"mobius-radio__content\">\n {label || children}\n </div>\n )}\n </Label>\n {errorMessage && <ErrorMessage errorMessage={errorMessage} />}\n </>\n );\n};\n\nRadio.displayName = \"Radio\";\nexport { Radio };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { Validation } from \"../../types\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport type { RadioOverflowInfo } from \"./Radio\";\n\nexport type RadioGroupElementType = HTMLDivElement;\n\nexport interface RadioGroupProps\n extends DOMProps, Validation, RefAttributes<RadioGroupElementType> {\n children: ReactNode;\n className?: string;\n orientation?: \"horizontal\" | \"vertical\";\n errorMessage?: string;\n // Callback that fires when select changes\n onChange?: (event: HTMLElementEvent<HTMLInputElement>) => void;\n /**\n * Automatically change orientation from horizontal to vertical when any Radio label overflows.\n * Only applies when orientation is set to \"horizontal\".\n */\n autoStack?: boolean;\n // Defines a string value that labels the current element.\n \"aria-label\"?: string;\n // Identifies the element (or elements) that labels the current element.\n \"aria-labelledby\"?: string;\n // Identifies the element that provides an error message for the object.\n \"aria-errormessage\"?: string;\n // Identifies the element (or elements) that describes the object.\n \"aria-describedby\"?: string;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Whether the input is disabled.\n isDisabled?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // The default value (uncontrolled).\n defaultValue?: string;\n // The content to display as the label.\n label?: ReactNode;\n /**\n * The value of the radio button, used when submitting an HTML form.\n * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio#Value).\n */\n value?: string;\n name?: string;\n}\n\nconst getDefaultVal = (children: ReactNode, defaultValue?: string) => {\n if (Array.isArray(children) && defaultValue) {\n const option = children?.find(item => item.props.value === defaultValue);\n\n if (!option) return \"\";\n\n return option.props.value;\n }\n\n return \"\";\n};\n\nconst RadioGroup = ({ ref, ...props }: RadioGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n className,\n errorMessage,\n children,\n defaultValue,\n value,\n isReadOnly,\n name,\n onChange,\n autoStack = false,\n ...rest\n } = props;\n const defaultSelected = getDefaultVal(children, value || defaultValue);\n const [selected, setSelected] = useState<string>(defaultSelected);\n const overflowsRef = useRef<Record<string, RadioOverflowInfo>>({});\n const [hasOverflow, setHasOverflow] = useState(false);\n\n // Handle controlled behavior - update state when value prop changes\n useEffect(() => {\n if (value !== undefined) {\n setSelected(value);\n }\n }, [value]);\n\n // Handle overflow detection and auto-stack if needed\n const handleOverflow = useCallback(\n (radioValue: string, overflow: RadioOverflowInfo) => {\n overflowsRef.current = {\n ...overflowsRef.current,\n [radioValue]: overflow,\n };\n\n // Check if any radio has overflow\n const anyOverflow = Object.values(overflowsRef.current).some(\n o => o.vertical || o.horizontal,\n );\n\n if (anyOverflow !== hasOverflow) {\n setHasOverflow(anyOverflow);\n }\n },\n [hasOverflow],\n );\n\n // Determine effective orientation (auto-stack if needed)\n const effectiveOrientation =\n autoStack && orientation === \"horizontal\" && hasOverflow\n ? \"vertical\"\n : orientation;\n\n const validationClasses = useValidationClasses({ isInvalid });\n const radioClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n [`--is-${effectiveOrientation}`]: true,\n [className || \"\"]: true,\n };\n const radioGroupClasses = classNames(\n \"mobius\",\n \"mobius-radio-group\",\n radioClasses,\n validationClasses,\n );\n const radioWrapperClasses = classNames(\"mobius-radio__wrapper\", {\n [`--is-${effectiveOrientation}`]: true,\n });\n const labelClasses = classNames(radioClasses, validationClasses);\n const errorMessageId = useId();\n const defaultNameAttrId = useId();\n const nameAttribute = name || defaultNameAttrId;\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n return (\n <div\n {...rest}\n aria-describedby={describedBy}\n aria-disabled={isDisabled}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n aria-orientation={effectiveOrientation}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n ref={ref}\n className={radioGroupClasses}\n role=\"radiogroup\"\n >\n <Stack gap=\"xs\">\n {label && (\n <Label htmlFor={name} id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={radioWrapperClasses}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childValue = (child.props as { value?: string }).value;\n return cloneElement(\n child as ReactElement,\n {\n orientation: effectiveOrientation,\n groupDisabled: isDisabled,\n name: nameAttribute,\n selected: selected || defaultSelected, // in case state does not update\n setSelected,\n isRequired,\n \"aria-describedby\": describedBy,\n onChange,\n onOverflow: childValue\n ? (overflow: RadioOverflowInfo) =>\n handleOverflow(childValue, overflow)\n : undefined,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n </div>\n );\n};\n\nRadioGroup.displayName = \"RadioGroup\";\nexport { RadioGroup };\n", "export * from \"./Radio\";\nexport * from \"./RadioGroup\";\n", "import type { ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport interface SegmentGroupProps extends DOMProps {\n className?: string;\n horizontal?: boolean;\n gap?: \"size-xs\" | \"size-s\" | \"size-m\" | \"size-l\" | \"size-xl\" | \"size-xxl\";\n children?: ReactNode;\n}\n\nconst SegmentGroup = (props: SegmentGroupProps) => {\n const { children, horizontal, gap, className, ...rest } = props;\n\n const gapClass = gap ? `gap-${gap}` : \"\";\n const classes = classNames(\n \"mobius\",\n \"mobius-segment-group\",\n className,\n { \"--is-horizontal\": horizontal },\n gapClass,\n );\n\n return (\n <div className={classes} {...rest}>\n {children}\n </div>\n );\n};\n\nSegmentGroup.displayName = \"SegmentGroup\";\nexport { SegmentGroup };\n", "import type { ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Segment.css\";\n\nexport interface SegmentProps extends DOMProps {\n className?: string;\n heading?: string;\n /** Background colour for Segment */\n colour?: \"subtle\" | \"primary\" | \"secondary\";\n /** When inverted, text is white. Use on darker backgrounds. */\n inverted?: boolean;\n children?: ReactNode;\n}\n\nconst Segment = (props: SegmentProps) => {\n const { heading, children, colour, inverted, className, ...rest } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-segment\",\n colour,\n { inverted },\n className,\n );\n\n return (\n <div className={classes} {...rest}>\n {heading && <div className=\"mobius-segment__heading\">{heading}</div>}\n {children}\n </div>\n );\n};\n\nSegment.displayName = \"Segment\";\nexport { Segment };\n", "export * from \"./SegmentGroup\";\nexport * from \"./Segment\";\n", "\"use client\";\n\nimport { chevronDown } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ChangeEvent, ReactElement, RefAttributes } from \"react\";\nimport { useId } from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { UseLabelProps } from \"../../hooks/useLabel\";\nimport { useLabel } from \"../../hooks/useLabel\";\nimport type { DOMProps, Validation } from \"../../types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Icon } from \"../Icon\";\nimport { Label } from \"../Label\";\nimport type { OptionProps } from \"../Option\";\nimport { Stack } from \"../Stack\";\nimport \"./Select.css\";\n\nexport type SelectElementType = HTMLSelectElement;\nexport interface SelectProps\n extends\n UseLabelProps,\n Validation,\n DOMProps,\n RefAttributes<SelectElementType> {\n name?: string;\n onChange?: (e: ChangeEvent<HTMLSelectElement>) => void;\n value?: string;\n defaultValue?: string;\n className?: string;\n errorMessage?: string;\n children?: ReactElement<OptionProps>[] | ReactElement<OptionProps>;\n \"aria-describedby\"?: string;\n isDisabled?: boolean;\n}\n\nconst Select = ({ ref, ...props }: SelectProps) => {\n const {\n label,\n onChange,\n isInvalid,\n errorMessage,\n isDisabled = false,\n isRequired,\n ...otherProps\n } = props;\n\n const { labelProps, fieldProps } = useLabel({\n label,\n ...otherProps,\n });\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const stateClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n };\n\n const sharedClasses = classNames(validationClasses, stateClasses);\n\n const wrapperClasses = classNames(\n \"mobius-select__wrapper\",\n sharedClasses,\n otherProps.className,\n );\n const selectClasses = classNames(\n \"mobius-select\",\n sharedClasses,\n otherProps.className,\n );\n const labelClasses = classNames(\n \"mobius-label\",\n sharedClasses,\n otherProps.className,\n );\n const iconClasses = classNames(\"mobius-select__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n\n const handleChange = (e: ChangeEvent<HTMLSelectElement>) => {\n if (onChange) {\n onChange(e);\n }\n };\n\n return (\n <Stack className=\"mobius mobius-select__outer\" gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={wrapperClasses}>\n <select\n {...otherProps}\n {...fieldProps}\n ref={ref}\n multiple={false}\n className={selectClasses}\n disabled={isDisabled}\n aria-invalid={!!errorMessage}\n aria-describedby={describedBy}\n aria-required={isRequired}\n required={isRequired}\n onChange={handleChange}\n />\n <span className={iconClasses}>\n <Icon icon={chevronDown} />\n </span>\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </Stack>\n );\n};\n\nSelect.displayName = \"Select\";\nexport { Select };\n", "export * from \"./Select\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ChangeEvent } from \"react\";\nimport { useRef, useState } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { UseLabelProps } from \"../../hooks\";\nimport { useLabel } from \"../../hooks\";\nimport { Label } from \"../Label\";\nimport { numberFormatter } from \"./helpers\";\nimport \"./Slider.css\";\n\nexport interface SliderProps extends DOMProps, UseLabelProps {\n label?: string;\n variant?: \"primary\" | \"secondary\";\n className?: string;\n minValue?: number;\n maxValue?: number;\n defaultValue?: number;\n value?: number;\n step?: number;\n isDisabled?: boolean;\n onChange?: (value: number | undefined) => void;\n onChangeEnd?: (value: number | undefined) => void;\n minLabel?: string;\n maxLabel?: string;\n formatOptions?: Intl.NumberFormatOptions;\n}\n\nexport const Slider = (props: SliderProps) => {\n const {\n id,\n className,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n minValue,\n maxValue,\n step = 1,\n defaultValue = 0,\n value,\n onChange,\n onChangeEnd,\n variant = \"primary\",\n minLabel,\n maxLabel,\n formatOptions,\n isDisabled = false,\n } = props;\n const trackRef = useRef(null);\n const [currentValue, setCurrentValue] = useState<number>(\n value || defaultValue || 0,\n );\n const [isDragging, setIsDraggging] = useState<boolean>(false);\n const { labelProps, fieldProps } = useLabel({\n id,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n });\n const formattedValue = numberFormatter(currentValue, formatOptions);\n\n const classes = classNames(\"mobius\", \"mobius-slider\", className, {\n \"--is-disabled\": isDisabled,\n \"--is-primary\": variant === \"primary\",\n \"--is-secondary\": variant === \"secondary\",\n \"--is-dragging\": isDragging,\n });\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const val = +e.target.value;\n setCurrentValue(val);\n if (onChange) {\n onChange(val);\n }\n };\n\n const handleChangeStart = () => {\n setIsDraggging(true);\n };\n\n const handleChangeEnd = () => {\n setIsDraggging(false);\n if (onChangeEnd) {\n onChangeEnd(currentValue);\n }\n };\n\n return (\n <div className={classes}>\n <div className=\"mobius-slider__label-wrapper\">\n {label && <Label {...labelProps}>{label}</Label>}\n {label && (\n <output style={{ flex: \"1 0 auto\", textAlign: \"end\" }}>\n {formattedValue}\n </output>\n )}\n </div>\n\n {/* The track element holds the visible track line and the thumb. */}\n <div ref={trackRef} className=\"mobius-slider__track-wrapper\">\n <input\n className=\"mobius-slider__track\"\n type=\"range\"\n min={minValue}\n max={maxValue}\n value={currentValue}\n step={step}\n onChange={handleChange}\n autoComplete=\"off\"\n disabled={isDisabled}\n onMouseDown={handleChangeStart}\n onMouseUp={handleChangeEnd}\n onKeyDown={handleChangeStart}\n onKeyUp={handleChangeEnd}\n {...fieldProps}\n />\n </div>\n\n <div className=\"mobius-slider__labels\">\n <div className=\"mobius-slider__min-label\" data-testid=\"min-label\">\n {minLabel}\n </div>\n <div className=\"mobius-slider__max-label\" data-testid=\"max-label\">\n {maxLabel}\n </div>\n </div>\n </div>\n );\n};\n", "export * from \"./Slider\";\n", "import type { RefAttributes } from \"react\";\nimport { Children } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport interface SVGProps extends DOMProps, RefAttributes<SVGSVGElement> {\n children: React.ReactElement<React.SVGProps<SVGSVGElement>>;\n className?: string;\n style?: React.CSSProperties;\n}\nconst SVG = ({ ref, ...props }: SVGProps) => {\n const { children, className, ...otherProps } = props;\n\n const classes = classNames(\"mobius\", \"mobius-svg\", className);\n const svgNode = Children.only(children);\n // Remove originalType and mdxType props\n const { children: svgChildren, viewBox, xmlns } = svgNode.props;\n\n return (\n <svg\n viewBox={viewBox}\n xmlns={xmlns}\n ref={ref}\n {...otherProps}\n className={classes}\n >\n {svgChildren}\n </svg>\n );\n};\n\nSVG.displayName = \"SVG\";\nexport { SVG };\n", "export * from \"./SVG\";\n", "\"use client\";\n\nimport {\n type ChangeEvent,\n type RefAttributes,\n useState,\n useEffect,\n} from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport \"./Switch.css\";\n\nexport type SwitchElementType = HTMLLabelElement;\n\nexport interface SwitchProps\n extends DOMProps, RefAttributes<SwitchElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n checked?: boolean;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n isDisabled?: boolean;\n}\n\nconst Switch = ({ ref, ...props }: SwitchProps) => {\n const {\n checked = false,\n className,\n onChange,\n isDisabled = false,\n ...otherProps\n } = props;\n const [enabled, setEnabled] = useState<boolean>(checked);\n\n useEffect(() => {\n setEnabled(checked);\n }, [checked]);\n\n const classes = classNames(\n \"mobius\",\n \"mobius-switch\",\n {\n \"mobius-switch--checked\": enabled,\n \"mobius-switch--disabled\": isDisabled,\n },\n className,\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setEnabled(!enabled);\n if (onChange) {\n onChange(event);\n }\n };\n\n return (\n <label ref={ref} className={classes}>\n <VisuallyHidden>\n <span>{enabled ? \"On\" : \"Off\"}</span>\n </VisuallyHidden>\n <input\n type=\"checkbox\"\n role=\"switch\"\n checked={enabled}\n onChange={handleChange}\n disabled={isDisabled}\n {...otherProps}\n />\n <span className=\"mobius-switch__slider\"></span>\n </label>\n );\n};\n\nSwitch.displayName = \"Switch\";\nexport { Switch };\n", "export * from \"./Switch\";\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Table.css\";\n\nexport type TableElementType = HTMLTableElement;\n\nexport interface TableProps extends DOMProps, RefAttributes<TableElementType> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type TableRef = Ref<TableElementType>;\n\nconst Table = ({ ref, ...props }: TableProps) => {\n const classes = classNames(\"mobius\", \"mobius-table\", props.className);\n\n return <table ref={ref} {...props} className={classes} />;\n};\n\nTable.displayName = \"Table\";\nexport { Table };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface HeadProps extends RefAttributes<HTMLTableSectionElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type HeadRef = Ref<HTMLTableSectionElement>;\n\nconst Head = ({ ref, ...props }: HeadProps) => {\n const classes = classNames(\"mobius\", \"mobius-table__head\", props.className);\n\n return <thead ref={ref} {...props} className={classes} />;\n};\n\nHead.displayName = \"Table.Head\";\nexport { Head };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface BodyProps extends RefAttributes<HTMLTableSectionElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type BodyRef = Ref<HTMLTableSectionElement>;\n\nconst Body = ({ ref, ...props }: BodyProps) => {\n const classes = classNames(\"mobius\", \"mobius-table__body\", props.className);\n\n return <tbody ref={ref} {...props} className={classes} />;\n};\n\nBody.displayName = \"Table.Body\";\nexport { Body };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface FootProps extends RefAttributes<HTMLTableSectionElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type FootRef = Ref<HTMLTableSectionElement>;\n\nconst Foot = ({ ref, ...props }: FootProps) => {\n const classes = classNames(\"mobius\", \"mobius-table__foot\", props.className);\n\n return <tfoot ref={ref} {...props} className={classes} />;\n};\n\nFoot.displayName = \"Table.Foot\";\nexport { Foot };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface RowProps extends RefAttributes<HTMLTableRowElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type RowRef = Ref<HTMLTableRowElement>;\n\nconst Row = ({ ref, ...props }: RowProps) => {\n const classes = classNames(\"mobius\", \"mobius-table__row\", props.className);\n\n return <tr ref={ref} {...props} className={classes} />;\n};\n\nRow.displayName = \"Table.Row\";\nexport { Row };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface HeaderCellProps extends RefAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n className?: string;\n colSpan?: number;\n rowSpan?: number;\n}\n\nexport type HeaderCellRef = Ref<HTMLTableCellElement>;\n\nconst HeaderCell = ({ ref, ...props }: HeaderCellProps) => {\n const classes = classNames(\n \"mobius\",\n \"mobius-table__head-cell\",\n props.className,\n );\n\n return <th {...props} ref={ref} className={classes} />;\n};\n\nHeaderCell.displayName = \"Table.HeaderCell\";\nexport { HeaderCell };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface CellProps extends RefAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n className?: string;\n colSpan?: number;\n rowSpan?: number;\n}\n\nexport type CellRef = Ref<HTMLTableCellElement>;\n\nconst Cell = ({ ref, ...props }: CellProps) => {\n const classes = classNames(\n \"mobius\",\n \"mobius-table__body-cell\",\n props.className,\n );\n\n return <td ref={ref} {...props} className={classes} />;\n};\n\nCell.displayName = \"Table.Cell\";\nexport { Cell };\n", "import { Table as TableComponent } from \"./Table\";\nimport { Head } from \"./Head\";\nimport { Body } from \"./Body\";\nimport { Foot } from \"./Foot\";\nimport { Row } from \"./Row\";\nimport { HeaderCell } from \"./HeaderCell\";\nimport { Cell } from \"./Cell\";\n\nimport type { TableElementType, TableProps, TableRef } from \"./Table\";\nimport type {\n HeadProps as TableHeadProps,\n HeadRef as TableHeadRef,\n} from \"./Head\";\nimport type {\n BodyProps as TableBodyProps,\n BodyRef as TableBodyRef,\n} from \"./Body\";\nimport type {\n FootProps as TableFootProps,\n FootRef as TableFootRef,\n} from \"./Foot\";\nimport type { RowProps as TableRowProps, RowRef as TableRowRef } from \"./Row\";\nimport type {\n HeaderCellProps as TableHeaderCellProps,\n HeaderCellRef as TableHeaderCellRef,\n} from \"./HeaderCell\";\nimport type {\n CellProps as TableCellProps,\n CellRef as TableCellRef,\n} from \"./Cell\";\n\nexport interface TableCompound extends React.FC<TableProps> {\n Head: React.FC<TableHeadProps>;\n Body: React.FC<TableBodyProps>;\n Foot: React.FC<TableFootProps>;\n Row: React.FC<TableRowProps>;\n HeaderCell: React.FC<TableHeaderCellProps>;\n Cell: React.FC<TableCellProps>;\n}\n\nconst Table: TableCompound = Object.assign(TableComponent, {\n Head,\n Body,\n Foot,\n Row,\n HeaderCell,\n Cell,\n});\n\nexport type {\n TableElementType,\n TableProps,\n TableRef,\n TableHeadProps,\n TableHeadRef,\n TableBodyProps,\n TableBodyRef,\n TableFootProps,\n TableFootRef,\n TableRowProps,\n TableRowRef,\n TableHeaderCellProps,\n TableHeaderCellRef,\n TableCellProps,\n TableCellRef,\n};\n\nTable.displayName = \"Table\";\nexport { Table };\n", "import type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Text.css\";\n\nexport type TextElementType = HTMLHeadingElement | HTMLParagraphElement;\nexport type TextVariantType =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"body\"\n | \"small\"\n | \"legal\"\n | \"title\";\nexport type ElementType = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"p\" | \"span\";\nexport interface TextProps extends DOMProps, RefAttributes<TextElementType> {\n /** HTML element for the text */\n elementType?: ElementType;\n /** Specify font size override */\n variant?: TextVariantType;\n /** Specify compact line height override */\n spacing?: \"loose\" | \"tight\";\n /** Custom class name for setting specific CSS */\n className?: string;\n children: ReactNode;\n style?: React.CSSProperties;\n}\n\nconst getElementType = (\n variant: TextVariantType | undefined,\n elementType: ElementType | undefined,\n) => {\n if (variant) {\n return [\"h1\", \"h2\", \"h3\", \"h4\"].includes(variant) ? variant : \"p\";\n }\n return elementType || \"p\";\n};\n\nconst Text = ({ ref, elementType: Component = \"p\", ...props }: TextProps) => {\n // Remove non-DOM props from element\n const { variant, className, spacing, ...otherProps } = props;\n\n // If a variant is supplied, set the class name and element type\n const elementType = getElementType(variant, Component);\n const variantType = variant || elementType;\n const classes = classNames(\n \"mobius\",\n \"mobius-text\",\n { [`--is-${variantType}`]: variantType },\n { [`--has-line-height-${spacing}`]: spacing },\n className,\n );\n\n return <Component ref={ref} {...otherProps} className={classes} />;\n};\n\nText.displayName = \"Text\";\nexport { Text };\n", "export * from \"./Text\";\n", "import classNames from \"classnames/dedupe\";\nimport type { RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type TextAreaInputElementType = HTMLTextAreaElement;\n\nexport interface InteractionStateProps {\n isSelected?: boolean;\n isDisabled?: boolean;\n}\n\nexport interface TextAreaInputProps\n extends\n DOMProps,\n InteractionStateProps,\n RefAttributes<TextAreaInputElementType> {\n className?: string;\n isReadOnly?: boolean;\n isRequired?: boolean;\n}\n\nconst TextAreaInput = ({ ref, ...props }: TextAreaInputProps) => {\n // Extract interaction props:\n const { isSelected, isDisabled, isReadOnly, isRequired, ...otherProps } =\n props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-text-area__input\",\n {\n \"--is-disabled\": isDisabled,\n \"--is-selected\": isSelected,\n \"--is-required\": isRequired,\n },\n otherProps.className,\n );\n\n return (\n <textarea\n ref={ref}\n {...otherProps}\n required={isRequired}\n readOnly={isReadOnly}\n className={classes}\n />\n );\n};\n\nTextAreaInput.displayName = \"TextAreaInput\";\nexport { TextAreaInput };\n", "export * from \"./TextAreaInput\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { RefAttributes } from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { TextAreaInput } from \"../TextAreaInput\";\nimport \"./TextArea.css\";\n\nexport type TextAreaElementType = HTMLTextAreaElement;\n\nexport interface TextAreaProps\n extends UseTextFieldProps, DOMProps, RefAttributes<TextAreaElementType> {\n className?: string;\n errorMessage?: string;\n}\n\nconst TextArea = ({ ref, ...props }: TextAreaProps) => {\n const {\n isDisabled,\n className,\n errorMessage,\n label,\n isInvalid,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField(props);\n\n // Set class name for atom, including interaction state\n const classes = classNames(\"mobius\", \"mobius-text-area\", className);\n const validationClasses = useValidationClasses({ isInvalid });\n const inputClasses = classNames(\"mobius-text-area__input\", validationClasses);\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n return (\n <Stack className={classes} gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {props.label}\n </Label>\n )}\n <TextAreaInput\n {...otherProps}\n {...inputProps}\n ref={ref}\n className={inputClasses}\n isDisabled={isDisabled}\n aria-invalid={errorMessage != null}\n />\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextArea.displayName = \"TextArea\";\nexport { TextArea };\n", "export * from \"./TextArea\";\n", "import type { RefAttributes } from \"react\";\nimport { useMemo } from \"react\";\nimport type { TextElementType, TextProps } from \"../Text/Text\";\nimport { Text } from \"../Text/Text\";\n\nexport type HTMLElementType = \"span\" | \"div\";\n\nexport interface TextOrHTMLProps\n extends Omit<TextProps, \"children\">, RefAttributes<TextElementType> {\n /** HTML string to be rendered with dangerouslySetInnerHTML */\n text: string;\n /** Custom class name for the dangerous HTML element */\n htmlClassName?: string;\n /** HTML element type for the dangerous HTML element */\n htmlElementType?: HTMLElementType;\n /** If true, wraps the dangerous HTML element inside a Text component */\n textWrapper?: boolean;\n}\n\nconst TextOrHTML = ({\n ref,\n text,\n htmlClassName,\n htmlElementType = \"span\",\n textWrapper = false,\n ...textProps\n}: TextOrHTMLProps) => {\n const DangerousComponent = htmlElementType;\n\n // Memoize the dangerouslySetInnerHTML object to prevent unnecessary re-renders\n // See: https://github.com/facebook/react/issues/31660\n const dangerousHTML = useMemo(() => ({ __html: text }), [text]);\n\n const dangerousElement = (\n <DangerousComponent\n className={htmlClassName}\n dangerouslySetInnerHTML={dangerousHTML}\n />\n );\n\n if (textWrapper) {\n return (\n <Text ref={ref} {...textProps}>\n {dangerousElement}\n </Text>\n );\n }\n\n return dangerousElement;\n};\n\nTextOrHTML.displayName = \"TextOrHTML\";\nexport { TextOrHTML };\n", "export * from \"./TextOrHTML\";\n", "import type { RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Flex } from \"../Flex\";\nimport \"./Title.css\";\n\nexport type TitleElementType = HTMLDivElement;\n\nexport interface TitleProps extends DOMProps, RefAttributes<TitleElementType> {\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n title: string;\n description: string;\n}\n\nconst Title = ({ ref, ...props }: TitleProps) => {\n const {\n elementType: Element = \"div\",\n title,\n description,\n ...otherProps\n } = props;\n\n const classes = classNames(\"mobius\", \"mobius-title\", otherProps.className);\n const headerClasses = classNames(\"mobius\", \"mobius-title__header\");\n const contentClasses = classNames(\"mobius\", \"mobius-title__description\");\n const containerClasses = classNames(\"mobius\", \"mobius-title__container\");\n\n return (\n <Element ref={ref} {...otherProps} className={classes}>\n <Flex flexDirection=\"column\" className={containerClasses}>\n <p className={headerClasses}>{title}</p>\n <p className={contentClasses}>{description}</p>\n </Flex>\n </Element>\n );\n};\n\nTitle.displayName = \"Title\";\nexport { Title };\n", "export * from \"./Title\";\n", "export { toast } from \"./Toast\";\nexport { Toaster } from \"./Toaster\";\nexport type { ToasterProps } from \"./Toaster\";\nexport type { ToastOptions, ToastVariant, ToastPosition } from \"./types\";\n", "import classNames from \"classnames/dedupe\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils\";\nimport {\n REQUIRED_TRUSTPILOT_CLASS_NAME,\n SIMPLYBUSINESS_UNIT_ID,\n SIMPLYBUSINESS_UNIT_IDS,\n TRUSTPILOT_LINKS,\n TRUSTPILOT_WIDGET,\n} from \"./constants\";\nimport type { TrustProps } from \"./types\";\n\nexport const Trust = ({ ref, ...props }: TrustProps) => {\n const {\n elementType: Element = \"div\",\n variant,\n theme,\n locale,\n height,\n width,\n stars,\n className,\n } = props;\n const [isMounted, setIsMounted] = useState(false);\n const trustRef = useRef(null);\n\n const {\n templateId,\n className: variantClassName,\n styles,\n } = TRUSTPILOT_WIDGET[variant];\n const link = TRUSTPILOT_LINKS[locale];\n const businessUnitId =\n SIMPLYBUSINESS_UNIT_IDS[locale] || SIMPLYBUSINESS_UNIT_ID;\n\n const dataProps = {\n \"data-businessunit-id\": businessUnitId,\n \"data-locale\": locale,\n \"data-template-id\": templateId,\n \"data-theme\": theme,\n \"data-style-width\": width || \"100%\",\n \"data-style-height\": height,\n \"data-stars\": stars,\n };\n\n const classes = classNames(\n \"mobius\",\n \"mobius-trust\",\n REQUIRED_TRUSTPILOT_CLASS_NAME,\n {\n [`--is-${theme}`]: theme,\n [variantClassName]: variant,\n },\n className,\n );\n\n useEffect(() => {\n const hasTrustpilotLoaded =\n trustRef.current &&\n window?.Trustpilot &&\n window?.Trustpilot.loadFromElement;\n // If window.Trustpilot is available it means that we need to load the TrustBox from our ref.\n if (isMounted && hasTrustpilotLoaded) {\n window.Trustpilot.loadFromElement(trustRef.current, true);\n }\n }, [isMounted]);\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Load `<Trust>` client-side only to avoid SSR hydration issues\n if (!isMounted) return <div style={styles} />;\n\n return (\n <Element\n ref={mergeRefs([trustRef, ref])}\n className={classes}\n style={styles}\n {...dataProps}\n >\n <a\n href={link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mobius-trust__link\"\n >\n Trustpilot\n </a>\n </Element>\n );\n};\n", "import type { RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { TRUSTPILOT_WIDGET } from \"./constants\";\n\ndeclare global {\n interface Window {\n Trustpilot: any;\n }\n}\n\nexport type TrustElementType = HTMLDivElement;\n\nexport interface TrustProps extends DOMProps, RefAttributes<TrustElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n locale: \"en-US\" | \"en-GB\";\n variant: keyof typeof TRUSTPILOT_WIDGET;\n templateId?: string;\n height?: string;\n width?: string;\n theme: \"dark\" | \"light\";\n stars?: string;\n}\n", "export * from \"./Trust\";\nexport * from \"./types\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { RefAttributes } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { Accordion, TextOrHTML, useBreakpoint } from \"../..\";\nimport type { DOMProps } from \"../../types\";\nimport type { AccordionProps } from \"../Accordion/Accordion\";\nimport type { TextProps } from \"../Text/Text\";\nimport \"./ExpandableText.css\";\n\nexport type ExpandableTextElementType = HTMLDivElement;\n\nexport interface ExpandableTextProps\n extends DOMProps, RefAttributes<ExpandableTextElementType> {\n /** The text content to display (can be plain text or HTML) */\n text: string;\n /** Maximum number of lines to show when collapsed */\n maxLines?: number;\n /** Breakpoint at which collapsing should be applied. If not provided, collapsing is always applied */\n breakpoint?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Text for the expand trigger */\n showText?: string;\n /** Text for the collapse trigger */\n hideText?: string;\n /** Custom class name for the container */\n className?: string;\n /** Props to pass to the Text component */\n textProps?: Partial<TextProps>;\n /** Props to pass to the Accordion component */\n accordionProps?: Partial<AccordionProps>;\n /** Callback when expansion state changes */\n onToggle?: (expanded: boolean) => void;\n}\n\nexport const ExpandableText = ({ ref, ...props }: ExpandableTextProps) => {\n const {\n text,\n maxLines = 3,\n breakpoint,\n showText = \"Read more\",\n hideText = \"Read less\",\n className,\n textProps = {},\n accordionProps = {},\n onToggle,\n ...otherProps\n } = props;\n\n const [isExpanded, setIsExpanded] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(false);\n const textRef = useRef<HTMLDivElement>(null);\n const { down } = useBreakpoint();\n\n // Generate unique ID for accessibility\n const baseId = useId();\n const expandButtonId = `expandable-text-expand-${baseId}`;\n\n // Determine if content should be collapsible based on breakpoint\n const shouldCollapse = breakpoint ? down(breakpoint) : true;\n\n useEffect(() => {\n if (!shouldCollapse || !textRef.current) {\n setIsCollapsed(false);\n return;\n }\n\n // Check if text is actually collapsed by comparing scroll height with client height\n const element = textRef.current;\n const isOverflowing = element.scrollHeight > element.clientHeight;\n setIsCollapsed(isOverflowing);\n }, [text, shouldCollapse, maxLines]);\n\n // If breakpoint is specified and we're above it, show full text without collapsible UI\n if (breakpoint && !shouldCollapse) {\n return (\n <div ref={ref} className={className} {...otherProps}>\n <TextOrHTML text={text} textWrapper {...textProps} />\n </div>\n );\n }\n\n const handleAccordionChange = (expanded: boolean) => {\n setIsExpanded(expanded);\n onToggle?.(expanded);\n };\n\n const classes = classNames(\"mobius-expandable-text\", className);\n const textContainerClasses = classNames(\"mobius-expandable-text__content\", {\n \"mobius-expandable-text__content--collapsed\": !isExpanded,\n });\n\n // CSS custom property for dynamic line clamping\n const textContainerStyle = {\n \"--line-clamp\": maxLines,\n } as React.CSSProperties;\n\n return (\n <div\n ref={ref}\n className={classes}\n data-testid=\"expandable-text\"\n {...otherProps}\n >\n <div\n ref={textRef}\n className={textContainerClasses}\n style={textContainerStyle}\n data-testid=\"expandable-text-content\"\n aria-describedby={isCollapsed ? expandButtonId : undefined}\n >\n <TextOrHTML elementType=\"span\" textWrapper text={text} {...textProps} />\n </div>\n {isCollapsed && (\n <Accordion\n showText={showText}\n hideText={hideText}\n headerPosition=\"bottom\"\n onChange={handleAccordionChange}\n onClick={(e?: React.MouseEvent) => {\n e?.stopPropagation();\n }}\n id={expandButtonId}\n {...accordionProps}\n />\n )}\n </div>\n );\n};\n\nExpandableText.displayName = \"ExpandableText\";\n", "export * from \"./ExpandableText\";\n", "\"use client\";\n\nimport type { ChangeEvent, FocusEvent, Ref, RefAttributes } from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport { useIMask } from \"react-imask\";\nimport type { FactoryOpts, InputMask, InputMaskElement } from \"imask\";\nimport type { TextFieldProps } from \"../TextField\";\nimport { TextField } from \"../TextField\";\n\nexport type MaskedFieldElementType = HTMLInputElement;\n\nexport interface MaskedFieldProps\n extends\n Omit<TextFieldProps, \"type\" | \"ref\">,\n RefAttributes<MaskedFieldElementType> {\n mask: FactoryOpts;\n \"data-testid\"?: string;\n /**\n * If true, onChange and onBlur events will emit the masked (formatted) value.\n * If false (default), events will emit the unmasked (raw) value.\n *\n * @example\n * // TelephoneQuestion uses useMaskedValue={true}\n * // User types: 5551234567\n * // onChange receives: \"(555) 123-4567\" (formatted for display/storage)\n *\n * @example\n * // CurrencyQuestion uses useMaskedValue={false}\n * // User types: 1234\n * // User sees: \"1,234\" (with thousands separator)\n * // onChange receives: \"1234\" (raw number for calculations)\n */\n useMaskedValue?: boolean;\n}\n\nexport type MaskedFieldRef = Ref<MaskedFieldElementType>;\n\n/**\n * Creates an onChange handler for IMask's onAccept callback.\n *\n * IMask calls onAccept every time the user types and the mask accepts the input.\n * This handler converts IMask's callback into a standard React onChange event.\n *\n * @param onChange - The onChange handler from parent component\n * @param useMaskedValue - Whether to emit the formatted value or raw value\n * @param name - The input's name attribute (for the synthetic event)\n *\n * @example\n * // TelephoneQuestion (US) - useMaskedValue=true\n * // User types: \"5551234567\"\n * // Emits: \"(555) 123-4567\" (formatted for display)\n * // Use case: Want to store/display the formatted phone number\n *\n * @example\n * // CurrencyQuestion - useMaskedValue=false\n * // User types: \"1234.56\"\n * // User sees: \"1,234.56\" (with formatting)\n * // Emits: \"1234.56\" (raw value for calculations)\n * // Use case: Need numeric value for backend/calculations\n */\nconst useAcceptHandler = (\n onChange: MaskedFieldProps[\"onChange\"],\n useMaskedValue: boolean,\n name?: string,\n) => {\n return useCallback(\n (maskedValue: string, maskInstance: InputMask<FactoryOpts>) => {\n // Exit early if no onChange handler provided\n if (!onChange) {\n return;\n }\n\n // IMask provides two values:\n // 1. maskedValue: The formatted value user sees (e.g., \"(555) 123-4567\")\n // 2. maskInstance.unmaskedValue: The raw value without formatting (e.g., \"5551234567\")\n const formattedValue = maskedValue;\n const rawValue = maskInstance.unmaskedValue;\n\n // Choose which value to emit based on useMaskedValue prop\n const valueToEmit = useMaskedValue ? formattedValue : rawValue;\n\n // Create a synthetic React event that matches the standard onChange signature\n // This allows parent components to handle it like any other input change\n onChange({\n target: { name, value: valueToEmit },\n } as ChangeEvent<HTMLInputElement>);\n },\n [onChange, useMaskedValue, name],\n );\n};\n\n/**\n * Creates a ref callback that forwards the input element to both IMask and the parent component.\n *\n * React allows two ways to pass refs:\n * 1. Ref callback function: (element) => { ... }\n * 2. Ref object: { current: element }\n *\n * This hook handles both cases and also ensures IMask gets the element reference it needs.\n *\n * @param imaskRef - IMask's ref (needs the element to apply masking)\n * @param forwardedRef - Parent component's ref (could be function or object)\n *\n * @example\n * // Parent uses callback ref\n * <MaskedField ref={(el) => console.log(el)} />\n *\n * @example\n * // Parent uses useRef\n * const inputRef = useRef(null);\n * <MaskedField ref={inputRef} />\n */\nconst useCombinedRef = (\n imaskRef: React.MutableRefObject<InputMaskElement | null>,\n forwardedRef?: MaskedFieldRef,\n) => {\n return useCallback(\n (element: HTMLInputElement | null) => {\n // First, give the element to IMask so it can apply masking\n imaskRef.current = element;\n\n // Then forward the element to the parent component's ref\n // Handle both callback refs and ref objects\n\n // Case 1: Parent passed a callback ref function\n if (typeof forwardedRef === \"function\") {\n forwardedRef(element);\n }\n // Case 2: Parent passed a ref object (from useRef)\n else if (forwardedRef) {\n forwardedRef.current = element;\n }\n // Case 3: No ref was forwarded (forwardedRef is null/undefined)\n // Do nothing - this is fine\n },\n [imaskRef, forwardedRef],\n );\n};\n\n/**\n * Creates an onBlur handler that extracts the correct value from IMask.\n *\n * When the user tabs away or clicks outside the input, we need to emit\n * the current value (either formatted or raw) via the onBlur event.\n *\n * @param onBlur - The onBlur handler from parent component\n * @param maskRef - Reference to the IMask instance (provides current values)\n * @param useMaskedValue - Whether to emit the formatted value or raw value\n * @param name - The input's name attribute (for the synthetic event)\n *\n * @example\n * // TelephoneQuestion - useMaskedValue=true\n * // Input displays: \"(555) 123-4567\"\n * // onBlur emits: \"(555) 123-4567\" (formatted)\n *\n * @example\n * // CurrencyQuestion - useMaskedValue=false\n * // Input displays: \"$1,234.56\"\n * // onBlur emits: \"1234.56\" (raw for validation/submission)\n */\nconst useBlurHandler = (\n onBlur: MaskedFieldProps[\"onBlur\"],\n maskRef: React.MutableRefObject<InputMask<FactoryOpts> | null>,\n useMaskedValue: boolean,\n name?: string,\n) => {\n return useCallback(\n (event: FocusEvent<Element>) => {\n // Exit early if no onBlur handler provided or mask isn't initialized\n if (!onBlur || !maskRef.current) {\n return;\n }\n\n // Extract current values from the IMask instance\n // maskRef.current.value: The formatted value (e.g., \"(555) 123-4567\")\n // maskRef.current.unmaskedValue: The raw value (e.g., \"5551234567\")\n const formattedValue = maskRef.current.value;\n const rawValue = maskRef.current.unmaskedValue;\n\n // Choose which value to emit based on useMaskedValue prop\n const valueToEmit = useMaskedValue ? formattedValue : rawValue;\n\n // Create an enhanced event that preserves the original event properties\n // but overrides the target to include our extracted value\n onBlur({\n ...event,\n target: { ...event.target, name, value: valueToEmit },\n } as FocusEvent<Element>);\n },\n [onBlur, maskRef, useMaskedValue, name],\n );\n};\n\n/**\n * Controlled MaskedField - for use with value prop.\n * Syncs external value changes to IMask via useEffect.\n *\n * Use this when:\n * - The parent component manages the input state\n * - You need to programmatically update the value\n * - You need validation or transformation on every change\n */\nconst ControlledMaskedField = ({\n mask,\n useMaskedValue = false,\n value,\n onChange,\n onBlur,\n name,\n forwardedRef,\n ...textFieldProps\n}: Omit<MaskedFieldProps, \"defaultValue\"> & {\n value: string | number;\n forwardedRef?: MaskedFieldRef;\n}) => {\n const onAccept = useAcceptHandler(onChange, useMaskedValue, name);\n const { ref: imaskRef, maskRef, setValue } = useIMask(mask, { onAccept });\n\n const combinedRef = useCombinedRef(imaskRef, forwardedRef);\n const handleBlur = useBlurHandler(onBlur, maskRef, useMaskedValue, name);\n\n // Sync external value changes to IMask\n useEffect(() => {\n if (!maskRef.current) {\n return;\n }\n\n const stringValue = value.toString();\n const currentMasked = maskRef.current.value;\n const currentUnmasked = maskRef.current.unmaskedValue;\n\n // Only update if value actually changed (prevents infinite loops)\n if (currentMasked !== stringValue && currentUnmasked !== stringValue) {\n setValue(stringValue);\n }\n }, [value, maskRef, setValue, imaskRef]);\n\n return (\n <TextField\n {...textFieldProps}\n ref={combinedRef}\n name={name}\n onBlur={handleBlur}\n />\n );\n};\n\n/**\n * Uncontrolled MaskedField - for use with defaultValue prop.\n * No value synchronization needed - IMask manages the value internally.\n *\n * Use this when:\n * - You only need the final value on submit\n * - You don't need to react to intermediate changes\n * - You want simpler code without state management\n */\nconst UncontrolledMaskedField = ({\n mask,\n useMaskedValue = false,\n defaultValue,\n onChange,\n onBlur,\n name,\n forwardedRef,\n ...textFieldProps\n}: Omit<MaskedFieldProps, \"value\"> & {\n defaultValue?: string | number;\n forwardedRef?: MaskedFieldRef;\n}) => {\n const onAccept = useAcceptHandler(onChange, useMaskedValue, name);\n const { ref: imaskRef, maskRef } = useIMask(mask, { onAccept });\n\n const combinedRef = useCombinedRef(imaskRef, forwardedRef);\n const handleBlur = useBlurHandler(onBlur, maskRef, useMaskedValue, name);\n\n return (\n <TextField\n {...textFieldProps}\n ref={combinedRef}\n name={name}\n onBlur={handleBlur}\n defaultValue={defaultValue?.toString()}\n />\n );\n};\n\nconst MaskedField = ({ ref: forwardedRef, ...props }: MaskedFieldProps) => {\n const { value, defaultValue, ...rest } = props;\n\n // Check for \"value\" in props (not `value !== undefined`) to maintain consistent\n // controlled/uncontrolled state throughout component lifetime and prevent focus loss.\n // Example: CurrencyQuestion passes value={undefined} initially, then value={5} after typing.\n if (\"value\" in props) {\n return (\n <ControlledMaskedField\n {...rest}\n value={value ?? \"\"}\n forwardedRef={forwardedRef}\n />\n );\n } else {\n return (\n <UncontrolledMaskedField\n {...rest}\n defaultValue={defaultValue}\n forwardedRef={forwardedRef}\n />\n );\n }\n};\n\nMaskedField.displayName = \"MaskedField\";\n\nexport { MaskedField };\n", "\"use client\";\n\nimport loadable from \"@loadable/component\";\nimport { TextField } from \"../TextField\";\nimport type { MaskedFieldProps } from \"./MaskedField\";\n\n/** Lazy-loads MaskedField (and react-imask) so consumers importing only TextField don't bundle react-imask. */\nconst LoadableMaskedField = loadable(() => import(\"./MaskedField\"), {\n resolveComponent: mod => mod.MaskedField,\n});\n\nexport function MaskedField(props: MaskedFieldProps) {\n const {\n mask: _mask,\n useMaskedValue: _useMaskedValue,\n \"data-testid\": _dataTestId,\n ref: forwardedRef,\n ...textFieldProps\n } = props;\n return (\n <LoadableMaskedField\n {...props}\n fallback={\n <TextField\n {...textFieldProps}\n ref={forwardedRef}\n type=\"text\"\n isDisabled\n isReadOnly\n />\n }\n />\n );\n}\n\nMaskedField.displayName = \"MaskedField\";\n\nexport type {\n MaskedFieldProps,\n MaskedFieldRef,\n MaskedFieldElementType,\n} from \"./MaskedField\";\n", "export * from \"./Accordion\";\nexport * from \"./AddressLookup\";\nexport * from \"./Alert\";\nexport * from \"./Box\";\nexport * from \"./Breadcrumbs\";\nexport * from \"./Button\";\nexport * from \"./Checkbox\";\nexport * from \"./Combobox\";\nexport * from \"./Container\";\nexport * from \"./DateField\";\nexport * from \"./Divider\";\nexport * from \"./Drawer\";\nexport * from \"./DropdownMenu\";\nexport * from \"./ErrorMessage\";\nexport * from \"./Fieldset\";\nexport * from \"./Flex\";\nexport * from \"./Grid\";\nexport * from \"./Icon\";\nexport * from \"./Image\";\nexport * from \"./Label\";\nexport * from \"./Link\";\nexport * from \"./LinkButton\";\nexport * from \"./List\";\nexport * from \"./LoadingIndicator\";\nexport * from \"./Logo\";\nexport * from \"./Modal\";\nexport * from \"./NumberField\";\nexport * from \"./Option\";\nexport * from \"./PasswordField\";\nexport * from \"./Popover\";\nexport * from \"./Progress\";\nexport * from \"./Radio\";\nexport * from \"./Segment\";\nexport * from \"./Select\";\nexport * from \"./Slider\";\nexport * from \"./Stack\";\nexport * from \"./SVG\";\nexport * from \"./Switch\";\nexport * from \"./Table\";\nexport * from \"./Text\";\nexport * from \"./TextArea\";\nexport * from \"./TextAreaInput\";\nexport * from \"./TextField\";\nexport * from \"./TextOrHTML\";\nexport * from \"./Title\";\nexport * from \"./Toast\";\nexport * from \"./Trust\";\nexport * from \"./ExpandableText\";\nexport * from \"./VisuallyHidden\";\nexport * from \"./MaskedField\";\n", "export interface DOMProps {\n id?: string | undefined;\n}\n", "import type {\n ClipboardEvent,\n CompositionEvent,\n FocusEvent,\n KeyboardEvent,\n} from \"react\";\n\nexport interface KeyboardEvents {\n /** Event called when the value changes (mandatory for controlled components) */\n onKeyUp?: (e: KeyboardEvent) => void;\n\n /** Event called when the value changes (mandatory for controlled components) */\n onKeyDown?: (e: KeyboardEvent) => void;\n}\n\nexport interface ClipboardEvents {\n /** Fired when the user initiates a copy action through the browser's user interface. */\n onCopy?: (e: ClipboardEvent) => void;\n\n /** Fired when the user initiates a cut action through the browser's user interface. */\n onCut?: (e: ClipboardEvent) => void;\n\n /** Fired when the user initiates a paste action through the browser's user interface. */\n onPaste?: (e: ClipboardEvent) => void;\n}\n\nexport interface CompositionEvents {\n /** Fired when a text composition system such as an input method editor completes or cancels the current composition session. */\n onCompositionEnd?: (e: CompositionEvent) => void;\n\n /** Fired when a text composition system such as an input method editor starts a new composition session. */\n onCompositionStart?: (e: CompositionEvent) => void;\n\n /** Fired when a new character is received in the context of a text composition session controlled by a text composition system such as an input method editor. */\n onCompositionUpdate?: (e: CompositionEvent) => void;\n}\n\nexport interface FocusEvents {\n /** Fired when an element has lost focus. */\n onBlur?: (e: FocusEvent) => void;\n\n /** Fired when an element has gained focus. */\n onFocus?: (e: FocusEvent) => void;\n}\n\nexport interface InputEvents {\n /** Event called when the value changes (mandatory for controlled components) */\n onChange?: (value: string) => void;\n}\n\nexport type HTMLElementEvent<T extends HTMLElement> = Event & {\n target: T;\n};\n\nexport interface Validation {\n /** Whether user input is required on the input before form submission. */\n isRequired?: boolean;\n /** Whether the input value is invalid. */\n isInvalid?: boolean;\n}\n", "export type IconDefinition = {\n iconName: string;\n width: number;\n height: number;\n svgPathData: string;\n iconType: \"stroke\" | \"fill\";\n strokeWidth?: number;\n fill?: string | undefined;\n};\n", "export type SizeType = \"xxs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n\nexport type SpacingType = SizeType | number;\n", "export * from \"./dom\";\nexport * from \"./events\";\nexport * from \"./icon\";\nexport * from \"./size\";\n", "\"use client\";\n\nexport * from \"./components\";\nexport * from \"./hooks\";\nexport * from \"./types\";\n", "import { error } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport { TextOrHTML } from \"../..\";\nimport { Icon } from \"../Icon\";\nimport \"./ErrorMessage.css\";\n\nexport interface ErrorMessageProps {\n errorMessage?: string;\n id?: string;\n className?: string;\n}\n\nexport const ErrorMessage = ({\n id,\n errorMessage,\n className,\n}: ErrorMessageProps) => {\n const classes = classNames(\"mobius\", \"mobius-error-message\", className);\n\n if (!errorMessage) return null;\n\n return (\n <div id={id} className={classes} data-testid=\"ErrorMessage\" role=\"alert\">\n <Icon\n icon={error}\n className=\"mobius-error-message__icon\"\n aria-hidden=\"true\"\n />\n <TextOrHTML\n elementType=\"span\"\n className=\"mobius-error-message__text\"\n text={errorMessage}\n />\n </div>\n );\n};\n\nErrorMessage.displayName = \"ErrorMessage\";\n", "export * from \"./ErrorMessage\";\n", "\"use client\";\n\nimport type { ChangeEvent } from \"react\";\nimport { useRef, useId, useState, useEffect } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { squareTick, square } from \"@simplybusiness/icons\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport type { CheckboxElementType, CheckboxProps } from \"./types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { Icon } from \"../Icon\";\nimport { Stack } from \"../Stack\";\nimport \"./Checkbox.css\";\n\nexport const Checkbox = ({ ref, ...props }: CheckboxProps) => {\n const {\n id,\n label,\n isDisabled,\n isRequired,\n isInvalid,\n onChange,\n className,\n errorMessage,\n selected,\n defaultSelected = false,\n isReadOnly,\n isLastItem,\n name,\n value,\n [\"aria-describedby\"]: ariaDescribedBy,\n ...rest\n } = props;\n const [checked, setChecked] = useState<boolean>(defaultSelected);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const refObj = ref || fallbackRef;\n const inputId = useId();\n\n const isControlled = typeof selected === \"boolean\";\n useEffect(() => {\n if (isControlled) {\n setChecked(selected);\n }\n }, [selected, isControlled]);\n\n const validationClasses = useValidationClasses({ isInvalid });\n const sharedClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n \"--is-selected\": checked,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n validationClasses,\n );\n // Append an additional wrapper class name to differenitate from input\n const wrapperClasses = classNames(\n \"mobius\",\n \"mobius-checkbox\",\n sharedClasses,\n className,\n );\n const labelClasses = classNames(\"mobius-checkbox__label\", sharedClasses);\n const inputClasses = classNames(\"mobius-checkbox__input\", sharedClasses);\n const iconClasses = classNames(\"mobius-checkbox__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n ariaDescribedBy,\n ]);\n const labelId = useId();\n\n const handleChange = (event: ChangeEvent<CheckboxElementType>) => {\n setChecked(!checked);\n if (onChange) {\n onChange(event, isLastItem);\n }\n };\n\n return (\n <Stack gap=\"xs\" className={wrapperClasses}>\n <label className={labelClasses}>\n <input\n aria-describedby={describedBy}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-labelledby={labelId}\n readOnly={isReadOnly}\n disabled={isDisabled}\n ref={refObj}\n className={inputClasses}\n onChange={handleChange}\n type=\"checkbox\"\n checked={checked}\n required={isRequired}\n id={id || inputId}\n name={name}\n value={value}\n {...rest}\n />\n <Icon\n icon={checked ? squareTick : square}\n size=\"md\"\n className={iconClasses}\n />\n <span id={labelId} className=\"mobius-checkbox__visible-label\">\n {label}\n </span>\n </label>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nCheckbox.displayName = \"Checkbox\";\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAa;AAAb;AAAA;AAAA;AAAO,IAAM,uBAAuB,CAAC,UAAmC;AACtE,YAAM,gBAAyC,CAAC;AAChD,aAAO,KAAK,KAAK,EAAE,QAAQ,SAAO;AAChC,YAAI,MAAM,GAAG,MAAM,QAAW;AAC5B,wBAAc,GAAG,IAAI,MAAM,GAAG;AAAA,QAChC;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAAA;AAAA;;;ACRA,IAEa;AAFb;AAAA;AAAA;AAEO,IAAM,kBAAkB,CAC7B,YACuB;AACvB,UAAI,OAAO,YAAY,UAAU;AAC/B,eAAO,cAAc,OAAO;AAAA,MAC9B;AAEA,UAAI,OAAO,YAAY,UAAU;AAC/B,eAAO,GAAG,OAAO;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACXO,SAAS,UACd,MACgB;AAChB,SAAO,WAAS;AACd,SAAK,QAAQ,SAAO;AAClB,UAAI,OAAO,QAAQ,YAAY;AAC7B,YAAI,KAAK;AAAA,MACX,WAAW,OAAO,MAAM;AACtB,QAAC,IAAmC,UAAU;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAfA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACa;AADb;AAAA;AAAA;AACO,IAAM,iBAAiB,MAAM,OAAO,sBAAsB;AAAA;AAAA;;;ACDjE,IAEa;AAFb;AAAA;AAAA;AAEO,IAAM,cAAc,CAAC,SAA+B;AACzD,UAAI,CAAC,MAAM;AACT,eAAO,CAAC;AAAA,MACV;AAEA,aAAO;AAAA,QACL,YAAY,SAAS;AAAA,QACrB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;;;AChBA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,mBACd,MACoB;AACpB,SAAO,KAAK,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK;AAC3C;AAJA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;ACTA,IAIa,iBA8BA;AAlCb;AAAA;AAAA;AAAA;AACA;AAGO,IAAM,kBAAkB,CAAC,UAA0B;AACxD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI;AAEJ,YAAM,aAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,gBAAgB,GAAG;AAAA,QACxB,WAAW,gBAAgB,SAAS;AAAA,QACpC,QAAQ,gBAAgB,MAAM;AAAA,MAChC;AAEA,aAAO,qBAAqB,UAAU;AAAA,IACxC;AAEO,IAAM,aAAa,CACxB,UACwC;AACxC,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,aAAO;AAAA,QACL;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AClEA,mBAGA,aAeI,oBAbE;AALN;AAAA;AAAA;AAAA,oBAAuB;AAEvB;AACA,kBAAO;AAeH;AAbJ,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,cAAU,cAAAA,SAAW,UAAU,eAAe,SAAS;AAE7D,YAAM,CAAC,YAAY,SAAS,IAAI,WAAW,UAAU;AACrD,YAAM,aAAa,gBAAgB,UAAU;AAE7C,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,YACL,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AAAA,UACA,WAAW;AAAA,UACV,GAAG;AAAA;AAAA,MACN;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;AC9BnB;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,aAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACQO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAc;AACZ,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAEA,QAAM,cAAU,eAAAC;AAAA,IACd;AAAA,IACA;AAAA,IACA,eAAe,WAAW;AAAA,IAC1B,UAAU,IAAI;AAAA,IACd;AAAA,IACA;AAAA,MACE,CAAC,GAAG,WAAW,KAAK,GAAG;AAAA,MACvB,CAAC,GAAG,WAAW,OAAO,GAAG,QAAQ;AAAA,MACjC,CAAC,GAAG,WAAW,eAAe,GAAG;AAAA,IACnC;AAAA,EACF;AAEA,QAAM,EAAE,UAAU,OAAO,QAAQ,YAAY,IAAI;AACjD,QAAM,oBAAoB,SAAS,MAAM,GAAG,EAAE,KAAK,GAAG;AAEtD,QAAM,eAAe,GAAG,sBAAsB,iBAAiB,CAAC;AAChE,QAAM,YAAY,SAAS;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAK;AAAA,MACL,OAAM;AAAA,MACN,SAAS,OAAO,KAAK,IAAI,MAAM;AAAA,MAC/B,OAAO,EAAE,MAAM;AAAA,MACd,GAAG;AAAA,MAEJ;AAAA,qDAAC,WAAO,qBAAU;AAAA,QAClB,6CAAC,UAAK,MAAK,gBAAe,GAAG,aAAa;AAAA;AAAA;AAAA,EAC5C;AAEJ;AA5DA,IAAAC,gBAEA,aA2CIC,qBAzCE,aAEA;AANN;AAAA;AAAA;AAAA,IAAAD,iBAAuB;AAEvB,kBAAO;AA2CH,IAAAC,sBAAA;AAzCJ,IAAM,cAAc;AAEpB,IAAM,wBAAwB,CAAC,QAC7B,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAAA;AAAA;;;ACP3C,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,aAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AAAA;AAAA;;;ACDA,IAEAC,gBAGA,cA2DQC,qBApCK;AA5Bb;AAAA;AAAA;AAEA,IAAAD,iBAAuB;AACvB,IAAAE;AACA,IAAAC;AACA,mBAA4B;AA2DpB,IAAAF,sBAAA;AApCD,IAAM,gBAAgB,CAAC;AAAA,MAC5B;AAAA,MACA,aAAa,cAAc;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAA0B;AACxB,YAAM,kBAAc,eAAAG,SAAW,0BAA0B;AAAA,QACvD,aAAa;AAAA,MACf,CAAC;AACD,YAAM,kBAAc,eAAAA,SAAW,+BAA+B;AAAA,QAC5D,aAAa;AAAA,MACf,CAAC;AACD,YAAM,gBAAgB,CAAC,MAA+B;AACpD,YAAI,SAAS;AACX,kBAAQ,CAAC;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAEA,YAAM,gBAAgB,CAAC,MAAqB;AAC1C,YAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,SAAS;AACtC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,gBAAgB;AAClB,eACE;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,YAAW;AAAA,YACX,WAAU;AAAA,YAEV;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAI;AAAA,kBACJ,WAAW;AAAA,kBACX,SAAS;AAAA,kBACT,WAAW;AAAA,kBACX,MAAK;AAAA,kBACL,UAAU;AAAA,kBACV,iBAAe,CAAC,CAAC;AAAA,kBACjB,iBAAe;AAAA,kBAEf;AAAA,iEAAC,eAAY,WAAU,+BACpB,gBACH;AAAA,oBACA,6CAAC,QAAK,MAAM,0BAAa,WAAW,aAAa;AAAA;AAAA;AAAA,cACnD;AAAA,cACC;AAAA;AAAA;AAAA,QACH;AAAA,MAEJ;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,UACJ,WAAW;AAAA,UACX,SAAS;AAAA,UACT,WAAW;AAAA,UACX,MAAK;AAAA,UACL,UAAU;AAAA,UACV,iBAAe,CAAC,CAAC;AAAA,UACjB,iBAAe;AAAA,UAEf;AAAA,yDAAC,eAAY,WAAU,+BAA+B,gBAAK;AAAA,YAC3D,6CAAC,QAAK,MAAM,0BAAa,WAAW,aAAa;AAAA;AAAA;AAAA,MACnD;AAAA,IAEJ;AAAA;AAAA;;;ACnGA,IAEAC,gBAEA,cACA,qBAQA,kBAoGIC,qBAxES;AAzCb;AAAA;AAAA;AAAA;AAEA,IAAAD,iBAAuB;AAEvB,mBAA2C;AAC3C,0BAAwC;AAOxC;AACA,uBAAO;AAoGH,IAAAC,sBAAA;AAxEG,IAAM,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AAC9D,YAAM;AAAA,QACJ,WAAW;AAAA,QACX,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,MAAM;AAAA,QAAC;AAAA,QAClB;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,CAAC,gBAAgB,iBAAiB,QAAI,uBAAS;AAAA,QACnD,MAAM;AAAA,QACN,eAAe;AAAA,MACjB,CAAC;AACD,YAAM,2BAAuB,6CAAwB;AAErD,YAAM,uBAAmB,eAAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,UACE,oBAAoB,eAAe,iBAAiB,CAAC;AAAA,UACrD,aAAa,eAAe;AAAA,QAC9B;AAAA,MACF;AACA,YAAM,8BAA0B,eAAAA;AAAA,QAC9B;AAAA,QACA;AAAA,UACE,aAAa,eAAe;AAAA,QAC9B;AAAA,MACF;AACA,YAAM,qBAAiB,eAAAA,SAAW,6BAA6B;AAAA,QAC7D,aAAa,eAAe;AAAA,MAC9B,CAAC;AAED,YAAM,WAAW,eAAe,OAAO,WAAW;AAElD,YAAM,eAAe,MAAM;AAEzB,YAAI,CAAC,eAAe,QAAQ,QAAQ;AAClC,iBAAO;AAAA,QACT;AACA,YAAI,eAAe,QAAQ,SAAS;AAClC,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU;AACZ,mBAAS,CAAC,eAAe,IAAI;AAAA,QAC/B;AACA,0BAAkB;AAAA,UAChB,MAAM,CAAC,eAAe;AAAA,UACtB,eAAe;AAAA,QACjB,CAAC;AAAA,MACH;AAEA,kCAAU,MAAM;AACd,0BAAkB;AAAA,UAChB,MAAM;AAAA,UACN,eAAe;AAAA,QACjB,CAAC;AAAA,MACH,GAAG,CAAC,SAAS,CAAC;AAGd,YAAM,aAAS,oBAAM;AACrB,YAAM,cAAc,oBAAoB,MAAM;AAC9C,YAAM,YAAY,mBAAmB,MAAM;AAE3C,aACE,8CAAC,SAAI,KAAW,GAAG,MAAM,WAAW,kBACjC;AAAA,2BAAmB,SAClB;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,aAAa;AAAA,YACb,QAAQ;AAAA,YACR;AAAA,YACA,cAAc,eAAe;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WAAW;AAAA,YACX,eAAa,CAAC,eAAe;AAAA,YAC7B,mBAAiB;AAAA,YACjB,MAAK;AAAA,YAEL,uDAAC,SAAI,WAAW,gBAAiB,gBAAM,UAAS;AAAA;AAAA,QAClD;AAAA,QACC,mBAAmB,YAClB;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,QAAQ;AAAA,YACR;AAAA,YACA,cAAc,eAAe;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,SAEJ;AAAA,IAEJ;AAEA,cAAU,cAAc;AAAA;AAAA;;;ACtJxB,IAAAC,gBAGA,gBAqBMC,qBAdA;AAVN;AAAA;AAAA;AAAA,IAAAD,iBAAuB;AAGvB,qBAAO;AAqBD,IAAAC,sBAAA;AAdN,IAAM,UAAU,CAAC;AAAA,MACf,oBAAoB,kBAAkB;AAAA,MACtC;AAAA,MACA,GAAG;AAAA,IACL,MAAoB;AAClB,YAAM,cAAU,eAAAC,SAAW,UAAU,kBAAkB,SAAS;AAEhE,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,MAAK;AAAA,UACL,oBAAkB;AAAA,UACjB,GAAG;AAAA,UAEJ,uDAAC,SAAI,WAAU,yBAAwB;AAAA;AAAA,MACzC;AAAA,IAEJ;AAEA,YAAQ,cAAc;AAAA;AAAA;;;AC7BtB,IAAAC,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAGAC,eACAC,gBAIA,sBA4DUC,qBAxCJ;AA5BN;AAAA;AAAA;AAAA;AAGA,IAAAF,gBAAmC;AACnC,IAAAC,iBAAuB;AAEvB;AACA,IAAAE;AACA,2BAAO;AA4DG,IAAAD,sBAAA;AAxCV,IAAM,gBAAgB,CAAC,UAA8B;AACnD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,SAAS,UAAU,QAAI,wBAAsB,oBAAI,IAAI,CAAC;AAE7D,YAAM,cAAU,eAAAE,SAAW,UAAU,yBAAyB,SAAS;AAEvE,YAAM,wBAAwB,CAAC,IAAY,WAAoB;AAC7D,mBAAW,UAAQ;AACjB,gBAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,cAAI,QAAQ;AACV,gBAAI,CAAC,eAAe;AAClB,qBAAO,MAAM;AAAA,YACf;AACA,mBAAO,IAAI,EAAE;AAAA,UACf,OAAO;AACL,mBAAO,OAAO,EAAE;AAAA,UAClB;AACA,iBAAO;AAAA,QACT,CAAC;AAED,YAAI,QAAQ;AACV,mBAAS,EAAE;AAAA,QACb,OAAO;AACL,oBAAU,EAAE;AAAA,QACd;AAAA,MACF;AAEA,aACE,6CAAC,SAAI,WAAW,SAAU,GAAG,MAC1B,kBAAQ,IAAI,CAAC,MAAM,UAAU;AAC5B,cAAM,EAAE,IAAI,QAAQ,QAAQ,IAAI;AAChC,cAAM,SAAS,QAAQ,IAAI,EAAE;AAC7B,eACE,8CAAC,0BACC;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,cACX,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU,CAAAC,YAAU,sBAAsB,IAAIA,OAAM;AAAA,cAEnD;AAAA;AAAA,UACH;AAAA,UACC,QAAQ,QAAQ,SAAS,KAAK,6CAAC,WAAQ;AAAA,aAT3B,EAUf;AAAA,MAEJ,CAAC,GACH;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;ACrF5B,IAAAC,kBAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IAEAC,sBAKAC,eAea,qBASP,SAEA,eAgBA;AAjDN;AAAA;AAAA;AAAA;AAEA,IAAAD,uBAIO;AACP,IAAAC,gBAA+C;AAexC,IAAM,sBAAsB;AAAA,MACjC,EAAE,MAAM,MAAM,OAAO,IAAI;AAAA,MACzB,EAAE,MAAM,MAAM,OAAO,IAAI;AAAA,MACzB,EAAE,MAAM,MAAM,OAAO,IAAI;AAAA,MACzB,EAAE,MAAM,MAAM,OAAO,IAAI;AAAA,MACzB,EAAE,MAAM,MAAM,OAAO,KAAK;AAAA,MAC1B,EAAE,MAAM,OAAO,OAAO,KAAK;AAAA,IAC7B;AAEA,IAAM,UAAmC,EAAE,SAAS,KAAK;AAEzD,IAAM,gBAAgB,CAAC,aAA8B,gBAAwB;AAG3E,YAAM,UAAU,YAAY;AAAA,QAC1B,gBAAc,WAAW,SAAS,cAAc;AAAA,MAClD;AACA,YAAM,WAAW,YAAY,CAAC;AAC9B,YAAM,UAAU,YAAY,YAAY,SAAS,CAAC;AAClD,YAAM,QAAQ,YAAY,UAAU,CAAC;AAErC,UAAI,YAAY,EAAG,QAAO;AAC1B,UAAI,YAAY,GAAI,QAAO;AAE3B,aAAO;AAAA,IACT;AAEA,IAAM,gBAAgB,CACpB,sBACsB;AACtB,YAAM,mBAAe,kCAAY;AACjC,YAAM,cAAc,qBAAqB;AACzC,YAAM,oBAAoB,YAAY,CAAC;AAEvC,YAAM,CAAC,aAAa,cAAc,QAAI;AAAA,QACpC,OAAO,YAAY,WAAW,cAC1B,OAAO,aACP,kBAAkB;AAAA,MACxB;AAEA,+CAAe,UAAU,MAAM,eAAe,OAAO,UAAU,GAAG,OAAO;AAEzE,YAAM,qBAAiB,wCAAkB,aAAa,GAAG;AAIzD,YAAM,wBAAoB;AAAA,QACxB,MACE,CAAC,gBAAgB,YAAY,WAAW,IACpC,oBACA,cAAc,aAAa,cAAc;AAAA,QAC/C,CAAC,cAAc,aAAa,mBAAmB,cAAc;AAAA,MAC/D;AAEA,YAAM,SAAK;AAAA,QACT,CAAC,SAAmB;AAClB,gBAAM,YAAY,YAAY,UAAU,UAAQ,KAAK,SAAS,IAAI;AAClE,cAAI,cAAc,IAAI;AACpB,mBAAO;AAAA,UACT;AACA,gBAAM,eAAe,YAAY;AAAA,YAC/B,UAAQ,KAAK,SAAS,kBAAkB;AAAA,UAC1C;AAEA,iBAAO,gBAAgB;AAAA,QACzB;AAAA,QACA,CAAC,mBAAmB,WAAW;AAAA,MACjC;AAEA,YAAM,WAAO;AAAA,QACX,CAAC,SAAmB;AAClB,gBAAM,YAAY,YAAY,UAAU,UAAQ,KAAK,SAAS,IAAI;AAClE,cAAI,cAAc,IAAI;AACpB,mBAAO;AAAA,UACT;AACA,gBAAM,eAAe,YAAY;AAAA,YAC/B,UAAQ,KAAK,SAAS,kBAAkB;AAAA,UAC1C;AAEA,iBAAO,gBAAgB;AAAA,QACzB;AAAA,QACA,CAAC,mBAAmB,WAAW;AAAA,MACjC;AAEA,aAAO;AAAA,QACL,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC/GA,IAAAC,sBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACuBO,SAAS,UAAU;AAAA,EACxB,cAAc;AAAA,EACd,OAAO;AAAA,EACP,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACjB,QAAM,kBAAc;AAAA,IAClB,CAAC,UAA+C;AAC9C,UAAI,YAAY;AACd;AAAA,MACF;AAEA,gBAAU,KAAK;AACf,gBAAU,KAAK;AAAA,IACjB;AAAA,IACA,CAAC,YAAY,SAAS,OAAO;AAAA,EAC/B;AAEA,WAAS,UAAU;AACjB,QAAI,MAAM;AACR,aAAO;AAAA,IACT;AAEA,QAAI,gBAAgB,KAAK;AACvB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,aACJ,gBAAgB,WACZ,EAAE,KAAK,IACP;AAAA,IACE,MAAM,QAAQ;AAAA,EAChB;AAEN,SAAO;AAAA,IACL,aAAa;AAAA,MACX,MAAM,gBAAgB,MAAM,OAAO;AAAA,MACnC,QAAQ,gBAAgB,MAAM,SAAS;AAAA,MACvC,KAAK,gBAAgB,MAAM,MAAM;AAAA,MACjC,UAAU,aAAa,KAAK;AAAA,MAC5B,UAAU,cAAc;AAAA,MACxB,iBAAiB,cAAc;AAAA,MAC/B,MACE,gBAAgB,WAAW,gBAAgB,WAAW,OAAO;AAAA,MAC/D,OACE,gBAAgB,WAAW,gBAAgB,WAAW,QAAQ;AAAA,MAChE,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAnFA,IACAC;AADA;AAAA;AAAA;AACA,IAAAA,gBAA4B;AAAA;AAAA;;;ACD5B,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,eAIa;AALb;AAAA;AAAA;AACA,IAAAA,gBAA4C;AAC5C;AAGO,IAAM,oBAAoB,MAAM;AACrC,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,KAAK;AAC9D,YAAM,uBAAmB,sBAAO,KAAK;AAErC,mCAAU,MAAM;AACd,4BAAoB,eAAe,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC;AAEL,YAAM,iBAAiB,OACrB,QACG;AACH,YACE,CAAC,iBAAiB,WAClB,CAAC,oBACD,OAAO,WAAW,eAClB,IAAI,YAAY,MAChB;AACA,gBAAM,EAAE,SAAS,eAAe,IAAI,MAAM,OAAO,iBAAiB;AAElE,2BAAiB,UAAU;AAC3B,cAAI;AACF,gBAAI,IAAI,SAAS;AACf,6BAAe,eAAe,IAAI,OAAO;AAAA,YAC3C;AAAA,UACF,SAASC,QAAO;AACd,oBAAQ,MAAM,kCAAkCA,MAAK;AAAA,UACvD;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACtCA,IAAAC,0BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,eAEAC,sBAgBM,uBACA,8BAEO;AAtBb;AAAA;AAAA;AACA,IAAAD,gBAAiD;AACjD;AACA,IAAAC,uBAAkC;AAClC,IAAAC;AAeA,IAAM,wBAAwB;AAC9B,IAAM,+BAA+B;AAE9B,IAAM,YAAY,CAAC,UAA0B;AAClD,YAAM,EAAE,KAAK,QAAQ,YAAY,QAAQ,QAAQ,IAAI;AACrD,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,KAAK;AAC9D,YAAM,mBAAmB,oBAAoB,WAAW;AACxD,YAAM,EAAE,eAAe,IAAI,kBAAkB;AAE7C,mCAAU,MAAM;AACd,4BAAoB,eAAe,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC;AAGL,YAAM,4BACH,IAAI,WACH;AAAA,QACE,iBAAiB,IAAI,OAAO,EACzB,iBAAiB,WAAW,WAAW,EACvC,QAAQ,MAAM,EAAE;AAAA,MACrB,KACF;AAEF,kDAAkB,EAAE,SAAS,OAAO,CAAC;AAErC,YAAM,WAAO,2BAAY,MAAM;AAC7B,YAAI,SAAS,UAAU;AACvB,iBAAS;AAAA,MACX,GAAG,CAAC,QAAQ,GAAG,CAAC;AAEhB,YAAM,YAAQ,2BAAY,MAAM;AAC9B,YAAI,SAAS,MAAM;AACnB,kBAAU;AAAA,MACZ,GAAG,CAAC,SAAS,GAAG,CAAC;AAGjB,YAAM,kBAAc;AAAA,QAClB,CAAC,UAA+C;AAC9C,cAAI,OAAO;AAGT,kBAAM,eAAe;AAGrB,kBAAM,gBAAgB;AAAA,UACxB;AAEA,cAAI,kBAAkB;AACpB,gBAAI,SAAS,UAAU,OAAO,qBAAqB;AAEnD,uBAAW,MAAM,MAAM,GAAG,yBAAyB;AAAA,UACrD,OAAO;AACL,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,CAAC,2BAA2B,OAAO,KAAK,gBAAgB;AAAA,MAC1D;AAEA,mCAAU,MAAM;AACd,uBAAe,eAAe;AAC5B,cAAI,UAAU,CAAC,IAAI,SAAS,MAAM;AAChC,kBAAM,eAAe,GAAG;AAExB,iBAAK;AAGL,uBAAW,MAAM;AACf,kBAAI,SAAS,UAAU,IAAI,qBAAqB;AAAA,YAClD,GAAG,CAAC;AAAA,UACN,WAAW,CAAC,UAAU,IAAI,SAAS,MAAM;AACvC,wBAAY;AAAA,UACd;AAAA,QACF;AAEA,aAAK,aAAa;AAAA,MACpB,GAAG,CAAC,aAAa,QAAQ,MAAM,KAAK,cAAc,CAAC;AAEnD,aAAO;AAAA,QACL;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACpGA,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC0BO,SAAS,SAAS;AAAA,EACvB,IAAI;AAAA,EACJ;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,mBAAmB;AACrB,GAAkB;AAChB,MAAI,aAA2C,CAAC;AAChD,MAAI,aAA2C,CAAC;AAEhD,QAAM,kCAA8B,sBAAO,KAAK;AAEhD,QAAM,iBAAa,qBAAM;AACzB,QAAM,KAAK,cAAc;AACzB,QAAM,cAAU,qBAAM;AAEtB,MAAI,OAAO;AACT,qBAAiB,iBAAiB,GAAG,OAAO,IAAI,cAAc,KAAK;AACnE,iBAAa;AAAA,MACX,IAAI;AAAA,MACJ,SAAS,qBAAqB,UAAU,KAAK;AAAA,IAC/C;AAAA,EACF,WACE,CAAC,kBACD,CAAC,aACD,CAAC,4BAA4B,SAC7B;AACA,gCAA4B,UAAU;AACtC,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,eAAa;AAAA,IACX;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,EACrB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AArEA,IACAC;AADA;AAAA;AAAA;AACA,IAAAA,gBAA8B;AAAA;AAAA;;;ACD9B,IAAAC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKO,SAAS,aAAa,OAA8C;AACzE,QAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,mBAAmB;AAAA,EACrB,IAAI;AACJ,QAAM,EAAE,YAAY,WAAW,IAAI,SAAS,KAAK;AAEjD,QAAM,oBAAgB,qBAAM;AAC5B,QAAM,mBAAmB,EAAE,IAAI,cAAc;AAE7C,QAAM,qBAAiB,qBAAM;AAC7B,QAAM,oBAAoB,EAAE,IAAI,eAAe;AAE/C,QAAM,kBAAkB,mBAAmB;AAAA,IACzC,MAAM,eAAe;AAAA,IACrB,MAAM,gBAAgB;AAAA,IACtB,MAAM,kBAAkB;AAAA,EAC1B,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,MACV,cAAc,MAAM;AAAA,MACpB,OAAO,MAAM;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,iBAAiB,eAAe,OAAO,OAAO;AAAA,MAC9C,gBAAgB,MAAM;AAAA,MACtB,oBAAoB;AAAA,MACpB,qBAAqB,MAAM,mBAAmB;AAAA,MAC9C,MAAM,MAAM;AAAA,MAEZ,MAAM,qBAAqB,UAAU,MAAM,OAAO;AAAA,MAClD,SAAS,qBAAqB,UAAU,MAAM,UAAU;AAAA,MAExD,cAAc,MAAM;AAAA,MACpB,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA;AAAA,MAGjB,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM;AAAA,MACb,SAAS,MAAM;AAAA;AAAA,MAGf,kBAAkB,MAAM;AAAA,MACxB,oBAAoB,MAAM;AAAA,MAC1B,qBAAqB,MAAM;AAAA;AAAA,MAG3B,UAAU,MAAM;AAAA;AAAA,MAGhB,eAAe,MAAM;AAAA,MACrB,SAAS,MAAM;AAAA;AAAA,MAGf,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,MAEd,GAAG;AAAA,IACL;AAAA,EACF;AACF;AA7EA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,gBAAsB;AACtB;AACA;AAAA;AAAA;;;ACFA,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,qBAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AAAA;AAAA;;;ACDA,IAIa;AAJb;AAAA;AAAA;AAIO,IAAM,uBAAuB,CAAC,UAAqC;AACxE,YAAM,EAAE,UAAU,IAAI;AAEtB,UAAI,WAAW;AACb,eAAO;AAAA,MACT;AAEA,UAAI,cAAc,OAAO;AACvB,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AChBA,IAAAC,6BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AAAA;AAAA;;;ACNA,IAEAC,gBAEA,cAsBIC,qBAPE;AAnBN;AAAA;AAAA;AAEA,IAAAD,iBAAuB;AAEvB,mBAAO;AAsBH,IAAAC,sBAAA;AAPJ,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM,EAAE,aAAa,UAAU,SAAS,UAAU,GAAG,WAAW,IAAI;AAEpE,YAAM,cAAU,eAAAC,SAAW,UAAU,gBAAgB,MAAM,SAAS;AACpE,iBAAW,YAAY;AAEvB,aACE,6CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAC3C,UACH;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;AChCpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,gBAGA,cA2BSC,qBAZI;AApBb;AAAA;AAAA;AAEA,IAAAD,iBAAuB;AAGvB,mBAAO;AA2BE,IAAAC,sBAAA;AAZF,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AACtD,YAAM,EAAE,aAAa,UAAU,OAAO,KAAK,GAAG,WAAW,IAAI;AAE7D,YAAM,cAAU,eAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,CAAC,SAAS,GAAG,EAAE,GAAG;AAAA,QACpB;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aAAO,6CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAChE;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACnCpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,gBAEAC,eAEa;AAJb;AAAA;AAAA;AAAA,IAAAD,iBAAuB;AAEvB,IAAAC,gBAA6B;AAEtB,IAAM,yBAAyB,CACpC,WACA,mBACA,cACG;AACH,UAAI,CAAC,UAAW,QAAO;AAEvB,iBAAO,4BAAa,WAAW;AAAA,QAC7B,eAAW,eAAAC;AAAA,UACR,UAAU,MAAiC;AAAA,UAC5C;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAA0B;AAAA,IAC5B;AAAA;AAAA;;;AClBA,IAEAC,iBAeA,kBAsGQC,qBAjEF;AAtDN;AAAA;AAAA;AAAA;AAEA,IAAAD,kBAAuB;AASvB;AAEA,IAAAE;AACA,IAAAC;AACA,IAAAC;AACA;AACA,uBAAO;AAsGC,IAAAH,sBAAA;AAjER,IAAM,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AACvD,YAAM;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,EAAE,YAAY,YAAY,kBAAkB,IAAI,aAAa;AAAA,QACjE,GAAG;AAAA,QACH,qBAAqB;AAAA,MACvB,CAAC;AAED,YAAM,SAAS,SAAS;AAExB,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAE5D,YAAM,mBAAmB;AAAA,QACvB,iBAAiB;AAAA,QACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,QACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,QACrD,eAAe;AAAA,QACf,CAAC,aAAa,EAAE,GAAG;AAAA,MACrB;AAEA,YAAM,oBAAgB,gBAAAI,SAAW,mBAAmB,gBAAgB;AAEpE,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,UACE,iBAAiB;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AAEA,YAAM,uBAAmB,gBAAAA;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,0BAAsB,gBAAAA;AAAA,QAC1B;AAAA,QACA;AAAA,MACF;AAEA,aACE,8CAAC,SAAM,KAAI,MAAK,WAAW,kBACxB;AAAA,iBAAS,CAAC,UACT,6CAAC,SAAO,GAAG,YAAY,WAAW,cAC/B,iBACH;AAAA,QAEF,8CAAC,SAAI,WAAU,sCACZ;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,8CAAC,SAAI,WAAW,qBACb;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACE,GAAG;AAAA,gBACH,GAAG;AAAA,gBACJ;AAAA,gBACA;AAAA,gBACA,WAAW;AAAA;AAAA,YACb;AAAA,YACC;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,aACF;AAAA,UACC;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,WACF;AAAA,QACC,YACC,6CAAC,SAAI,WAAU,+BAA+B,UAAS;AAAA,QAGzD,6CAAC,gBAAc,GAAG,mBAAmB,cAA4B;AAAA,SACnE;AAAA,IAEJ;AAEA,cAAU,cAAc;AAAA;AAAA;;;ACnKxB,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACgBO,SAAS,eAAe,OAA4B;AACzD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,aAAa,YAAY;AAAA,IACzB,GAAG;AAAA,EACL,IAAI;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;AA5CA,IAyBIC;AAzBJ;AAAA;AAAA;AAyBI,IAAAA,uBAAA;AAAA;AAAA;;;ACzBJ,IAAAC,uBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACOO,SAAS,cACd,SACqC;AACrC,MAAI,CAAC,QAAS,QAAO;AACrB,SACE,OAAO,QAAQ,CAAC,MAAM,YACtB,aAAa,QAAQ,CAAC,KACtB,QAAQ,CAAC,EAAE,YAAY,UACvB,aAAa,QAAQ,CAAC,KACtB,QAAQ,CAAC,EAAE,YAAY;AAE3B;AAQO,SAAS,cACd,SACA,YACoB;AACpB,MAAI,cAAc,OAAO,GAAG;AAC1B,WAAO,QACJ,IAAI,kBAAgB;AAAA,MACnB,GAAG;AAAA,MACH,SAAS,YAAY,QAAQ;AAAA,QAAO,YAClC,eAAe,MAAM,EAClB,YAAY,EACZ,SAAS,WAAW,YAAY,CAAC;AAAA,MACtC;AAAA,IACF,EAAE,EACD,OAAO,iBAAe,YAAY,QAAQ,SAAS,CAAC;AAAA,EACzD;AAEA,SAAO,QAAQ;AAAA,IAAO,YACpB,eAAe,MAAM,EAAG,YAAY,EAAE,SAAS,WAAW,YAAY,CAAC;AAAA,EACzE;AACF;AA9CA,IAoBa,gBAGA,gBA6BA;AApDb,IAAAC,cAAA;AAAA;AAAA;AAoBO,IAAM,iBAAiB,CAAC,WAC7B,OAAO,WAAW,WAAW,SAAS,QAAQ;AAEzC,IAAM,iBAAiB,CAAC,WAC7B,OAAO,WAAW,WAAW,SAAS,QAAQ;AA4BzC,IAAM,oBAAoB,CAAC,QAAgB,UAChD,GAAG,MAAM,IAAI,MACV,KAAK,EACL,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE,CAAC;AAAA;AAAA;;;ACzD5B,IAAAC,gBACAC,iBA2CQC,sBAvCK;AALb;AAAA;AAAA;AAAA,IAAAF,iBAAkC;AAClC,IAAAC,kBAAuB;AACvB,IAAAE;AA0CQ,IAAAD,uBAAA;AAvCD,IAAM,SAAS,CAA2B;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,IACF,MAA8B;AAC5B,YAAM,gBAAY,uBAAsB,IAAI;AAC5C,YAAM,cAAc,eAAe,MAAM,KAAK;AAC9C,YAAM,SAAS;AAAA,QACb,sBAAsB;AAAA,QACtB;AAAA,MACF;AAEA,oCAAU,MAAM;AACd,YACE,iBACA,UAAU,WACV,UAAU,QAAQ,gBAClB;AACA,oBAAU,QAAQ,eAAe,EAAE,OAAO,UAAU,CAAC;AAAA,QACvD;AAAA,MACF,GAAG,CAAC,aAAa,CAAC;AAElB,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,MAAK;AAAA,UACL,eAAa;AAAA,UAEb;AAAA,UACA,iBAAe;AAAA,UACf,aAAa,MAAM,eAAe,MAAM;AAAA,UACxC,eAAW,gBAAAE,SAAW,2BAA2B,WAAW;AAAA,YAC1D,2CAA2C;AAAA,UAC7C,CAAC;AAAA,UAEA,4BACC,8CAAC,mBAAgB,QAAgB,eAA8B,IAE/D,eAAe,MAAM;AAAA;AAAA,QAXlB,eAAe,MAAM;AAAA,MAa5B;AAAA,IAEJ;AAAA;AAAA;;;AClDA,IAAAC,iBAoEWC,sBA3DL,cA0BO;AAnCb;AAAA;AAAA;AAAA,IAAAD,kBAAuB;AACvB;AAMA,IAAAE;AA6DW,IAAAD,uBAAA;AA3DX,IAAM,eAAe,CACnB,QACA,OACA,eACW;AACX,UAAI;AACJ,UAAI,OAAO,WAAW,YAAY,OAAO,GAAI,OAAM,OAAO;AAAA,eACjD,OAAO,WAAW,SAAU,OAAM,GAAG,OAAO,KAAK,KAAK,OAAO,KAAK;AAAA,eAClE,OAAO,WAAW,SAAU,OAAM;AAAA,UACtC,OAAM,OAAO,KAAK;AAEvB,aAAO,eAAe,SAAY,GAAG,UAAU,IAAI,GAAG,KAAK;AAAA,IAC7D;AAcO,IAAM,UAAU,CAA2B;AAAA,MAChD;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAAuB;AACrB,YAAM,cAAU,gBAAAE,SAAW,yBAAyB;AAAA,QAClD,iCAAiC,CAAC;AAAA,MACpC,CAAC;AAED,eAAS,YACP,QACA,YACA,OACA;AACA,YACE,OAAO,WAAW,YAClB,QAAQ,UACR,OAAO,OAAO,OAAO,UACrB;AACA,iBAAO,OAAO;AAAA,QAChB;AACA,eAAO,cAAc,OAAO,IACxB,GAAG,EAAE,WAAW,UAAU,IAAI,KAAK,KACnC,GAAG,EAAE,WAAW,KAAK;AAAA,MAC3B;AAGA,UAAI,CAAC,QAAQ;AACX,eAAO,8CAAC,SAAI,MAAK,WAAU,IAAQ,WAAW,SAAS;AAAA,MACzD;AAEA,UAAI,WAAW,QAAQ,WAAW,GAAG;AACnC,eACE,8CAAC,SAAI,MAAK,WAAU,IAAQ,WAAW,SACrC,wDAAC,SAAI,WAAU,+BAA8B,wBAAU,GACzD;AAAA,MAEJ;AAEA,aACE,8CAAC,SAAI,MAAK,WAAU,IAAQ,WAAW,SACpC,wBAAc,OAAO,IAClB,QAAQ,IAAI,CAAC,QAAQ,eACnB;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UAEL,mBAAiB,GAAG,EAAE,UAAU,UAAU;AAAA,UAC1C,WAAU;AAAA,UAEV;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,IAAI,GAAG,EAAE,UAAU,UAAU;AAAA,gBAC7B,WAAU;AAAA,gBAET,iBAAO;AAAA;AAAA,YACV;AAAA,YACC,OAAO,QAAQ,IAAI,CAAC,aAAa,UAChC;AAAA,cAAC;AAAA;AAAA,gBAEC,QAAQ;AAAA,gBACR,eACE,qBAAqB,SACrB,0BAA0B;AAAA,gBAE5B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,IAAI,YAAY,aAAa,YAAY,KAAK;AAAA;AAAA,cATzC,aAAa,aAAa,OAAO,UAAU;AAAA,YAUlD,CACD;AAAA;AAAA;AAAA,QAxBI,OAAO;AAAA,MAyBd,CACD,IACD,OAAO,YAAY,cACjB,QAAQ,IAAI,CAAC,QAAQ,UACnB;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA,eAAe,qBAAqB;AAAA,UACpC;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,YAAY,QAAQ,GAAG,KAAK;AAAA;AAAA,QAN3B,aAAa,QAAQ,KAAK;AAAA,MAOjC,CACD,IACD,MACR;AAAA,IAEJ;AAAA;AAAA;;;AC3HO,SAAS,qBAAqB,SAAsC;AACzE,QAAM,CAAC,kBAAkB,mBAAmB,QAAI;AAAA,IAC9C,WAAW,QAAQ,SAAS,IAAI;AAAA,EAClC;AACA,QAAM,CAAC,uBAAuB,wBAAwB,QAAI,yBAAS,CAAC;AAEpE,WAAS,sBAAsB;AAC7B,UAAM,UAAU,cAAc,OAAO;AAErC,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,QAAI,SAAS;AACX,YAAM,QAAQ,QAAQ,qBAAqB;AAC3C,UAAI,qBAAqB,MAAM,QAAQ,SAAS,GAAG;AACjD,YAAI,0BAA0B,QAAQ,SAAS,GAAG;AAChD;AAAA,QACF;AAEA,4BAAoB,CAAC;AACrB,iCAAyB,wBAAwB,CAAC;AAAA,MACpD,OAAO;AACL,4BAAoB,mBAAmB,CAAC;AAAA,MAC1C;AAAA,IACF,OAAO;AACL,UAAI,qBAAqB,QAAQ,SAAS,GAAG;AAC3C;AAAA,MACF;AACA,0BAAoB,mBAAmB,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,WAAS,0BAA0B;AACjC,UAAM,UAAU,cAAc,OAAO;AAErC,QAAI,qBAAqB,KAAK,0BAA0B,GAAG;AACzD;AAAA,IACF;AAEA,QAAI,SAAS;AACX,UAAI,qBAAqB,GAAG;AAE1B,cAAM,iBAAiB,wBAAwB;AAC/C,cAAM,YAAY,QAAQ,cAAc;AACxC,iCAAyB,cAAc;AACvC,4BAAoB,UAAU,QAAQ,SAAS,CAAC;AAAA,MAClD,OAAO;AACL,4BAAoB,mBAAmB,CAAC;AAAA,MAC1C;AAAA,IACF,OAAO;AACL,0BAAoB,mBAAmB,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,WAAS,uBAAuB;AAC9B,wBAAoB,CAAC;AACrB,6BAAyB,CAAC;AAAA,EAC5B;AAEA,WAAS,sBAAsB;AAC7B,UAAM,UAAU,cAAc,OAAO;AAErC,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,QAAI,SAAS;AACX,YAAM,iBAAiB,QAAQ,SAAS;AACxC,YAAM,YAAY,QAAQ,cAAc;AACxC,+BAAyB,cAAc;AACvC,0BAAoB,UAAU,QAAQ,SAAS,CAAC;AAAA,IAClD,OAAO;AACL,0BAAoB,QAAQ,SAAS,CAAC;AAAA,IACxC;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM;AAC3B;AAAA,MACE,OAAO,YAAY,eAAe,QAAQ,SAAS,IAAI;AAAA,IACzD;AACA,6BAAyB,CAAC;AAAA,EAC5B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAjGA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAyB;AAEzB,IAAAC;AAAA;AAAA;;;ACYO,SAAS,mBAA6C;AAAA,EAC3D;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAE5C,MAAS;AACX,QAAM,0BAAsB;AAAA,IAC1B;AAAA;AAAA,IAEA,UAAU,IAAI;AAAA,EAChB;AACA,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,CAACC,QAAO,QAAQ,QAAI,yBAAuB,IAAI;AAIrD,QAAM,sBAAkB,uBAAO,YAAY;AAC3C,kBAAgB,UAAU;AAC1B,QAAM,oBAAgB,uBAAO,UAAU;AACvC,gBAAc,UAAU;AAExB,gCAAU,MAAM;AACd,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,EAAE,OAAO,IAAI;AAEnB,UAAM,eAAe,YAAY;AAC/B,mBAAa,IAAI;AACjB,eAAS,IAAI;AACb,UAAI;AACF,YAAI,gBAAgB,SAAS;AAC3B,cAAI,oBAAoB,SAAS,iBAAiB;AAChD,+BAAmB,MAAS;AAC5B;AAAA,UACF;AACA,gBAAM,SAAS,MAAM,gBAAgB,QAAQ,qBAAqB;AAAA,YAChE;AAAA,UACF,CAAC;AACD,6BAAmB,MAAM;AACzB,wBAAc,UAAU,mBAAmB;AAAA,QAC7C,WAAW,SAAS;AAClB,6BAAmB,cAAc,SAAS,mBAAmB,CAAC;AAAA,QAChE,OAAO;AACL,mBAAS,IAAI,MAAM,qBAAqB,CAAC;AAAA,QAC3C;AAAA,MACF,SAAS,GAAY;AACnB,YAAI,aAAa,gBAAgB,EAAE,SAAS,cAAc;AAExD;AAAA,QACF;AACA,iBAAS,CAAU;AAAA,MACrB,UAAE;AACA,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAEA,QAAI,CAAC,qBAAqB,SAAS;AACjC,WAAK,aAAa;AAAA,IACpB,OAAO;AACL,0BAAoB,UAAU;AAAA,IAChC;AAEA,WAAO,MAAM;AACX,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,WAAS,sBAAsB,YAAyC;AACtE,iBAAa,IAAI;AACjB,WAAO,WACJ,KAAK,kBAAkB,EACvB,MAAM,QAAQ,EACd,QAAQ,MAAM,aAAa,KAAK,CAAC;AAAA,EACtC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAA;AAAA,IACA,SAASA,UAAS;AAAA,EACpB;AACF;AA3GA,IAAAC,sBACAC;AADA;AAAA;AAAA;AAAA,IAAAD,uBAAkC;AAClC,IAAAC,iBAA4C;AAE5C,IAAAC;AAAA;AAAA;;;ACHA,IAAAC,sBACAC,iBAGAC,gBASA,iBA2VIC,sBAzVE,eA0YO;AAzZb;AAAA;AAAA;AAAA,IAAAH,uBAA6B;AAC7B,IAAAC,kBAAuB;AAGvB,IAAAC,iBAAmD;AACnD;AACA,IAAAE;AACA,IAAAC;AACA;AAEA;AACA;AACA,IAAAC;AACA,sBAAO;AA2VH,IAAAH,uBAAA;AAzVJ,IAAM,gBAAgB,CAA2B;AAAA,MAC/C;AAAA,MACA,GAAG;AAAA,IACL,MAAwB;AACtB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,0BAAsB,uBAAO,KAAK;AACxC,YAAM,kBAAc,uBAAyB,IAAI;AACjD,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,gBAAgB,EAAE;AAC/D,YAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAClD,YAAM,EAAE,iBAAiB,uBAAuB,WAAW,OAAAI,OAAM,IAC/D,mBAAmB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACH,YAAM,CAAC,iBAAiB,kBAAkB,QAAI;AAAA,QAC5CA,QAAO,WAAW;AAAA,MACpB;AACA,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI,qBAAqB,eAAe;AAExC,YAAM,WAAW,OAAO;AACxB,YAAM,gBAAY,sBAAM;AACxB,YAAM,eAAW,sBAAM;AACvB,YAAM,qBAAiB,uBAA8B,IAAI;AACzD,YAAM,wBAAoB,uBAAO,KAAK;AACtC,YAAM,sBAAkB,uBAAO,KAAK;AACpC,YAAM,EAAE,KAAK,IAAI,cAAc;AAC/B,YAAM,WAAW,KAAK,IAAI;AAE1B,oCAAU,MAAM;AACd,2BAAmBA,QAAO,WAAW,YAAY;AAAA,MACnD,GAAG,CAACA,QAAO,YAAY,CAAC;AAGxB,YAAM,gBAAgB,MAAS;AAE7B,cAAM,cAAc,kBAChB,cAAc,eAAe,IAC3B,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAC7B,gBAAgB,CAAC,IACnB,UACE,cAAc,OAAO,IACnB,QAAQ,CAAC,GAAG,QAAQ,CAAC,IACrB,QAAQ,CAAC,IACX;AAGN,YAAI,OAAO,gBAAgB,UAAU;AACnC,iBAAO;AAAA,QACT;AAGA,eAAO,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,MAChC;AAEA,YAAM,cAAc,CAAC,MAAkB;AACrC,kBAAU,CAAC;AACX,YAAI,CAAC,mBAAmB,gBAAgB,WAAW,EAAG;AACtD,YAAI,eAAe,SAAS;AAC1B,uBAAa,eAAe,OAAO;AACnC,yBAAe,UAAU;AAAA,QAC3B;AAGA,cAAM,iBACJ,kBAAkB,WAAW,EAAE,kBAAkB;AACnD,YAAI,kBAAkB,SAAS;AAC7B,4BAAkB,UAAU;AAAA,QAC9B;AAGA,YAAI,gBAAgB,WAAW,CAAC,gBAAgB;AAC9C;AAAA,QACF;AAGA,YAAI,gBAAgB;AAClB,oBAAU,IAAI;AACd,0BAAgB,UAAU;AAAA,QAC5B;AAAA,MACF;AAEA,oCAAU,MAAM;AACd,YAAI,CAAC,YAAY,OAAO,aAAa,WAAY;AACjD,cAAM,eAAe,SAAS;AAC9B,YAAI,CAAC,aAAc;AAEnB,cAAM,kBAAkB,MAAM;AAE5B,4BAAkB,UAAU;AAAA,QAC9B;AAEA,qBAAa,iBAAiB,aAAa,eAAe;AAC1D,eAAO,MAAM;AACX,uBAAa,oBAAoB,aAAa,eAAe;AAAA,QAC/D;AAAA,MACF,GAAG,CAAC,QAAQ,CAAC;AAEb,6CAAa,MAAM;AACjB,YAAI,eAAe,SAAS;AAC1B,uBAAa,eAAe,OAAO;AAAA,QACrC;AAAA,MACF,CAAC;AAED,YAAM,oBAAoB,CAAC,MAA2C;AACpE,cAAM,WAAW,EAAE,OAAO;AAC1B,sBAAc,QAAQ;AACtB,2BAAmB,MAAS;AAC5B,wBAAgB,UAAU;AAC1B,sBAAc,IAAI;AAElB,YAAI,CAAC,cAAc;AACjB,oBAAU,IAAI;AAAA,QAChB;AACA,uBAAe;AACf,mBAAW,CAAC;AAAA,MACd;AAEA,YAAM,qBAAqB,CAAC,WAAc;AACxC,cAAM,MAAM,eAAe,MAAM;AAGjC,YAAI,CAAC,OAAO,QAAQ,GAAI;AAExB,YACE,OAAO,WAAW,YAClB,cAAc,UACd,OAAO,YACP,OAAO,OAAO,aAAa,YAC3B;AACA,0BAAgB,UAAU;AAC1B,qBAAW,MAAM;AACf,gBAAI,YAAY,OAAO,aAAa,cAAc,SAAS,SAAS;AAClE,uBAAS,QAAQ,MAAM;AAAA,YACzB;AAAA,UACF,GAAG,CAAC;AACJ,gBAAM,kBAAkB,OAAO,SAAS;AACxC,gCAAsB,eAAe;AACrC,0BACG,KAAK,MAAM;AACV,sBAAU,IAAI;AACd,0BAAc,IAAI;AAAA,UACpB,CAAC,EACA,MAAM,MAAM;AAAA,UAEb,CAAC;AACH;AAAA,QACF;AAGA,4BAAoB,UAAU;AAC9B,wBAAgB,UAAU;AAE1B,sBAAc,KAAK;AACnB,2BAAmB,MAAS;AAC5B,kBAAU,KAAK;AACf,sBAAc,GAAG;AACjB,qBAAa,MAAM;AAAA,MACrB;AAEA,YAAM,iBAAiB,MAAM;AAC3B,YAAI,CAAC,gBAAiB,QAAO;AAC7B,YAAI,cAAc,eAAe,GAAG;AAClC,iBAAO,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAAA,QACtC;AAEA,eAAO,gBAAgB,CAAC;AAAA,MAC1B;AAEA,YAAM,uBAAuB,MAAM;AACjC,YAAI,CAAC,gBAAiB,QAAO;AAC7B,YAAI,qBAAqB,GAAI,QAAO;AAEpC,YAAI,cAAc,eAAe,GAAG;AAClC,gBAAM,QAAQ,gBAAgB,qBAAqB;AACnD,iBAAO,OAAO,QAAQ,gBAAgB;AAAA,QACxC;AAEA,eAAO,gBAAgB,gBAAgB;AAAA,MACzC;AAEA,YAAM,yBAAyB,MAAM;AACnC,cAAM,SAAS,qBAAqB;AACpC,YAAI,CAAC,OAAQ,QAAO;AAEpB,YAAI,cAAc,eAAe,GAAG;AAClC,iBAAO,GAAG,SAAS,WAAW,qBAAqB,IAAI,gBAAgB;AAAA,QACzE;AAEA,eAAO,GAAG,SAAS,WAAW,gBAAgB;AAAA,MAChD;AAEA,YAAM,aAAa,CAAC,MAAoC;AAGtD,YAAI,CAAC,gBAAgB,SAAS;AAC5B,gBAAM,YAAY,WAAW,KAAK;AAClC,gBAAM,iBAAiB,UAAU,YAAY;AAC7C,gBAAM,oBAAoB,qBAAqB;AAC/C,gBAAM,QAAQ,eAAe,iBAAiB;AAE9C,cAAI,mBAAmB,OAAO,YAAY,GAAG;AAE3C,uBAAW,MAAM;AACf,iCAAmB,iBAAsB;AAAA,YAC3C,GAAG,CAAC;AAAA,UACN,WAAW,cAAc,IAAI;AAE3B,uBAAW,MAAM;AACf,iCAAmB,cAAc,CAAC;AAAA,YACpC,GAAG,CAAC;AAAA,UACN,OAAO;AAEL;AAAA,cACE,gBAAgB;AAAA,YAClB;AACA,uBAAW,MAAM;AACf,4BAAc,EAAE;AAAA,YAClB,GAAG,CAAC;AAAA,UACN;AAAA,QACF;AAEA,uBAAe,UAAU,WAAW,MAAM;AACxC,mBAAS,CAAC;AACV,oBAAU,KAAK;AACf,wBAAc,KAAK;AAAA,QACrB,GAAG,GAAG;AAAA,MACR;AAEA,YAAM,gBAAgB,CAAC,MAA2B;AAChD,gBAAQ,EAAE,KAAK;AAAA,UACb,KAAK;AACH,cAAE,eAAe;AACjB,4BAAgB,UAAU;AAC1B,sBAAU,IAAI;AACd,gCAAoB;AACpB;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,4BAAgB,UAAU;AAC1B,sBAAU,IAAI;AACd,oCAAwB;AACxB;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,4BAAgB,UAAU;AAC1B,sBAAU,IAAI;AACd,iCAAqB;AACrB;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,4BAAgB,UAAU;AAC1B,sBAAU,IAAI;AACd,gCAAoB;AACpB;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,gBAAI,QAAQ;AACV,oBAAM,iBAAiB,qBAAqB,KAAK,eAAe;AAChE,kBAAI,gBAAgB;AAClB,mCAAmB,cAAc;AAAA,cACnC;AAAA,YACF;AACA;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,0BAAc,EAAE;AAChB,sBAAU,KAAK;AACf,2BAAe;AACf;AAAA,UACF;AAAA,QAEF;AAAA,MACF;AAEA,oCAAU,MAAM;AACd,YAAI,OAAO;AACT,wBAAc,KAAK;AAAA,QACrB;AAAA,MACF,GAAG,CAAC,KAAK,CAAC;AAGV,oCAAU,MAAM;AACd,YAAI,gBAAgB,YAAY;AAC9B,oBAAU,CAAC,CAAC,mBAAmB,gBAAgB,SAAS,CAAC;AAAA,QAC3D;AAAA,MACF,GAAG,CAAC,iBAAiB,cAAc,UAAU,CAAC;AAE9C,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,UACE,gCAAgC;AAAA,UAChC,+BAA+B;AAAA,UAC/B,8BAA8B;AAAA,QAChC;AAAA,QACA;AAAA,MACF;AAEA,YAAM,mBAAmB,MAAM;AAC7B,YAAI,UAAW,QAAO;AACtB,YAAI,CAAC,mBAAmB,gBAAgB,WAAW,GAAG;AACpD,iBAAO,aAAa,qBAAqB;AAAA,QAC3C;AACA,cAAM,QAAQ,cAAc,eAAe,IACvC,gBAAgB,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,QAAQ,QAAQ,CAAC,IACpE,gBAAgB;AACpB,eAAO,UAAU,aACb,GAAG,KAAK,UAAU,UAAU,IAAI,KAAK,GAAG,eACxC;AAAA,MACN;AAEA,aACE,+CAAC,SAAI,IAAQ,eAAY,4BAA2B,WAAW,SAC7D;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,aAAU;AAAA,YACV,IAAI;AAAA,YACJ,aAAY;AAAA,YACZ,WAAU;AAAA,YAET,2BAAiB;AAAA;AAAA,QACpB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,WAAU;AAAA,YACV,MAAK;AAAA,YACL,OAAO;AAAA,YACP;AAAA,YACA,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,UAAU;AAAA,YACV,cAAa;AAAA,YACb,oBAAkB,YAAY,WAAW;AAAA,YACzC,qBAAkB;AAAA,YAClB,iBAAc;AAAA,YACd,aAAW;AAAA,YACX,iBAAe;AAAA,YACf,iBAAe;AAAA,YACf,yBACE,qBAAqB,KAAK,SAAY,uBAAuB;AAAA,YAE/D,cAAc;AAAA,YACd,KAAK;AAAA,YACL,cAAc,gBAAgB,mBAAmBD,QAAO;AAAA;AAAA,QAC1D;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ;AAAA,YACA;AAAA,YACA,SAAS;AAAA,YACT;AAAA,YACA;AAAA,YACA,gBAAgB;AAAA,YAChB;AAAA,YACA;AAAA;AAAA,QACF;AAAA,SACF;AAAA,IAEJ;AAEO,IAAM,WAAW;AAAA;AAAA;;;ACzZxB,IAAAE,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AAAA;AAAA;;;ACCO,SAAS,sBACd,UACiC;AACjC,SAAO,MAAM,QAAQ,QAAQ,KAAK,SAAS,KAAK,UAAQ,WAAW,IAAI;AACzE;AANA,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACaA,SAAS,oBACP,EAAE,MAAM,GACR,sBACA;AACA,MAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,KAAK,GAAG;AACnC,UAAM,MAAM,kBAAkB;AAAA,EAChC;AAEA,MAAI,sBAAsB,KAAK,GAAG;AAChC,UAAM,MAAM,MAAM,CAAC,EAAE,WAAW;AAAA,EAClC;AAEA,SAAQ,MAAmC,IAAI,WAAS;AAAA,IACtD,IAAI,KAAK;AAAA,IACT,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,IACxC,OAAO,KAAK;AAAA;AAAA;AAAA,IAGZ,UACE,KAAK,SAAS,YACV,SACA,YAAY;AACV,YAAM,SAAS,MAAM,qBAAqB,SAAS,KAAK,EAAE;AAC1D,aAAO,oBAAoB,QAAQ,oBAAoB;AAAA,IACzD;AAAA,EACR,EAAE;AACJ;AAvCA,IAAAC,eACAC,gBAkGYC,sBA1DC;AAzCb;AAAA;AAAA;AAAA,IAAAF,gBAAuB;AACvB,IAAAC,iBAAsC;AAEtC,IAAAE;AACA,IAAAC;AAOA,IAAAC;AAwFY,IAAAH,uBAAA;AA1DL,IAAM,gBAAgB,CAAC;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAA0B;AACxB,YAAM,CAACI,QAAO,SAAS,QAAI,yBAAuB,IAAI;AAEtD,YAAM,eAAW;AAAA,QACf,CAAC,aAA2B;AAC1B,cAAI,YAAY,KAAM,WAAU,QAAQ;AACxC,oBAAU,QAAQ;AAAA,QACpB;AAAA,QACA,CAAC,OAAO;AAAA,MACV;AAEA,YAAM,mBAAe;AAAA,QACnB,OAAO,eAAuB;AAC5B,cAAI;AACF,kBAAM,WAAW,MAAM,qBAAqB,OAAO,UAAU;AAC7D,qBAAS,IAAI;AACb,kBAAM,UAAU,oBAAoB,UAAU,oBAAoB;AAClE,iCAAqB;AACrB,mBAAO;AAAA,UACT,SAAS,GAAG;AACV,qBAAS,CAAU;AACnB,mBAAO,CAAC;AAAA,UACV;AAAA,QACF;AAAA,QACA,CAAC,sBAAsB,UAAU,kBAAkB;AAAA,MACrD;AAEA,YAAM,iBAAiB,CAAC,aAA6B;AACnD,iBAAS,IAAI;AAEb,YAAI,OAAO,aAAa,YAAY,CAAC,SAAS,IAAI;AAChD,mBAAS,IAAI,MAAM,4BAA4B,CAAC;AAChD,iBAAO,QAAQ,QAAQ;AAAA,QACzB;AAEA,eAAO,qBACJ,IAAI,SAAS,EAAE,EACf,KAAK,iBAAiB,EACtB,MAAM,QAAQ;AAAA,MACnB;AAEA,YAAM,mBAAoBA,UAAS,uBAAwB;AAE3D,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA,YAAY;AAAA,UACZ;AAAA,UACA,cAAc;AAAA,UACd,MAAM,8CAAC,QAAK,MAAM,sBAAQ;AAAA;AAAA,MAC5B;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;ACxG5B;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,sBAAA;AAAA;AAAA;AAAA;AACA;AACA,IAAAC;AAAA;AAAA;;;ACmBA,SAAS,eAAe,OAAsC;AAC5D,SACE,UAAU,UACV,UAAU,aACV,UAAU,aACV,UAAU;AAEd;AA5BA,IAAAC,eACAC,iBAIA,cAqEQC,sBA5CF;AA9BN;AAAA;AAAA;AAAA,IAAAF,gBAAuD;AACvD,IAAAC,kBAAuB;AAGvB,IAAAE;AACA,mBAAO;AAqEC,IAAAD,uBAAA;AA5CR,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB,SAAS;AAAA,QACT,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,UAAI,CAAC,KAAM,QAAO;AAElB,YAAM,UACJ,eAAe,eAAe,WAAW,IAAI,cAAc;AAE7D,YAAM,aACJ,YAAY,YAAY,uBAAuB,eAAe,OAAO;AAEvE,YAAM,cAAU,gBAAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,UAAU,YAAY;AAAA,UACtB,aAAa,YAAY;AAAA,UACzB,aAAa,YAAY;AAAA,UACzB,WAAW,YAAY;AAAA,UACvB,gBAAgB;AAAA,QAClB;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,OAAO;AAAA,QACX,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAEA,YAAM,oBAAgB,gBAAAA,SAAW,UAAU,sBAAsB;AACjE,YAAM,kBAAc,gBAAAA,SAAW,UAAU,oBAAoB;AAC7D,YAAM,qBAAiB,gBAAAA,SAAW,UAAU,uBAAuB;AAEnE,aACE,+CAAC,WAAQ,KAAU,MAAK,SAAS,GAAG,YAAY,WAAW,SACzD;AAAA,sDAAC,UAAK,WAAW,aACf,wDAAC,QAAK,MAAM,KAAK,OAAO,GAAG,OAAO,YAAY,GAChD;AAAA,QACA,+CAAC,SACE;AAAA,oBAAU,8CAAC,OAAE,WAAW,eAAgB,kBAAO;AAAA,UAChD,8CAAC,SAAI,WAAW,gBAAiB,UAAS;AAAA,WAC5C;AAAA,SACF;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACpFpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBAGA,YAgDIC,sBA9CE;AALN;AAAA;AAAA;AAAA,IAAAD,kBAAuB;AAEvB;AACA,iBAAO;AAgDH,IAAAC,uBAAA;AA9CJ,IAAM,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,MAAgB;AAC3C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,cAAU,gBAAAC,SAAW,UAAU,cAAc,WAAW,SAAS;AAEvE,YAAM,aAAa,qBAAqB;AAAA,QACtC,SAAS,gBAAgB,OAAO;AAAA,QAChC,eAAe,gBAAgB,iBAAiB,QAAQ;AAAA,QACxD,cAAc,gBAAgB,gBAAgB,QAAQ;AAAA,QACtD,YAAY,gBAAgB,cAAc,iBAAiB;AAAA,QAC3D,cAAc,gBAAgB,gBAAgB,gBAAgB;AAAA,QAC9D,eAAe,gBAAgB,iBAAiB,eAAe;AAAA,QAC/D,aAAa,gBAAgB,eAAe,kBAAkB;AAAA,QAC9D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AAED,aACE,8CAAC,WAAQ,KAAU,OAAO,YAAa,GAAG,YAAY,WAAW,SAAS;AAAA,IAE9E;AAEA,QAAI,cAAc;AAAA;AAAA;;;ACvDlB,IAAAC,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAGAC,gBACAC,iBACA,oBA0BMC,sBAfA;AAhBN;AAAA;AAAA;AAAA;AAGA,IAAAF,iBAAuC;AACvC,IAAAC,kBAAuB;AACvB,yBAAO;AA0BD,IAAAC,uBAAA;AAfN,IAAM,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,MAAwB;AAC3D,YAAM,EAAE,cAAc,YAAY,cAAc,IAAI;AACpD,YAAM,EAAE,SAAS,IAAI,EAAE,UAAU,EAAE,cAAc,UAAU,EAAE;AAC7D,YAAM,EAAE,UAAU,GAAG,WAAW,IAAI;AACpC,YAAM,aAAa,wBAAS,QAAQ,QAAQ;AAG5C,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE,8CAAC,SAAI,KAAW,GAAG,YAAa,GAAG,UAAU,WAAW,SACtD,wDAAC,QACE,qBAAW;AAAA,QAAI,CAAC,OAAO,UACtB;AAAA,UACE;AAAA,UACA;AAAA,YACE,KAAK;AAAA,YACL,WAAW,MAAM,WAAW,SAAS;AAAA,UACvC;AAAA,QACF;AAAA,MACF,GACF,GACF;AAAA,IAEJ;AAEA,gBAAY,cAAc;AAAA;AAAA;;;AC9C1B,IAGAC,gBACAC,iBA+BMC,sBAPA;AA5BN;AAAA;AAAA;AAAA;AAGA,IAAAF,iBAAuC;AACvC,IAAAC,kBAAuB;AAEvB,IAAAE;AA6BM,IAAAD,uBAAA;AAPN,IAAM,iBAAiB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA2B;AACjE,YAAM;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,gBAAgB,cAAc;AAAA,QAC9B;AAAA,QACA,YACE,8CAAC,OAAI,WAAU,gCAA+B,eAAY,QACvD,eACH;AAAA,QAEF,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,EAAE,UAAU,IAAI;AAAA,QACpB,WAAW;AAAA,UACT,gBAAgB,YAAY,cAAc;AAAA,UAC1C,iBAAiB,cAAc;AAAA,UAC/B,GAAG;AAAA,QACL;AAAA,MACF;AAGA,YAAM,cAAU,gBAAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AAEA,YAAM,QACJ,OAAO,aAAa,WAClB,8CAAC,UAAM,GAAG,WAAY,UAAS,IAE9B,wBAAS,KAAK,QAAQ;AAG3B,aACE,+CAAC,QAAG,WAAW,SACZ;AAAA,yCAAa,OAAO;AAAA,UACnB,GAAI,MAAM;AAAA,UACV,GAAG;AAAA,UACH;AAAA,QACF,CAA4B;AAAA,QAC3B,CAAC,MAAM,aAAa;AAAA,SACvB;AAAA,IAEJ;AAEA,mBAAe,cAAc;AAAA;AAAA;;;AC3E7B,IAAAC,oBAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IACAC,eAYIC,sBAJE;AATN;AAAA;AAAA;AACA,IAAAD,gBAAwB;AACxB,IAAAE;AACA,IAAAC;AAUI,IAAAF,uBAAA;AAJJ,IAAM,UAAU,CAAC,UAAwB;AACvC,YAAM,EAAE,SAAS,IAAI;AAErB,aACE,gFACE;AAAA,sDAAC,SAAI,WAAU,+BACb,wDAAC,QAAK,MAAM,uBAAS,MAAI,MAAC,MAAK,MAAK,GACtC;AAAA,QACA,8CAAC,kBAAe,WAAU,+BAA8B,qBAExD;AAAA,QACC;AAAA,SACH;AAAA,IAEJ;AAAA;AAAA;;;ACvBA,IAAAG,eAKEC,sBADI;AAJN;AAAA;AAAA;AAAA,IAAAD,gBAAqB;AACrB,IAAAE;AACA,IAAAC;AAGE,IAAAF,uBAAA;AADF,IAAM,UAAU,MACd,gFACE;AAAA,oDAAC,SAAI,WAAU,+BACb,wDAAC,QAAK,MAAM,oBAAM,MAAK,MAAK,GAC9B;AAAA,MACA,8CAAC,kBAAe,WAAU,+BAA8B,qBAExD;AAAA,OACF;AAAA;AAAA;;;ACZF,IAGAG,iBAMA,eA2DIC,sBAhCE;AApCN;AAAA;AAAA;AAAA;AAGA,IAAAD,kBAAuB;AAEvB;AAEA,IAAAE;AACA;AACA,oBAAO;AA2DH,IAAAD,uBAAA;AAhCJ,IAAM,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM;AAAA,QACJ;AAAA,QACA,aAAa,YAAY;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,OAAO;AAAA,QAEP;AAAA,QAEA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,EAAE,YAAY,IAAI,UAAU,KAAK;AAGvC,iBAAW,gBAAY,gBAAAE;AAAA,QACrB;AAAA,QACA;AAAA,QACA,aAAa,OAAO;AAAA,QACpB,UAAU,IAAI;AAAA,QACd;AAAA,UACE,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,UAChB,gBAAgB,aAAa,CAAC;AAAA,QAChC;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE,+CAAC,aAAU,KAAW,GAAG,aAAc,GAAG,YACvC;AAAA,oBAAY,8CAAC,WAAS,UAAS,IAAa;AAAA,QAC5C,aAAa,CAAC,aAAa,8CAAC,WAAQ;AAAA,SACvC;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;AC3ErB,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,iBACAC,gBAiBA,sBAuGIC,sBArGS;AAtBb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AACvB,IAAAC,iBAUO;AACP;AACA;AACA,IAAAE;AACA,IAAAC;AACA,IAAAC;AAEA,2BAAO;AAuGH,IAAAH,uBAAA;AArGG,IAAM,gBAAgB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA0B;AACtE,YAAM;AAAA,QACJ;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,CAAC;AAAA,QAChB;AAAA,QACA;AAAA,QACA,mBAAmB;AAAA,QACnB,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAmB,YAAY;AAI/D,YAAM,uBAAmB,uBAAO,KAAK;AACrC,YAAM,0BAAsB,uBAAiB,YAAY;AAEzD,oCAAU,MAAM;AAEd,cAAM,aACJ,aAAa,WAAW,oBAAoB,QAAQ,UACpD,aAAa;AAAA,UACX,CAAC,KAAK,UAAU,QAAQ,oBAAoB,QAAQ,KAAK;AAAA,QAC3D;AAEF,YAAI,cAAc,CAAC,iBAAiB,SAAS;AAC3C,sBAAY,YAAY;AACxB,8BAAoB,UAAU;AAC9B,2BAAiB,UAAU;AAAA,QAC7B;AAAA,MACF,GAAG,CAAC,YAAY,CAAC;AAEjB,YAAM,2BAAuB,gBAAAI;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE,mBAAmB,gBAAgB;AAAA,UACnC,iBAAiB,gBAAgB;AAAA,UACjC,iBAAiB,OAAO,eAAe,aAAa;AAAA,UACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,QACvD;AAAA,MACF;AACA,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,UACE,iBAAiB;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AACA,YAAM,qBAAiB,sBAAM;AAC7B,YAAM,yBAAyB,eAAe,iBAAiB;AAC/D,YAAM,cAAc,mBAAmB;AAAA,QACrC;AAAA,QACA,MAAM,kBAAkB;AAAA,MAC1B,CAAC;AACD,YAAM,cAAU,sBAAM;AAEtB,YAAM,eAAe,CACnB,OACA,aAAa,UACV;AACH,cAAM;AAAA,UACJ,QAAQ,EAAE,OAAO,QAAQ;AAAA,QAC3B,IAAI;AACJ,YAAI,WAAW,CAAC,GAAG,QAAQ;AAE3B,YAAI,CAAC,SAAS;AACZ,qBAAW,SAAS,OAAO,UAAQ,SAAS,KAAK;AAAA,QACnD;AAEA,YAAI,SAAS;AACX,qBAAW,CAAC,GAAG,UAAU,KAAK;AAAA,QAChC;AAEA,YAAI,WAAW,oBAAoB,YAAY;AAC7C,qBAAW,CAAC,KAAK;AAAA,QACnB;AAEA,oBAAY,QAAQ;AACpB,mBAAW,QAAQ;AAAA,MACrB;AAEA,YAAM,gBAAgB,wBAAS,QAAQ,QAAQ;AAC/C,YAAM,eAAe,cAClB;AAAA,QACC,eACE,+BAAe,KAAK,KAAM,MAAuB,SAAS;AAAA,MAC9D,EACC,IAAI;AACP,YAAM,wBACJ,gBAAgB,SAAS,SAAS,aAAa,MAAM,KAAK;AAE5D,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,mBAAiB,MAAM,iBAAiB,KAAK;AAAA,UAC7C;AAAA,UACA,WAAW;AAAA,UACX,MAAK;AAAA,UACL,OACE;AAAA,YACE,4BAA4B,eAAe,wBAAS,MAAM,QAAQ;AAAA,UACpE;AAAA,UAGD;AAAA,qBACC,8CAAC,SAAM,aAAY,QAAO,IAAI,SAAS,WAAW,cAC/C,iBACH;AAAA,YAEF,8CAAC,SAAI,WAAU,kCACZ,wBAAc,IAAI,WAAS;AAC1B,sBAAI,+BAAe,KAAK,GAAG;AAEzB,sBAAM,aAAa,UAAU;AAC7B,sBAAM,kBACJ,cACC,oBAAoB,yBAAyB,CAAC;AAEjD,sBAAM,aAAa,MAAM;AAKzB,2BAAO;AAAA,kBACL;AAAA,kBACA;AAAA,oBACE,YAAY;AAAA,oBACZ;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,UAAU,SAAS,SAAS,WAAW,KAAK;AAAA,oBAC5C,UAAU,WAAW,YAAY;AAAA,oBACjC,oBAAoB;AAAA,kBACtB;AAAA,gBACF;AAAA,cACF;AAEA,qBAAO;AAAA,YACT,CAAC,GACH;AAAA,YACC,gBACC,8CAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA;AAAA;AAAA,MAElE;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;ACnL5B,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA,IAAAC;AACA;AACA,IAAAC;AAAA;AAAA;;;ACFA,IAMAC,iBAIA,kBA0BSC,sBAVH;AA1BN;AAAA;AAAA;AAMA,IAAAD,kBAAuB;AAGvB;AACA,uBAAO;AA0BE,IAAAC,uBAAA;AAVT,IAAM,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AACvD,YAAM,EAAE,aAAa,UAAU,OAAO,OAAO,MAAM,GAAG,WAAW,IAAI;AAErE,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,YAAY,IAAI;AAAA,QAChB,WAAW;AAAA,MACb;AAEA,aAAO,8CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAChE;AAEA,cAAU,cAAc;AAAA;AAAA;;;ACvCxB,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACa,qBAqBA;AAtBb;AAAA;AAAA;AACO,IAAM,sBAAsB,CAAC,MAAc,WAA4B;AAC5E,YAAM,YAAY,KAAK,MAAM,MAAM;AACnC,YAAM,cAAc,SAAS,OAAO,MAAM,MAAM,IAAI,CAAC,QAAQ,MAAM,IAAI;AACvE,YAAM,UAAqC,CAAC;AAC5C,YAAM,gBAA0B,CAAC;AAEjC,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,gBAAQ,YAAY,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,SAAS,UAAU,CAAC,GAAG,EAAE,IAAI;AAAA,MACxE;AAEA,oBAAc,KAAK,QAAQ,MAAM,GAAG,SAAS,KAAK,MAAM;AACxD,oBAAc;AAAA,SACX,QAAQ,IAAI,IAAI,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,SAAS,KAAK;AAAA,MAClE;AACA,oBAAc;AAAA,SACX,QAAQ,IAAI,IAAI,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,SAAS,KAAK;AAAA,MAClE;AAEA,aAAO,cAAc,KAAK,GAAG;AAAA,IAC/B;AAEO,IAAM,cAAc,CAAC,MAAe,SAAS,iBAA0B;AAC5E,UAAI,CAAC,KAAM,QAAO;AAGlB,YAAM,eAAe,oBAAoB,MAAM,MAAM;AAGrD,YAAM,CAAC,SAAS,UAAU,MAAM,IAAI,aAAa,MAAM,GAAG;AAC1D,YAAM,OAAO,SAAS,SAAS,EAAE;AACjC,YAAM,QAAQ,SAAS,UAAU,EAAE;AACnC,YAAM,MAAM,SAAS,QAAQ,EAAE;AAG/B,UAAI,QAAQ,KAAK,QAAQ,IAAI;AAC3B,eAAO;AAAA,MACT;AAGA,YAAM,cAAc,IAAI,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ;AACrD,aAAO,MAAM,KAAK,OAAO;AAAA,IAC3B;AAAA;AAAA;;;AC1CA,IAEAC,iBAEAC,gBAqGIC,sBAlFS,eAGA;AA1Bb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAA4C;AAC5C;AACA,IAAAE;AAKA;AA8FI,IAAAD,uBAAA;AAlFG,IAAM,gBACX;AAEK,IAAM,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AAC9D,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAACE,QAAO,QAAQ,QAAI,yBAA6B,YAAY;AACnE,YAAM,CAAC,WAAW,YAAY,QAAI,yBAA8B,MAAS;AACzE,YAAM,eAAW,uBAA6B,IAAI;AAClD,YAAM,cAAU,gBAAAC,SAAW,qBAAqB,SAAS;AAIzD,YAAM,eAAe,MAAM,oBAAoB,KAAK,MAAM,IAAI;AAC9D,YAAM,eAAe,MAAM,oBAAoB,KAAK,MAAM,IAAI;AAC9D,YAAM,wBAAwB,eAC1B,oBAAoB,cAAc,MAAM,IACxC;AACJ,YAAM,iBAAiB,QAAQ,oBAAoB,OAAO,MAAM,IAAI;AAEpE,YAAM,kBAAkB,CAACD,WAAmB;AAC1C,iBAASA,MAAK;AACd,qBAAa,IAAI;AAAA,MACnB;AAEA,YAAM,gBAAgB,MAAM;AAC1B,iBAAS,MAAM,YAAY;AAC3B,qBAAa,KAAK;AAAA,MACpB;AAGA,oCAAU,MAAM;AACd,YAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC7B,0BAAgB,qBAAqB,GAAG,EAAE;AAC1C;AAAA,QACF;AACA,YAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC7B,0BAAgB,qBAAqB,GAAG,EAAE;AAC1C;AAAA,QACF;AAEA,YAAI,OAAO,KAAK;AACd,gBAAM,UAAU,IAAI,KAAK,GAAG;AAC5B,gBAAM,UAAU,IAAI,KAAK,GAAG;AAC5B,cAAI,UAAU,SAAS;AACrB,4BAAgB,aAAa;AAAA,UAC/B,OAAO;AACL,0BAAc;AAAA,UAChB;AAAA,QACF,OAAO;AACL,wBAAc;AAAA,QAChB;AAAA,MAEF,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC;AAErB,YAAM,WAAW,MAAM;AAGrB,cAAM,eAAe,SAAS,SAAS,cAAc;AAErD,YAAI,CAAC,cAAc;AACjB,0BAAgB,oBAAoB;AAAA,QACtC,OAAO;AACL,wBAAc;AAAA,QAChB;AAAA,MACF;AAGA,YAAM,aAAa,CAAC,UAA+B;AACjD,iBAAS;AACT,mBAAW,SAAS,KAAK;AAAA,MAC3B;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,UAAU,CAAC,UAAU,GAAG,CAAC;AAAA,UAC9B,WAAW;AAAA,UACX,MAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,cAAc,gBAAgBA;AAAA,UAC9B;AAAA,UACA,cAAc;AAAA,UACd,OAAO;AAAA,UACP,QAAQ;AAAA,UACP,GAAG;AAAA;AAAA,MACN;AAAA,IAEJ;AAEA,cAAU,cAAc;AAAA;AAAA;;;ACzHxB,IAAAE,kBAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IAQEC,sBADI;AAPN;AAAA;AAAA;AAQE,IAAAA,uBAAA;AADF,IAAM,UAAU,CAAC,EAAE,KAAK,UAAU,GAAG,WAAW,MAC9C,8CAAC,SAAI,KAAW,GAAG,YAAY,WAAU,0BACtC,UACH;AAGF,YAAQ,cAAc;AAAA;AAAA;;;ACbtB,IAAAC,gBAGa;AAHb;AAAA;AAAA;AAAA,IAAAA,iBAA8B;AAGvB,IAAM,oBAAgB,8BAAkC;AAAA,MAC7D,SAAS,MAAM;AAAA,MAAC;AAAA,MAChB,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA;AAAA;;;ACPD,IAEAC,iBACAC,gBAMA,eAwDIC,sBApDE,yBAEA;AAfN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AACvB,IAAAC,iBAA4D;AAC5D;AACA;AACA,IAAAE;AACA;AAEA,oBAAO;AAwDH,IAAAD,uBAAA;AApDJ,IAAM,0BAA0B;AAEhC,IAAM,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI;AACJ,YAAM,gBAAY,uBAAiC,IAAI;AACvD,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAS,KAAK;AAC9D,YAAM,EAAE,MAAM,IAAI,UAAU;AAAA,QAC1B,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,UACV,WAAW;AAAA,UACX,aAAa;AAAA,QACf;AAAA,MACF,CAAC;AACD,YAAM,WAAW,qCAAiC,sBAAM,CAAC;AACzD,YAAM,WAAW,qBAAiB,sBAAM,CAAC;AAEzC,YAAM,oBAAgB,gBAAAE;AAAA,QACpB;AAAA,QACA;AAAA,QACA,KAAK,SAAS;AAAA,QACd;AAAA,QACA;AAAA,UACE,uBAAuB;AAAA,QACzB;AAAA,MACF;AAEA,oCAAU,MAAM;AACd,4BAAoB,eAAe,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC;AAEL,YAAM,mBAAe;AAAA,QACnB,OAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,CAAC,OAAO,YAAY,QAAQ;AAAA,MAC9B;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,QAAI,sBAAM;AAAA,UACV,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC;AAAA,UAC/B,UAAU;AAAA,UACV,WAAW;AAAA,UACX,oBAAkB;AAAA,UAClB,mBAAiB;AAAA,UAEjB;AAAA,0DAAC,kBACC,wDAAC,SAAI,IAAI,UAAW,oBAAS,GAC/B;AAAA,YACA,8CAAC,cAAc,UAAd,EAAuB,OAAO,cAC5B,UACH;AAAA;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;ACnFrB,IAAAC,gBAGa;AAHb;AAAA;AAAA;AAAA,IAAAA,iBAA2B;AAC3B;AAEO,IAAM,YAAY,MAAM;AAC7B,YAAM,EAAE,SAAS,YAAY,SAAS,QAAI,2BAAW,aAAa;AAElE,aAAO,EAAE,SAAS,YAAY,SAAS;AAAA,IACzC;AAAA;AAAA;;;ACPA,IAEAC,eAgBMC,sBALA;AAbN;AAAA;AAAA;AAEA,IAAAD,gBAAsB;AAEtB,IAAAE;AACA,IAAAC;AACA;AAYM,IAAAF,uBAAA;AALN,IAAM,SAAS,CAAC,EAAE,KAAK,UAAU,GAAG,WAAW,MAAmB;AAChE,YAAM,EAAE,SAAS,YAAY,SAAS,IAAI,UAAU;AAEpD,aACE,+CAAC,YAAO,KAAW,GAAG,YAAY,WAAU,yBAC1C;AAAA,sDAAC,QAAG,IAAI,UAAW,UAAS;AAAA,QAC5B;AAAA,UAAC;AAAA;AAAA,YACC,cAAW;AAAA,YACX,SAAQ;AAAA,YACR,SAAS;AAAA,YACT,WAAU;AAAA,YACV,MAAK;AAAA,YAEL;AAAA,4DAAC,QAAK,MAAM,qBAAO;AAAA,cAAE;AAAA,cAAE;AAAA;AAAA;AAAA,QACzB;AAAA,SACF;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;AChCrB,IAcMG;AAdN,IAAAC,eAAA;AAAA;AAAA;AAIA;AACA;AAOA;AAEA,IAAMD,UAAS,OAAO,OAAO,QAAiB;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC;AAED,IAAAA,QAAO,cAAc;AAAA;AAAA;;;ACnBrB,IAGAE,gBACA,4CACAC,iBAIA,qBAyDIC,sBArCE;AA7BN;AAAA;AAAA;AAAA;AAGA,IAAAF,iBAAiE;AACjE,iDAA4B;AAC5B,IAAAC,kBAAuB;AAGvB,IAAAE;AACA,0BAAO;AAyDH,IAAAD,uBAAA;AArCJ,IAAM,eAAe,CAAC,EAAE,KAAK,GAAG,MAAM,MAAyB;AAC7D,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAwB,IAAI;AAC5D,YAAM,gBAAgB,wBAAS,MAAM,QAAQ;AAC7C,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF,QAAI,2CAAAE,SAAgB,aAAa;AAEjC,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,qBAAiB,gBAAAA,SAAW,UAAU,+BAA+B;AAC3E,YAAM,kBAAc,gBAAAA,SAAW,UAAU,8BAA8B;AAAA,QACrE,aAAa;AAAA,MACf,CAAC;AAED,YAAM,mBAAmB,CAAC,EAAE,QAAQ,GAAoB,UAAkB;AACxE,oBAAY,KAAK;AACjB,kBAAU,KAAK;AAEf,YAAI,SAAS;AACX,kBAAQ;AAAA,QACV;AAAA,MACF;AAEA,aACE,+CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAC3C;AAAA,sBACC,6BAAa,SAAS;AAAA,UACpB,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA,GAAG;AAAA,QACL,CAA4B,IAE5B,8CAAC,UAAO,WAAW,gBAAiB,GAAG,aACpC,iBACH;AAAA,QAEF,8CAAC,QAAG,WAAW,aAAa,MAAK,QAC9B,kCAAS,IAAI,UAAU,CAAC,OAAO,UAAU;AACxC,kBAAI,+BAAe,KAAK,GAAG;AAEzB,uBAAO,6BAAa,OAAO;AAAA,cACzB,SAAS,MACP,iBAAiB,MAAM,OAAkC,KAAK;AAAA,cAChE,QAAQ,UAAU;AAAA,cAClB,GAAG,UAAU,KAAK;AAAA,YACpB,CAIC;AAAA,UACH;AAEA,iBAAO;AAAA,QACT,CAAC,GACH;AAAA,SACF;AAAA,IAEJ;AAEA,iBAAa,cAAc;AAAA;AAAA;;;ACtG3B,IACAC,gBACAC,iBA+CeC,sBA/BT;AAlBN;AAAA;AAAA;AACA,IAAAF,iBAAuD;AACvD,IAAAC,kBAAuB;AA+CR,IAAAC,uBAAA;AA/Bf,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,EAAE,eAAe,OAAO;AAAA,QACxB,WAAW;AAAA,MACb;AAEA,aACE,8CAAC,WAAQ,KAAU,SAAmB,GAAG,YACtC,kCAAS,IAAI,UAAU,WAAS;AAC/B,gBAAI,+BAAe,KAAK,GAAG;AACzB,gBAAM,mBAAe,gBAAAA;AAAA,YAClB,MAAM,MAAiC;AAAA,YACxC;AAAA,UACF;AACA,qBAAO;AAAA,YACL;AAAA,YACA;AAAA,cACE,WAAW;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAEA,eAAO,8CAAC,UAAK,WAAW,SAAU,iBAAM;AAAA,MAC1C,CAAC,GACH;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACvDnB,IAkBMC;AAlBN,IAAAC,qBAAA;AAAA;AAAA;AAAA;AACA;AAiBA,IAAMD,gBAAqC,OAAO;AAAA,MAChD;AAAA,MACA;AAAA,QACE;AAAA,MACF;AAAA,IACF;AAWA,IAAAA,cAAa,cAAc;AAAA;AAAA;;;AClC3B,IAEAE,iBAEAC,gBAGA,iBAqDsBC,sBAzChB,aAqCA;AAxDN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAAoC;AAEpC,IAAAE;AACA,sBAAO;AAqDe,IAAAD,uBAAA;AAzCtB,IAAM,cAAc,CAClB,UACiE;AACjE,YAAM,EAAE,OAAO,IAAI;AAEnB,UAAI,cAA2B,CAAC;AAChC,UAAI,iBAAiC;AAAA,QACnC,MAAM;AAAA,MACR;AAEA,YAAM,eAAW,sBAAM;AACvB,UAAI,QAAQ;AACV,sBAAc;AAAA,UACZ,GAAG;AAAA,UACH,IAAI;AAAA,QACN;AACA,yBAAiB;AAAA,UACf,GAAG;AAAA,UACH,mBAAmB;AAAA,QACrB;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAWA,IAAM,WAAW,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,MAAqB;AAC3D,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,kBAAkB,8CAAC,YAAO;AAAA,QAC1B,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,EAAE,aAAa,eAAe,IAAI,YAAY,KAAK;AAEzD,YAAM,cAAU,gBAAAE,SAAW,UAAU,mBAAmB,MAAM,SAAS;AAGvE,kBAAY,YAAY;AAExB,aACE,+CAAC,QAAM,GAAG,gBAAiB,GAAG,YAAY,WAAW,SAClD;AAAA,sBAAU,6BAAa,iBAAiB,EAAE,GAAG,YAAY,GAAG,CAAC,MAAM,CAAC;AAAA,QACpE;AAAA,SACH;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;;;AC/EvB,IAAAC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,iBAuESC,sBA9BH;AA1CN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB;AAqES,IAAAC,uBAAA;AA9BT,IAAM,OAAO,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,MAAiB;AACnD,YAAM;AAAA,QACJ,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,cAAU,gBAAAC,SAAW,UAAU,eAAe,SAAS;AAE7D,YAAM,SAAwB,qBAAqB;AAAA,QACjD,WAAW;AAAA,QACX,SAAS;AAAA,QACT,qBAAqB,UAAU,OAAO;AAAA,QACtC,KAAK,gBAAgB,GAAG;AAAA,QACxB,WAAW,gBAAgB,SAAS;AAAA,QACpC,QAAQ,gBAAgB,MAAM;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AAED,aAAO,8CAAC,SAAI,OAAO,QAAQ,WAAW,SAAU,GAAG,MAAM;AAAA,IAC3D;AAEA,SAAK,cAAc;AAAA;AAAA;;;AC3EnB,IAGAC,gBACAC,iBA+ESC,sBAlDI,kBAUA,cAEP;AA7CN,IAAAC,aAAA;AAAA;AAAA;AAAA;AAGA,IAAAH,iBAAoC;AACpC,IAAAC,kBAAuB;AAEvB;AA6ES,IAAAC,uBAAA;AAlDF,IAAM,mBAAmB,CAAC,WAC/B,OAAO,QAAQ,MAAM,EAAE;AAAA,MACrB,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM;AACtB,cAAM,WAAW,OAAO,OAAO,IAAI;AACnC,cAAM,cAAc,SAAS,SAAS,SAAS,CAAC;AAChD,eAAO,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,YAAY;AAAA,MAChD;AAAA,MACA,CAAC;AAAA,IACH;AAEK,IAAM,eAAe;AAE5B,IAAM,WAAW,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,MAAqB;AAC3D,YAAM;AAAA,QACJ,YAAY,EAAE,MAAM,eAAe;AAAA,MACrC,IAAI,cAAc;AAClB,YAAM;AAAA,QACJ;AAAA,QACA,KAAK,MAAM,QAAQ,IAAI,IAAI,eAAe;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,gBAAgB,iBAAiB;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,YAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAA6B;AACzE,YAAM,cAAU,gBAAAE,SAAW,qBAAqB,SAAS;AAEzD,oCAAU,MAAM;AACd,0BAAkB,cAAc,cAAc,CAAC;AAAA,MACjD,GAAG,CAAC,gBAAgB,aAAa,CAAC;AAElC,YAAM,SAAwB;AAAA,QAC5B,YAAY,iBAAiB,QAAQ,cAAc,KAAK;AAAA,QACxD;AAAA,QACA;AAAA,MACF;AAEA,aAAO,8CAAC,SAAI,OAAO,EAAE,GAAG,OAAO,GAAG,WAAW,SAAU,GAAG,MAAM;AAAA,IAClE;AAEA,aAAS,cAAc;AAAA;AAAA;;;ACtFvB,IASMC;AATN,IAAAC,aAAA;AAAA;AAAA;AACA;AAEA,IAAAC;AAMA,IAAMF,QAAqB,OAAO,OAAO,MAAe;AAAA,MACtD,MAAM;AAAA,IACR,CAAC;AAED,IAAAA,MAAK,cAAc;AAAA;AAAA;;;ACbnB,IAEAG,iBA4BSC,sBARH;AAtBN;AAAA;AAAA;AAEA,IAAAD,kBAAuB;AA4Bd,IAAAC,uBAAA;AART,IAAM,QAAQ,CAAC;AAAA,MACb;AAAA,MACA;AAAA,MACA,aAAa,YAAY;AAAA,MACzB,GAAG;AAAA,IACL,MAAkB;AAChB,YAAM,cAAU,gBAAAC,SAAW,UAAU,gBAAgB,WAAW,SAAS;AAEzE,aAAO,8CAAC,aAAU,KAAU,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAC5E;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACjCpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAOAC,iBACA,aAmDIC,sBA1BE;AAjCN;AAAA;AAAA;AAOA,IAAAD,kBAAuB;AACvB,kBAAO;AAmDH,IAAAC,uBAAA;AA1BJ,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM;AAAA,QACJ,aAAa;AAAA,QACb,aAAa,YAAY;AAAA,QACzB;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,iBAAgC;AAAA,QACpC,eAAe;AAAA,MACjB;AAEA,YAAM,SAAS,EAAE,GAAG,OAAO,GAAI,cAAc,eAAgB;AAC7D,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB,OAAO;AAAA,QACvB;AAAA,UACE,iBAAiB;AAAA,QACnB;AAAA,MACF;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,WAAW;AAAA,UACX,iBAAe,aAAa,OAAO;AAAA,UAClC,GAAG;AAAA,UAEH,gBAAM;AAAA;AAAA,MACT;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACvEnB,IAAAC,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBA8BIC;AA9BJ;AAAA;AAAA;AAAA,IAAAD,kBAAuB;AA8BnB,IAAAC,uBAAA;AAAA;AAAA;;;AC9BJ,IAAAC,mBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,gBACAC,iBAEA,aA8CIC,sBAxBE;AA1BN;AAAA;AAAA;AACA,IAAAF,iBAAuD;AACvD,IAAAC,kBAAuB;AAEvB,kBAAO;AA8CH,IAAAC,uBAAA;AAxBJ,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,YAAyB,MAAM,YAAY,OAAO;AACxD,YAAM,EAAE,UAAU,MAAM,GAAG,WAAW,IAAI;AAI1C,YAAM,EAAE,WAAW,eAAe,YAAY,GAAG,UAAU,IAAI;AAE/D,YAAM,cAAc;AAAA,QAClB,GAAG;AAAA,QACH,UAAU;AAAA,MACZ;AAEA,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,cAAc;AAAA,UACd,CAAC,QAAQ,aAAa,EAAE,GAAG;AAAA,QAC7B;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE,8CAAC,aAAU,KAAW,GAAG,aAAa,WAAW,SAC9C,kCAAS,IAAI,UAAU,WAAS;AAC/B,gBAAI,+BAAe,KAAK,GAAG;AAEzB,qBAAO,6BAAa,OAAO;AAAA,YACzB,YAAY;AAAA,UACd,CAA+B;AAAA,QACjC;AAEA,eAAO;AAAA,MACT,CAAC,GACH;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACjEnB,IACAC,iBA8BQC,sBAjBF;AAdN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AA8Bf,IAAAC,uBAAA;AAjBR,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AACrD,YAAM,EAAE,YAAY,MAAM,UAAU,GAAG,WAAW,IAAI;AACtD,YAAM,cAAc,QAAQ;AAC5B,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,cAAc;AAAA,QAChB;AAAA,QACA,MAAM;AAAA,MACR;AACA,YAAM,qBAAiB,gBAAAA,SAAW,UAAU,2BAA2B;AACvE,YAAM,kBAAc,gBAAAA,SAAW,UAAU,mBAAmB;AAE5D,UAAI,aAAa;AACf,eACE,8CAAC,QAAG,KAAW,GAAG,YAAY,WAAW,SACvC,yDAAC,UAAK,WAAW,gBACf;AAAA,wDAAC,UAAK,WAAW,aAAc,uBAAY;AAAA,UAC1C;AAAA,WACH,GACF;AAAA,MAEJ;AAEA,aACE,8CAAC,QAAG,KAAW,GAAG,YAAY,WAAW,SACtC,UACH;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;;;AC9CvB,IAAAC,aAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IACAC,iBACAC,eAGA,yBAeIC,sBAVE;AAVN;AAAA;AAAA;AACA,IAAAF,kBAAuB;AACvB,IAAAC,gBAAwB;AAExB,IAAAE;AACA,8BAAO;AAeH,IAAAD,uBAAA;AAVJ,IAAM,mBAAmB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA6B;AACrE,YAAM,EAAE,OAAO,uBAAS,GAAG,WAAW,IAAI;AAE1C,YAAM,cAAU,gBAAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE,8CAAC,QAAK,MAAY,MAAI,MAAC,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAEzE;AAEA,qBAAiB,cAAc;AAAA;AAAA;;;ACxB/B,IAAAC,yBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,iBA6BQC,sBAfK;AAfb;AAAA;AAAA;AACA,IAAAD,kBAAuB;AA6Bf,IAAAC,uBAAA;AAfD,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AACpD,YAAM,EAAE,WAAW,OAAO,QAAQ,GAAG,WAAW,IAAI;AAEpD,YAAM,cAAU,gBAAAC,SAAW,UAAU,eAAe,SAAS;AAE7D,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,SAAQ;AAAA,UACP,GAAG;AAAA,UAEJ;AAAA,0DAAC,UACC;AAAA,cAAC;AAAA;AAAA,gBACC,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBAEH;AAAA,gEAAC,UAAK,WAAU,WAAU,QAAO,MAAK;AAAA,kBACtC,8CAAC,UAAK,WAAU,WAAU,QAAO,QAAO;AAAA;AAAA;AAAA,YAC1C,GACF;AAAA,YACA,+CAAC,OACC;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,GAAE;AAAA;AAAA,cACJ;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,GAAE;AAAA;AAAA,cACJ;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,GAAE;AAAA;AAAA,cACJ;AAAA,eACF;AAAA;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;AC3DnB,IAAAC,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAQEC,sBADIC;AAPN,IAAAC,gBAAA;AAAA;AAAA;AAQE,IAAAF,uBAAA;AADF,IAAMC,WAAU,CAAC,EAAE,KAAK,UAAU,GAAG,WAAW,MAC9C,8CAAC,SAAI,KAAW,GAAG,YAAY,WAAU,yBACtC,UACH;AAGF,IAAAA,SAAQ,cAAc;AAAA;AAAA;;;ACbtB,IAAAE,gBAGa;AAHb;AAAA;AAAA;AAAA,IAAAA,iBAA8B;AAGvB,IAAM,mBAAe,8BAAiC;AAAA,MAC3D,SAAS,MAAM;AAAA,MAAC;AAAA,MAChB,YAAY;AAAA,IACd,CAAC;AAAA;AAAA;;;ACND,IAAAC,gBAGa;AAHb;AAAA;AAAA;AAAA,IAAAA,iBAA2B;AAC3B;AAEO,IAAM,WAAW,MAAM;AAC5B,YAAM,EAAE,SAAS,WAAW,QAAI,2BAAW,YAAY;AAEvD,aAAO,EAAE,SAAS,WAAW;AAAA,IAC/B;AAAA;AAAA;;;ACPA,IAEAC,eAiBMC,sBANAC;AAbN,IAAAC,eAAA;AAAA;AAAA;AAEA,IAAAH,gBAAsB;AAEtB,IAAAI;AACA,IAAAC;AACA;AAaM,IAAAJ,uBAAA;AANN,IAAMC,UAAS,CAAC,EAAE,KAAK,UAAU,GAAG,WAAW,MAAmB;AAChE,YAAM,EAAE,SAAS,WAAW,IAAI,SAAS;AAEzC,aACE,+CAAC,YAAO,KAAW,GAAG,YAAY,WAAU,wBACzC;AAAA;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,cAAW;AAAA,YACX,SAAQ;AAAA,YACR,SAAS;AAAA,YACT,WAAU;AAAA,YAEV;AAAA,4DAAC,QAAK,MAAM,qBAAO;AAAA,cAAE;AAAA,cAAE;AAAA;AAAA;AAAA,QACzB;AAAA,SACF;AAAA,IAEJ;AAEA,IAAAA,QAAO,cAAc;AAAA;AAAA;;;AC/BrB,IAEAI,iBACAC,gBAMA,cAgEMC,sBA5DAC,0BAEA;AAfN;AAAA;AAAA;AAAA;AAEA,IAAAH,kBAAuB;AACvB,IAAAC,iBAAqD;AACrD;AACA;AACA;AACA;AAEA,mBAAO;AAgED,IAAAC,uBAAA;AA5DN,IAAMC,2BAA0B;AAEhC,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAS,KAAK;AAE9D,oCAAU,MAAM;AACd,4BAAoB,eAAe,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC;AAEL,YAAM,gBAAY,uBAAiC,IAAI;AACvD,YAAM,EAAE,MAAM,IAAI,UAAU;AAAA,QAC1B,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,UACV,WAAW,CAAC,CAAC;AAAA,UACb,aAAaA;AAAA,QACf;AAAA,MACF,CAAC;AAED,YAAM,mBAAe,gBAAAC;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,UACE,uBAAuB,CAAC;AAAA;AAAA,UACxB,uBAAuB,oBAAoB;AAAA,UAC3C,cAAc,cAAc;AAAA,UAC5B,UAAU,cAAc;AAAA,UACxB,mBAAmB;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAEA,YAAM,mBAAe;AAAA,QACnB,OAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,QACF;AAAA,QACA,CAAC,OAAO,UAAU;AAAA,MACpB;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC;AAAA,UAC/B,UAAU;AAAA,UACV,WAAW;AAAA,UACV,GAAG;AAAA,UAEJ,wDAAC,aAAa,UAAb,EAAsB,OAAO,cAC3B,UACH;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;AChFpB,IAcMC;AAdN,IAAAC,cAAA;AAAA;AAAA;AAIA,IAAAC;AAKA,IAAAC;AACA;AAIA,IAAMH,SAAQ,OAAO,OAAO,OAAgB;AAAA,MAC1C,QAAAI;AAAA,MACA,SAAAC;AAAA,IACF,CAAC;AAED,IAAAL,OAAM,cAAc;AAAA;AAAA;;;ACnBpB,IAEAM,iBAEAC,gBAMA,oBA2GIC,sBAvFS;AA9Bb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAAmE;AACnE,IAAAE;AAKA,yBAAO;AA2GH,IAAAD,uBAAA;AAvFG,IAAM,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,MAAwB;AAClE,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,GAAG;AAAA,MACL,IAAI;AAKJ,YAAM,sBAAkB,uBAAgC,IAAI;AAC5D,YAAM,mBAAe,4BAAY,CAAC,OAAc,GAAG,eAAe,GAAG,CAAC,CAAC;AAEvE,oCAAU,MAAM;AACd,eAAO,MAAM;AACX,0BAAgB,SAAS,oBAAoB,SAAS,YAAY;AAClE,0BAAgB,UAAU;AAAA,QAC5B;AAAA,MACF,GAAG,CAAC,YAAY,CAAC;AAEjB,YAAM,uBAAmB,gBAAAE,SAAW,uBAAuB,WAAW;AAAA,QACpE,uBAAuB;AAAA,MACzB,CAAC;AAED,YAAM,oBAAoB,CACxB,UACG;AACH,cAAM,EAAE,KAAK,IAAI,MAAM;AACvB,YAAI,QAAQ,OAAO,UAAU,IAAI,KAAK,SAAS,KAAK;AAClD,gBAAM,eAAe;AAAA,QACvB;AACA,YAAI,YAAY,YAAY,KAAK,SAAS,KAAK;AAC7C,gBAAM,eAAe;AAAA,QACvB;AAAA,MACF;AAEA,YAAM,aAAa,CAAC,UAA8C;AAChE,cAAM,EAAE,MAAM,IAAI,MAAM;AACxB,cAAM,WAAW,WAAW,KAAK;AAGjC,YAAI,QAAQ,OAAO,KAAK,CAAC,MAAM,QAAQ,GAAG;AACxC,gBAAM,YAAY,YAAY;AAC9B,gBAAM,QAAQ,KAAK,OAAO,WAAW,aAAa,IAAI;AACtD,gBAAM,eAAe,YAAY,QAAQ;AAGzC,cAAI,iBAAiB,UAAU;AAC7B,kBAAM,OAAO,QAAQ,aAAa,SAAS;AAE3C,kBAAM,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC;AACzD,kBAAM,OAAO,cAAc,WAAW;AAEtC,kBAAM,uBAAuB;AAAA,cAC3B,GAAG;AAAA,cACH,QAAQ,MAAM;AAAA,cACd,eAAe,MAAM;AAAA,YACvB;AACA,uBAAW,WAAW,oBAAoB;AAAA,UAC5C;AAAA,QACF;AAEA,uBAAe,KAAK;AAAA,MACtB;AAEA,YAAM,iBAAiC;AAAA,QACrC,GAAG;AAAA,QACH,SAAS,OAAK;AACZ,gBAAM,KAAK,EAAE;AACb,0BAAgB,SAAS,oBAAoB,SAAS,YAAY;AAClE,0BAAgB,UAAU;AAC1B,aAAG,iBAAiB,SAAS,cAAc,EAAE,SAAS,MAAM,CAAC;AAC7D,0BAAgB,CAAuC;AAAA,QACzD;AAAA,QACA,QAAQ,OAAK,WAAW,CAAuC;AAAA,MACjE;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,WAAW;AAAA,UACX,eAAe;AAAA,UACf,MAAK;AAAA,UACL,KAAK,YAAY;AAAA,UACjB,KAAK,YAAY;AAAA,UACjB;AAAA,UACA;AAAA,UACA,cACE,gBAAgB,OAAO,cAAc,SAAS,IAAI;AAAA;AAAA,MAEtD;AAAA,IAEJ;AAEA,gBAAY,cAAc;AAAA;AAAA;;;ACrI1B,IAAAC,oBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAcSC,sBANHC;AARN,IAAAC,eAAA;AAAA;AAAA;AAcS,IAAAF,uBAAA;AANT,IAAMC,UAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM,EAAE,YAAY,GAAG,KAAK,IAAI;AAChC,YAAM,cAAc;AAAA,QAClB,GAAG;AAAA,QACH,UAAU;AAAA,MACZ;AACA,aAAO,8CAAC,YAAQ,GAAG,aAAa,KAAU;AAAA,IAC5C;AAEA,IAAAA,QAAO,cAAc;AAAA;AAAA;;;ACjBrB,IAAAE,eAAA;AAAA;AAAA;AAAA,IAAAA;AAAA;AAAA;;;ACAA,IAAAC,eAsBIC,sBAdS;AARb;AAAA;AAAA;AAAA,IAAAD,gBAA8B;AAC9B;AAqBI,IAAAC,uBAAA;AAdG,IAAM,iBAAiB,CAAC;AAAA,MAC7B,OAAO;AAAA,MACP;AAAA,IACF,MACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,SAAS,OAAK;AACZ,YAAE,eAAe;AACjB,kBAAQ;AAAA,QACV;AAAA,QACA,cAAY,GAAG,OAAO,SAAS,MAAM;AAAA,QACrC,eAAY;AAAA,QAEZ,wDAAC,QAAK,MAAM,OAAO,yBAAW,mBAAK,eAAY,QAAO;AAAA;AAAA,IACxD;AAAA;AAAA;;;ACvBF,IAEAC,iBACAC,gBAQA,sBAkCQC,sBA9BK;AAfb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AACvB,IAAAC,iBAAiC;AACjC;AACA,IAAAE;AAKA;AACA,2BAAO;AAkCC,IAAAD,uBAAA;AA9BD,IAAM,gBAAgB,CAAC;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAA0B;AACxB,YAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,KAAK;AACtC,YAAM,OAAO,OAAO,SAAS;AAC7B,YAAM,cAAU,gBAAAE,SAAW,yBAAyB,SAAS;AAC7D,YAAM,eAAW,uBAA6B,IAAI;AAElD,YAAM,4BAA4B,MAAM;AACtC,cAAM,iBAAiB,SAAS,SAAS;AACzC,cAAM,eAAe,SAAS,SAAS;AAEvC,gBAAQ,aAAW,CAAC,OAAO;AAC3B,8BAAsB,MAAM;AAC1B,mBAAS,SAAS,MAAM;AACxB,cAAI,kBAAkB,QAAQ,gBAAgB,MAAM;AAClD,qBAAS,SAAS,kBAAkB,gBAAgB,YAAY;AAAA,UAClE;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,UAAU,CAAC,UAAU,GAAG,CAAC;AAAA,UAC9B,WAAW;AAAA,UACV,GAAG;AAAA,UACJ;AAAA,UACA,cACE,8CAAC,kBAAe,SAAS,2BAA2B,MAAY;AAAA;AAAA,MAEpE;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;ACnD5B,IAAAC,sBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,gBAWAC,gBACAC,iBAEAF,gBACAG,sBAIA,gBAqFIC;AAxGJ;AAAA;AAAA;AAAA,IAAAJ,iBAUO;AACP,IAAAC,iBAAsB;AACtB,IAAAC,kBAAuB;AAEvB,IAAAF,iBAA+C;AAC/C,IAAAG,uBAA+B;AAI/B,qBAAO;AAqFH,IAAAC,uBAAA;AAAA;AAAA;;;ACxGJ,IAAAC,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACqCA,SAAS,uBACP,OACA,UACA,UACA;AACA,MAAI,WAAW,UAAU;AACvB,YAAQ,KAAK,mCAAmC;AAAA,EAClD;AACA,MAAI,QAAQ,UAAU;AACpB,YAAQ,KAAK,sCAAsC;AAAA,EACrD;AACA,MAAI,QAAQ,UAAU;AACpB,YAAQ,KAAK,yCAAyC;AAAA,EACxD;AACF;AAnDA,IAIAC,iBAEAC,gBAIA,iBA4DMC,sBAjBA,gBAUA,mBA8BA,eACA,mBACA,mBAEA;AAjGN;AAAA;AAAA;AAAA;AAIA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAAsB;AAEtB,IAAAE;AACA,IAAAC;AACA,sBAAO;AA4DD,IAAAF,uBAAA;AAjBN,IAAM,iBAAiB,CACrB,OACA,iBACW;AACX,UAAI,UAAU,UAAa,OAAO,MAAM,KAAK,GAAG;AAC9C,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAEA,IAAM,oBAAoB,CACxB,OACA,iBACA,cACG;AACH,UAAI,WAAW;AACb,eACE;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WAAU;AAAA,YACV,aAAY;AAAA,YAEX;AAAA;AAAA,QACH;AAAA,MAEJ;AAEA,aACE,8CAAC,kBACC;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,UACJ,WAAU;AAAA,UACV,aAAY;AAAA,UAEX;AAAA;AAAA,MACH,GACF;AAAA,IAEJ;AAEA,IAAM,gBAAgB;AACtB,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAE1B,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AACrD,YAAM,iBAAa,sBAAM;AACzB,YAAM,sBAAkB,sBAAM;AAC9B,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,iBAAiB,CAAC,CAAC;AAAA,QACnB;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACF,IAAI;AAEJ,UAAI,EAAE,OAAO,UAAU,SAAS,IAAI;AAEpC,cAAQ,eAAe,OAAO,aAAa;AAC3C,iBAAW,eAAe,UAAU,iBAAiB;AACrD,iBAAW,eAAe,UAAU,iBAAiB;AAGrD,UAAI,UAAU,UAAa,aAAa,UAAa,aAAa,QAAW;AAC3E,eAAO;AAAA,MACT;AAEA,6BAAuB,OAAO,UAAU,QAAQ;AAGhD,YAAM,QAAQ,CAAC,KAAa,KAAa,QACvC,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG;AAClC,YAAM,aAAa;AAAA,QACjB,KAAK,OAAQ,QAAQ,aAAa,WAAW,YAAa,GAAG;AAAA,QAC7D;AAAA,QACA;AAAA,MACF;AACA,YAAM,WAAW,GAAG,UAAU;AAE9B,YAAM,cAAU,gBAAAG,SAAW,UAAU,mBAAmB,WAAW;AAAA,QACjE,gBAAgB,YAAY;AAAA,QAC5B,kBAAkB,YAAY;AAAA,MAChC,CAAC;AAGD,YAAM,mBAA2C,CAAC;AAClD,uBAAiB,eAAe,IAAI,SAAS,SAAS;AACtD,uBAAiB,eAAe,IAAI,SAAS,SAAS;AACtD,uBAAiB,eAAe,IAAI,MAAM,SAAS;AACnD,uBAAiB,gBAAgB,IAC/B,0BAA0B,WACtB,eAAe,OAAO,UAAU,QAAQ,IACxC;AACN,YAAM,iBAAiB,kBAAkB,OAAO,iBAAiB,SAAS;AAE1E,aACE;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM;AAAA,UACT,GAAG;AAAA,UACJ;AAAA,UACA,WAAW;AAAA,UACX,MAAK;AAAA,UACL,mBAAiB;AAAA,UAEhB;AAAA;AAAA,YACD,8CAAC,SAAI,WAAU,0BACb,wDAAC,SAAI,WAAU,wBAAuB,OAAO,EAAE,OAAO,SAAS,GAAG,GACpE;AAAA,YACC,kBACC,8CAAC,SAAM,eAAY,eAAc,aAAY,QAC1C,2BAAiB,gBAAgB,GACpC;AAAA;AAAA;AAAA,MAEJ;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;;;AC3KvB,IAAAC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,iBAEAC,gBAWA,cAqLIC,sBAzHE;AA3EN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAMO;AAGP,IAAAE;AACA,IAAAC;AACA,mBAAO;AAqLH,IAAAF,uBAAA;AAzHJ,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,eAAe,iBAAiB;AACtC,YAAM,cAAc,SAAS;AAC7B,YAAM,eAAe,aAAa;AAClC,YAAM,YAAY,eAAe,aAAa,QAAQ;AAEtD,YAAM,iBAAa,uBAAuB,IAAI;AAC9C,YAAM,sBAAkB,uBAA0B;AAAA,QAChD,UAAU;AAAA,QACV,YAAY;AAAA,MACd,CAAC;AAED,YAAM,mBAAe,wBAAQ,MAAM;AACjC,YAAI,CAAC,YAAY,wBAAS,MAAM,QAAQ,MAAM,EAAG,QAAO;AAExD,cAAM,aAAa,wBAAS,QAAQ,QAAQ,EAAE,CAAC;AAC/C,YAAI,KAAC,+BAAe,UAAU,EAAG,QAAO;AAExC,cAAMG,SAAQ,WAAW;AACzB,eAAO,UAAUA,UAASA,OAAM,SAAS;AAAA,MAC3C,GAAG,CAAC,QAAQ,CAAC;AAGb,0CAAgB,MAAM;AACpB,YAAI,CAAC,WAAW,WAAW,CAAC,WAAY;AAIxC,YAAI,gBAAgB,YAAY;AAC9B;AAAA,QACF;AAEA,cAAM,UAAU,WAAW;AAG3B,cAAM,yBAAyB,QAAQ,eAAe,QAAQ;AAC9D,cAAM,2BAA2B,QAAQ,cAAc,QAAQ;AAG/D,cAAM,SAAS,OAAO,iBAAiB,OAAO;AAC9C,cAAM,aAAa,WAAW,OAAO,UAAU;AAC/C,cAAM,WAAW,WAAW,OAAO,QAAQ;AAC3C,cAAM,mBAAmB,MAAM,UAAU,IAAI,WAAW,MAAM;AAI9D,cAAM,2BAA2B;AACjC,cAAM,aACJ,QAAQ,eAAe,mBAAmB;AAE5C,cAAM,WAAW,0BAA0B;AAC3C,cAAM,aAAa;AAEnB,cAAM,mBAAmB,EAAE,UAAU,WAAW;AAChD,cAAM,eAAe,gBAAgB;AAGrC,YACE,iBAAiB,aAAa,aAAa,YAC3C,iBAAiB,eAAe,aAAa,YAC7C;AACA,0BAAgB,UAAU;AAC1B,qBAAW,gBAAgB;AAAA,QAC7B;AAAA,MACF,GAAG,CAAC,OAAO,UAAU,YAAY,WAAW,CAAC;AAE7C,YAAM,eAAe;AAAA,QACnB,iBAAiB;AAAA,QACjB,iBAAiB,aAAa;AAAA,QAC9B,kBAAkB,CAAC,CAAC;AAAA,QACpB,iBAAiB;AAAA,MACnB;AACA,YAAM,uBAAmB,gBAAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,oBAAoB,aAAa;AAAA,MACrC;AAEA,YAAM,mBAAe,gBAAAA,SAAW,uBAAuB,YAAY;AAGnE,YAAM,EAAE,oBAAoB,kBAAkB,GAAG,KAAK,IAAI;AAG1D,YAAM,eAAe,CAAC,UAA+C;AAEnE,YAAI,aAAa;AACf,sBAAY,MAAM,OAAO,KAAK;AAAA,QAChC;AAGA,YAAI,UAAU;AAEZ,gBAAM,eAAmD;AAAA,YACvD,GAAG,MAAM;AAAA,YACT,QAAQ,MAAM;AAAA,UAChB;AACA,mBAAS,YAAY;AAAA,QACvB;AAAA,MACF;AAEA,aACE,gFACE;AAAA,uDAAC,SAAM,WAAW,kBAChB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,oBAAkB,WAAW,kBAAkB;AAAA,cAC/C,UAAU;AAAA,cACV;AAAA,cACA,WAAW;AAAA,cACX;AAAA,cACA,UAAU;AAAA,cACV,MAAK;AAAA,cACL,UAAU;AAAA,cACT,GAAI,eACD,EAAE,SAAS,UAAU,IACrB,EAAE,gBAAgB,UAAU;AAAA,cAChC;AAAA,cACA,UAAU;AAAA,cACT,GAAG;AAAA;AAAA,UACN;AAAA,UACC,cACC,+CAAC,SAAI,KAAK,YAAY,WAAU,oCAC9B;AAAA,0DAAC,SAAI,WAAU,oCAAoC,iBAAM;AAAA,YACzD,8CAAC,SAAI,WAAU,+BAA+B,UAAS;AAAA,aACzD,IAEA,8CAAC,SAAI,KAAK,YAAY,WAAU,yBAC7B,mBAAS,UACZ;AAAA,WAEJ;AAAA,QACC,gBAAgB,8CAAC,gBAAa,cAA4B;AAAA,SAC7D;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACtOpB,IAEAC,iBAEAC,gBA6KMC,sBAhHA,eAYA;AA7EN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBASO;AACP;AAIA;AACA,IAAAE;AACA,IAAAC;AACA,IAAAC;AA4JM,IAAAH,uBAAA;AAhHN,IAAM,gBAAgB,CAAC,UAAqB,iBAA0B;AACpE,UAAI,MAAM,QAAQ,QAAQ,KAAK,cAAc;AAC3C,cAAM,SAAS,UAAU,KAAK,UAAQ,KAAK,MAAM,UAAU,YAAY;AAEvE,YAAI,CAAC,OAAQ,QAAO;AAEpB,eAAO,OAAO,MAAM;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AAEA,IAAM,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,MAAuB;AACzD,YAAM;AAAA,QACJ;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,kBAAkB,cAAc,UAAU,SAAS,YAAY;AACrE,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAiB,eAAe;AAChE,YAAM,mBAAe,uBAA0C,CAAC,CAAC;AACjE,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AAGpD,oCAAU,MAAM;AACd,YAAI,UAAU,QAAW;AACvB,sBAAY,KAAK;AAAA,QACnB;AAAA,MACF,GAAG,CAAC,KAAK,CAAC;AAGV,YAAM,qBAAiB;AAAA,QACrB,CAAC,YAAoB,aAAgC;AACnD,uBAAa,UAAU;AAAA,YACrB,GAAG,aAAa;AAAA,YAChB,CAAC,UAAU,GAAG;AAAA,UAChB;AAGA,gBAAM,cAAc,OAAO,OAAO,aAAa,OAAO,EAAE;AAAA,YACtD,OAAK,EAAE,YAAY,EAAE;AAAA,UACvB;AAEA,cAAI,gBAAgB,aAAa;AAC/B,2BAAe,WAAW;AAAA,UAC5B;AAAA,QACF;AAAA,QACA,CAAC,WAAW;AAAA,MACd;AAGA,YAAM,uBACJ,aAAa,gBAAgB,gBAAgB,cACzC,aACA;AAEN,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,YAAM,eAAe;AAAA,QACnB,iBAAiB;AAAA,QACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,QACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,QACrD,CAAC,QAAQ,oBAAoB,EAAE,GAAG;AAAA,QAClC,CAAC,aAAa,EAAE,GAAG;AAAA,MACrB;AACA,YAAM,wBAAoB,gBAAAI;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,0BAAsB,gBAAAA,SAAW,yBAAyB;AAAA,QAC9D,CAAC,QAAQ,oBAAoB,EAAE,GAAG;AAAA,MACpC,CAAC;AACD,YAAM,mBAAe,gBAAAA,SAAW,cAAc,iBAAiB;AAC/D,YAAM,qBAAiB,sBAAM;AAC7B,YAAM,wBAAoB,sBAAM;AAChC,YAAM,gBAAgB,QAAQ;AAC9B,YAAM,yBAAyB,eAAe,iBAAiB;AAC/D,YAAM,cAAc,mBAAmB;AAAA,QACrC;AAAA,QACA,MAAM,kBAAkB;AAAA,MAC1B,CAAC;AACD,YAAM,cAAU,sBAAM;AAEtB,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,oBAAkB;AAAA,UAClB,iBAAe;AAAA,UACf,qBAAmB;AAAA,UACnB,gBAAc;AAAA,UACd,cAAY,MAAM,YAAY;AAAA,UAC9B,mBAAiB,MAAM,iBAAiB,KAAK;AAAA,UAC7C,oBAAkB;AAAA,UAClB,iBAAe;AAAA,UACf,iBAAe;AAAA,UACf;AAAA,UACA,WAAW;AAAA,UACX,MAAK;AAAA,UAEL,yDAAC,SAAM,KAAI,MACR;AAAA,qBACC,8CAAC,SAAM,SAAS,MAAM,IAAI,SAAS,WAAW,cAC3C,iBACH;AAAA,YAEF,8CAAC,SAAI,WAAW,qBACb,kCAAS,IAAI,UAAU,WAAS;AAC/B,sBAAI,+BAAe,KAAK,GAAG;AACzB,sBAAM,aAAc,MAAM,MAA6B;AACvD,2BAAO;AAAA,kBACL;AAAA,kBACA;AAAA,oBACE,aAAa;AAAA,oBACb,eAAe;AAAA,oBACf,MAAM;AAAA,oBACN,UAAU,YAAY;AAAA;AAAA,oBACtB;AAAA,oBACA;AAAA,oBACA,oBAAoB;AAAA,oBACpB;AAAA,oBACA,YAAY,aACR,CAAC,aACC,eAAe,YAAY,QAAQ,IACrC;AAAA,kBACN;AAAA,gBACF;AAAA,cACF;AAEA,qBAAO;AAAA,YACT,CAAC,GACH;AAAA,YACA,8CAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA,aAChE;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,eAAW,cAAc;AAAA;AAAA;;;ACvNzB,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IACAC,iBAuBIC,sBAbE;AAXN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAuBnB,IAAAC,uBAAA;AAbJ,IAAM,eAAe,CAAC,UAA6B;AACjD,YAAM,EAAE,UAAU,YAAY,KAAK,WAAW,GAAG,KAAK,IAAI;AAE1D,YAAM,WAAW,MAAM,OAAO,GAAG,KAAK;AACtC,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,mBAAmB,WAAW;AAAA,QAChC;AAAA,MACF;AAEA,aACE,8CAAC,SAAI,WAAW,SAAU,GAAG,MAC1B,UACH;AAAA,IAEJ;AAEA,iBAAa,cAAc;AAAA;AAAA;;;AC9B3B,IACAC,iBAEA,gBAwBIC,sBAZE;AAfN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB,qBAAO;AAwBH,IAAAC,uBAAA;AAZJ,IAAM,UAAU,CAAC,UAAwB;AACvC,YAAM,EAAE,SAAS,UAAU,QAAQ,UAAU,WAAW,GAAG,KAAK,IAAI;AAEpE,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,SAAS;AAAA,QACX;AAAA,MACF;AAEA,aACE,+CAAC,SAAI,WAAW,SAAU,GAAG,MAC1B;AAAA,mBAAW,8CAAC,SAAI,WAAU,2BAA2B,mBAAQ;AAAA,QAC7D;AAAA,SACH;AAAA,IAEJ;AAEA,YAAQ,cAAc;AAAA;AAAA;;;AClCtB,IAAAC,gBAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IAEAC,gBACAC,iBAEAC,gBAWA,eA8EQC,sBA1DF;AApCN;AAAA;AAAA;AAAA;AAEA,IAAAH,iBAA4B;AAC5B,IAAAC,kBAAuB;AAEvB,IAAAC,iBAAsB;AACtB;AAEA,IAAAE;AAEA;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AAEA,IAAAC;AACA,oBAAO;AA8EC,IAAAL,uBAAA;AA1DR,IAAM,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,EAAE,YAAY,WAAW,IAAI,SAAS;AAAA,QAC1C;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AAED,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAE5D,YAAM,eAAe;AAAA,QACnB,iBAAiB;AAAA,QACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,QACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,MACvD;AAEA,YAAM,oBAAgB,gBAAAM,SAAW,mBAAmB,YAAY;AAEhE,YAAM,qBAAiB,gBAAAA;AAAA,QACrB;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,oBAAgB,gBAAAA;AAAA,QACpB;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,kBAAc,gBAAAA,SAAW,uBAAuB,aAAa;AACnE,YAAM,qBAAiB,sBAAM;AAC7B,YAAM,yBAAyB,eAAe,iBAAiB;AAC/D,YAAM,cAAc,mBAAmB;AAAA,QACrC;AAAA,QACA,MAAM,kBAAkB;AAAA,MAC1B,CAAC;AAED,YAAM,eAAe,CAAC,MAAsC;AAC1D,YAAI,UAAU;AACZ,mBAAS,CAAC;AAAA,QACZ;AAAA,MACF;AAEA,aACE,+CAAC,SAAM,WAAU,+BAA8B,KAAI,MAChD;AAAA,iBACC,8CAAC,SAAO,GAAG,YAAY,WAAW,cAC/B,iBACH;AAAA,QAEF,+CAAC,SAAI,WAAW,gBACd;AAAA;AAAA,YAAC;AAAA;AAAA,cACE,GAAG;AAAA,cACH,GAAG;AAAA,cACJ;AAAA,cACA,UAAU;AAAA,cACV,WAAW;AAAA,cACX,UAAU;AAAA,cACV,gBAAc,CAAC,CAAC;AAAA,cAChB,oBAAkB;AAAA,cAClB,iBAAe;AAAA,cACf,UAAU;AAAA,cACV,UAAU;AAAA;AAAA,UACZ;AAAA,UACA,8CAAC,UAAK,WAAW,aACf,wDAAC,QAAK,MAAM,4BAAa,GAC3B;AAAA,WACF;AAAA,QACC,gBACC,8CAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA,SAElE;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;AC3HrB,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,iBAEAC,gBAMA,eAgFMC;AA1FN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAAiC;AAMjC,oBAAO;AAgFD,IAAAC,uBAAA;AAAA;AAAA;;;AC1FN,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,gBACAC,iBAiBIC,sBATE;AAVN;AAAA;AAAA;AACA,IAAAF,iBAAyB;AACzB,IAAAC,kBAAuB;AAiBnB,IAAAC,uBAAA;AATJ,IAAM,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,MAAgB;AAC3C,YAAM,EAAE,UAAU,WAAW,GAAG,WAAW,IAAI;AAE/C,YAAM,cAAU,gBAAAC,SAAW,UAAU,cAAc,SAAS;AAC5D,YAAM,UAAU,wBAAS,KAAK,QAAQ;AAEtC,YAAM,EAAE,UAAU,aAAa,SAAS,MAAM,IAAI,QAAQ;AAE1D,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACC,GAAG;AAAA,UACJ,WAAW;AAAA,UAEV;AAAA;AAAA,MACH;AAAA,IAEJ;AAEA,QAAI,cAAc;AAAA;AAAA;;;AC/BlB,IAAAC,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,gBAMAC,iBAGA,eA6CIC,sBAhCE;AAxBN;AAAA;AAAA;AAAA;AAEA,IAAAF,iBAKO;AACP,IAAAC,kBAAuB;AAEvB,IAAAE;AACA,oBAAO;AA6CH,IAAAD,uBAAA;AAhCJ,IAAM,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM;AAAA,QACJ,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAkB,OAAO;AAEvD,oCAAU,MAAM;AACd,mBAAW,OAAO;AAAA,MACpB,GAAG,CAAC,OAAO,CAAC;AAEZ,YAAM,cAAU,gBAAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,0BAA0B;AAAA,UAC1B,2BAA2B;AAAA,QAC7B;AAAA,QACA;AAAA,MACF;AAEA,YAAM,eAAe,CAAC,UAAyC;AAC7D,mBAAW,CAAC,OAAO;AACnB,YAAI,UAAU;AACZ,mBAAS,KAAK;AAAA,QAChB;AAAA,MACF;AAEA,aACE,+CAAC,WAAM,KAAU,WAAW,SAC1B;AAAA,sDAAC,kBACC,wDAAC,UAAM,oBAAU,OAAO,OAAM,GAChC;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAS;AAAA,YACT,UAAU;AAAA,YACV,UAAU;AAAA,YACT,GAAG;AAAA;AAAA,QACN;AAAA,QACA,8CAAC,UAAK,WAAU,yBAAwB;AAAA,SAC1C;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;ACzErB,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,iBAEA,cAcSC,sBAHH;AAdN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB,mBAAO;AAcE,IAAAC,uBAAA;AAHT,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM,cAAU,gBAAAC,SAAW,UAAU,gBAAgB,MAAM,SAAS;AAEpE,aAAO,8CAAC,WAAM,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACzD;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACpBpB,IACAC,iBAYSC,sBAHH;AAVN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAYd,IAAAC,uBAAA;AAHT,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,cAAU,gBAAAC,SAAW,UAAU,sBAAsB,MAAM,SAAS;AAE1E,aAAO,8CAAC,WAAM,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACzD;AAEA,SAAK,cAAc;AAAA;AAAA;;;AChBnB,IACAC,iBAYSC,sBAHH;AAVN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAYd,IAAAC,uBAAA;AAHT,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,cAAU,gBAAAC,SAAW,UAAU,sBAAsB,MAAM,SAAS;AAE1E,aAAO,8CAAC,WAAM,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACzD;AAEA,SAAK,cAAc;AAAA;AAAA;;;AChBnB,IACAC,iBAYSC,sBAHH;AAVN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAYd,IAAAC,uBAAA;AAHT,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,cAAU,gBAAAC,SAAW,UAAU,sBAAsB,MAAM,SAAS;AAE1E,aAAO,8CAAC,WAAM,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACzD;AAEA,SAAK,cAAc;AAAA;AAAA;;;AChBnB,IACAC,iBAYSC,sBAHH;AAVN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAYd,IAAAC,uBAAA;AAHT,IAAM,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,MAAgB;AAC3C,YAAM,cAAU,gBAAAC,SAAW,UAAU,qBAAqB,MAAM,SAAS;AAEzE,aAAO,8CAAC,QAAG,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACtD;AAEA,QAAI,cAAc;AAAA;AAAA;;;AChBlB,IACAC,iBAkBSC,sBAPH;AAZN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAkBd,IAAAC,uBAAA;AAPT,IAAM,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,MAAuB;AACzD,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AAEA,aAAO,8CAAC,QAAI,GAAG,OAAO,KAAU,WAAW,SAAS;AAAA,IACtD;AAEA,eAAW,cAAc;AAAA;AAAA;;;ACtBzB,IACAC,iBAkBSC,sBAPH;AAZN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAkBd,IAAAC,uBAAA;AAPT,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AAEA,aAAO,8CAAC,QAAG,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACtD;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACtBnB,IAwCMC;AAxCN,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAkCA,IAAMD,SAAuB,OAAO,OAAO,OAAgB;AAAA,MACzD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAoBD,IAAAA,OAAM,cAAc;AAAA;AAAA;;;ACnEpB,IACAE,iBAEA,aAmDSC,sBAzBH,gBAUA;AAvCN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB,kBAAO;AAmDE,IAAAC,uBAAA;AAzBT,IAAM,iBAAiB,CACrB,SACA,gBACG;AACH,UAAI,SAAS;AACX,eAAO,CAAC,MAAM,MAAM,MAAM,IAAI,EAAE,SAAS,OAAO,IAAI,UAAU;AAAA,MAChE;AACA,aAAO,eAAe;AAAA,IACxB;AAEA,IAAM,OAAO,CAAC,EAAE,KAAK,aAAa,YAAY,KAAK,GAAG,MAAM,MAAiB;AAE3E,YAAM,EAAE,SAAS,WAAW,SAAS,GAAG,WAAW,IAAI;AAGvD,YAAM,cAAc,eAAe,SAAS,SAAS;AACrD,YAAM,cAAc,WAAW;AAC/B,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,EAAE,CAAC,QAAQ,WAAW,EAAE,GAAG,YAAY;AAAA,QACvC,EAAE,CAAC,qBAAqB,OAAO,EAAE,GAAG,QAAQ;AAAA,QAC5C;AAAA,MACF;AAEA,aAAO,8CAAC,aAAU,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAClE;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACzDnB,IAAAC,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBAsCIC,sBAjBE;AArBN;AAAA;AAAA;AAAA,IAAAD,kBAAuB;AAsCnB,IAAAC,uBAAA;AAjBJ,IAAM,gBAAgB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA0B;AAE/D,YAAM,EAAE,YAAY,YAAY,YAAY,YAAY,GAAG,WAAW,IACpE;AAEF,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,QACnB;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACC,GAAG;AAAA,UACJ,UAAU;AAAA,UACV,UAAU;AAAA,UACV,WAAW;AAAA;AAAA,MACb;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;AChD5B,IAAAC,sBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,iBASA,iBAkCIC,sBAxBE;AArBN;AAAA;AAAA;AAAA;AAEA,IAAAD,kBAAuB;AAGvB;AAEA,IAAAE;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,sBAAO;AAkCH,IAAAJ,uBAAA;AAxBJ,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AACrD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,EAAE,YAAY,YAAY,kBAAkB,IAAI,aAAa,KAAK;AAGxE,YAAM,cAAU,gBAAAK,SAAW,UAAU,oBAAoB,SAAS;AAClE,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,YAAM,mBAAe,gBAAAA,SAAW,2BAA2B,iBAAiB;AAC5E,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,UACE,iBAAiB;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AAEA,aACE,+CAAC,SAAM,WAAW,SAAS,KAAI,MAC5B;AAAA,iBACC,8CAAC,SAAO,GAAG,YAAY,WAAW,cAC/B,gBAAM,OACT;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACH,GAAG;AAAA,YACJ;AAAA,YACA,WAAW;AAAA,YACX;AAAA,YACA,gBAAc,gBAAgB;AAAA;AAAA,QAChC;AAAA,QACA,8CAAC,gBAAc,GAAG,mBAAmB,cAA4B;AAAA,SACnE;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;;;AChEvB,IAAAC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,gBAiCIC,sBAfE;AAnBN;AAAA;AAAA;AACA,IAAAD,iBAAwB;AAExB;AA+BI,IAAAC,uBAAA;AAfJ,IAAM,aAAa,CAAC;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,cAAc;AAAA,MACd,GAAG;AAAA,IACL,MAAuB;AACrB,YAAM,qBAAqB;AAI3B,YAAM,oBAAgB,wBAAQ,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC;AAE9D,YAAM,mBACJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,yBAAyB;AAAA;AAAA,MAC3B;AAGF,UAAI,aAAa;AACf,eACE,8CAAC,QAAK,KAAW,GAAG,WACjB,4BACH;AAAA,MAEJ;AAEA,aAAO;AAAA,IACT;AAEA,eAAW,cAAc;AAAA;AAAA;;;ACnDzB,IAAAC,mBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,iBAGA,cA4BMC,sBAfA;AAjBN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB,IAAAE;AACA,mBAAO;AA4BD,IAAAD,uBAAA;AAfN,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,cAAU,gBAAAE,SAAW,UAAU,gBAAgB,WAAW,SAAS;AACzE,YAAM,oBAAgB,gBAAAA,SAAW,UAAU,sBAAsB;AACjE,YAAM,qBAAiB,gBAAAA,SAAW,UAAU,2BAA2B;AACvE,YAAM,uBAAmB,gBAAAA,SAAW,UAAU,yBAAyB;AAEvE,aACE,8CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAC5C,yDAAC,QAAK,eAAc,UAAS,WAAW,kBACtC;AAAA,sDAAC,OAAE,WAAW,eAAgB,iBAAM;AAAA,QACpC,8CAAC,OAAE,WAAW,gBAAiB,uBAAY;AAAA,SAC7C,GACF;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACxCpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBACAC,gBAuEyBC;AAxEzB;AAAA;AAAA;AAAA,IAAAF,kBAAuB;AACvB,IAAAC,iBAA4C;AAuEnB,IAAAC,uBAAA;AAAA;AAAA;;;ACxEzB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AAAA;AAAA;;;ACDA,IAEAC,iBAGAC,gBAKA,uBAoEQC,sBA1CK;AApCb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAGvB,IAAAC,iBAAmD;AACnD;AAIA,4BAAO;AAoEC,IAAAC,uBAAA;AA1CD,IAAM,iBAAiB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA2B;AACxE,YAAM;AAAA,QACJ;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX;AAAA,QACA,YAAY,CAAC;AAAA,QACb,iBAAiB,CAAC;AAAA,QAClB;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAClD,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AACpD,YAAM,cAAU,uBAAuB,IAAI;AAC3C,YAAM,EAAE,KAAK,IAAI,cAAc;AAG/B,YAAM,aAAS,sBAAM;AACrB,YAAM,iBAAiB,0BAA0B,MAAM;AAGvD,YAAM,iBAAiB,aAAa,KAAK,UAAU,IAAI;AAEvD,oCAAU,MAAM;AACd,YAAI,CAAC,kBAAkB,CAAC,QAAQ,SAAS;AACvC,yBAAe,KAAK;AACpB;AAAA,QACF;AAGA,cAAM,UAAU,QAAQ;AACxB,cAAM,gBAAgB,QAAQ,eAAe,QAAQ;AACrD,uBAAe,aAAa;AAAA,MAC9B,GAAG,CAAC,MAAM,gBAAgB,QAAQ,CAAC;AAGnC,UAAI,cAAc,CAAC,gBAAgB;AACjC,eACE,8CAAC,SAAI,KAAU,WAAuB,GAAG,YACvC,wDAAC,cAAW,MAAY,aAAW,MAAE,GAAG,WAAW,GACrD;AAAA,MAEJ;AAEA,YAAM,wBAAwB,CAAC,aAAsB;AACnD,sBAAc,QAAQ;AACtB,mBAAW,QAAQ;AAAA,MACrB;AAEA,YAAM,cAAU,gBAAAC,SAAW,0BAA0B,SAAS;AAC9D,YAAM,2BAAuB,gBAAAA,SAAW,mCAAmC;AAAA,QACzE,8CAA8C,CAAC;AAAA,MACjD,CAAC;AAGD,YAAM,qBAAqB;AAAA,QACzB,gBAAgB;AAAA,MAClB;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,WAAW;AAAA,UACX,eAAY;AAAA,UACX,GAAG;AAAA,UAEJ;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,eAAY;AAAA,gBACZ,oBAAkB,cAAc,iBAAiB;AAAA,gBAEjD,wDAAC,cAAW,aAAY,QAAO,aAAW,MAAC,MAAa,GAAG,WAAW;AAAA;AAAA,YACxE;AAAA,YACC,eACC;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,gBAAe;AAAA,gBACf,UAAU;AAAA,gBACV,SAAS,CAAC,MAAyB;AACjC,qBAAG,gBAAgB;AAAA,gBACrB;AAAA,gBACA,IAAI;AAAA,gBACH,GAAG;AAAA;AAAA,YACN;AAAA;AAAA;AAAA,MAEJ;AAAA,IAEJ;AAEA,mBAAe,cAAc;AAAA;AAAA;;;ACnI7B,IAAAC,uBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA,IAGAC,gBACA,oBA0OIC,sBAlLE,kBAoDA,gBAgDA,gBA0CA,uBAsDA,yBA8BA;AA9RN;AAAA;AAAA;AAAA;AAGA,IAAAD,iBAAuC;AACvC,yBAAyB;AAGzB,IAAAE;AAuOI,IAAAD,uBAAA;AAlLJ,IAAM,mBAAmB,CACvB,UACA,gBACA,SACG;AACH,iBAAO;AAAA,QACL,CAAC,aAAqB,iBAAyC;AAE7D,cAAI,CAAC,UAAU;AACb;AAAA,UACF;AAKA,gBAAM,iBAAiB;AACvB,gBAAM,WAAW,aAAa;AAG9B,gBAAM,cAAc,iBAAiB,iBAAiB;AAItD,mBAAS;AAAA,YACP,QAAQ,EAAE,MAAM,OAAO,YAAY;AAAA,UACrC,CAAkC;AAAA,QACpC;AAAA,QACA,CAAC,UAAU,gBAAgB,IAAI;AAAA,MACjC;AAAA,IACF;AAuBA,IAAM,iBAAiB,CACrB,UACA,iBACG;AACH,iBAAO;AAAA,QACL,CAAC,YAAqC;AAEpC,mBAAS,UAAU;AAMnB,cAAI,OAAO,iBAAiB,YAAY;AACtC,yBAAa,OAAO;AAAA,UACtB,WAES,cAAc;AACrB,yBAAa,UAAU;AAAA,UACzB;AAAA,QAGF;AAAA,QACA,CAAC,UAAU,YAAY;AAAA,MACzB;AAAA,IACF;AAuBA,IAAM,iBAAiB,CACrB,QACA,SACA,gBACA,SACG;AACH,iBAAO;AAAA,QACL,CAAC,UAA+B;AAE9B,cAAI,CAAC,UAAU,CAAC,QAAQ,SAAS;AAC/B;AAAA,UACF;AAKA,gBAAM,iBAAiB,QAAQ,QAAQ;AACvC,gBAAM,WAAW,QAAQ,QAAQ;AAGjC,gBAAM,cAAc,iBAAiB,iBAAiB;AAItD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,QAAQ,EAAE,GAAG,MAAM,QAAQ,MAAM,OAAO,YAAY;AAAA,UACtD,CAAwB;AAAA,QAC1B;AAAA,QACA,CAAC,QAAQ,SAAS,gBAAgB,IAAI;AAAA,MACxC;AAAA,IACF;AAWA,IAAM,wBAAwB,CAAC;AAAA,MAC7B;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAGM;AACJ,YAAM,WAAW,iBAAiB,UAAU,gBAAgB,IAAI;AAChE,YAAM,EAAE,KAAK,UAAU,SAAS,SAAS,QAAI,6BAAS,MAAM,EAAE,SAAS,CAAC;AAExE,YAAM,cAAc,eAAe,UAAU,YAAY;AACzD,YAAM,aAAa,eAAe,QAAQ,SAAS,gBAAgB,IAAI;AAGvE,oCAAU,MAAM;AACd,YAAI,CAAC,QAAQ,SAAS;AACpB;AAAA,QACF;AAEA,cAAM,cAAc,MAAM,SAAS;AACnC,cAAM,gBAAgB,QAAQ,QAAQ;AACtC,cAAM,kBAAkB,QAAQ,QAAQ;AAGxC,YAAI,kBAAkB,eAAe,oBAAoB,aAAa;AACpE,mBAAS,WAAW;AAAA,QACtB;AAAA,MACF,GAAG,CAAC,OAAO,SAAS,UAAU,QAAQ,CAAC;AAEvC,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL;AAAA,UACA,QAAQ;AAAA;AAAA,MACV;AAAA,IAEJ;AAWA,IAAM,0BAA0B,CAAC;AAAA,MAC/B;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAGM;AACJ,YAAM,WAAW,iBAAiB,UAAU,gBAAgB,IAAI;AAChE,YAAM,EAAE,KAAK,UAAU,QAAQ,QAAI,6BAAS,MAAM,EAAE,SAAS,CAAC;AAE9D,YAAM,cAAc,eAAe,UAAU,YAAY;AACzD,YAAM,aAAa,eAAe,QAAQ,SAAS,gBAAgB,IAAI;AAEvE,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL;AAAA,UACA,QAAQ;AAAA,UACR,cAAc,cAAc,SAAS;AAAA;AAAA,MACvC;AAAA,IAEJ;AAEA,IAAM,cAAc,CAAC,EAAE,KAAK,cAAc,GAAG,MAAM,MAAwB;AACzE,YAAM,EAAE,OAAO,cAAc,GAAG,KAAK,IAAI;AAKzC,UAAI,WAAW,OAAO;AACpB,eACE;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,OAAO,SAAS;AAAA,YAChB;AAAA;AAAA,QACF;AAAA,MAEJ,OAAO;AACL,eACE;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ;AAAA,YACA;AAAA;AAAA,QACF;AAAA,MAEJ;AAAA,IACF;AAEA,gBAAY,cAAc;AAAA;AAAA;;;AC5SnB,SAASE,aAAY,OAAyB;AACnD,QAAM;AAAA,IACJ,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,KAAK;AAAA,IACL,GAAG;AAAA,EACL,IAAI;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,UACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL,MAAK;AAAA,UACL,YAAU;AAAA,UACV,YAAU;AAAA;AAAA,MACZ;AAAA;AAAA,EAEJ;AAEJ;AAjCA,IAEA,kBAqBQC,sBAhBF;AAPN,IAAAC,oBAAA;AAAA;AAAA;AAAA;AAEA,uBAAqB;AACrB,IAAAC;AAoBQ,IAAAF,uBAAA;AAhBR,IAAM,0BAAsB,iBAAAG,SAAS,MAAM,yEAAyB;AAAA,MAClE,kBAAkB,SAAO,IAAI;AAAA,IAC/B,CAAC;AA0BD,IAAAJ,aAAY,cAAc;AAAA;AAAA;;;ACnC1B;AAAA;AAAA;AAAA,IAAAK;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AAAA;AAAA;;;ACjDA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;;;ACHA;AAAA;AAAA;AAAA;AAEA;AACA;AACA,IAAAC;AAAA;AAAA;;;ACJA,IAAAC,gBACAC,iBAGAC,sBAkBIC,sBAVS;AAZb;AAAA;AAAA;AAAA,IAAAH,iBAAsB;AACtB,IAAAC,kBAAuB;AACvB;AACA,IAAAG;AACA,IAAAF,uBAAO;AAkBH,IAAAC,uBAAA;AAVG,IAAM,eAAe,CAAC;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAAyB;AACvB,YAAM,cAAU,gBAAAE,SAAW,UAAU,wBAAwB,SAAS;AAEtE,UAAI,CAAC,aAAc,QAAO;AAE1B,aACE,+CAAC,SAAI,IAAQ,WAAW,SAAS,eAAY,gBAAe,MAAK,SAC/D;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAU;AAAA,YACV,eAAY;AAAA;AAAA,QACd;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,aAAY;AAAA,YACZ,WAAU;AAAA,YACV,MAAM;AAAA;AAAA,QACR;AAAA,SACF;AAAA,IAEJ;AAEA,iBAAa,cAAc;AAAA;AAAA;;;ACrC3B,IAAAC,qBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAGAC,gBACAC,iBACAC,gBAOAC,kBAsEMC,sBApEO;AAdb,IAAAC,iBAAA;AAAA;AAGA,IAAAL,iBAAmD;AACnD,IAAAC,kBAAuB;AACvB,IAAAC,iBAAmC;AACnC,IAAAI;AAEA;AACA;AACA,IAAAC;AACA,IAAAC;AACA,IAAAL,mBAAO;AAsED,IAAAC,uBAAA;AApEC,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AAC5D,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,kBAAkB,GAAG;AAAA,QACtB,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAkB,eAAe;AAC/D,YAAM,kBAAc,uBAAyB,IAAI;AACjD,YAAM,SAAS,OAAO;AACtB,YAAM,cAAU,sBAAM;AAEtB,YAAM,eAAe,OAAO,aAAa;AACzC,oCAAU,MAAM;AACd,YAAI,cAAc;AAChB,qBAAW,QAAQ;AAAA,QACrB;AAAA,MACF,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,YAAM,oBAAgB,gBAAAK;AAAA,QACpB;AAAA,UACE,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,UACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,UACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,QACvD;AAAA,QACA;AAAA,MACF;AAEA,YAAM,qBAAiB,gBAAAA;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,mBAAe,gBAAAA,SAAW,0BAA0B,aAAa;AACvE,YAAM,mBAAe,gBAAAA,SAAW,0BAA0B,aAAa;AACvE,YAAM,kBAAc,gBAAAA,SAAW,yBAAyB,aAAa;AACrE,YAAM,qBAAiB,sBAAM;AAC7B,YAAM,yBAAyB,eAAe,iBAAiB;AAC/D,YAAM,cAAc,mBAAmB;AAAA,QACrC;AAAA,QACA;AAAA,MACF,CAAC;AACD,YAAM,cAAU,sBAAM;AAEtB,YAAM,eAAe,CAAC,UAA4C;AAChE,mBAAW,CAAC,OAAO;AACnB,YAAI,UAAU;AACZ,mBAAS,OAAO,UAAU;AAAA,QAC5B;AAAA,MACF;AAEA,aACE,+CAAC,SAAM,KAAI,MAAK,WAAW,gBACzB;AAAA,uDAAC,WAAM,WAAW,cAChB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,oBAAkB;AAAA,cAClB,qBAAmB;AAAA,cACnB,gBAAc;AAAA,cACd,mBAAiB;AAAA,cACjB,UAAU;AAAA,cACV,UAAU;AAAA,cACV,KAAK;AAAA,cACL,WAAW;AAAA,cACX,UAAU;AAAA,cACV,MAAK;AAAA,cACL;AAAA,cACA,UAAU;AAAA,cACV,IAAI,MAAM;AAAA,cACV;AAAA,cACA;AAAA,cACC,GAAG;AAAA;AAAA,UACN;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,UAAU,4BAAa;AAAA,cAC7B,MAAK;AAAA,cACL,WAAW;AAAA;AAAA,UACb;AAAA,UACA,8CAAC,UAAK,IAAI,SAAS,WAAU,kCAC1B,iBACH;AAAA,WACF;AAAA,QACA,8CAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA,SAChE;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;",
|
|
4
|
+
"sourcesContent": ["const CSS_LINK_ID = \"sb-theme\";\n\nexport const changeCSS = (cssUrl: string) => {\n // Find CSS <link> element with id = \"sb-theme\"\n const theme: HTMLElement | null = document.getElementById(CSS_LINK_ID);\n\n if (theme) {\n theme.setAttribute(\"href\", cssUrl);\n } else {\n // Append a new link to document and set href\n const link = document.createElement(\"link\");\n link.setAttribute(\"type\", \"text/css\");\n link.setAttribute(\"rel\", \"stylesheet\");\n link.setAttribute(\"href\", cssUrl);\n link.setAttribute(\"id\", CSS_LINK_ID);\n document.head.appendChild(link);\n }\n};\n", "export function delay(ms: number, { signal }: { signal?: AbortSignal } = {}) {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(resolve, ms);\n if (signal) {\n signal.addEventListener(\"abort\", () => {\n clearTimeout(timeout);\n reject(new DOMException(\"Aborted\", \"AbortError\"));\n });\n }\n });\n}\n", "// This function generates data structure required to hide specified\n// prop from individual stories. Key 'table' is where specified key\n// is disabled.\n//\n// The above is documented here:\n// https://storybook.js.org/docs/react/essentials/controls#disable-controls-for-specific-properties\n//\n// The expected usage looks as follows:\n//\n// <Meta\n// title=\"Components/MyComponent\"\n// component={MyComponent}\n// argTypes={{\n// label: {\n// control: {\n// type: \"text\",\n// },\n// table: {\n// disable: true,\n// },\n// },\n// }}\n// />\nexport const excludeControls = (...args: string[]) =>\n args.reduce(\n (prev, acc) => ({ ...prev, [acc]: { table: { disable: true } } }),\n {},\n );\n", "export const filterUndefinedProps = (props: Record<string, unknown>) => {\n const filteredProps: Record<string, unknown> = {};\n Object.keys(props).forEach(key => {\n if (props[key] !== undefined) {\n filteredProps[key] = props[key];\n }\n });\n return filteredProps;\n};\n", "import type { SpacingType } from \"../types\";\n\nexport const getSpacingValue = (\n padding: SpacingType | undefined,\n): string | undefined => {\n if (typeof padding === \"string\") {\n return `var(--size-${padding})`;\n }\n\n if (typeof padding === \"number\") {\n return `${padding}px`;\n }\n\n return undefined;\n};\n", "// Ref: https://github.com/gregberge/react-merge-refs/blob/812fefa4390884a4a2d1bc489d869bd088df8ff5/src/index.tsx\nimport type { MutableRefObject, LegacyRef, RefCallback } from \"react\";\n\nexport function mergeRefs<T = unknown>(\n refs: Array<MutableRefObject<T> | LegacyRef<T> | undefined>,\n): RefCallback<T> {\n return value => {\n refs.forEach(ref => {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref != null) {\n (ref as MutableRefObject<T | null>).current = value;\n }\n });\n };\n}\n", "// Browser support HTML Dialog element\nexport const supportsDialog = () => typeof HTMLDialogElement === \"function\";\n", "import type { SizeType } from \"../types/size\";\n\nexport const sizeClasses = (size: SizeType | undefined) => {\n if (!size) {\n return {};\n }\n\n return {\n \"--is-xxs\": size === \"xxs\",\n \"--is-xs\": size === \"xs\",\n \"--is-sm\": size === \"sm\",\n \"--is-md\": size === \"md\",\n \"--is-lg\": size === \"lg\",\n \"--is-xl\": size === \"xl\",\n \"--is-xxl\": size === \"xxl\",\n };\n};\n", "import type { SizeType } from \"../types\";\n\nexport const sizeOptions: Array<SizeType | \"\"> = [\n \"\",\n \"xxs\",\n \"xs\",\n \"sm\",\n \"md\",\n \"lg\",\n \"xl\",\n \"xxl\",\n];\n", "export function spaceDelimitedList(\n list: (string | null | undefined)[],\n): string | undefined {\n return list.filter(Boolean).join(\" \") || undefined;\n}\n", "export * from \"./changeCSS\";\nexport * from \"./delay\";\nexport * from \"./excludeControls\";\nexport * from \"./filterUndefinedProps\";\nexport * from \"./getSpacingValue\";\nexport * from \"./mergeRefs\";\nexport * from \"./polyfill-tests\";\nexport * from \"./sizeClasses\";\nexport * from \"./sizeOptions\";\nexport * from \"./spaceDelimitedList\";\n", "import { getSpacingValue } from \"../../utils\";\nimport { filterUndefinedProps } from \"../../utils/filterUndefinedProps\";\nimport type { FlexNonStyleProps, FlexProps, FlexStyleProps } from \"./types\";\n\nexport const buildFlexStyles = (props: FlexStyleProps) => {\n const {\n flexDirection,\n flexWrap,\n flexGrow,\n flex,\n justifyContent,\n alignItems,\n alignContent,\n gap,\n rowGap,\n columnGap,\n } = props;\n\n const styleProps = {\n flexDirection,\n flexWrap,\n flexGrow,\n flex,\n justifyContent,\n alignItems,\n alignContent,\n gap: getSpacingValue(gap),\n columnGap: getSpacingValue(columnGap),\n rowGap: getSpacingValue(rowGap),\n };\n\n return filterUndefinedProps(styleProps);\n};\n\nexport const splitProps = (\n props: FlexProps,\n): [FlexStyleProps, FlexNonStyleProps] => {\n const {\n flexDirection,\n flexWrap,\n flexGrow,\n flex,\n justifyContent,\n alignItems,\n alignContent,\n gap,\n rowGap,\n columnGap,\n ...otherProps\n } = props;\n\n return [\n {\n flexDirection,\n flexWrap,\n flexGrow,\n flex,\n justifyContent,\n alignItems,\n alignContent,\n gap,\n rowGap,\n columnGap,\n },\n otherProps,\n ];\n};\n", "import classNames from \"classnames/dedupe\";\nimport type { FlexProps } from \"./types\";\nimport { buildFlexStyles, splitProps } from \"./propUtils\";\nimport \"./Flex.css\";\n\nconst Flex = ({ ref, ...props }: FlexProps) => {\n const {\n elementType: Element = \"div\",\n style,\n className,\n ...otherProps\n } = props;\n const classes = classNames(\"mobius\", \"mobius-flex\", className);\n\n const [styleProps, restProps] = splitProps(otherProps);\n const flexStyles = buildFlexStyles(styleProps);\n\n return (\n <Element\n ref={ref}\n style={{\n ...flexStyles,\n ...style,\n }}\n className={classes}\n {...restProps}\n />\n );\n};\n\nFlex.displayName = \"Flex\";\nexport { Flex };\n", "import type { ReactNode, RefAttributes, AriaRole } from \"react\";\nimport type { Property } from \"csstype\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { SpacingType } from \"../../types\";\n\nexport type FlexElementType = HTMLDivElement;\n\nexport interface FlexStyleProps {\n elementType?: React.ElementType;\n flexDirection?: Property.FlexDirection;\n flexWrap?: Property.FlexWrap;\n flexGrow?: Property.FlexGrow;\n flex?: Property.Flex;\n /** Aligns grid items along the block (column) axis */\n alignItems?: Property.AlignItems;\n /** Aligns the grid along the inline (row) axis */\n alignContent?: Property.AlignContent;\n /** Aligns the grid along the inline (row) axis */\n justifyContent?: Property.JustifyContent;\n /** How big a gap between the columns and rows */\n gap?: SpacingType;\n /** How big a gap between the rows */\n rowGap?: SpacingType;\n /** How big a gap between the columns */\n columnGap?: SpacingType;\n style?: React.CSSProperties;\n role?: AriaRole;\n}\n\nexport interface FlexNonStyleProps\n extends DOMProps, RefAttributes<FlexElementType> {\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nexport interface FlexProps extends FlexStyleProps, FlexNonStyleProps {}\n", "export * from \"./Flex\";\nexport * from \"./types\";\n", "import classNames from \"classnames/dedupe\";\nimport type { IconProps } from \"./types\";\nimport \"./Icon.css\";\n\nconst ICON_PREFIX = \"mobius-icon\";\n\nconst capitaliseFirstLetter = (str: string) =>\n str.charAt(0).toUpperCase() + str.slice(1);\n\nexport function Icon({\n ref,\n icon,\n className,\n size = \"xs\",\n color,\n fixedWidth,\n spin,\n spinReverse,\n title,\n ...otherProps\n}: IconProps) {\n if (!icon) {\n throw new Error(\"Must specify icon object\");\n }\n\n const classes = classNames(\n \"mobius\",\n \"mobius-icon\",\n `svg-inline--${ICON_PREFIX}`,\n `--size-${size}`,\n className,\n {\n [`${ICON_PREFIX}-fw`]: fixedWidth,\n [`${ICON_PREFIX}-spin`]: spin || spinReverse,\n [`${ICON_PREFIX}-spin-reverse`]: spinReverse,\n },\n );\n\n const { iconName, width, height, svgPathData } = icon;\n const formattedIconName = iconName.split(\"-\").join(\" \");\n\n const defaultTitle = `${capitaliseFirstLetter(formattedIconName)} icon`;\n const titleText = title || defaultTitle;\n\n return (\n <svg\n ref={ref}\n focusable=\"false\"\n data-icon={iconName}\n className={classes}\n role=\"img\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={`0 0 ${width} ${height}`}\n style={{ color }}\n {...otherProps}\n >\n <title>{titleText}</title>\n <path fill=\"currentColor\" d={svgPathData} />\n </svg>\n );\n}\n", "import type { RefAttributes } from \"react\";\nimport type { IconDefinition } from \"../../types/icon\";\n\nexport type IconSizeProp = \"xs\" | \"sm\" | \"md\" | \"lg\";\n\nexport interface IconProps extends RefAttributes<SVGSVGElement> {\n icon?: IconDefinition;\n className?: string;\n size?: IconSizeProp;\n color?: string;\n fixedWidth?: boolean;\n title?: string;\n\n // Animations\n spin?: boolean;\n spinReverse?: boolean;\n}\n", "export * from \"./Icon\";\nexport * from \"./types\";\n", "import type { KeyboardEvent, ReactNode } from \"react\";\nimport type { DOMProps } from \"../../types\";\nimport classNames from \"classnames/dedupe\";\nimport { Flex } from \"../Flex\";\nimport { Icon } from \"../Icon\";\nimport { chevronDown } from \"@simplybusiness/icons\";\n\nexport type AccordionLinkElementType =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"h6\"\n | \"span\";\nexport type AccordionElementType = HTMLDivElement;\n\nexport interface AccordionLinkProps extends DOMProps {\n text: string | ReactNode;\n elementType?: AccordionLinkElementType;\n onClick?: (e?: React.MouseEvent) => void;\n toggle: () => void;\n headerChildren?: ReactNode;\n ariaExpanded: boolean | undefined;\n accordionId: string;\n contentId: string;\n}\n\nexport const AccordionLink = ({\n text,\n elementType: LinkElement = \"span\",\n toggle,\n onClick,\n headerChildren,\n ariaExpanded,\n accordionId,\n contentId,\n}: AccordionLinkProps) => {\n const linkClasses = classNames(\"mobius-accordion__link\", {\n \"--is-open\": ariaExpanded,\n });\n const iconClasses = classNames(\"mobius-accordion__link-icon\", {\n \"--is-open\": ariaExpanded,\n });\n const handleOnClick = (e?: React.MouseEvent): void => {\n if (onClick) {\n onClick(e);\n }\n toggle();\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \" \" || e.key === \"Enter\") {\n toggle();\n }\n };\n\n if (headerChildren) {\n return (\n <Flex\n justifyContent=\"space-between\"\n alignItems=\"center\"\n className=\"mobius-accordion__header\"\n >\n <div\n id={accordionId}\n className={linkClasses}\n onClick={handleOnClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-expanded={!!ariaExpanded}\n aria-controls={contentId}\n >\n <LinkElement className=\"mobius-accordion__link-text\">\n {text}\n </LinkElement>\n <Icon icon={chevronDown} className={iconClasses} />\n </div>\n {headerChildren}\n </Flex>\n );\n }\n\n return (\n <div\n id={accordionId}\n className={linkClasses}\n onClick={handleOnClick}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-expanded={!!ariaExpanded}\n aria-controls={contentId}\n >\n <LinkElement className=\"mobius-accordion__link-text\">{text}</LinkElement>\n <Icon icon={chevronDown} className={iconClasses} />\n </div>\n );\n};\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport { useEffect, useState, useId } from \"react\";\nimport { usePrefersReducedMotion } from \"@simplybusiness/mobius-hooks\";\nimport type { DOMProps } from \"../../types\";\n\nimport type {\n AccordionElementType,\n AccordionLinkElementType,\n} from \"./AccordionLink\";\nimport { AccordionLink } from \"./AccordionLink\";\nimport \"./Accordion.css\";\n\nexport interface AccordionProps\n extends DOMProps, RefAttributes<AccordionElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Link text to show accordion content */\n showText?: string | ReactNode;\n /** Link text to hide accordion content */\n hideText?: string | ReactNode;\n /** Whether header is above or below content */\n headerPosition?: \"top\" | \"bottom\";\n /** Whether to expand the accordion initially */\n startOpen?: boolean | undefined;\n /** Semantic heading for title link (default is span) */\n linkElementType?: AccordionLinkElementType;\n /** Callback that fires when the accordion link is clicked (fires before toggle) */\n onClick?: (e?: React.MouseEvent) => void;\n /** Callback that fires each time the accordion is opened */\n onOpen?: () => void;\n /** Callback that fires each time the accordion is closed */\n onClose?: () => void;\n /** Callback that fires each time the accordion state changes */\n onChange?: (state: boolean) => void;\n children?: ReactNode;\n headerChildren?: ReactNode;\n}\n\nexport const Accordion = ({ ref, ...props }: AccordionProps) => {\n const {\n showText = \"See more\",\n hideText = \"See less\",\n headerPosition = \"top\",\n startOpen = false,\n linkElementType,\n onClick,\n onOpen,\n onClose,\n onChange = () => {},\n headerChildren,\n ...rest\n } = props;\n\n const [accordionState, setAccordionState] = useState({\n open: startOpen,\n withAnimation: false,\n });\n const prefersReducedMotion = usePrefersReducedMotion();\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-accordion\",\n props.className,\n {\n \"--should-animate\": accordionState.withAnimation && !prefersReducedMotion,\n \"--is-open\": accordionState.open,\n },\n );\n const contentContainerClasses = classNames(\n \"mobius-accordion__content-container\",\n {\n \"--is-open\": accordionState.open,\n },\n );\n const contentClasses = classNames(\"mobius-accordion__content\", {\n \"--is-open\": accordionState.open,\n });\n\n const linkText = accordionState.open ? hideText : showText;\n\n const handleChange = () => {\n // Fire events\n if (!accordionState.open && onOpen) {\n onOpen();\n }\n if (accordionState.open && onClose) {\n onClose();\n }\n if (onChange) {\n onChange(!accordionState.open);\n }\n setAccordionState({\n open: !accordionState.open,\n withAnimation: true,\n });\n };\n\n useEffect(() => {\n setAccordionState({\n open: startOpen,\n withAnimation: true,\n });\n }, [startOpen]);\n\n // Generate unique IDs for accessibility\n const baseId = useId();\n const accordionId = `accordion-header-${baseId}`;\n const contentId = `accordion-panel-${baseId}`;\n\n return (\n <div ref={ref} {...rest} className={containerClasses}>\n {headerPosition === \"top\" && (\n <AccordionLink\n text={linkText}\n elementType={linkElementType}\n toggle={handleChange}\n onClick={onClick}\n ariaExpanded={accordionState.open}\n headerChildren={headerChildren}\n accordionId={accordionId}\n contentId={contentId}\n />\n )}\n <div\n id={contentId}\n className={contentContainerClasses}\n aria-hidden={!accordionState.open}\n aria-labelledby={accordionId}\n role=\"region\"\n >\n <div className={contentClasses}>{props.children}</div>\n </div>\n {headerPosition === \"bottom\" && (\n <AccordionLink\n text={linkText}\n toggle={handleChange}\n onClick={onClick}\n ariaExpanded={accordionState.open}\n headerChildren={headerChildren}\n accordionId={accordionId}\n contentId={contentId}\n />\n )}\n </div>\n );\n};\n\nAccordion.displayName = \"Accordion\";\n", "import classNames from \"classnames/dedupe\";\nimport type { AriaAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Divider.css\";\n\nexport interface DividerProps extends DOMProps {\n className?: string;\n \"aria-orientation\"?: AriaAttributes[\"aria-orientation\"];\n}\n\nconst Divider = ({\n \"aria-orientation\": ariaOrientation = \"horizontal\",\n className,\n ...rest\n}: DividerProps) => {\n const classes = classNames(\"mobius\", \"mobius-divider\", className);\n\n return (\n <div\n className={classes}\n role=\"separator\"\n aria-orientation={ariaOrientation}\n {...rest}\n >\n <div className=\"mobius-divider__inner\" />\n </div>\n );\n};\n\nDivider.displayName = \"Divider\";\nexport { Divider };\n", "export * from \"./Divider\";\n", "\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport { useState, Fragment } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Accordion } from \"./Accordion\";\nimport { Divider } from \"../Divider\";\nimport \"./AccordionList.css\";\n\nexport interface AccordionListProps extends DOMProps {\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Array of accordion items with header and details content */\n content: Array<{\n /** Unique identifier for the accordion item (used as React key) */\n id: string;\n header: string | ReactNode;\n details: string | ReactNode;\n }>;\n /** Callback that fires when an accordion is opened */\n onOpen?: (id: string) => void;\n /** Callback that fires when an accordion is closed */\n onClose?: (id: string) => void;\n /** Allow multiple accordions to be open at the same time (default: false) */\n allowMultiple?: boolean;\n}\n\nconst AccordionList = (props: AccordionListProps) => {\n const {\n className,\n content,\n onOpen,\n onClose,\n allowMultiple = false,\n ...rest\n } = props;\n const [openIds, setOpenIds] = useState<Set<string>>(new Set());\n\n const classes = classNames(\"mobius\", \"mobius-accordion-list\", className);\n\n const handleAccordionChange = (id: string, isOpen: boolean) => {\n setOpenIds(prev => {\n const newSet = new Set(prev);\n if (isOpen) {\n if (!allowMultiple) {\n newSet.clear();\n }\n newSet.add(id);\n } else {\n newSet.delete(id);\n }\n return newSet;\n });\n\n if (isOpen) {\n onOpen?.(id);\n } else {\n onClose?.(id);\n }\n };\n\n return (\n <div className={classes} {...rest}>\n {content.map((item, index) => {\n const { id, header, details } = item;\n const isOpen = openIds.has(id);\n return (\n <Fragment key={id}>\n <Accordion\n startOpen={isOpen}\n showText={header}\n hideText={header}\n onChange={isOpen => handleAccordionChange(id, isOpen)}\n >\n {details}\n </Accordion>\n {index < content.length - 1 && <Divider />}\n </Fragment>\n );\n })}\n </div>\n );\n};\n\nAccordionList.displayName = \"AccordionList\";\nexport { AccordionList };\n", "export * from \"./Accordion\";\nexport * from \"./AccordionList\";\n", "\"use client\";\n\nimport {\n useDebouncedValue,\n useIsClient,\n useWindowEvent,\n} from \"@simplybusiness/mobius-hooks\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport type { SizeType } from \"../../types\";\n\nexport type Breakpoint = {\n size: SizeType;\n value: number;\n};\nexport type BreakpointsType = Breakpoint[];\nexport type UseBreakpointType = {\n breakpoint: Breakpoint;\n up: (size: SizeType) => boolean | undefined;\n down: (size: SizeType) => boolean | undefined;\n};\n\n// Hard code breakpoints for SB designs\nexport const DEFAULT_BREAKPOINTS = [\n { size: \"xs\", value: 320 },\n { size: \"sm\", value: 480 },\n { size: \"md\", value: 670 },\n { size: \"lg\", value: 960 },\n { size: \"xl\", value: 1200 },\n { size: \"xxl\", value: 1320 },\n] as BreakpointsType;\n\nconst PASSIVE: AddEventListenerOptions = { passive: true };\n\nconst getBreakpoint = (breakpoints: BreakpointsType, windowWidth: number) => {\n // When breakpoint size and windowWidth are a match\n // The addition of 1px ensures the right breakpoint\n const closest = breakpoints.findIndex(\n breakpoint => breakpoint.value >= windowWidth + 1,\n );\n const smallest = breakpoints[0];\n const largest = breakpoints[breakpoints.length - 1];\n const match = breakpoints[closest - 1];\n\n if (closest === 0) return smallest;\n if (closest === -1) return largest;\n\n return match;\n};\n\nconst useBreakpoint = (\n customBreakpoints?: BreakpointsType,\n): UseBreakpointType => {\n const isClientSide = useIsClient();\n const breakpoints = customBreakpoints || DEFAULT_BREAKPOINTS;\n const defaultBreakpoint = breakpoints[0];\n\n const [windowWidth, setWindowWidth] = useState<number>(\n typeof globalThis?.window !== \"undefined\"\n ? window.innerWidth\n : defaultBreakpoint.value,\n );\n\n useWindowEvent(\"resize\", () => setWindowWidth(window.innerWidth), PASSIVE);\n\n const debouncedWidth = useDebouncedValue(windowWidth, 200);\n\n // Gate on isClientSide so up()/down() also return default-based values\n // during SSR and hydration, matching the server render.\n const currentBreakpoint = useMemo(\n () =>\n !isClientSide || breakpoints.length === 0\n ? defaultBreakpoint\n : getBreakpoint(breakpoints, debouncedWidth),\n [isClientSide, breakpoints, defaultBreakpoint, debouncedWidth],\n );\n\n const up = useCallback(\n (size: SizeType) => {\n const sizeIndex = breakpoints.findIndex(item => item.size === size);\n if (sizeIndex === -1) {\n return false;\n }\n const currentIndex = breakpoints.findIndex(\n item => item.size === currentBreakpoint.size,\n );\n\n return currentIndex >= sizeIndex;\n },\n [currentBreakpoint, breakpoints],\n );\n\n const down = useCallback(\n (size: SizeType) => {\n const sizeIndex = breakpoints.findIndex(item => item.size === size);\n if (sizeIndex === -1) {\n return true;\n }\n const currentIndex = breakpoints.findIndex(\n item => item.size === currentBreakpoint.size,\n );\n\n return currentIndex <= sizeIndex;\n },\n [currentBreakpoint, breakpoints],\n );\n\n return {\n breakpoint: currentBreakpoint,\n up,\n down,\n };\n};\n\nexport { useBreakpoint };\n", "export * from \"./useBreakpoint\";\n", "import type { JSXElementConstructor } from \"react\";\nimport { useCallback } from \"react\";\n\nexport interface UseButtonProps {\n elementType?:\n | \"button\"\n | \"a\"\n | \"span\"\n | \"input\"\n | JSXElementConstructor<unknown>\n | undefined;\n type?: \"button\" | \"submit\" | \"reset\";\n isDisabled?: boolean;\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n onPress?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n href?: string;\n target?: string;\n rel?: string;\n role?: string;\n name?: string | undefined;\n value?: string | undefined;\n}\n\nexport function useButton({\n elementType = \"button\",\n type = \"button\",\n isDisabled = false,\n href,\n target,\n rel,\n role,\n name,\n value,\n onClick,\n onPress,\n}: UseButtonProps) {\n const realOnClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) {\n return;\n }\n\n onClick?.(event);\n onPress?.(event);\n },\n [isDisabled, onClick, onPress],\n );\n\n function getRole() {\n if (role) {\n return role;\n }\n\n if (elementType === \"a\") {\n return undefined;\n }\n\n return \"button\";\n }\n\n const extraProps =\n elementType === \"button\"\n ? { type }\n : {\n role: getRole(),\n };\n\n return {\n buttonProps: {\n href: elementType === \"a\" ? href : undefined,\n target: elementType === \"a\" ? target : undefined,\n rel: elementType === \"a\" ? rel : undefined,\n tabIndex: isDisabled ? -1 : 0,\n disabled: isDisabled || undefined,\n \"aria-disabled\": isDisabled || undefined,\n name:\n elementType === \"input\" || elementType === \"button\" ? name : undefined,\n value:\n elementType === \"input\" || elementType === \"button\" ? value : undefined,\n ...extraProps,\n onClick: realOnClick,\n },\n };\n}\n", "export * from \"./useButton\";\n", "import type { MutableRefObject } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { supportsDialog } from \"../../utils\";\n\n// Add polyfill for HTML Dialog in old browsers\nexport const useDialogPolyfill = () => {\n const [hasDialogSupport, setHasDialogSupport] = useState(false);\n const hasAlreadyLoaded = useRef(false);\n\n useEffect(() => {\n setHasDialogSupport(supportsDialog());\n }, []);\n\n const polyfillDialog = async (\n ref: MutableRefObject<HTMLDialogElement | null>,\n ) => {\n if (\n !hasAlreadyLoaded.current &&\n !hasDialogSupport &&\n typeof window !== \"undefined\" &&\n ref.current !== null\n ) {\n const { default: dialogPolyfill } = await import(\"dialog-polyfill\");\n\n hasAlreadyLoaded.current = true;\n try {\n if (ref.current) {\n dialogPolyfill.registerDialog(ref.current);\n }\n } catch (error) {\n console.error(\"Failed to load dialog-polyfill\", error);\n }\n }\n };\n\n return {\n polyfillDialog,\n };\n};\n", "export * from \"./useDialogPolyfill\";\n", "import type { MutableRefObject, SyntheticEvent } from \"react\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { supportsDialog } from \"../../utils\";\nimport { useBodyScrollLock } from \"@simplybusiness/mobius-hooks\";\nimport { useDialogPolyfill } from \"../useDialogPolyfill\";\n\nexport type TransitionProps = {\n isEnabled: boolean;\n CSSVariable: string;\n};\n\nexport type useDialogProps = {\n ref: MutableRefObject<HTMLDialogElement | null>;\n transition: TransitionProps;\n isOpen: boolean;\n onOpen?: () => void;\n onClose?: () => void;\n};\n\nconst TRANSITION_CLASS_NAME = \"--transition\";\nconst FALLBACK_TRANSITION_DURATION = 0;\n\nexport const useDialog = (props: useDialogProps) => {\n const { ref, isOpen, transition, onOpen, onClose } = props;\n const [hasDialogSupport, setHasDialogSupport] = useState(false);\n const shouldTransition = hasDialogSupport && transition.isEnabled;\n const { polyfillDialog } = useDialogPolyfill();\n\n useEffect(() => {\n setHasDialogSupport(supportsDialog());\n }, []);\n\n // Read CSS variable value as number\n const TRANSITION_DURATION_IN_MS =\n (ref.current &&\n Number(\n getComputedStyle(ref.current)\n .getPropertyValue(transition.CSSVariable)\n .replace(\"ms\", \"\"),\n )) ||\n FALLBACK_TRANSITION_DURATION;\n\n useBodyScrollLock({ enabled: isOpen });\n\n const open = useCallback(() => {\n ref.current?.showModal();\n onOpen?.();\n }, [onOpen, ref]);\n\n const close = useCallback(() => {\n ref.current?.close();\n onClose?.();\n }, [onClose, ref]);\n\n // Add close handler, to enable closing transitions\n const handleClose = useCallback(\n (event?: SyntheticEvent<HTMLElement, Event>) => {\n if (event) {\n // Prevent default event coming from onCancel,\n // which is triggered by pressing ESC key\n event.preventDefault();\n // Ensure that nested `<dialog>` elements\n // don't close the parent\n event.stopPropagation();\n }\n\n if (shouldTransition) {\n ref.current?.classList.remove(TRANSITION_CLASS_NAME);\n // Delay close to allow exit transition\n setTimeout(() => close(), TRANSITION_DURATION_IN_MS);\n } else {\n close();\n }\n },\n [TRANSITION_DURATION_IN_MS, close, ref, shouldTransition],\n );\n\n useEffect(() => {\n async function toggleDialog() {\n if (isOpen && !ref.current?.open) {\n await polyfillDialog(ref);\n\n open();\n // Fix opening transition in Safari being skipped\n // by wrapping with setTimeout\n setTimeout(() => {\n ref.current?.classList.add(TRANSITION_CLASS_NAME);\n }, 0);\n } else if (!isOpen && ref.current?.open) {\n handleClose();\n }\n }\n\n void toggleDialog();\n }, [handleClose, isOpen, open, ref, polyfillDialog]);\n\n return {\n open,\n close: handleClose,\n };\n};\n", "export * from \"./useDialog\";\n", "import type { LabelHTMLAttributes } from \"react\";\nimport { useId, useRef } from \"react\";\n\nexport type UseLabelProps = {\n id?: string | undefined;\n label?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n labelElementType?: \"label\" | \"span\" | undefined;\n};\n\nexport type UseLabelReturn = {\n labelProps: {\n id?: string | undefined;\n } & LabelHTMLAttributes<HTMLLabelElement>;\n fieldProps: LabellingProps;\n};\n\nexport type LabellingProps = {\n id?: string | undefined;\n \"aria-label\"?: string | undefined;\n \"aria-labelledby\"?: string | undefined;\n \"aria-describedby\"?: string | undefined;\n \"aria-details\"?: string | undefined;\n};\n\nexport function useLabel({\n id: providedId,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n labelElementType = \"label\",\n}: UseLabelProps) {\n let labelProps: UseLabelReturn[\"labelProps\"] = {};\n let fieldProps: UseLabelReturn[\"fieldProps\"] = {};\n\n const hasWarnedAboutMissingLabels = useRef(false);\n\n const fallbackId = useId();\n const id = providedId || fallbackId;\n const labelId = useId();\n\n if (label) {\n ariaLabelledby = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;\n labelProps = {\n id: labelId,\n htmlFor: labelElementType === \"label\" ? id : undefined,\n };\n } else if (\n !ariaLabelledby &&\n !ariaLabel &&\n !hasWarnedAboutMissingLabels.current\n ) {\n hasWarnedAboutMissingLabels.current = true;\n console.warn(\n \"If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility\",\n );\n }\n\n fieldProps = {\n id,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledby,\n };\n\n return {\n labelProps,\n fieldProps,\n };\n}\n", "export * from \"./useLabel\";\n", "import { useId } from \"react\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { useLabel } from \"../useLabel/useLabel\";\nimport type { UseTextFieldProps, UseTextFieldReturn } from \"./types\";\n\nexport function useTextField(props: UseTextFieldProps): UseTextFieldReturn {\n const {\n isDisabled = false,\n isReadOnly = false,\n isRequired = false,\n inputElementType = \"input\",\n } = props;\n const { labelProps, fieldProps } = useLabel(props);\n\n const descriptionId = useId();\n const descriptionProps = { id: descriptionId };\n\n const errorMessageId = useId();\n const errorMessageProps = { id: errorMessageId };\n\n const ariaDescribedBy = spaceDelimitedList([\n props.description && descriptionId,\n props.errorMessage && errorMessageId,\n props[\"aria-describedby\"],\n ]);\n\n return {\n descriptionProps,\n errorMessageProps,\n labelProps,\n inputProps: {\n defaultValue: props.defaultValue,\n value: props.value,\n onChange: props.onChange,\n disabled: isDisabled,\n readOnly: isReadOnly,\n required: isRequired,\n \"aria-required\": isRequired === true ? true : undefined,\n \"aria-invalid\": props.isInvalid,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-errormessage\": props[\"aria-errormessage\"],\n role: props.role,\n\n type: inputElementType === \"input\" ? props.type : undefined,\n pattern: inputElementType === \"input\" ? props.pattern : undefined,\n\n autoComplete: props.autoComplete,\n maxLength: props.maxLength,\n minLength: props.minLength,\n name: props.name,\n placeholder: props.placeholder,\n inputMode: props.inputMode,\n\n // Clipboard events\n onCopy: props.onCopy,\n onCut: props.onCut,\n onPaste: props.onPaste,\n\n // Composition events\n onCompositionEnd: props.onCompositionEnd,\n onCompositionStart: props.onCompositionStart,\n onCompositionUpdate: props.onCompositionUpdate,\n\n // Selection events\n onSelect: props.onSelect,\n\n // Input events\n onBeforeInput: props.onBeforeInput,\n onInput: props.onInput,\n\n // Focus events\n onFocus: props.onFocus,\n onBlur: props.onBlur,\n\n ...fieldProps,\n },\n };\n}\n", "import type { AriaRole, InputHTMLAttributes } from \"react\";\nimport type { UseLabelProps, UseLabelReturn } from \"../useLabel/useLabel\";\nimport type { FocusEvents, Validation } from \"../../types\";\n\nexport type UseTextFieldProps = UseLabelProps &\n FocusEvents &\n Validation &\n Pick<\n InputHTMLAttributes<HTMLInputElement>,\n | \"defaultValue\"\n | \"value\"\n | \"onChange\"\n | \"autoComplete\"\n | \"maxLength\"\n | \"minLength\"\n | \"name\"\n | \"placeholder\"\n | \"inputMode\"\n | \"type\"\n | \"pattern\"\n\n // Clipboard events\n | \"onCopy\"\n | \"onCut\"\n | \"onPaste\"\n\n // Keyboard events\n | \"onKeyDown\"\n | \"onKeyUp\"\n | \"onKeyPress\"\n\n // Composition events\n | \"onCompositionEnd\"\n | \"onCompositionStart\"\n | \"onCompositionUpdate\"\n\n // Selection events\n | \"onSelect\"\n\n // Input events\n | \"onBeforeInput\"\n | \"onInput\"\n\n // Number types\n | \"min\"\n | \"max\"\n | \"step\"\n > & {\n inputElementType?: \"input\" | \"textarea\" | undefined;\n defaultValue?: string | undefined;\n value?: string | undefined;\n isDisabled?: boolean | undefined;\n isReadOnly?: boolean | undefined;\n isRequired?: boolean | undefined;\n description?: string | undefined;\n errorMessage?: string | undefined;\n \"aria-describedby\"?: string | undefined;\n \"aria-errormessage\"?: string | undefined;\n role?: AriaRole | undefined;\n };\n\nexport type UseTextFieldReturn = {\n labelProps: UseLabelReturn[\"labelProps\"];\n inputProps: InputHTMLAttributes<HTMLInputElement>;\n descriptionProps: { id?: string | undefined };\n errorMessageProps: { id?: string | undefined };\n};\n", "export * from \"./useTextField\";\nexport * from \"./types\";\n", "import type { Validation } from \"../../types\";\n\nexport type GetValidationClassesProps = Pick<Validation, \"isInvalid\">;\n\nexport const useValidationClasses = (props: GetValidationClassesProps) => {\n const { isInvalid } = props;\n\n if (isInvalid) {\n return \"--is-invalid\";\n }\n\n if (isInvalid === false) {\n return \"--is-valid\";\n }\n\n return \"\";\n};\n", "export * from \"./useValidationClasses\";\n", "export * from \"./useBreakpoint\";\nexport * from \"./useButton\";\nexport * from \"./useDialog\";\nexport * from \"./useDialogPolyfill\";\nexport * from \"./useLabel\";\nexport * from \"./useTextField\";\nexport * from \"./useValidationClasses\";\n", "import type React from \"react\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Label.css\";\n\nexport type LabelElementType = HTMLLabelElement;\nexport type IntrinsicLabel = Omit<\n React.JSX.IntrinsicElements[\"label\"],\n \"css\" | \"color\" | \"ref\"\n>;\n\nexport interface LabelProps\n extends IntrinsicLabel, DOMProps, RefAttributes<LabelElementType> {\n children?: ReactNode;\n className?: string;\n elementType?: \"label\" | \"span\";\n}\n\nconst Label = ({ ref, ...props }: LabelProps) => {\n const { elementType: Element = \"label\", children, ...otherProps } = props;\n\n const classes = classNames(\"mobius\", \"mobius-label\", props.className);\n otherProps.className = classes;\n\n return (\n <Element ref={ref} {...otherProps} className={classes}>\n {children}\n </Element>\n );\n};\n\nLabel.displayName = \"Label\";\nexport { Label };\n", "export * from \"./Label\";\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport type React from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { SpacingType } from \"../../types\";\nimport \"./Stack.css\";\n\nexport type StackElementType = HTMLDivElement;\n\nexport interface StackProps extends DOMProps, RefAttributes<StackElementType> {\n children?: ReactNode;\n /** How big a gap between items */\n gap?: SpacingType;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n}\n\nexport type StackRef = Ref<StackElementType>;\n\nexport const Stack = ({ ref, ...props }: StackProps) => {\n const { elementType: Element = \"div\", gap, ...otherProps } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-stack\",\n {\n [`--gap-${gap}`]: gap,\n },\n otherProps.className,\n );\n\n return <Element ref={ref} {...otherProps} className={classes} />;\n};\n\nStack.displayName = \"Stack\";\n", "export * from \"./Stack\";\n", "import classNames from \"classnames/dedupe\";\nimport type { ReactElement } from \"react\";\nimport { cloneElement } from \"react\";\n\nexport const adornmentWithClassName = (\n component?: ReactElement,\n validationClasses?: string,\n className?: string,\n) => {\n if (!component) return null;\n\n return cloneElement(component, {\n className: classNames(\n (component.props as { className?: string }).className,\n validationClasses,\n className,\n ),\n } as { className: string });\n};\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type {\n HTMLInputTypeAttribute,\n ReactElement,\n ReactNode,\n Ref,\n RefAttributes,\n} from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps, FocusEvents } from \"../../types\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { adornmentWithClassName } from \"./adornmentWithClassName\";\nimport \"./TextField.css\";\n\nexport type TextFieldElementType = HTMLInputElement;\nexport interface TextFieldProps\n extends\n DOMProps,\n FocusEvents,\n UseTextFieldProps,\n RefAttributes<TextFieldElementType> {\n className?: string;\n errorMessage?: string;\n children?: ReactNode;\n label?: string;\n type?: Exclude<\n HTMLInputTypeAttribute,\n | \"button\"\n | \"checkbox\"\n | \"color\"\n | \"date\"\n | \"datetime-local\"\n | \"file\"\n | \"image\"\n | \"month\"\n | \"radio\"\n | \"range\"\n | \"reset\"\n | \"submit\"\n | \"week\"\n >;\n prefixInside?: ReactElement;\n prefixOutside?: ReactElement;\n suffixInside?: ReactElement;\n suffixOutside?: ReactElement;\n}\n\nexport type TextFieldRef = Ref<TextFieldElementType>;\n\nconst TextField = ({ ref, ...props }: TextFieldProps) => {\n const {\n isDisabled,\n type = \"text\",\n isInvalid,\n className,\n label,\n errorMessage,\n children,\n isRequired,\n prefixInside,\n prefixOutside,\n suffixInside,\n suffixOutside,\n\n isReadOnly,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField({\n ...props,\n \"aria-errormessage\": errorMessage,\n });\n\n const hidden = type === \"hidden\";\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const textfieldClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n \"--is-hidden\": hidden,\n [className || \"\"]: true,\n };\n\n const sharedClasses = classNames(validationClasses, textfieldClasses);\n\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-text-field\",\n sharedClasses,\n );\n\n const inputClasses = classNames(\n \"mobius\",\n \"mobius-text-field__input\",\n sharedClasses,\n );\n\n const inputWrapperClasses = classNames(\n \"mobius-text-field__input-wrapper\",\n sharedClasses,\n );\n\n return (\n <Stack gap=\"xs\" className={containerClasses}>\n {label && !hidden && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-text-field__inner-container\">\n {adornmentWithClassName(\n prefixOutside,\n labelClasses,\n \"mobius-text-field__prefix-outside\",\n )}\n <div className={inputWrapperClasses}>\n {adornmentWithClassName(\n prefixInside,\n labelClasses,\n \"mobius-text-field__prefix-inside\",\n )}\n <input\n {...otherProps}\n {...inputProps}\n ref={ref}\n type={type}\n className={inputClasses}\n />\n {adornmentWithClassName(\n suffixInside,\n labelClasses,\n \"mobius-text-field__suffix-inside\",\n )}\n </div>\n {adornmentWithClassName(\n suffixOutside,\n labelClasses,\n \"mobius-text-field__suffix-outside\",\n )}\n </div>\n {children && (\n <div className=\"mobius-text-field__children\">{children}</div>\n )}\n\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextField.displayName = \"TextField\";\nexport { TextField };\n", "export * from \"./TextField\";\n", "import type { AriaRole, JSXElementConstructor, ReactNode } from \"react\";\n\nexport interface VisuallyHiddenProps {\n /** The content to visually hide. */\n children?: ReactNode;\n id?: string;\n role?: AriaRole;\n\n className?: string;\n\n /**\n * The element type for the container. Defaults to 'div'\n */\n elementType?: string | JSXElementConstructor<any>;\n}\n\nexport function VisuallyHidden(props: VisuallyHiddenProps) {\n const {\n className,\n children,\n elementType: Component = \"div\",\n ...otherProps\n } = props;\n\n return (\n <Component\n className={className}\n style={{\n border: 0,\n clip: \"rect(0 0 0 0)\",\n clipPath: \"inset(50%)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: 0,\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n }}\n {...otherProps}\n >\n {children}\n </Component>\n );\n}\n", "export * from \"./VisuallyHidden\";\n", "import type {\n ComboboxOption,\n ComboboxOptionGroup,\n ComboboxOptions,\n} from \"./types\";\n\n// FIXME: This might be better handled with Zod\nexport function isOptionGroup<T extends ComboboxOption>(\n options: ComboboxOptions<T> | undefined,\n): options is ComboboxOptionGroup<T>[] {\n if (!options) return false;\n return (\n typeof options[0] === \"object\" &&\n \"options\" in options[0] &&\n options[0].options !== undefined &&\n \"heading\" in options[0] &&\n options[0].heading !== undefined\n );\n}\n\nexport const getOptionValue = (option: ComboboxOption | undefined) =>\n typeof option === \"string\" ? option : option?.value;\n\nexport const getOptionLabel = (option: ComboboxOption | undefined) =>\n typeof option === \"string\" ? option : option?.label;\n\nexport function filterOptions<T extends ComboboxOption>(\n options: ComboboxOptions<T>,\n inputValue: string,\n): ComboboxOptions<T> {\n if (isOptionGroup(options)) {\n return options\n .map(optionGroup => ({\n ...optionGroup,\n options: optionGroup.options.filter(option =>\n getOptionLabel(option)!\n .toLowerCase()\n .includes(inputValue.toLowerCase()),\n ),\n }))\n .filter(optionGroup => optionGroup.options.length > 0);\n }\n\n return options.filter(option =>\n getOptionLabel(option)!.toLowerCase().includes(inputValue.toLowerCase()),\n );\n}\n\nexport function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max);\n}\n\nexport const buildOptionTestId = (prefix: string, value: string): string =>\n `${prefix}-${value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")}`;\n", "import { useEffect, useRef } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { getOptionValue, getOptionLabel, buildOptionTestId } from \"./utils\";\nimport type { ComboboxOption, ComboboxOptionProps } from \"./types\";\n\nexport const Option = <T extends ComboboxOption>({\n option,\n isHighlighted,\n onOptionSelect,\n optionComponent: OptionComponent,\n optionTestIdPrefix,\n id,\n}: ComboboxOptionProps<T>) => {\n const optionRef = useRef<HTMLLIElement>(null);\n const optionValue = getOptionValue(option) || \"\";\n const testId = buildOptionTestId(\n optionTestIdPrefix || \"combobox-option\",\n optionValue,\n );\n\n useEffect(() => {\n if (\n isHighlighted &&\n optionRef.current &&\n optionRef.current.scrollIntoView\n ) {\n optionRef.current.scrollIntoView({ block: \"nearest\" });\n }\n }, [isHighlighted]);\n\n return (\n <li\n ref={optionRef}\n role=\"option\"\n data-testid={testId}\n key={getOptionValue(option)}\n id={id}\n aria-selected={isHighlighted}\n onMouseDown={() => onOptionSelect(option)}\n className={classNames(\"mobius-combobox__option\", \"has-pii\", {\n \"mobius-combobox__option--is-highlighted\": isHighlighted,\n })}\n >\n {OptionComponent ? (\n <OptionComponent option={option} isHighlighted={isHighlighted} />\n ) : (\n getOptionLabel(option)\n )}\n </li>\n );\n};\n", "import classNames from \"classnames/dedupe\";\nimport { Option } from \"./Option\";\nimport type {\n ComboboxBaseProps,\n ComboboxOption,\n ComboboxOptions,\n} from \"./types\";\nimport { isOptionGroup } from \"./utils\";\n\nconst getOptionKey = (\n option: ComboboxOption,\n index: number,\n groupIndex?: number,\n): string => {\n let key: string;\n if (typeof option === \"object\" && option.id) key = option.id;\n else if (typeof option === \"object\") key = `${option.value}::${option.label}`;\n else if (typeof option === \"string\") key = option;\n else key = String(index);\n\n return groupIndex !== undefined ? `${groupIndex}:${key}` : key;\n};\n\nexport type ListboxProps<T extends ComboboxOption> = {\n id: string;\n isOpen?: boolean;\n isLoading?: boolean;\n options: ComboboxOptions<T> | undefined;\n highlightedIndex: number;\n highlightedGroupIndex: number;\n onOptionSelect: (option: T) => void;\n optionComponent?: ComboboxBaseProps<T>[\"optionComponent\"];\n optionTestIdPrefix?: string;\n};\n\nexport const Listbox = <T extends ComboboxOption>({\n id,\n isOpen = false,\n options,\n highlightedIndex,\n highlightedGroupIndex,\n onOptionSelect,\n optionComponent,\n optionTestIdPrefix,\n}: ListboxProps<T>) => {\n const classes = classNames(\"mobius-combobox__list\", {\n \"mobius-combobox__list--hidden\": !isOpen,\n });\n\n function getOptionId(\n option: ComboboxOption,\n groupIndex: number,\n index: number,\n ) {\n if (\n typeof option === \"object\" &&\n \"id\" in option &&\n typeof option.id === \"string\"\n ) {\n return option.id;\n }\n return isOptionGroup(options)\n ? `${id}-option-${groupIndex}-${index}`\n : `${id}-option-${index}`;\n }\n\n // If not open, render empty listbox but keep it in DOM for accessibility\n if (!isOpen) {\n return <div role=\"listbox\" id={id} className={classes} />;\n }\n\n if (options && options.length === 0) {\n return (\n <div role=\"listbox\" id={id} className={classes}>\n <div className=\"mobius-combobox__no-options\">No options</div>\n </div>\n );\n }\n\n return (\n <div role=\"listbox\" id={id} className={classes}>\n {isOptionGroup(options)\n ? options.map((option, groupIndex) => (\n <ul\n role=\"group\"\n key={option.heading}\n aria-labelledby={`${id}-group-${groupIndex}`}\n className=\"mobius-combobox__group\"\n >\n <li\n role=\"presentation\"\n id={`${id}-group-${groupIndex}`}\n className=\"mobius-combobox__group-label\"\n >\n {option.heading}\n </li>\n {option.options.map((groupOption, index) => (\n <Option\n key={getOptionKey(groupOption, index, groupIndex)}\n option={groupOption}\n isHighlighted={\n highlightedIndex === index &&\n highlightedGroupIndex === groupIndex\n }\n onOptionSelect={onOptionSelect}\n optionComponent={optionComponent}\n optionTestIdPrefix={optionTestIdPrefix}\n id={getOptionId(groupOption, groupIndex, index)}\n />\n ))}\n </ul>\n ))\n : typeof options !== \"undefined\"\n ? options.map((option, index) => (\n <Option\n key={getOptionKey(option, index)}\n option={option}\n isHighlighted={highlightedIndex === index}\n onOptionSelect={onOptionSelect}\n optionComponent={optionComponent}\n optionTestIdPrefix={optionTestIdPrefix}\n id={getOptionId(option, 0, index)}\n />\n ))\n : null}\n </div>\n );\n};\n", "import { useState } from \"react\";\nimport type { ComboboxOptions } from \"./types\";\nimport { isOptionGroup } from \"./utils\";\n\nexport function useComboboxHighlight(options: ComboboxOptions | undefined) {\n const [highlightedIndex, setHighlightedIndex] = useState(\n options && options.length ? 0 : -1,\n );\n const [highlightedGroupIndex, setHighlightedGroupIndex] = useState(0);\n\n function highlightNextOption() {\n const isGroup = isOptionGroup(options);\n\n if (!options) {\n return;\n }\n\n if (isGroup) {\n const group = options[highlightedGroupIndex];\n if (highlightedIndex === group.options.length - 1) {\n if (highlightedGroupIndex === options.length - 1) {\n return; // At the end of last group\n }\n // Move to next group\n setHighlightedIndex(0);\n setHighlightedGroupIndex(highlightedGroupIndex + 1);\n } else {\n setHighlightedIndex(highlightedIndex + 1);\n }\n } else {\n if (highlightedIndex === options.length - 1) {\n return; // At the end of options\n }\n setHighlightedIndex(highlightedIndex + 1);\n }\n }\n\n function highlightPreviousOption() {\n const isGroup = isOptionGroup(options);\n\n if (highlightedIndex === 0 && highlightedGroupIndex === 0) {\n return; // Already at start\n }\n\n if (isGroup) {\n if (highlightedIndex === 0) {\n // Move to previous group\n const prevGroupIndex = highlightedGroupIndex - 1;\n const prevGroup = options[prevGroupIndex];\n setHighlightedGroupIndex(prevGroupIndex);\n setHighlightedIndex(prevGroup.options.length - 1);\n } else {\n setHighlightedIndex(highlightedIndex - 1);\n }\n } else {\n setHighlightedIndex(highlightedIndex - 1);\n }\n }\n\n function highlightFirstOption() {\n setHighlightedIndex(0);\n setHighlightedGroupIndex(0);\n }\n\n function highlightLastOption() {\n const isGroup = isOptionGroup(options);\n\n if (!options) {\n return;\n }\n\n if (isGroup) {\n const lastGroupIndex = options.length - 1;\n const lastGroup = options[lastGroupIndex];\n setHighlightedGroupIndex(lastGroupIndex);\n setHighlightedIndex(lastGroup.options.length - 1);\n } else {\n setHighlightedIndex(options.length - 1);\n }\n }\n\n const clearHighlight = () => {\n setHighlightedIndex(\n typeof options === \"undefined\" || options.length ? 0 : -1,\n );\n setHighlightedGroupIndex(0);\n };\n\n return {\n highlightedIndex,\n highlightedGroupIndex,\n highlightPreviousOption,\n highlightNextOption,\n highlightFirstOption,\n highlightLastOption,\n clearHighlight,\n };\n}\n", "import { useDebouncedValue } from \"@simplybusiness/mobius-hooks\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { ComboboxOption, ComboboxOptions, ComboboxProps } from \"./types\";\nimport { filterOptions } from \"./utils\";\n\nexport type UseComboboxOptionsProps<T extends ComboboxOption> = Pick<\n ComboboxProps<T>,\n \"options\" | \"asyncOptions\" | \"delay\" | \"minSearchLength\"\n> & {\n skipNextDebounceRef?: React.MutableRefObject<boolean>;\n inputValue?: string;\n onSearched?: (searchTerm: string) => void;\n};\n\nexport function useComboboxOptions<T extends ComboboxOption>({\n options,\n asyncOptions,\n delay = 300,\n minSearchLength = 3,\n inputValue = \"\",\n skipNextDebounceRef,\n onSearched,\n}: UseComboboxOptionsProps<T>) {\n const [filteredOptions, setFilteredOptions] = useState<\n ComboboxOptions<T> | undefined\n >(undefined);\n const debouncedInputValue = useDebouncedValue(\n inputValue,\n // Don't debounce synchronous options\n options ? 0 : delay,\n );\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n // Keep refs to latest callbacks so the fetch effect doesn't re-run when\n // their references change (e.g. due to un-memoised props in parent)\n const asyncOptionsRef = useRef(asyncOptions);\n asyncOptionsRef.current = asyncOptions;\n const onSearchedRef = useRef(onSearched);\n onSearchedRef.current = onSearched;\n\n useEffect(() => {\n const controller = new AbortController();\n const { signal } = controller;\n\n const fetchOptions = async () => {\n setIsLoading(true);\n setError(null);\n try {\n if (asyncOptionsRef.current) {\n if (debouncedInputValue.length < minSearchLength) {\n setFilteredOptions(undefined);\n return;\n }\n const result = await asyncOptionsRef.current(debouncedInputValue, {\n signal,\n });\n setFilteredOptions(result);\n onSearchedRef.current?.(debouncedInputValue);\n } else if (options) {\n setFilteredOptions(filterOptions(options, debouncedInputValue));\n } else {\n setError(new Error(\"No options provided\"));\n }\n } catch (e: unknown) {\n if (e instanceof DOMException && e.name === \"AbortError\") {\n // Ignore abort errors\n return;\n }\n setError(e as Error);\n } finally {\n setIsLoading(false);\n }\n };\n\n if (!skipNextDebounceRef?.current) {\n void fetchOptions();\n } else {\n skipNextDebounceRef.current = false;\n }\n\n return () => {\n controller.abort();\n };\n }, [\n debouncedInputValue,\n options,\n delay,\n minSearchLength,\n skipNextDebounceRef,\n ]);\n\n function updateFilteredOptions(newOptions: Promise<ComboboxOptions<T>>) {\n setIsLoading(true);\n return newOptions\n .then(setFilteredOptions)\n .catch(setError)\n .finally(() => setIsLoading(false));\n }\n\n return {\n filteredOptions,\n updateFilteredOptions,\n isLoading,\n error,\n isError: error != null,\n };\n}\n", "import { useOnUnmount } from \"@simplybusiness/mobius-hooks\";\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { FocusEvent } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { useBreakpoint } from \"../../hooks\";\nimport { TextField } from \"../TextField\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { Listbox } from \"./Listbox\"; // Import Listbox component\nimport type { ComboboxOption, ComboboxProps, ComboboxRef } from \"./types\";\nimport { useComboboxHighlight } from \"./useComboboxHighlight\";\nimport { useComboboxOptions } from \"./useComboboxOptions\";\nimport { getOptionLabel, getOptionValue, isOptionGroup } from \"./utils\";\nimport \"./Combobox.css\";\n\nconst ComboboxInner = <T extends ComboboxOption>({\n ref,\n ...props\n}: ComboboxProps<T>) => {\n const {\n id,\n defaultValue,\n value,\n options,\n asyncOptions,\n delay,\n minSearchLength,\n onSelected,\n className,\n placeholder,\n icon,\n onBlur,\n onFocus,\n onChange,\n // onSearched, // unused prop, consider removing\n optionComponent,\n optionTestIdPrefix,\n errorMessage,\n ...otherProps\n } = props;\n // Avoid re-fetching after selecting an option\n const skipNextDebounceRef = useRef(false);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const [inputValue, setInputValue] = useState(defaultValue || \"\");\n const [isOpen, setIsOpen] = useState(false);\n const [isChanging, setIsChanging] = useState(false);\n const { filteredOptions, updateFilteredOptions, isLoading, error } =\n useComboboxOptions({\n options,\n asyncOptions,\n inputValue,\n delay,\n minSearchLength,\n skipNextDebounceRef,\n });\n const [validationError, setValidationError] = useState(\n error?.message || errorMessage,\n );\n const {\n highlightedIndex,\n highlightedGroupIndex,\n highlightNextOption,\n highlightPreviousOption,\n highlightFirstOption,\n highlightLastOption,\n clearHighlight,\n } = useComboboxHighlight(filteredOptions);\n\n const inputRef = ref || fallbackRef;\n const listboxId = useId();\n const statusId = useId();\n const blurTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const userInteractedRef = useRef(false);\n const justSelectedRef = useRef(false);\n const { down } = useBreakpoint();\n const isMobile = down(\"md\");\n\n useEffect(() => {\n setValidationError(error?.message || errorMessage);\n }, [error, errorMessage]);\n\n // Helper to create properly-typed empty value based on option type\n const getEmptyValue = (): T => {\n // Check first available option to determine if we're using string or object options\n const firstOption = filteredOptions\n ? isOptionGroup(filteredOptions)\n ? filteredOptions[0]?.options[0]\n : filteredOptions[0]\n : options\n ? isOptionGroup(options)\n ? options[0]?.options[0]\n : options[0]\n : undefined;\n\n // If options are strings, return empty string\n if (typeof firstOption === \"string\") {\n return \"\" as T;\n }\n\n // If options are objects, return empty object with same shape\n return { label: \"\", value: \"\" } as T;\n };\n\n const handleFocus = (e: FocusEvent) => {\n onFocus?.(e);\n if (!filteredOptions || filteredOptions.length === 0) return;\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n blurTimeoutRef.current = null;\n }\n\n // Check if this is natural focus (user click/Tab) or programmatic focus\n const isNaturalFocus =\n userInteractedRef.current || e.relatedTarget !== null;\n if (userInteractedRef.current) {\n userInteractedRef.current = false;\n }\n\n // Block opening only if programmatic focus right after selection\n if (justSelectedRef.current && !isNaturalFocus) {\n return;\n }\n\n // Open dropdown for natural focus\n if (isNaturalFocus) {\n setIsOpen(true);\n justSelectedRef.current = false;\n }\n };\n\n useEffect(() => {\n if (!inputRef || typeof inputRef === \"function\") return;\n const inputElement = inputRef.current;\n if (!inputElement) return;\n\n const handleMouseDown = () => {\n // Track that user clicked/interacted with input\n userInteractedRef.current = true;\n };\n\n inputElement.addEventListener(\"mousedown\", handleMouseDown);\n return () => {\n inputElement.removeEventListener(\"mousedown\", handleMouseDown);\n };\n }, [inputRef]);\n\n useOnUnmount(() => {\n if (blurTimeoutRef.current) {\n clearTimeout(blurTimeoutRef.current);\n }\n });\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setValidationError(undefined);\n justSelectedRef.current = false;\n setIsChanging(true);\n // Only open immediately for sync options; async options controlled by useEffect\n if (!asyncOptions) {\n setIsOpen(true);\n }\n clearHighlight();\n onChange?.(e);\n };\n\n const handleOptionSelect = (option: T) => {\n const val = getOptionValue(option);\n\n // Allow empty values to pass through\n if (!val && val !== \"\") return;\n\n if (\n typeof option === \"object\" &&\n \"callback\" in option &&\n option.callback &&\n typeof option.callback === \"function\"\n ) {\n justSelectedRef.current = true;\n setTimeout(() => {\n if (inputRef && typeof inputRef !== \"function\" && inputRef.current) {\n inputRef.current.focus();\n }\n }, 0);\n const callbackPromise = option.callback();\n updateFilteredOptions(callbackPromise);\n callbackPromise\n .then(() => {\n setIsOpen(true);\n setIsChanging(true);\n })\n .catch(() => {\n // error handled inside updateFilteredOptions via setError\n });\n return;\n }\n\n // Prevent re-fetching options after selecting an option\n skipNextDebounceRef.current = true;\n justSelectedRef.current = true;\n\n setIsChanging(false);\n setValidationError(undefined);\n setIsOpen(false);\n setInputValue(val);\n onSelected?.(option);\n };\n\n const getFirstOption = () => {\n if (!filteredOptions) return undefined;\n if (isOptionGroup(filteredOptions)) {\n return filteredOptions[0]?.options[0];\n }\n\n return filteredOptions[0];\n };\n\n const getHighlightedOption = () => {\n if (!filteredOptions) return undefined;\n if (highlightedIndex === -1) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n const group = filteredOptions[highlightedGroupIndex];\n return group?.options[highlightedIndex];\n }\n\n return filteredOptions[highlightedIndex];\n };\n\n const getHighlightedOptionId = () => {\n const option = getHighlightedOption();\n if (!option) return undefined;\n\n if (isOptionGroup(filteredOptions)) {\n return `${listboxId}-option-${highlightedGroupIndex}-${highlightedIndex}`;\n }\n\n return `${listboxId}-option-${highlightedIndex}`;\n };\n\n const handleBlur = (e: FocusEvent<Element, Element>) => {\n // Force selection if user has matched an entry by typing (not already selected)\n // Defer this to allow natural focus flow to complete first\n if (!justSelectedRef.current) {\n const typedText = inputValue.trim();\n const typedTextLower = typedText.toLowerCase();\n const highlightedOption = getHighlightedOption();\n const label = getOptionLabel(highlightedOption);\n\n if (typedTextLower === label?.toLowerCase()) {\n // Exact match with an option\n setTimeout(() => {\n handleOptionSelect(highlightedOption as T);\n }, 0);\n } else if (typedText === \"\") {\n // Allow empty values\n setTimeout(() => {\n handleOptionSelect(getEmptyValue());\n }, 0);\n } else {\n // Invalid value (not in options and not empty)\n setValidationError(\n errorMessage || \"Please select an option from the list\",\n );\n setTimeout(() => {\n setInputValue(\"\");\n }, 0);\n }\n }\n\n blurTimeoutRef.current = setTimeout(() => {\n onBlur?.(e);\n setIsOpen(false);\n setIsChanging(false);\n }, 150);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightNextOption();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightPreviousOption();\n break;\n case \"Home\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightFirstOption();\n break;\n case \"End\":\n e.preventDefault();\n justSelectedRef.current = false;\n setIsOpen(true);\n highlightLastOption();\n break;\n case \"Enter\":\n e.preventDefault();\n if (isOpen) {\n const selectedOption = getHighlightedOption() || getFirstOption();\n if (selectedOption) {\n handleOptionSelect(selectedOption);\n }\n }\n break;\n case \"Escape\":\n e.preventDefault();\n setInputValue(\"\");\n setIsOpen(false);\n clearHighlight();\n break;\n default:\n // Do nothing\n }\n };\n\n useEffect(() => {\n if (value) {\n setInputValue(value);\n }\n }, [value]);\n\n // Open and close the combobox based on async filtered options\n useEffect(() => {\n if (asyncOptions && isChanging) {\n setIsOpen(!!filteredOptions && filteredOptions.length > 0);\n }\n }, [filteredOptions, asyncOptions, isChanging]);\n\n const classes = classNames(\n \"mobius mobius-combobox\",\n {\n \"mobius-combobox--is-expanded\": isOpen,\n \"mobius-combobox--is-loading\": isLoading,\n \"mobius-combobox--is-mobile\": isMobile,\n },\n className,\n );\n\n const getStatusMessage = () => {\n if (isLoading) return \"Loading options\";\n if (!filteredOptions || filteredOptions.length === 0) {\n return isChanging ? \"No options found\" : \"\";\n }\n const count = isOptionGroup(filteredOptions)\n ? filteredOptions.reduce((sum, group) => sum + group.options.length, 0)\n : filteredOptions.length;\n return isOpen && isChanging\n ? `${count} option${count === 1 ? \"\" : \"s\"} available`\n : \"\";\n };\n\n return (\n <div id={id} data-testid=\"mobius-combobox__wrapper\" className={classes}>\n <VisuallyHidden\n role=\"status\"\n aria-live=\"polite\"\n id={statusId}\n elementType=\"div\"\n className=\"mobius-combobox__status\"\n >\n {getStatusMessage()}\n </VisuallyHidden>\n <TextField\n {...otherProps}\n className=\"mobius-combobox__input\"\n role=\"combobox\"\n value={inputValue}\n placeholder={placeholder}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onChange={handleInputChange}\n autoComplete=\"off\"\n aria-describedby={isLoading ? statusId : undefined}\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n aria-owns={listboxId}\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-activedescendant={\n highlightedIndex === -1 ? undefined : getHighlightedOptionId()\n }\n prefixInside={icon}\n ref={inputRef}\n errorMessage={errorMessage || validationError || error?.message}\n />\n <Listbox\n id={listboxId}\n isOpen={isOpen}\n isLoading={isLoading}\n options={filteredOptions}\n highlightedIndex={highlightedIndex}\n highlightedGroupIndex={highlightedGroupIndex}\n onOptionSelect={handleOptionSelect}\n optionComponent={optionComponent}\n optionTestIdPrefix={optionTestIdPrefix}\n />\n </div>\n );\n};\n\nexport const Combobox = ComboboxInner as <T extends ComboboxOption>(\n props: ComboboxProps<T> & { ref?: ComboboxRef },\n) => React.JSX.Element;\n", "import type { ReactElement, Ref } from \"react\";\nimport type { TextFieldElementType, TextFieldProps } from \"../TextField\";\n\nexport type ComboboxOption =\n | string\n | { id?: string; label: string; value: string };\n\nexport type ComboboxBaseProps<T extends ComboboxOption = ComboboxOption> =\n TextFieldProps & {\n /** An icon to display in TextField (left side) */\n icon?: ReactElement;\n /** The default value of the selected option */\n defaultValue?: string | undefined;\n /** Callback when the selected option changes */\n onSelected?: ((value: T) => void) | undefined;\n optionComponent?: (\n props: Pick<ComboboxOptionProps<T>, \"option\" | \"isHighlighted\">,\n ) => ReactElement;\n /** Prefix for option data-testid attributes (default: \"combobox-option\") */\n optionTestIdPrefix?: string;\n };\n\nexport type ComboboxSyncProps<T extends ComboboxOption = ComboboxOption> =\n ComboboxBaseProps<T> & {\n /** The list of options to display in the dropdown */\n options: ComboboxOptions<T>;\n asyncOptions?: never;\n delay?: never;\n minSearchLength?: never;\n onSearched?: never;\n };\n\nexport type ComboboxAsyncProps<T extends ComboboxOption = ComboboxOption> =\n ComboboxBaseProps<T> & {\n options?: never;\n delay?: number;\n minSearchLength?: number | undefined;\n /** A function that returns a list of options to display in the dropdown */\n asyncOptions:\n | ((inputValue: string) => ComboboxOptions<T>)\n | ((\n inputValue: string,\n options?: { signal?: AbortSignal },\n ) => Promise<ComboboxOptions<T>>);\n onSearched?: (searchTerm: string) => void;\n };\n\nexport type ComboboxProps<T extends ComboboxOption = ComboboxOption> =\n | ComboboxAsyncProps<T>\n | ComboboxSyncProps<T>;\n\nexport type ComboboxOptionGroup<T extends ComboboxOption = ComboboxOption> = {\n heading: string;\n options: readonly T[];\n};\n\nexport type ComboboxOptions<T extends ComboboxOption = ComboboxOption> =\n | T[]\n | ComboboxOptionGroup<T>[];\n\nexport type ComboboxElementType = TextFieldElementType;\n\nexport type ComboboxRef = Ref<ComboboxElementType>;\n\nexport type ComboboxOptionProps<T extends ComboboxOption = ComboboxOption> = {\n option: T;\n optionComponent?: ComboboxBaseProps<T>[\"optionComponent\"];\n isHighlighted: boolean;\n onOptionSelect: (option: T) => void;\n id: string;\n optionTestIdPrefix?: string;\n};\n", "export * from \"./Combobox\";\nexport * from \"./types\";\nexport { buildOptionTestId } from \"./utils\";\n", "import type { LoqateErrorResponse } from \"./types\";\n\nexport function isLoqateErrorResponse(\n response: unknown,\n): response is LoqateErrorResponse {\n return Array.isArray(response) && response.some(item => \"Error\" in item);\n}\n", "import { search } from \"@simplybusiness/icons\";\nimport { useCallback, useState } from \"react\";\nimport type { ComboboxOption } from \"../Combobox\";\nimport { Combobox } from \"../Combobox\";\nimport { Icon } from \"../Icon\";\nimport type {\n AddressLookupProps,\n AddressLookupService,\n LoqateSearchResponse,\n LoqateSearchResultItem,\n} from \"./types\";\nimport { isLoqateErrorResponse } from \"./utils\";\n\nfunction optionsFromResponse(\n { Items }: LoqateSearchResponse,\n addressLookupService: AddressLookupService,\n) {\n if (!Items || !Array.isArray(Items)) {\n throw Error(\"No address found\");\n }\n\n if (isLoqateErrorResponse(Items)) {\n throw Error(Items[0].Description);\n }\n\n return (Items as LoqateSearchResultItem[]).map(item => ({\n id: item.Id,\n label: `${item.Text}, ${item.Description}`,\n value: item.Text,\n // Add a callback to trigger secondary search\n // if the address type is not \"Address\"\n callback:\n item.Type === \"Address\"\n ? undefined\n : async () => {\n const result = await addressLookupService.findById(item.Id);\n return optionsFromResponse(result, addressLookupService);\n },\n }));\n}\n\nexport const AddressLookup = ({\n ref,\n addressLookupService,\n onAddressSelected,\n onOptionsDisplayed,\n onError,\n errorMessage,\n ...otherProps\n}: AddressLookupProps) => {\n const [error, _setError] = useState<Error | null>(null);\n\n const setError = useCallback(\n (newError: Error | null) => {\n if (newError != null) onError?.(newError);\n _setError(newError);\n },\n [onError],\n );\n\n const asyncOptions = useCallback(\n async (searchTerm: string) => {\n try {\n const response = await addressLookupService.search(searchTerm);\n setError(null);\n const options = optionsFromResponse(response, addressLookupService);\n onOptionsDisplayed?.();\n return options;\n } catch (e) {\n setError(e as Error);\n return [];\n }\n },\n [addressLookupService, setError, onOptionsDisplayed],\n );\n\n const handleSelected = (selected: ComboboxOption) => {\n setError(null);\n\n if (typeof selected === \"string\" || !selected.id) {\n setError(new Error(\"Selected option missing id\"));\n return Promise.resolve();\n }\n\n return addressLookupService\n .get(selected.id)\n .then(onAddressSelected)\n .catch(setError);\n };\n\n const realErrorMessage = (error && \"An error occurred\") || errorMessage;\n\n return (\n <Combobox\n {...otherProps}\n ref={ref}\n onSelected={handleSelected}\n asyncOptions={asyncOptions}\n errorMessage={realErrorMessage}\n icon={<Icon icon={search} />}\n />\n );\n};\n\nAddressLookup.displayName = \"AddressLookup\";\n", "import { LoqateAddressLookupError } from \"./LoqateAddressLookupError\";\nimport type {\n LoqateAddressDetailsItem,\n LoqateAddressDetailsResponse,\n LoqateSearchResponse,\n} from \"./types\";\n\nconst LOQATE_BASE_URL = \"https://api.addressy.com/Capture/Interactive\";\nconst LOQATE_FIND_URL = \"/Find/v1.00/json3.ws\";\nconst LOQATE_RETRIEVE_URL = \"/Retrieve/v1.2/json3.ws\";\nconst DEFAULT_COUNTRIES = [\"GB\"];\n\nexport class LoqateAddressLookupService {\n /**\n * Base URL for the Loqate API\n */\n #baseUrl: string;\n\n /**\n * API key for the Loqate API\n */\n #apiKey?: string;\n\n /**\n * List of allowed country codes for the Loqate API\n * 2 or 3 character ISO country codes\n */\n #countries?: string[];\n\n /**\n * Optional filters for the Loqate API\n * E.g., { AdministrativeArea: \"CA\", PostalCode: \"90210\" }\n */\n #filters?: Record<string, string>;\n\n constructor({\n baseUrl,\n apiKey,\n countries,\n filters,\n }: {\n baseUrl?: string;\n apiKey?: string;\n countries?: string[];\n filters?: Record<string, string>;\n }) {\n this.#apiKey = apiKey;\n this.#baseUrl = baseUrl || LOQATE_BASE_URL;\n this.#countries = countries || DEFAULT_COUNTRIES;\n this.#filters = filters;\n }\n\n private fetchFromApi<TResponse = unknown>(url: string): Promise<TResponse> {\n return fetch(`${this.#baseUrl}${url}`)\n .then(response => response.json())\n .then(json => {\n if (json.Items?.some((item: any) => item.Error)) {\n throw new LoqateAddressLookupError(json);\n }\n return json;\n });\n }\n\n /**\n * Builds the Filters query parameter for Loqate API requests.\n * - Filter keys (e.g., \"AdministrativeArea\", \"PostalCode\") are predefined by Loqate API (no need to encode)\n * - Filter values (e.g., \"New York\", \"90210\") contain user input that may have special characters (need encoding)\n *\n * @returns Empty string if no filters, otherwise \"&Filters=key1:value1&key2:value2\" (Loqate's expected format for Filters)\n */\n private buildFiltersQuery(): string {\n if (!this.#filters || Object.keys(this.#filters).length === 0) {\n return \"\";\n }\n\n // Transform Record<string, string> to Loqate's \"key:value&key:value\" format\n const encodedFilters = Object.entries(this.#filters)\n .map(([key, value]) => `${key}:${encodeURIComponent(value)}`)\n .join(\"&\");\n\n return `&Filters=${encodedFilters}`;\n }\n\n search(searchTerm: string): Promise<LoqateSearchResponse> {\n let url = `${LOQATE_FIND_URL}?Key=${this.#apiKey}&Text=${searchTerm}&Countries=${this.#countries?.join(\",\")}`;\n url += this.buildFiltersQuery();\n return this.fetchFromApi<LoqateSearchResponse>(url);\n }\n\n findById(id: string): Promise<LoqateSearchResponse> {\n let url = `${LOQATE_FIND_URL}?Key=${this.#apiKey}&Container=${id}&Countries=${this.#countries?.join(\",\")}`;\n url += this.buildFiltersQuery();\n return this.fetchFromApi<LoqateSearchResponse>(url);\n }\n\n async get(id: string): Promise<LoqateAddressDetailsItem> {\n const url = `${LOQATE_RETRIEVE_URL}?Key=${this.#apiKey}&Id=${id}`;\n const response = await this.fetchFromApi<LoqateAddressDetailsResponse>(url);\n return response.Items[0];\n }\n}\n", "import type { RefAttributes } from \"react\";\nimport type { ComboboxElementType, ComboboxProps } from \"../Combobox\";\n\nexport interface AddressLookupService {\n search(searchTerm: string): Promise<LoqateSearchResponse>;\n findById(id: string): Promise<LoqateSearchResponse>;\n get(id: string): Promise<LoqateAddressDetailsItem>;\n}\n\nexport type AddressLookupProps = Omit<\n ComboboxProps,\n \"options\" | \"asyncOptions\" | \"onSelected\"\n> &\n RefAttributes<ComboboxElementType> & {\n addressLookupService: AddressLookupService;\n onAddressSelected?: (address: LoqateAddressDetailsItem) => void;\n onOptionsDisplayed?: () => void;\n onError?: (error: Error) => void;\n };\n\n// Loqate API response types\nexport type LoqateErrorItem = {\n Error: string;\n Description: string;\n Cause: string;\n Resolution: string;\n};\n\nexport type LoqateSearchResultItem = {\n Id: string;\n Type: string;\n Text: string;\n Highlight: string;\n Description: string;\n};\n\nexport type LoqateErrorResponse = { Items: LoqateErrorItem[] };\n\nexport type LoqateSearchResponse = { Items: LoqateSearchResultItem[] };\n\nexport type LoqateAddressDetailsItem = {\n Id: string;\n Type: string;\n City: string;\n Line1: string;\n Line2: string;\n PostalCode: string;\n Label: string;\n // US only fields\n SubBuilding?: string;\n BuildingNumber?: string;\n Street?: string;\n};\n\nexport type LoqateAddressDetailsResponse = {\n Items: LoqateAddressDetailsItem[];\n};\n", "export * from \"./AddressLookup\";\nexport * from \"./LoqateAddressLookupService\";\nexport * from \"./types\";\n", "import { circleInfo, circleTick, error, warning } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Icon } from \"../Icon\";\nimport \"./Alert.css\";\n\nexport type AlertElementType = HTMLDivElement;\n\nexport interface AlertProps extends DOMProps, RefAttributes<AlertElementType> {\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n variant?: string;\n show?: boolean;\n header?: string;\n}\n\ntype AlertVariant = \"info\" | \"success\" | \"warning\" | \"error\";\n\nfunction isAlertVariant(value: string): value is AlertVariant {\n return (\n value === \"info\" ||\n value === \"success\" ||\n value === \"warning\" ||\n value === \"error\"\n );\n}\n\nconst Alert = ({ ref, ...props }: AlertProps) => {\n const {\n elementType: Element = \"div\",\n variant: variantProp,\n show = true,\n header,\n children,\n ...otherProps\n } = props;\n\n if (!show) return null;\n\n const variant: AlertVariant =\n variantProp && isAlertVariant(variantProp) ? variantProp : \"info\";\n\n const colorValue =\n variant === \"success\" ? `var(--color-valid)` : `var(--color-${variant})`;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-alert\",\n {\n \"--info\": variant === \"info\",\n \"--success\": variant === \"success\",\n \"--warning\": variant === \"warning\",\n \"--error\": variant === \"error\",\n \"--has-header\": header,\n },\n otherProps.className,\n );\n const icon = {\n info: circleInfo,\n success: circleTick,\n warning,\n error,\n };\n\n const headerClasses = classNames(\"mobius\", \"mobius-alert__header\");\n const iconClasses = classNames(\"mobius\", \"mobius-alert__icon\");\n const contentClasses = classNames(\"mobius\", \"mobius-alert__content\");\n\n return (\n <Element ref={ref} role=\"alert\" {...otherProps} className={classes}>\n <span className={iconClasses}>\n <Icon icon={icon[variant]} color={colorValue} />\n </span>\n <div>\n {header && <p className={headerClasses}>{header}</p>}\n <div className={contentClasses}>{children}</div>\n </div>\n </Element>\n );\n};\n\nAlert.displayName = \"Alert\";\nexport { Alert };\n", "export * from \"./Alert\";\n", "import classNames from \"classnames/dedupe\";\nimport type { BoxProps } from \"./types\";\nimport { getSpacingValue, filterUndefinedProps } from \"../../utils\";\nimport \"./Box.css\";\n\nconst Box = ({ ref, ...props }: BoxProps) => {\n const {\n elementType: Element = \"div\",\n padding,\n paddingX,\n paddingInline,\n paddingInlineStart,\n paddingInlineEnd,\n paddingY,\n paddingBlock,\n paddingBlockStart,\n paddingBlockEnd,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n width,\n height,\n style,\n ...otherProps\n } = props;\n\n const classes = classNames(\"mobius\", \"mobius-box\", otherProps.className);\n\n const styleProps = filterUndefinedProps({\n padding: getSpacingValue(padding),\n paddingInline: getSpacingValue(paddingInline || paddingX),\n paddingBlock: getSpacingValue(paddingBlock || paddingY),\n paddingTop: getSpacingValue(paddingTop || paddingBlockStart),\n paddingRight: getSpacingValue(paddingRight || paddingInlineEnd),\n paddingBottom: getSpacingValue(paddingBottom || paddingBlockEnd),\n paddingLeft: getSpacingValue(paddingLeft || paddingInlineStart),\n minWidth,\n minHeight,\n maxWidth,\n maxHeight,\n width,\n height,\n ...style,\n });\n\n return (\n <Element ref={ref} style={styleProps} {...otherProps} className={classes} />\n );\n};\n\nBox.displayName = \"Box\";\nexport { Box };\n", "export * from \"./Box\";\n", "\"use client\";\n\nimport type { ReactElement, RefAttributes, ReactNode } from \"react\";\nimport { Children, cloneElement } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport \"./Breadcrumbs.css\";\n\nexport type BreadcrumbsElementType = HTMLUListElement;\n\nexport interface BreadcrumbsProps extends RefAttributes<BreadcrumbsElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n children?: ReactNode;\n \"aria-label\"?: string;\n}\n\nconst Breadcrumbs = ({ ref, ...props }: BreadcrumbsProps) => {\n const { \"aria-label\": ariaLabel = \"Breadcrumbs\" } = props;\n const { navProps } = { navProps: { \"aria-label\": ariaLabel } };\n const { children, ...otherProps } = props;\n const childArray = Children.toArray(children);\n\n // Reshape class name and apply to outer element\n const classes = classNames(\n \"mobius\",\n \"mobius-breadcrumb\",\n otherProps.className,\n );\n\n return (\n <nav ref={ref} {...otherProps} {...navProps} className={classes}>\n <ul>\n {childArray.map((child, i) =>\n cloneElement(\n child as ReactElement,\n {\n key: i,\n isCurrent: i === childArray.length - 1,\n } as { key: number; isCurrent: boolean },\n ),\n )}\n </ul>\n </nav>\n );\n};\n\nBreadcrumbs.displayName = \"Breadcrumbs\";\nexport { Breadcrumbs };\n", "\"use client\";\n\nimport type { ReactNode, ReactElement, RefAttributes } from \"react\";\nimport { cloneElement, Children } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Box } from \"../Box\";\n\nexport type BreadcrumbItemElementType = HTMLLIElement;\n\nexport interface BreadcrumbItemProps\n extends DOMProps, RefAttributes<BreadcrumbItemElementType> {\n \"aria-current\"?:\n | \"page\"\n | \"step\"\n | \"location\"\n | \"date\"\n | \"time\"\n | boolean\n | \"true\"\n | \"false\";\n isDisabled?: boolean;\n isCurrent?: boolean;\n separator?: ReactNode;\n className?: string;\n children: ReactNode;\n}\n\nconst BreadcrumbItem = ({ ref, ...props }: BreadcrumbItemProps) => {\n const {\n isDisabled = false,\n isCurrent = false,\n \"aria-current\": ariaCurrent = \"page\",\n children,\n separator = (\n <Box className=\"mobius-breadcrumb__separator\" aria-hidden=\"true\">\n {\">\"}\n </Box>\n ),\n ...otherProps\n } = props;\n const { itemProps } = {\n itemProps: {\n \"aria-current\": isCurrent ? ariaCurrent : undefined,\n \"aria-disabled\": isDisabled || isCurrent,\n ...otherProps,\n },\n };\n\n // Reshape class name and apply to outer element\n const classes = classNames(\n \"mobius\",\n \"mobius-breadcrumb__item\",\n props.className,\n );\n\n const child: ReactElement =\n typeof children === \"string\" ? (\n <span {...itemProps}>{children}</span>\n ) : (\n (Children.only(children) as ReactElement)\n );\n\n return (\n <li className={classes}>\n {cloneElement(child, {\n ...(child.props as Record<string, unknown>),\n ...itemProps,\n ref,\n } as Record<string, unknown>)}\n {!props.isCurrent && separator}\n </li>\n );\n};\n\nBreadcrumbItem.displayName = \"BreadcrumbItem\";\nexport { BreadcrumbItem };\n", "export * from \"./Breadcrumbs\";\nexport * from \"./BreadcrumbItem\";\n", "import type { ReactNode } from \"react\";\nimport { loading } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\ntype LoadingProps = {\n children: ReactNode;\n};\n\nconst Loading = (props: LoadingProps) => {\n const { children } = props;\n\n return (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={loading} spin size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__loading-text\">\n Loading\n </VisuallyHidden>\n {children}\n </>\n );\n};\n\nexport { Loading };\n", "import { tick } from \"@simplybusiness/icons\";\nimport { Icon } from \"../Icon\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\n\nconst Success = () => (\n <>\n <div className=\"mobius-button__icon-wrapper\">\n <Icon icon={tick} size=\"md\" />\n </div>\n <VisuallyHidden className=\"mobius-button__success-text\">\n Success\n </VisuallyHidden>\n </>\n);\n\nexport { Success };\n", "\"use client\";\n\nimport type { MouseEvent, ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Loading } from \"./Loading\";\nimport type { UseButtonProps } from \"../../hooks/useButton\";\nimport { useButton } from \"../../hooks/useButton\";\nimport { Success } from \"./Success\";\nimport \"./Button.css\";\n\nexport type ButtonElementType = HTMLButtonElement;\n\nexport type Variant = \"primary\" | \"secondary\" | \"ghost\" | \"basic\" | \"link\";\n\nexport type Size = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends UseButtonProps, DOMProps, RefAttributes<ButtonElementType> {\n /** The name of the button when submitted in a form */\n name?: string | undefined;\n /** The value of the button when submitted in a form */\n value?: string | undefined;\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Shortlist of styles */\n variant?: Variant;\n size?: Size;\n /** Display loading spinner */\n isLoading?: boolean;\n /** Display success style */\n isSuccess?: boolean;\n onClick?: (event: MouseEvent<HTMLButtonElement>) => void;\n children?: ReactNode;\n}\n\nconst Button = ({ ref, ...props }: ButtonProps) => {\n const {\n children,\n elementType: Component = \"button\" as React.ElementType,\n isDisabled,\n isLoading,\n isSuccess,\n variant = \"primary\",\n size = \"md\",\n\n onPress,\n\n onClick,\n ...otherProps\n } = props;\n const { buttonProps } = useButton(props);\n\n // Reshape class name and apply to outer element\n otherProps.className = classNames(\n \"mobius\",\n \"mobius-button\",\n `--variant-${variant}`,\n `--size-${size}`,\n {\n \"--is-disabled\": isDisabled,\n \"--is-loading\": isLoading,\n \"--is-success\": isSuccess && !isLoading,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...buttonProps} {...otherProps}>\n {isLoading ? <Loading>{children}</Loading> : children}\n {isSuccess && !isLoading && <Success />}\n </Component>\n );\n};\n\nButton.displayName = \"Button\";\nexport { Button };\n", "export * from \"./Button\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport {\n type ChangeEvent,\n type ReactElement,\n Children,\n cloneElement,\n isValidElement,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Checkbox } from \"./Checkbox\";\nimport type { CheckboxElementType, CheckboxGroupProps } from \"./types\";\nimport \"./CheckboxGroup.css\";\n\nexport const CheckboxGroup = ({ ref, ...props }: CheckboxGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n onChange,\n className,\n errorMessage,\n children,\n defaultValue = [],\n isReadOnly,\n itemsPerRow,\n lastItemDisables = false,\n ...rest\n } = props;\n const [selected, setSelected] = useState<string[]>(defaultValue);\n\n // Handle controlled behavior - update state when defaultValue prop changes\n // Use a ref to track if we've initialized to avoid infinite re-renders\n const isInitializedRef = useRef(false);\n const prevDefaultValueRef = useRef<string[]>(defaultValue);\n\n useEffect(() => {\n // Only update if defaultValue has actually changed (shallow comparison)\n const hasChanged =\n defaultValue.length !== prevDefaultValueRef.current.length ||\n defaultValue.some(\n (val, index) => val !== prevDefaultValueRef.current[index],\n );\n\n if (hasChanged || !isInitializedRef.current) {\n setSelected(defaultValue);\n prevDefaultValueRef.current = defaultValue;\n isInitializedRef.current = true;\n }\n }, [defaultValue]);\n\n const checkboxGroupClasses = classNames(\n \"mobius\",\n \"mobius-checkbox-group\",\n className,\n {\n \"--is-horizontal\": orientation === \"horizontal\",\n \"--is-vertical\": orientation === \"vertical\",\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n );\n const validationClasses = useValidationClasses({ isInvalid });\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n const handleChange = (\n event: ChangeEvent<CheckboxElementType>,\n isLastItem = false,\n ) => {\n const {\n target: { value, checked },\n } = event;\n let newValue = [...selected];\n\n if (!checked) {\n newValue = selected.filter(item => item !== value);\n }\n\n if (checked) {\n newValue = [...selected, value];\n }\n\n if (checked && lastItemDisables && isLastItem) {\n newValue = [value];\n }\n\n setSelected(newValue);\n onChange?.(newValue);\n };\n\n const childrenArray = Children.toArray(children);\n const lastCheckbox = childrenArray\n .filter(\n child =>\n isValidElement(child) && (child as ReactElement).type === Checkbox,\n )\n .pop() as ReactElement<CheckboxElementType> | undefined;\n const lastCheckboxIsChecked =\n lastCheckbox && selected.includes(lastCheckbox.props.value);\n\n return (\n <div\n {...rest}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n ref={ref}\n className={checkboxGroupClasses}\n role=\"group\"\n style={\n {\n \"--checkbox-items-per-row\": itemsPerRow || Children.count(children),\n } as React.CSSProperties\n }\n >\n {label && (\n <Label elementType=\"span\" id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className=\"mobius-checkbox-group__wrapper\">\n {childrenArray.map(child => {\n if (isValidElement(child)) {\n // lastItemDisables support\n const isLastItem = child === lastCheckbox;\n const isChildDisabled =\n isDisabled ||\n (lastItemDisables && lastCheckboxIsChecked && !isLastItem);\n\n const childProps = child.props as {\n value: string;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n };\n\n return cloneElement(\n child as ReactElement,\n {\n isDisabled: isChildDisabled,\n isRequired,\n isReadOnly,\n isInvalid,\n isLastItem,\n selected: selected.includes(childProps.value),\n onChange: childProps.onChange || handleChange,\n \"aria-describedby\": describedBy,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </div>\n );\n};\n\nCheckboxGroup.displayName = \"CheckboxGroup\";\n", "import type { ChangeEvent, ReactNode, RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { Validation } from \"../../types\";\n\nexport type CheckboxElementType = HTMLInputElement;\n\nexport interface CheckboxProps\n extends DOMProps, Validation, RefAttributes<CheckboxElementType> {\n className?: string;\n // The content to display as the label.\n label?: ReactNode;\n errorMessage?: string;\n /** The name of the input */\n name?: string;\n /** The current value (controlled). */\n value?: string;\n // Whether the input is disabled.\n isDisabled?: boolean;\n onChange?: (\n event: ChangeEvent<CheckboxElementType>,\n isLastItem?: boolean,\n ) => void;\n // The default value (uncontrolled).\n defaultSelected?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Identifies the element that provides an error message for the object.\n \"aria-errormessage\"?: string;\n /**\n * Identifies the element (or elements) that describes the object.\n */\n \"aria-describedby\"?: string;\n /**\n * Whether the checkbox is the last item of a group.\n */\n isLastItem?: boolean;\n /**\n * **Internal:** Do not use\n */\n groupDisabled?: boolean;\n /**\n * Whether the checkbox is selected.\n */\n selected?: boolean;\n}\n\nexport type CheckboxGroupElementType = HTMLDivElement;\ninterface CheckboxGroupPropsInternal\n extends DOMProps, Validation, RefAttributes<CheckboxGroupElementType> {\n children: ReactNode;\n className?: string;\n orientation?: \"horizontal\" | \"vertical\";\n // Defines number of items to be displayed on a single row when used with orientation=\"horizontal\". Defaults to number of items in the group.\n itemsPerRow?: number;\n errorMessage?: string;\n onChange?: (values: string[]) => void;\n // Defines a string value that labels the current element.\n // \"aria-label\"?: string;\n // Identifies the element (or elements) that labels the current element.\n \"aria-labelledby\"?: string;\n // Identifies the element that provides an error message for the object.\n // \"aria-errormessage\"?: string;\n // Identifies the element (or elements) that describes the object.\n \"aria-describedby\"?: string;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Whether the input is disabled.\n isDisabled?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // The default value (uncontrolled).\n defaultValue?: string[];\n // The content to display as the label.\n label?: ReactNode;\n /**\n * The value of the radio button, used when submitting an HTML form.\n * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio#Value).\n */\n value?: string;\n /**\n * This determines if the last item in the group should disable the other items when selected.\n */\n lastItemDisables?: boolean;\n}\n\ninterface HorizontalCheckboxGroupProps extends CheckboxGroupPropsInternal {\n orientation?: \"horizontal\";\n itemsPerRow: number;\n}\n\ninterface VerticalCheckboxGroupProps extends CheckboxGroupPropsInternal {\n orientation?: \"vertical\";\n itemsPerRow?: never;\n}\n\nexport type CheckboxGroupProps =\n | HorizontalCheckboxGroupProps\n | VerticalCheckboxGroupProps;\n", "export * from \"./Checkbox\";\nexport * from \"./CheckboxGroup\";\nexport * from \"./types\";\n", "import type {\n RefAttributes,\n ReactNode,\n ElementType,\n CSSProperties,\n} from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { SizeType } from \"../../types\";\nimport { sizeClasses } from \"../../utils\";\nimport \"./Container.css\";\n\nexport type ContainerElementType = HTMLElement;\n\nexport interface ContainerProps\n extends DOMProps, RefAttributes<ContainerElementType> {\n id?: string;\n /** Custom class name for setting specific CSS */\n className?: string;\n /** HTML element for the Box */\n elementType?: ElementType;\n size?: SizeType;\n children?: ReactNode;\n style?: CSSProperties;\n}\n\nconst Container = ({ ref, ...props }: ContainerProps) => {\n const { elementType: Element = \"div\", size = \"md\", ...otherProps } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-container\",\n sizeClasses(size),\n otherProps.className,\n );\n\n return <Element ref={ref} {...otherProps} className={classes} />;\n};\n\nContainer.displayName = \"Container\";\nexport { Container };\n", "export * from \"./Container\";\n", "// Convert a custom format date string to the format \"yyyy-mm-dd\".\nexport const convertToDateFormat = (date: string, format?: string): string => {\n const dateParts = date.split(/[-/]/);\n const formatParts = format ? format.split(/[-/]/) : [\"yyyy\", \"mm\", \"dd\"];\n const dateObj: { [key: string]: number } = {};\n const formattedDate: string[] = [];\n\n for (let i = 0; i < formatParts.length; i++) {\n dateObj[formatParts[i]] = dateParts[i] ? parseInt(dateParts[i], 10) : 0;\n }\n\n formattedDate.push(dateObj[\"yyyy\"]?.toString() || \"0000\");\n formattedDate.push(\n (dateObj[\"mm\"] < 10 ? \"0\" : \"\") + (dateObj[\"mm\"]?.toString() || \"00\"),\n );\n formattedDate.push(\n (dateObj[\"dd\"] < 10 ? \"0\" : \"\") + (dateObj[\"dd\"]?.toString() || \"00\"),\n );\n\n return formattedDate.join(\"-\");\n};\n\nexport const isValidDate = (date?: string, format = \"yyyy-mm-dd\"): boolean => {\n if (!date) return true;\n\n // Convert date to standard format\n const standardDate = convertToDateFormat(date, format);\n\n // Parse the standardized date\n const [yearStr, monthStr, dayStr] = standardDate.split(\"-\");\n const year = parseInt(yearStr, 10);\n const month = parseInt(monthStr, 10);\n const day = parseInt(dayStr, 10);\n\n // Validate month range\n if (month < 1 || month > 12) {\n return false;\n }\n\n // Check if day is valid for the month\n const daysInMonth = new Date(year, month, 0).getDate();\n return day > 0 && day <= daysInMonth;\n};\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { FocusEvent, RefAttributes } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { convertToDateFormat, isValidDate } from \"./validation\";\n\nexport interface DateFieldProps\n extends Omit<TextFieldProps, \"type\">, RefAttributes<TextFieldElementType> {\n /** The earliest date allowed for the input. */\n min?: string;\n /** The latest date allowed for the input. */\n max?: string;\n /** Date format to use. */\n format?: string;\n}\n\nexport const MIN_MAX_ERROR =\n '\"min\" value should not be greater than \"max\" value.';\n\nexport const DateField = ({ ref, ...props }: DateFieldProps) => {\n const {\n min,\n max,\n format,\n className,\n errorMessage,\n defaultValue,\n value,\n ...otherProps\n } = props;\n const [error, setError] = useState<string | undefined>(errorMessage);\n const [isInvalid, setIsInvalid] = useState<boolean | undefined>(undefined);\n const localRef = useRef<TextFieldElementType>(null);\n const classes = classNames(\"mobius-date-field\", className);\n\n // If a custom format is provided, convert the min, max,\n // and defaultValue dates to that format\n const formattedMin = min ? convertToDateFormat(min, format) : undefined;\n const formattedMax = max ? convertToDateFormat(max, format) : undefined;\n const formattedDefaultValue = defaultValue\n ? convertToDateFormat(defaultValue, format)\n : undefined;\n const formattedValue = value ? convertToDateFormat(value, format) : undefined;\n\n const setInvalidState = (error?: string) => {\n setError(error);\n setIsInvalid(true);\n };\n\n const setValidState = () => {\n setError(props.errorMessage);\n setIsInvalid(false);\n };\n\n // Validate min and max values\n useEffect(() => {\n if (!isValidDate(min, format)) {\n setInvalidState(`Invalid min date: ${min}`);\n return;\n }\n if (!isValidDate(max, format)) {\n setInvalidState(`Invalid max date: ${max}`);\n return;\n }\n\n if (min && max) {\n const minDate = new Date(min);\n const maxDate = new Date(max);\n if (minDate > maxDate) {\n setInvalidState(MIN_MAX_ERROR);\n } else {\n setValidState();\n }\n } else {\n setValidState();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [min, max, format]);\n\n const validate = () => {\n // If 'min' or 'max' values are provided, checkValidity() will\n // validate the date and return a boolean\n const isValidInput = localRef.current?.checkValidity();\n\n if (!isValidInput) {\n setInvalidState(\"Invalid date input\");\n } else {\n setValidState();\n }\n };\n\n // User has interacted with the component and navigated away\n const handleBlur = (event: FocusEvent<Element>) => {\n validate();\n otherProps.onBlur?.(event);\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n type=\"date\"\n min={formattedMin}\n max={formattedMax}\n errorMessage={errorMessage ?? error}\n isInvalid={isInvalid}\n defaultValue={formattedDefaultValue}\n value={formattedValue}\n onBlur={handleBlur}\n {...otherProps}\n />\n );\n};\n\nDateField.displayName = \"DateField\";\n", "export * from \"./DateField\";\nexport * from \"./validation\";\n", "import type { PropsWithChildren, RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type DivElementType = HTMLDivElement;\nexport interface ContentProps\n extends DOMProps, RefAttributes<DivElementType>, PropsWithChildren {}\n\nconst Content = ({ ref, children, ...otherProps }: ContentProps) => (\n <div ref={ref} {...otherProps} className=\"mobius-drawer__content\">\n {children}\n </div>\n);\n\nContent.displayName = \"Content\";\nexport { Content };\n", "import { createContext } from \"react\";\nimport type { DrawerContextProps } from \"./types\";\n\nexport const DrawerContext = createContext<DrawerContextProps>({\n onClose: () => {},\n closeLabel: undefined,\n headerId: undefined,\n});\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { useDialog } from \"../../hooks\";\nimport { mergeRefs, supportsDialog } from \"../../utils\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport { DrawerContext } from \"./DrawerContext\";\nimport type { DrawerProps } from \"./types\";\nimport \"./Drawer.css\";\n\nexport type DialogElementType = HTMLDialogElement;\n\nconst TRANSITION_CSS_VARIABLE = \"--drawer-transition-duration\";\n\nconst Drawer = ({ ref, ...props }: DrawerProps) => {\n const {\n isOpen,\n className,\n closeLabel,\n direction,\n announce = \"Drawer opened on screen\",\n onOpen,\n onClose,\n children,\n } = props;\n const dialogRef = useRef<HTMLDialogElement | null>(null);\n const [shouldTransition, setShouldTransition] = useState(false);\n const { close } = useDialog({\n ref: dialogRef,\n isOpen,\n onOpen,\n onClose,\n transition: {\n isEnabled: true,\n CSSVariable: TRANSITION_CSS_VARIABLE,\n },\n });\n const hiddenId = `dialog-screen-reader-announce-${useId()}`;\n const headerId = `dialog-header-${useId()}`;\n\n const dialogClasses = classNames(\n \"mobius\",\n \"mobius-drawer\",\n `--${direction}`,\n className,\n {\n \"--should-transition\": shouldTransition,\n },\n );\n\n useEffect(() => {\n setShouldTransition(supportsDialog());\n }, []);\n\n const contextValue = useMemo(\n () => ({\n onClose: close,\n closeLabel,\n headerId,\n }),\n [close, closeLabel, headerId],\n );\n\n return (\n <dialog\n id={useId()}\n ref={mergeRefs([dialogRef, ref])}\n onCancel={close}\n className={dialogClasses}\n aria-describedby={hiddenId}\n aria-labelledby={headerId}\n >\n <VisuallyHidden>\n <div id={hiddenId}>{announce}</div>\n </VisuallyHidden>\n <DrawerContext.Provider value={contextValue}>\n {children}\n </DrawerContext.Provider>\n </dialog>\n );\n};\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer };\n", "import { useContext } from \"react\";\nimport { DrawerContext } from \"./DrawerContext\";\n\nexport const useDrawer = () => {\n const { onClose, closeLabel, headerId } = useContext(DrawerContext);\n\n return { onClose, closeLabel, headerId };\n};\n", "import type { PropsWithChildren, RefAttributes } from \"react\";\n\nimport { cross } from \"@simplybusiness/icons\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { useDrawer } from \"./useDrawer\";\n\nexport type HeaderElementType = HTMLDivElement;\n\nexport interface HeaderProps\n extends DOMProps, RefAttributes<HeaderElementType>, PropsWithChildren {}\n\nconst Header = ({ ref, children, ...otherProps }: HeaderProps) => {\n const { onClose, closeLabel, headerId } = useDrawer();\n\n return (\n <header ref={ref} {...otherProps} className=\"mobius-drawer__header\">\n <h2 id={headerId}>{children}</h2>\n <Button\n aria-label=\"Close\"\n variant=\"basic\"\n onPress={onClose}\n className=\"mobius-drawer__close\"\n size=\"sm\"\n >\n <Icon icon={cross} /> {closeLabel}\n </Button>\n </header>\n );\n};\n\nHeader.displayName = \"Header\";\nexport { Header };\n", "import type {\n DivElementType as DrawerContentDivElementType,\n ContentProps as DrawerContentProps,\n} from \"./Content\";\nimport { Content } from \"./Content\";\nimport { Drawer as DrawerComponent } from \"./Drawer\";\nimport type { DrawerProps, DrawerContextProps } from \"./types\";\nimport { useDrawer } from \"./useDrawer\";\nimport type {\n HeaderElementType as DrawerHeaderElementType,\n HeaderProps as DrawerHeaderProps,\n} from \"./Header\";\nimport { Header } from \"./Header\";\n\nconst Drawer = Object.assign(DrawerComponent, {\n Header,\n Content,\n});\n\nDrawer.displayName = \"Drawer\";\nexport { Drawer, useDrawer };\n\nexport type {\n DrawerContextProps,\n DrawerContentDivElementType,\n DrawerContentProps,\n DrawerHeaderElementType,\n DrawerHeaderProps,\n DrawerProps,\n};\n", "\"use client\";\n\nimport type { Ref, RefAttributes, ReactNode, ReactElement } from \"react\";\nimport { Children, isValidElement, cloneElement, useState } from \"react\";\nimport useDropdownMenu from \"react-accessible-dropdown-menu-hook\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nimport { Button } from \"../Button\";\nimport \"./DropdownMenu.css\";\n\nexport type DropdownMenuElementType = HTMLElement;\n\nexport interface DropdownMenuProps\n extends DOMProps, RefAttributes<DropdownMenuElementType> {\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n label?: string;\n trigger?: ReactElement;\n}\n\nexport type DropdownMenuRef = Ref<DropdownMenuElementType>;\n\ntype ChildClickProps = {\n onClick?: () => void;\n};\n\nconst DropdownMenu = ({ ref, ...props }: DropdownMenuProps) => {\n const {\n elementType: Element = \"nav\",\n trigger,\n label = \"Menu\",\n children,\n ...otherProps\n } = props;\n const [activeId, setActiveId] = useState<number | null>(null);\n const numberOfItems = Children.count(children);\n const {\n buttonProps,\n itemProps,\n isOpen: open,\n setIsOpen,\n } = useDropdownMenu(numberOfItems);\n\n const classes = classNames(\n \"mobius\",\n \"mobius-dropdown-menu\",\n otherProps.className,\n );\n const triggerClasses = classNames(\"mobius\", \"mobius-dropdown-menu__trigger\");\n const listClasses = classNames(\"mobius\", \"mobius-dropdown-menu__list\", {\n \"--is-open\": open,\n });\n\n const handleChildClick = ({ onClick }: ChildClickProps, index: number) => {\n setActiveId(index);\n setIsOpen(false);\n\n if (onClick) {\n onClick();\n }\n };\n\n return (\n <Element ref={ref} {...otherProps} className={classes}>\n {trigger ? (\n cloneElement(trigger, {\n className: triggerClasses,\n open,\n label,\n ...buttonProps,\n } as Record<string, unknown>)\n ) : (\n <Button className={triggerClasses} {...buttonProps}>\n {label}\n </Button>\n )}\n <ul className={listClasses} role=\"menu\">\n {Children.map(children, (child, index) => {\n if (isValidElement(child)) {\n // DropdownMenu items accept onClick and active props\n return cloneElement(child, {\n onClick: () =>\n handleChildClick(child.props as Record<string, unknown>, index),\n active: index === activeId,\n ...itemProps[index],\n } as {\n onClick?: () => void;\n active?: boolean;\n [key: string]: unknown;\n });\n }\n\n return child;\n })}\n </ul>\n </Element>\n );\n};\n\nDropdownMenu.displayName = \"DropdownMenu\";\nexport { DropdownMenu };\n", "import type { Ref, RefAttributes, ReactNode, ReactElement } from \"react\";\nimport { cloneElement, isValidElement, Children } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type ItemElementType = HTMLLIElement;\n\nexport interface ItemProps extends DOMProps, RefAttributes<ItemElementType> {\n elementType?: React.ElementType;\n /** Custom class name for setting specific CSS */\n className?: string;\n active?: boolean;\n children?: ReactNode;\n onClick?: () => void;\n}\n\nexport type ItemRef = Ref<ItemElementType>;\n\nconst Item = ({ ref, ...props }: ItemProps) => {\n const {\n elementType: Element = \"li\",\n active,\n onClick,\n children,\n ...otherProps\n } = props;\n const classes = classNames(\n \"mobius\",\n \"mobius-dropdown-menu__item\",\n { \"--is-active\": active },\n otherProps.className,\n );\n\n return (\n <Element ref={ref} onClick={onClick} {...otherProps}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childClasses = classNames(\n (child.props as { className?: string }).className,\n classes,\n );\n return cloneElement(\n child as ReactElement,\n {\n className: childClasses,\n } as { className: string },\n );\n }\n\n return <span className={classes}>{child}</span>;\n })}\n </Element>\n );\n};\n\nItem.displayName = \"DropdownMenu.Item\";\nexport { Item };\n", "import { DropdownMenu as DropdownMenuComponent } from \"./DropdownMenu\";\nimport { Item } from \"./Item\";\n\nimport type {\n DropdownMenuElementType,\n DropdownMenuProps,\n DropdownMenuRef,\n} from \"./DropdownMenu\";\nimport type {\n ItemProps as DropdownMenuItemProps,\n ItemRef as DropdownMenuItemRef,\n ItemElementType as DropdownMenuItemElementType,\n} from \"./Item\";\n\nexport interface DropdownMenuCompound extends React.FC<DropdownMenuProps> {\n Item: React.FC<DropdownMenuItemProps>;\n}\n\nconst DropdownMenu: DropdownMenuCompound = Object.assign(\n DropdownMenuComponent,\n {\n Item,\n },\n);\n\nexport type {\n DropdownMenuElementType,\n DropdownMenuProps,\n DropdownMenuRef,\n DropdownMenuItemProps,\n DropdownMenuItemRef,\n DropdownMenuItemElementType,\n};\n\nDropdownMenu.displayName = \"DropdownMenu\";\nexport { DropdownMenu };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { cloneElement, useId } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Flex } from \"../Flex\";\nimport \"./Fieldset.css\";\n\nexport type LegendProps = {\n id?: string;\n className?: string;\n};\n\ntype ContainerProps = {\n \"aria-labelledby\"?: string;\n role: string;\n};\n\nconst useFieldset = (\n props: FieldsetProps,\n): { legendProps: LegendProps; containerProps: ContainerProps } => {\n const { legend } = props;\n\n let legendProps: LegendProps = {};\n let containerProps: ContainerProps = {\n role: \"group\",\n };\n\n const legendId = useId();\n if (legend) {\n legendProps = {\n ...legendProps,\n id: legendId,\n };\n containerProps = {\n ...containerProps,\n \"aria-labelledby\": legendId,\n };\n }\n\n return {\n legendProps,\n containerProps,\n };\n};\n\nexport type FieldsetElementType = HTMLDivElement;\nexport interface FieldsetProps\n extends DOMProps, RefAttributes<FieldsetElementType> {\n legend?: string;\n children: ReactNode;\n className?: string;\n legendComponent?: ReactElement;\n}\n\nconst Fieldset = ({ ref: _ref, ...props }: FieldsetProps) => {\n const {\n children,\n legend,\n legendComponent = <legend />,\n ...otherProps\n } = props;\n\n const { legendProps, containerProps } = useFieldset(props);\n\n const classes = classNames(\"mobius\", \"mobius-fieldset\", props.className);\n\n // Set class on legend\n legendProps.className = \"mobius-fieldset__legend\";\n\n return (\n <Flex {...containerProps} {...otherProps} className={classes}>\n {legend && cloneElement(legendComponent, { ...legendProps }, [legend])}\n {children}\n </Flex>\n );\n};\n\nFieldset.displayName = \"Fieldset\";\nexport { Fieldset };\n", "export * from \"./Fieldset\";\n", "import type { ReactNode, RefAttributes, CSSProperties } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { filterUndefinedProps, getSpacingValue } from \"../../utils\";\nimport type { SpacingType } from \"../../types\";\n\nexport type GridElementType = HTMLDivElement;\n\nexport interface GridProps extends RefAttributes<GridElementType>, DOMProps {\n children?: ReactNode;\n /** The number of columns */\n columns?: number;\n /** How big a gap between the columns and rows */\n gap?: SpacingType;\n /** How big a gap between the columns */\n columnGap?: SpacingType;\n /** How big a gap between the rows */\n rowGap?: SpacingType;\n /** Aligns the grid along the block (column) axis */\n alignContent?:\n | \"center\"\n | \"space-around\"\n | \"space-between\"\n | \"space-evenly\"\n | \"stretch\";\n /** Aligns the grid along the inline (row) axis */\n justifyContent?:\n | \"center\"\n | \"start\"\n | \"end\"\n | \"space-around\"\n | \"space-between\"\n | \"space-evenly\";\n /** Aligns grid items along the block (column) axis */\n alignItems?: \"center\" | \"start\" | \"end\" | \"stretch\" | \"baseline\";\n /** Aligns grid items along the inline (row) axis */\n justifyItems?: \"start\" | \"end\" | \"center\" | \"stretch\";\n /** Custom class name for setting specific CSS */\n className?: string;\n style?: React.CSSProperties;\n}\n\nconst Grid = ({ ref: _ref, ...props }: GridProps) => {\n const {\n columns = 12,\n gap,\n columnGap,\n rowGap,\n alignContent,\n alignItems,\n justifyContent,\n justifyItems,\n className,\n style,\n ...rest\n } = props;\n const classes = classNames(\"mobius\", \"mobius-grid\", className);\n\n const styles: CSSProperties = filterUndefinedProps({\n boxSizing: \"border-box\",\n display: \"grid\",\n gridTemplateColumns: `repeat(${columns}, 1fr)`,\n gap: getSpacingValue(gap),\n columnGap: getSpacingValue(columnGap),\n rowGap: getSpacingValue(rowGap),\n alignContent,\n alignItems,\n justifyContent,\n justifyItems,\n ...style,\n });\n\n return <div style={styles} className={classes} {...rest} />;\n};\n\nGrid.displayName = \"Grid\";\nexport { Grid };\n", "\"use client\";\n\nimport type { RefAttributes, CSSProperties } from \"react\";\nimport { useEffect, useState } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { useBreakpoint } from \"../../hooks\";\nimport type { SizeType } from \"../../types\";\n\nexport type GridItemElementType = HTMLDivElement;\n\nexport interface GridItemProps\n extends RefAttributes<GridItemElementType>, DOMProps {\n /** How many columns the item spans */\n span?: number | number[];\n /** React children */\n children?: React.ReactNode;\n /** How many columns the item spans on the smallest breakpoint */\n xs?: number;\n sm?: number;\n md?: number;\n lg?: number;\n xl?: number;\n /** How many columns the item spans on the largest breakpoint */\n xxl?: number;\n /** Aligns the grid item along the block (column) axis */\n alignSelf?: \"center\" | \"start\" | \"end\" | \"stretch\";\n /** Aligns the grid item along the inline (row) axis */\n justifySelf?: \"center\" | \"start\" | \"end\" | \"stretch\";\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nexport const getBreakpointMap = (config: Partial<Record<SizeType, number>>) =>\n Object.entries(config).reduce<Record<string, number | undefined>>(\n (prev, [key, value]) => {\n const previous = Object.values(prev);\n const lastDefined = previous[previous.length - 1];\n return { ...prev, [key]: value || lastDefined };\n },\n {},\n );\n\nexport const DEFAULT_SPAN = 12;\n\nconst GridItem = ({ ref: _ref, ...props }: GridItemProps) => {\n const {\n breakpoint: { size: breakpointSize },\n } = useBreakpoint();\n const {\n span,\n xs = Array.isArray(span) ? DEFAULT_SPAN : span,\n sm,\n md,\n lg,\n xl,\n xxl,\n alignSelf,\n justifySelf,\n className,\n ...rest\n } = props;\n const breakpointMap = getBreakpointMap({\n xs,\n sm,\n md,\n lg,\n xl,\n xxl,\n });\n const [responsiveSpan, setResponsiveSpan] = useState<number | undefined>();\n const classes = classNames(\"mobius-grid__item\", className);\n\n useEffect(() => {\n setResponsiveSpan(breakpointMap[breakpointSize]);\n }, [breakpointSize, breakpointMap]);\n\n const styles: CSSProperties = {\n gridColumn: responsiveSpan ? `span ${responsiveSpan}` : undefined,\n alignSelf,\n justifySelf,\n };\n\n return <div style={{ ...styles }} className={classes} {...rest} />;\n};\n\nGridItem.displayName = \"GridItem\";\nexport { GridItem };\n", "import type { GridElementType, GridProps } from \"./Grid\";\nimport { Grid as GridComponent } from \"./Grid\";\nimport type { GridItemProps, GridItemElementType } from \"./Item\";\nimport { GridItem } from \"./Item\";\n\nexport interface GridCompound extends React.FC<GridProps> {\n Item: React.FC<GridItemProps>;\n}\n\nconst Grid: GridCompound = Object.assign(GridComponent, {\n Item: GridItem,\n});\n\nGrid.displayName = \"Grid\";\nexport { Grid };\nexport type { GridProps, GridItemProps, GridElementType, GridItemElementType };\n", "import type React from \"react\";\nimport type { RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type IntrinsicImage = Omit<\n React.JSX.IntrinsicElements[\"img\"],\n \"css\" | \"width\" | \"height\" | \"color\"\n> &\n RefAttributes<HTMLImageElement>;\n\nexport interface ImageProps extends DOMProps, IntrinsicImage {\n /** HTML element for the Box */\n elementType?: React.ElementType;\n /** Alternative text for accessibility */\n alt: string;\n /** Path to image asset */\n src: string;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nconst Image = ({\n ref,\n alt,\n elementType: Component = \"img\",\n ...otherProps\n}: ImageProps) => {\n const classes = classNames(\"mobius\", \"mobius-image\", otherProps.className);\n\n return <Component alt={alt} ref={ref} {...otherProps} className={classes} />;\n};\n\nImage.displayName = \"Image\";\nexport { Image };\n", "export * from \"./Image\";\n", "import type {\n HTMLAttributeAnchorTarget,\n CSSProperties,\n MouseEvent,\n RefAttributes,\n} from \"react\";\nimport type React from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport \"./Link.css\";\n\nexport type LinkElementType = HTMLAnchorElement;\n\nexport interface LinkProps extends RefAttributes<LinkElementType> {\n id?: string;\n children?: React.ReactNode;\n /** Path to link resource or page */\n href?: string;\n /** Custom class name for setting specific CSS */\n className?: string;\n title?: string;\n style?: React.CSSProperties;\n referrerPolicy?: ReferrerPolicy;\n download?: boolean | string;\n rel?: string;\n target?: HTMLAttributeAnchorTarget;\n isDisabled?: boolean;\n onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;\n to?: unknown;\n elementType?: React.ElementType;\n /** Visual style variant for the link */\n variant?: \"primary\" | \"secondary\";\n}\n\nconst Link = ({ ref, ...props }: LinkProps) => {\n const {\n isDisabled = false,\n elementType: Component = \"a\",\n style,\n className,\n variant = \"primary\",\n ...otherProps\n } = props;\n\n const disabledStyles: CSSProperties = {\n pointerEvents: \"none\",\n };\n\n const styles = { ...style, ...(isDisabled && disabledStyles) };\n const classes = classNames(\n \"mobius\",\n \"mobius-link\",\n className,\n `mobius-link--${variant}`,\n {\n \"--is-disabled\": isDisabled,\n },\n );\n\n return (\n <Component\n ref={ref}\n style={styles}\n className={classes}\n aria-disabled={isDisabled ? true : undefined}\n {...otherProps}\n >\n {props.children}\n </Component>\n );\n};\n\nLink.displayName = \"Link\";\nexport { Link };\n", "export * from \"./Link\";\n", "import classNames from \"classnames/dedupe\";\nimport type { HTMLAttributeAnchorTarget, MouseEvent } from \"react\";\nimport { Button, type ButtonProps } from \"../Button\";\n\nexport interface LinkButtonProps extends ButtonProps {\n href: string;\n title?: string;\n style?: React.CSSProperties;\n referrerPolicy?: ReferrerPolicy;\n download?: boolean | string;\n rel?: string;\n target?: HTMLAttributeAnchorTarget;\n onClick?: (event: MouseEvent<HTMLAnchorElement | HTMLButtonElement>) => void;\n to?: unknown;\n}\n\nexport function LinkButton({\n href,\n children,\n className,\n elementType = \"a\",\n ...rest\n}: LinkButtonProps) {\n if (!href) {\n throw new Error(\"LinkButton requires a href prop\");\n }\n\n const classes = classNames(\"mobius\", \"mobius-link-button\", className);\n\n return (\n <Button elementType={elementType} href={href} className={classes} {...rest}>\n {children}\n </Button>\n );\n}\n", "export * from \"./LinkButton\";\n", "import type { ReactNode, Ref } from \"react\";\nimport { Children, cloneElement, isValidElement } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./List.css\";\n\nexport type ListStyleType =\n | \"disc\"\n | \"circle\"\n | \"square\"\n | \"decimal\"\n | \"georgian\"\n | \"trad-chinese-informal\"\n | \"kannada\";\n\nexport interface ListProps extends DOMProps {\n children?: ReactNode;\n isOrdered?: boolean;\n isReversed?: boolean;\n start?: number;\n liststyletype?: ListStyleType;\n icon?: ReactNode;\n className?: string;\n ref?: Ref<HTMLOListElement & HTMLUListElement>;\n}\n\nconst List = ({ ref, ...props }: ListProps) => {\n const Component: \"ol\" | \"ul\" = props.isOrdered ? \"ol\" : \"ul\";\n const { children, icon, ...otherProps } = props;\n\n // Remove props that should not exist on ol or ul element\n\n const { isOrdered, liststyletype, isReversed, ...restProps } = otherProps;\n\n const mappedProps = {\n ...restProps,\n reversed: isReversed,\n };\n\n const classes = classNames(\n \"mobius\",\n \"mobius-list\",\n {\n \"--has-icon\": icon,\n [`--is-${liststyletype}`]: liststyletype,\n },\n otherProps.className,\n );\n\n return (\n <Component ref={ref} {...mappedProps} className={classes}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n // List items accept a parentIcon prop which is not part of standard HTML\n return cloneElement(child, {\n parentIcon: icon,\n } as { parentIcon?: ReactNode });\n }\n\n return child;\n })}\n </Component>\n );\n};\n\nList.displayName = \"List\";\nexport { List };\n", "import type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type ListItemElementType = HTMLLIElement;\nexport interface ListItemProps\n extends DOMProps, RefAttributes<ListItemElementType> {\n children?: ReactNode;\n value?: number;\n className?: string;\n parentIcon?: ReactNode;\n icon?: ReactNode;\n}\n\nconst ListItem = ({ ref, ...props }: ListItemProps) => {\n const { parentIcon, icon, children, ...otherProps } = props;\n const iconContent = icon || parentIcon;\n const classes = classNames(\n \"mobius\",\n \"mobius-list__item\",\n {\n \"--has-icon\": iconContent,\n },\n props.className,\n );\n const contentClasses = classNames(\"mobius\", \"mobius-list__item-content\");\n const iconClasses = classNames(\"mobius\", \"mobius-list__icon\");\n\n if (iconContent) {\n return (\n <li ref={ref} {...otherProps} className={classes}>\n <span className={contentClasses}>\n <span className={iconClasses}>{iconContent}</span>\n {children}\n </span>\n </li>\n );\n }\n\n return (\n <li ref={ref} {...otherProps} className={classes}>\n {children}\n </li>\n );\n};\n\nListItem.displayName = \"ListItem\";\nexport { ListItem };\n", "export * from \"./List\";\nexport * from \"./ListItem\";\n", "import type { RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { loading } from \"@simplybusiness/icons\";\nimport type { IconProps } from \"../Icon\";\nimport { Icon } from \"../Icon\";\nimport \"./LoadingIndicator.css\";\n\nexport interface LoadingIndicatorProps\n extends RefAttributes<SVGSVGElement>, IconProps {}\n\nconst LoadingIndicator = ({ ref, ...props }: LoadingIndicatorProps) => {\n const { icon = loading, ...otherProps } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-loading-indicator\",\n otherProps.className,\n );\n\n return (\n <Icon icon={icon} spin ref={ref} {...otherProps} className={classes} />\n );\n};\n\nLoadingIndicator.displayName = \"LoadingIndicator\";\nexport { LoadingIndicator };\n", "export * from \"./LoadingIndicator\";\n", "import type { RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type LogoElementType = SVGSVGElement;\n\nexport interface LogoProps extends DOMProps, RefAttributes<LogoElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n /** Custom width. When defined along with height, it will scale proportionally */\n width?: string;\n /** Custom height. When defined along with width, it will scale proportionally */\n height?: string;\n}\n\nexport const Logo = ({ ref, ...props }: LogoProps) => {\n const { className, width, height, ...otherProps } = props;\n\n const classes = classNames(\"mobius\", \"mobius-logo\", className);\n\n return (\n <svg\n width={width}\n height={height}\n ref={ref}\n className={classes}\n viewBox=\"0 0 144 37\"\n {...otherProps}\n >\n <defs>\n <linearGradient\n id=\"logo-gradient\"\n x1=\"83.508%\"\n x2=\"11.891%\"\n y1=\"76.042%\"\n y2=\"26.973%\"\n >\n <stop stopColor=\"#4632D8\" offset=\"0%\" />\n <stop stopColor=\"#9084E8\" offset=\"100%\" />\n </linearGradient>\n </defs>\n <g>\n <path\n fill=\"#0E0A2B\"\n d=\"M68.788 11.307c0-2.486-2.027-3.345-3.833-4.1-1.332-.562-2.471-1.036-2.471-2.072 0-.873.77-1.42 1.968-1.42 1.051 0 1.806.444 2.294.725.193.103.474.222.755.133.192-.06.34-.207.459-.444l.34-.621c.266-.474.163-.888-.281-1.2-.533-.384-1.88-1.05-3.537-1.05-2.738 0-4.647 1.643-4.647 4.01 0 2.413 2.012 3.301 3.788 4.07 1.347.593 2.516 1.096 2.516 2.161 0 .873-.754 1.45-1.924 1.45-1.287 0-2.22-.65-2.678-.961l-.03-.015c-.533-.296-.903-.237-1.228.192l-.415.607c-.444.607-.148.992.134 1.228.828.637 2.427 1.392 4.203 1.392 2.708 0 4.587-1.673 4.587-4.085zm4.44 2.975V6.186c0-.577-.31-.888-.873-.888h-.843c-.563 0-.874.311-.874.888v8.096c0 .577.296.888.874.888h.843c.563 0 .873-.311.873-.888zM71.482 4.203h.755c.518 0 .814-.281.814-.8v-.517c0-.518-.296-.814-.814-.814h-.755c-.518 0-.8.281-.8.814v.518c.016.518.297.8.8.8zM92.645 24.48h.755c.518 0 .814-.282.814-.8v-.518c0-.518-.296-.814-.814-.814h-.755c-.518 0-.799.282-.799.814v.518c0 .518.281.8.8.8zm-6.26-19.42c-1.539 0-2.397.962-2.945 1.895-.444-1.243-1.435-1.895-2.871-1.895-1.362 0-2.146.888-2.723 1.806v-.68c0-.578-.311-.889-.873-.889h-.74c-.563 0-.873.311-.873.888v8.096c0 .577.295.888.873.888h.843c.577 0 .873-.311.873-.888V10.73c0-2.25.888-3.271 2.058-3.271 1.006 0 1.198.71 1.198 1.85v4.987c0 .578.311.888.888.888h.844c.577 0 .873-.31.873-.888v-3.551c0-2.25.873-3.271 2.013-3.271 1.036 0 1.243.74 1.243 1.85v4.987c0 .577.31.888.888.888h.814c.577 0 .888-.31.888-.888V8.835c0-2.5-1.095-3.774-3.27-3.774zm10.804 10.33c2.679 0 4.558-2.13 4.558-5.164 0-3.094-1.776-5.166-4.425-5.166-1.761 0-2.708 1.036-3.049 1.51v-.533c0-.459-.34-.755-.873-.755h-.607c-.562 0-.888.326-.888.888v11.9c0 .576.311.887.888.887h.814c.578 0 .888-.31.888-.888v-3.404c0-.207-.014-.4-.014-.532.325.429 1.184 1.258 2.708 1.258zm-2.768-5.105c0-1.362.622-2.975 2.368-2.975 1.377 0 2.309 1.184 2.309 2.945 0 1.746-.947 2.916-2.338 2.916-1.54 0-2.339-1.45-2.339-2.886zm12.965 4.07v-.652c0-.444-.252-.725-.681-.784-.34-.03-.68-.192-.68-1.066v-9.47c0-.563-.326-.888-.874-.888h-.843c-.563 0-.874.31-.874.888v9.679c0 1.258.34 2.16 1.021 2.678.637.489 1.466.533 2.013.533.607 0 .918-.325.918-.917zm9.457-9.073h-.962c-.518 0-.844.237-.977.726l-1.717 4.972c-.089.311-.192.71-.251.977-.074-.281-.193-.71-.296-1.021l-1.835-4.943c-.163-.489-.489-.71-.977-.71h-1.036c-.415 0-.622.162-.71.295-.09.134-.163.385.014.755l3.685 8.57-.34.813c-.252.592-.77 1.229-1.45 1.229-.267 0-.474-.09-.652-.163h-.014c-.43-.104-.755.074-.962.488l-.163.415c-.119.251-.148.517-.06.725.075.192.237.34.474.429.326.118.814.296 1.391.296 1.628 0 2.975-.977 3.597-2.605l3.996-10.226c.103-.296.088-.563-.045-.755-.163-.163-.4-.267-.71-.267zM67.634 28.297c.977-.592 1.54-1.658 1.54-2.886 0-2.176-1.688-3.567-4.293-3.567h-4.04c-.562 0-.873.311-.873.888v11.899c0 .577.296.888.873.888h4.1c1.346 0 2.5-.34 3.33-.962.932-.71 1.42-1.761 1.42-3.049.03-1.524-.784-2.767-2.057-3.211zm-5.017-.962v-3.212h2.25c1.02 0 1.628.592 1.628 1.584 0 .991-.607 1.643-1.57 1.643h-2.308v-.015zm4.396 4.01c0 1.155-.71 1.865-1.865 1.865h-2.53v-3.714h2.53c1.14.014 1.865.74 1.865 1.85zm12.638-5.712h-.814c-.577 0-.888.31-.888.888v3.655c0 2.176-1.361 3.182-2.634 3.182-1.006 0-1.406-.547-1.406-1.88v-4.942c0-.578-.31-.888-.888-.888h-.814c-.562 0-.888.325-.888.888v5.431c0 2.516 1.17 3.774 3.463 3.774a3.937 3.937 0 003.286-1.761v.651c0 .577.296.888.873.888h.74c.577 0 .888-.31.888-.888v-8.095c-.03-.578-.355-.903-.918-.903zm6.956 3.937c-.917-.311-1.702-.592-1.702-1.184 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.193-.341c.251-.518.133-.947-.326-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.213.222l-.222.34c-.178.252-.237.504-.178.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.03-2.042-1.761-2.649-3.138-3.122zm6.897-3.937h-.844c-.562 0-.873.31-.873.888v8.095c0 .577.296.888.873.888h.844c.577 0 .873-.31.873-.888v-8.095c0-.563-.31-.888-.873-.888zm9.324-.237c-1.924 0-2.93 1.154-3.36 1.806v-.681c0-.577-.31-.888-.873-.888h-.74c-.563 0-.873.31-.873.888v8.095c0 .577.296.888.873.888h.843c.578 0 .874-.31.874-.888v-3.744c0-1.79 1.14-3.078 2.708-3.078 1.021 0 1.436.547 1.436 1.88v4.942c0 .577.31.888.887.888h.814c.578 0 .888-.31.888-.888v-5.431c0-2.516-1.169-3.789-3.477-3.789zm10.448 0c-2.96 0-5.032 2.131-5.032 5.165 0 2.99 2.235 5.165 5.313 5.165 1.48 0 2.635-.533 3.345-.977.444-.266.562-.695.296-1.198l-.222-.385c-.266-.459-.651-.563-1.184-.31h-.015a3.885 3.885 0 01-2.042.606c-1.54 0-2.634-.962-2.812-2.472h5.816a.935.935 0 00.933-.917c.014-2.827-1.717-4.677-4.396-4.677zm-.044 2.013c1.065 0 1.79.77 1.864 1.968h-4.1c.253-1.213 1.096-1.968 2.236-1.968zm10.152 2.16c-.917-.31-1.702-.591-1.702-1.183 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.192-.341c.252-.518.134-.947-.325-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.214.222l-.222.34c-.177.252-.236.504-.177.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.015-2.042-1.747-2.649-3.138-3.122zm8.791 0c-.917-.31-1.702-.591-1.702-1.183 0-.74.77-.859 1.229-.859.784 0 1.406.281 1.805.474.548.237.947.118 1.184-.34l.192-.341c.252-.518.134-.947-.325-1.184-.326-.178-1.288-.71-2.753-.71-2.279 0-3.803 1.213-3.803 3.004 0 2.042 1.731 2.65 3.137 3.138.903.325 1.687.592 1.687 1.169 0 .547-.488.902-1.258.902-.917 0-1.613-.37-2.057-.621l-.059-.03c-.533-.28-.903-.207-1.214.222l-.222.34c-.177.252-.236.504-.177.726.044.207.192.37.4.488a5.774 5.774 0 003.285 1.007c2.235 0 3.789-1.273 3.789-3.079-.015-2.042-1.747-2.649-3.138-3.122z\"\n />\n <path\n fill=\"url(#logo-gradient)\"\n d=\"M22.747 22.288c.607 1.214.918 2.59.918 4.144 0 1.45-.267 2.827-.8 4.1a10.018 10.018 0 01-2.279 3.36c-.991.961-2.235 1.73-3.744 2.278-1.51.563-3.167.829-4.988.829-2.264 0-4.35-.385-6.29-1.14-1.938-.77-3.492-1.598-4.676-2.5-.31-.252-.548-.504-.696-.77a1.332 1.332 0 01-.177-.71.718.718 0 010-.252c.03-.37.207-.785.547-1.199l1.14-1.598c.4-.548.829-.844 1.288-.918a.896.896 0 01.222-.03c.4 0 .873.163 1.39.474 2.487 1.776 4.914 2.679 7.252 2.679 1.643 0 2.96-.385 3.922-1.14.962-.755 1.45-1.746 1.45-2.96 0-.725-.192-1.39-.562-1.983a5.347 5.347 0 00-1.539-1.569 18.207 18.207 0 00-2.235-1.287 56.102 56.102 0 00-2.649-1.214c-.917-.4-1.835-.814-2.752-1.258a19.282 19.282 0 01-2.62-1.539 14.014 14.014 0 01-2.22-1.924c-.666-.695-1.169-1.539-1.554-2.545-.37-.992-.562-2.087-.562-3.271 0-2.042.533-3.863 1.598-5.446 1.066-1.584 2.516-2.797 4.336-3.641C8.303.414 10.345 0 12.624 0c1.91 0 3.685.281 5.358.844 1.657.562 2.96 1.198 3.892 1.88.68.473 1.006 1.035 1.006 1.671 0 .385-.118.785-.37 1.2l-.917 1.657c-.385.74-.903 1.11-1.554 1.11-.4 0-.83-.133-1.318-.4a42.421 42.421 0 00-1.687-.947c-.473-.237-1.14-.488-1.998-.71a9.458 9.458 0 00-2.56-.356c-1.672 0-3.004.37-3.981 1.11-.992.74-1.48 1.717-1.48 2.946 0 .902.31 1.701.932 2.412.622.695 1.421 1.302 2.398 1.79.977.489 2.057.977 3.256 1.466a54.048 54.048 0 013.552 1.628 20.795 20.795 0 013.24 2.042c.948.755 1.732 1.732 2.354 2.945zm31.257 2.945c0 3.197-1.155 6.083-3.256 8.14-2.265 2.205-5.506 3.36-9.368 3.36H30.71c-2.443 0-4.278-1.836-4.278-4.278V4.53c0-1.2.43-2.28 1.214-3.064C28.43.681 29.51.252 30.709.252h9.013c3.419 0 6.32 1.095 8.377 3.182 1.909 1.923 2.945 4.558 2.945 7.429 0 2.294-.622 4.203-1.91 5.816 1.377.77 2.487 1.776 3.286 2.99 1.066 1.583 1.584 3.448 1.584 5.564zm-12.106-7.68c.044-.03 4.913-3.02 4.913-6.675 0-1.761-.607-3.345-1.717-4.455-1.568-1.584-3.788-1.924-5.372-1.924H30.68v28h10.7c2.738 0 4.958-.754 6.408-2.16 1.273-1.243 1.983-3.049 1.983-5.106 0-1.272-.296-2.353-.858-3.196v-.03c-1.362-2.353-6.838-3.774-6.897-3.789l-.844-.222.726-.444z\"\n />\n <path\n fill=\"#0E0A2B\"\n d=\"M138.199 25.455c0-.4.074-.784.222-1.14.148-.354.355-.665.606-.932.267-.266.563-.473.903-.621.34-.148.725-.222 1.11-.222.4 0 .784.074 1.125.222.355.148.666.355.917.621.267.267.474.578.622.933.148.355.222.74.222 1.14 0 .399-.074.784-.222 1.139a2.86 2.86 0 01-.622.932 3.087 3.087 0 01-.917.637 2.646 2.646 0 01-1.125.236c-.4 0-.77-.074-1.11-.236a2.777 2.777 0 01-.903-.637 2.821 2.821 0 01-.606-.932 2.898 2.898 0 01-.222-1.14zm.71 0c0 .326.06.622.163.903.103.281.266.518.459.725a2.051 2.051 0 001.524.666c.31 0 .592-.059.858-.177a2.175 2.175 0 001.155-1.214c.118-.281.162-.577.162-.903 0-.325-.059-.621-.162-.902a2.422 2.422 0 00-.46-.726 2.112 2.112 0 00-.695-.488 2.073 2.073 0 00-.858-.178c-.31 0-.592.06-.844.178a2.051 2.051 0 00-.68.488 2.45 2.45 0 00-.46.726 2.636 2.636 0 00-.162.902zm1.154-1.14c0-.221.119-.34.34-.34h.889c.296 0 .532.09.695.252.178.163.267.4.267.68a.623.623 0 01-.06.297.557.557 0 01-.133.222.512.512 0 01-.163.148c-.059.044-.118.059-.162.074v.014l.03.03c.014.015.014.03.029.06l.044.088.34.666c.06.118.075.207.045.281-.03.074-.104.104-.207.104h-.104c-.192 0-.31-.089-.385-.252l-.384-.829h-.4v.74c0 .222-.104.34-.31.34h-.06c-.207 0-.31-.118-.31-.34v-2.234zm1.051 1.037c.133 0 .252-.045.31-.119.075-.074.104-.192.104-.325s-.03-.252-.103-.326a.413.413 0 00-.296-.118h-.385v.873h.37v.015z\"\n />\n </g>\n </svg>\n );\n};\n\nLogo.displayName = \"Logo\";\n", "export * from \"./Logo\";\n", "import type { PropsWithChildren, RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type DivElementType = HTMLDivElement;\nexport interface ContentProps\n extends DOMProps, RefAttributes<DivElementType>, PropsWithChildren {}\n\nconst Content = ({ ref, children, ...otherProps }: ContentProps) => (\n <div ref={ref} {...otherProps} className=\"mobius-modal__content\">\n {children}\n </div>\n);\n\nContent.displayName = \"Content\";\nexport { Content };\n", "import { createContext } from \"react\";\nimport type { ModalContextProps } from \"./types\";\n\nexport const ModalContext = createContext<ModalContextProps>({\n onClose: () => {},\n closeLabel: undefined,\n});\n", "import { useContext } from \"react\";\nimport { ModalContext } from \"./ModalContext\";\n\nexport const useModal = () => {\n const { onClose, closeLabel } = useContext(ModalContext);\n\n return { onClose, closeLabel };\n};\n", "import type { PropsWithChildren, RefAttributes } from \"react\";\n\nimport { cross } from \"@simplybusiness/icons\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport { useModal } from \"./useModal\";\n\nexport type HeaderElementType = HTMLDivElement;\n\nexport interface HeaderProps\n extends DOMProps, RefAttributes<HeaderElementType>, PropsWithChildren {}\n\nconst Header = ({ ref, children, ...otherProps }: HeaderProps) => {\n const { onClose, closeLabel } = useModal();\n\n return (\n <header ref={ref} {...otherProps} className=\"mobius-modal__header\">\n {children}\n <Button\n aria-label=\"Close\"\n variant=\"basic\"\n onPress={onClose}\n className=\"mobius-modal__close\"\n >\n <Icon icon={cross} /> {closeLabel}\n </Button>\n </header>\n );\n};\n\nHeader.displayName = \"Header\";\nexport { Header };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useDialog } from \"../../hooks\";\nimport { mergeRefs } from \"../../utils\";\nimport { supportsDialog } from \"../../utils/polyfill-tests\";\nimport { ModalContext } from \"./ModalContext\";\nimport type { ModalProps } from \"./types\";\nimport \"./Modal.css\";\n\nexport type ModalElementType = HTMLDialogElement;\n\nconst TRANSITION_CSS_VARIABLE = \"--modal-transition-duration\";\n\nconst Modal = ({ ref, ...props }: ModalProps) => {\n const {\n isOpen,\n onClose,\n onOpen,\n children,\n className,\n closeLabel,\n isFullScreen,\n animation,\n ...rest\n } = props;\n const [shouldTransition, setShouldTransition] = useState(false);\n\n useEffect(() => {\n setShouldTransition(supportsDialog());\n }, []);\n\n const dialogRef = useRef<HTMLDialogElement | null>(null);\n const { close } = useDialog({\n ref: dialogRef,\n isOpen,\n onOpen,\n onClose,\n transition: {\n isEnabled: !!animation,\n CSSVariable: TRANSITION_CSS_VARIABLE,\n },\n });\n\n const modalClasses = classNames(\n \"mobius\",\n \"mobius-modal\",\n {\n \"--no-dialog-support\": !shouldTransition, // This class is used to correctly position modal in x/y middle on iOS <= 15.2\n \"--should-transition\": shouldTransition && animation,\n \"--slide-up\": animation === \"slideUp\",\n \"--fade\": animation === \"fade\",\n \"--is-fullscreen\": isFullScreen,\n },\n className,\n );\n\n const contextValue = useMemo(\n () => ({\n onClose: close,\n closeLabel,\n }),\n [close, closeLabel],\n );\n\n return (\n <dialog\n ref={mergeRefs([dialogRef, ref])}\n onCancel={close}\n className={modalClasses}\n {...rest}\n >\n <ModalContext.Provider value={contextValue}>\n {children}\n </ModalContext.Provider>\n </dialog>\n );\n};\n\nModal.displayName = \"Modal\";\nexport { Modal };\n", "import type {\n DivElementType as ModalContentDivElementType,\n ContentProps as ModalContentProps,\n} from \"./Content\";\nimport { Content } from \"./Content\";\nimport type {\n HeaderElementType as ModalHeaderElementType,\n HeaderProps as ModalHeaderProps,\n} from \"./Header\";\nimport { Header } from \"./Header\";\nimport { Modal as ModalComponent } from \"./Modal\";\nimport type { ModalProps, ModalContextProps } from \"./types\";\nimport { useModal } from \"./useModal\";\n\nconst Modal = Object.assign(ModalComponent, {\n Header,\n Content,\n});\n\nModal.displayName = \"Modal\";\nexport { Modal, useModal };\n\nexport type {\n ModalContextProps,\n ModalContentDivElementType,\n ModalContentProps,\n ModalHeaderElementType,\n ModalHeaderProps,\n ModalProps,\n};\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport { type RefAttributes, useCallback, useEffect, useRef } from \"react\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport \"./NumberField.css\";\n\nexport type NumberFieldElementType = TextFieldElementType;\n\nexport interface NumberFieldProps\n extends\n Omit<TextFieldProps, \"type\" | \"defaultValue\" | \"inputElementType\">,\n RefAttributes<NumberFieldElementType> {\n /** The smallest value allowed for the input. */\n minValue?: number;\n /** The largest value allowed for the input. */\n maxValue?: number;\n /** The amount that the input value changes with each increment or decrement \"tick\". */\n step?: number; // ??\n /** The default value for the input. */\n defaultValue?: number;\n /** Flag to hide the spin buttons. */\n hideSpinButtons?: boolean;\n}\n\nexport const NumberField = ({ ref, ...props }: NumberFieldProps) => {\n const {\n minValue,\n maxValue,\n step,\n defaultValue,\n hideSpinButtons,\n className,\n ...otherProps\n } = props;\n const {\n onFocus: customOnFocus,\n onBlur: customOnBlur,\n ...rest\n } = otherProps as Omit<TextFieldProps, \"onFocus\" | \"onBlur\"> & {\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n };\n\n const focusedInputRef = useRef<HTMLInputElement | null>(null);\n const wheelHandler = useCallback((ev: Event) => ev.preventDefault(), []);\n\n useEffect(() => {\n return () => {\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = null;\n };\n }, [wheelHandler]);\n\n const containerClasses = classNames(\"mobius-number-field\", className, {\n \"--hide-spin-buttons\": hideSpinButtons,\n });\n\n const handleBeforeInput = (\n event: React.FormEvent<NumberFieldElementType>,\n ) => {\n const { data } = event.nativeEvent as InputEvent;\n if (step && Number.isInteger(step) && data === \".\") {\n event.preventDefault();\n }\n if (minValue && minValue >= 0 && data === \"-\") {\n event.preventDefault();\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const { value } = event.target;\n const numValue = parseFloat(value);\n\n // On blur, snap to nearest valid step value if step is defined\n if (step && step > 1 && !isNaN(numValue)) {\n const baseValue = minValue ?? 0;\n const steps = Math.round((numValue - baseValue) / step);\n const snappedValue = baseValue + steps * step;\n\n // Only update if the value changed\n if (snappedValue !== numValue) {\n event.target.value = snappedValue.toString();\n // Trigger change event for the corrected value\n const changeEvent = new Event(\"change\", { bubbles: true });\n event.target.dispatchEvent(changeEvent);\n // Also call the onChange handler if provided\n const syntheticChangeEvent = {\n ...event,\n target: event.target,\n currentTarget: event.currentTarget,\n } as React.ChangeEvent<HTMLInputElement>;\n otherProps.onChange?.(syntheticChangeEvent);\n }\n }\n\n customOnBlur?.(event);\n };\n\n const forwardedProps: TextFieldProps = {\n ...rest,\n onFocus: e => {\n const el = e.currentTarget as HTMLInputElement;\n focusedInputRef.current?.removeEventListener(\"wheel\", wheelHandler);\n focusedInputRef.current = el;\n el.addEventListener(\"wheel\", wheelHandler, { passive: false });\n customOnFocus?.(e as React.FocusEvent<HTMLInputElement>);\n },\n onBlur: e => handleBlur(e as React.FocusEvent<HTMLInputElement>),\n };\n\n return (\n <TextField\n {...forwardedProps}\n className={containerClasses}\n onBeforeInput={handleBeforeInput}\n type=\"number\"\n min={minValue ?? undefined}\n max={maxValue ?? undefined}\n step={step}\n ref={ref}\n defaultValue={\n defaultValue != null ? defaultValue?.toString() : defaultValue\n }\n />\n );\n};\n\nNumberField.displayName = \"NumberField\";\n", "export * from \"./NumberField\";\n", "import type { RefAttributes } from \"react\";\n\nexport interface OptionProps extends RefAttributes<HTMLOptionElement> {\n value?: string;\n children?: string;\n isDisabled?: boolean;\n}\n\nconst Option = ({ ref, ...props }: OptionProps) => {\n const { isDisabled, ...rest } = props;\n const mappedProps = {\n ...rest,\n disabled: isDisabled,\n };\n return <option {...mappedProps} ref={ref} />;\n};\n\nOption.displayName = \"Option\";\nexport { Option };\n", "export * from \"./Option\";\n", "import { eye, eyeSlash } from \"@simplybusiness/icons\";\nimport { Icon } from \"../..\";\n\nexport interface ShowHideButtonProps {\n show?: boolean;\n onClick: () => void;\n}\n\nexport const ShowHideButton = ({\n show = false,\n onClick,\n}: ShowHideButtonProps) => (\n <button\n className=\"mobius-password-field__show-button\"\n type=\"button\"\n onClick={e => {\n e.preventDefault();\n onClick();\n }}\n aria-label={`${show ? \"Hide\" : \"Show\"} password`}\n data-testid=\"show-hide-button\"\n >\n <Icon icon={show ? eyeSlash : eye} aria-hidden=\"true\" />\n </button>\n);\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport { useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils/mergeRefs\";\nimport {\n TextField,\n type TextFieldElementType,\n type TextFieldProps,\n} from \"../TextField\";\nimport { ShowHideButton } from \"./ShowHideButton\";\nimport \"./PasswordField.css\";\n\nexport interface PasswordFieldProps extends TextFieldProps {}\n\nexport const PasswordField = ({\n ref,\n className,\n ...props\n}: PasswordFieldProps) => {\n const [show, setShow] = useState(false);\n const type = show ? \"text\" : \"password\";\n const classes = classNames(\"mobius-password-field\", className);\n const localRef = useRef<TextFieldElementType>(null);\n\n const handleShowHideButtonClick = () => {\n const selectionStart = localRef.current?.selectionStart;\n const selectionEnd = localRef.current?.selectionEnd;\n\n setShow(oldShow => !oldShow);\n requestAnimationFrame(() => {\n localRef.current?.focus();\n if (selectionStart != null && selectionEnd != null) {\n localRef.current?.setSelectionRange(selectionStart, selectionEnd);\n }\n });\n };\n\n return (\n <TextField\n ref={mergeRefs([localRef, ref])}\n className={classes}\n {...props}\n type={type}\n suffixInside={\n <ShowHideButton onClick={handleShowHideButtonClick} show={show} />\n }\n />\n );\n};\n\nPasswordField.displayName = \"PasswordField\";\n", "export * from \"./PasswordField\";\n", "import {\n FloatingArrow,\n arrow,\n autoUpdate,\n flip,\n offset,\n shift,\n useDismiss,\n useFloating,\n useInteractions,\n} from \"@floating-ui/react\";\nimport { cross } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport { cloneElement, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useWindowEvent } from \"@simplybusiness/mobius-hooks\";\nimport type { DOMProps } from \"../../types\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport \"./Popover.css\";\n\nexport type PopoverElementType = HTMLDivElement;\n\nexport interface PopoverProps\n extends DOMProps, RefAttributes<PopoverElementType> {\n children?: ReactNode;\n trigger: ReactElement;\n /** Callback that fires each time the accordion is opened */\n onOpen?: () => void;\n /** Callback that fires each time the accordion is closed */\n onClose?: () => void;\n /** Custom class name for setting specific CSS */\n className?: string;\n}\n\nconst OFFSET_FROM_CONTENT_DEFAULT = 10;\n\nexport const Popover = (props: PopoverProps) => {\n const { trigger, children, onOpen, onClose, className } = props;\n const arrowRef = useRef(null);\n const floatingContainerRef = useRef<HTMLDivElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: setIsOpen,\n whileElementsMounted: autoUpdate,\n middleware: [\n arrow({\n element: arrowRef,\n }),\n offset(OFFSET_FROM_CONTENT_DEFAULT),\n shift(),\n flip(),\n ],\n });\n const dismiss = useDismiss(context, {\n bubbles: true,\n outsidePress: (event: MouseEvent) => {\n // Prevent 'onClose' from firing when clicking the toggle to close\n const toggle = refs.reference.current as HTMLElement;\n const isToggleClick = !toggle?.contains(event.target as HTMLElement);\n if (isToggleClick) {\n onClose?.();\n }\n return true;\n },\n });\n const { getReferenceProps, getFloatingProps } = useInteractions([dismiss]);\n\n const containerClasses = classNames(\n \"mobius\",\n \"mobius-popover__container\",\n className,\n );\n\n const setFloatingRef = useCallback(\n (node: HTMLDivElement | null) => {\n refs.setFloating(node);\n floatingContainerRef.current = node;\n },\n [refs],\n );\n\n // Native listener to prevent clicks inside the popover from activating\n // interactive ancestors. Must be native because React's onClick fires\n // too late via delegation.\n useEffect(() => {\n const el = floatingContainerRef.current;\n if (!el) return;\n\n const preventLabelActivation = (e: Event) => {\n const target = e.target as HTMLElement;\n // Allow default behavior for interactive elements (links, inputs, etc.)\n // so they remain functional inside the popover.\n if (!target.closest(\"a[href], input, select, textarea\")) {\n e.preventDefault();\n }\n };\n el.addEventListener(\"click\", preventLabelActivation);\n return () => el.removeEventListener(\"click\", preventLabelActivation);\n }, [isOpen]);\n\n const toggleVisibility = () => {\n if (isOpen) {\n setIsOpen(false);\n onClose?.();\n return;\n }\n\n setIsOpen(true);\n onOpen?.();\n };\n\n const triggerComponent = cloneElement(trigger, {\n ref: refs.setReference,\n className: classNames(\n (trigger.props as { className?: string }).className,\n \"mobius-popover__toggle\",\n ),\n onClick: toggleVisibility,\n ...getReferenceProps(),\n } as Record<string, unknown>);\n\n useWindowEvent(\"keydown\", e => {\n if (e.key === \"Escape\") {\n onClose?.();\n e.preventDefault();\n e.stopPropagation();\n }\n });\n\n return (\n <>\n {triggerComponent}\n {isOpen && (\n <div\n className={containerClasses}\n ref={setFloatingRef}\n style={floatingStyles}\n {...getFloatingProps()}\n >\n <div className=\"mobius-popover\">\n <header className=\"mobius-popover__header\">\n <Button\n type=\"button\"\n className=\"mobius-popover__close-button\"\n onClick={toggleVisibility}\n aria-label=\"Close\"\n variant=\"ghost\"\n >\n <Icon\n icon={cross}\n size=\"md\"\n className=\"mobius-popover__close-icon\"\n />\n </Button>\n </header>\n <div className=\"mobius-popover__body\">{children}</div>\n </div>\n <FloatingArrow\n ref={arrowRef}\n context={context}\n width={20}\n className=\"mobius-popover__arrow-icon\"\n />\n </div>\n )}\n </>\n );\n};\n", "export * from \"./Popover\";\n", "\"use client\";\n\n/* eslint no-console: \"off\" */\nimport type { AriaProgressBarProps } from \"@react-types/progress\";\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport { useId } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Label } from \"../Label\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport \"./Progress.css\";\n\nexport type ProgressElementType = HTMLDivElement;\n\nexport interface ProgressProps\n extends\n Omit<AriaProgressBarProps, \"label\">,\n DOMProps,\n RefAttributes<ProgressElementType> {\n label: ReactNode;\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n id?: string;\n className?: string;\n showLabel?: boolean;\n showValueLabel?: boolean;\n variant?: \"primary\" | \"secondary\" | \"success\" | \"danger\" | \"warning\" | \"info\";\n value?: number;\n minValue?: number;\n maxValue?: number;\n valueFormatter?: (\n value: number,\n minValue: number,\n maxValue: number,\n ) => string;\n}\n\nfunction warnAboutInvalidValues(\n value: number,\n minValue: number,\n maxValue: number,\n) {\n if (minValue > maxValue) {\n console.warn(\"minValue is greater than maxValue\");\n }\n if (value < minValue) {\n console.warn(\"Progress value is less than minValue\");\n }\n if (value > maxValue) {\n console.warn(\"Progress value is greater than maxValue\");\n }\n}\n\nconst sanitizedValue = (\n value: number | undefined,\n defaultValue: number,\n): number => {\n if (value === undefined || Number.isNaN(value)) {\n return defaultValue;\n }\n return value;\n};\n\nconst getLabelComponent = (\n label: ReactNode,\n progressLabelId: string,\n showLabel: boolean,\n) => {\n if (showLabel) {\n return (\n <Label\n id={progressLabelId}\n className=\"mobius-progress__label\"\n elementType=\"span\"\n >\n {label}\n </Label>\n );\n }\n\n return (\n <VisuallyHidden>\n <Label\n id={progressLabelId}\n className=\"mobius-progress__label\"\n elementType=\"span\"\n >\n {label}\n </Label>\n </VisuallyHidden>\n );\n};\n\nconst DEFAULT_VALUE = 0;\nconst DEFAULT_MIN_VALUE = 0;\nconst DEFAULT_MAX_VALUE = 100;\n\nconst Progress = ({ ref, ...props }: ProgressProps) => {\n const progressId = useId();\n const progressLabelId = useId();\n const {\n id,\n label,\n showLabel = true,\n showValueLabel = !!label,\n valueFormatter,\n variant = \"primary\",\n className,\n } = props;\n\n let { value, minValue, maxValue } = props;\n\n value = sanitizedValue(value, DEFAULT_VALUE);\n minValue = sanitizedValue(minValue, DEFAULT_MIN_VALUE);\n maxValue = sanitizedValue(maxValue, DEFAULT_MAX_VALUE);\n\n // Will never happen but lets appease the typescript gods\n if (value === undefined || minValue === undefined || maxValue === undefined) {\n return null;\n }\n\n warnAboutInvalidValues(value, minValue, maxValue);\n\n // Calculate the width of the progress bar as a percentage\n const clamp = (num: number, min: number, max: number): number =>\n Math.min(Math.max(num, min), max);\n const percentage = clamp(\n Math.round(((value - minValue) / (maxValue - minValue)) * 100),\n 0,\n 100,\n );\n const barWidth = `${percentage}%`;\n\n const classes = classNames(\"mobius\", \"mobius-progress\", className, {\n \"--is-primary\": variant === \"primary\",\n \"--is-secondary\": variant === \"secondary\",\n });\n\n // Set progress aria values\n const progressBarProps: Record<string, string> = {};\n progressBarProps[\"aria-valuemin\"] = minValue.toString();\n progressBarProps[\"aria-valuemax\"] = maxValue.toString();\n progressBarProps[\"aria-valuenow\"] = value.toString();\n progressBarProps[\"aria-valuetext\"] =\n valueFormatter instanceof Function\n ? valueFormatter(value, minValue, maxValue)\n : barWidth;\n const labelComponent = getLabelComponent(label, progressLabelId, showLabel);\n\n return (\n <div\n id={id || progressId}\n {...progressBarProps}\n ref={ref}\n className={classes}\n role=\"progressbar\"\n aria-labelledby={progressLabelId}\n >\n {labelComponent}\n <div className=\"mobius-progress__track\">\n <div className=\"mobius-progress__bar\" style={{ width: barWidth }} />\n </div>\n {showValueLabel && (\n <Label data-testid=\"value-label\" elementType=\"span\">\n {progressBarProps[\"aria-valuetext\"]}\n </Label>\n )}\n </div>\n );\n};\n\nProgress.displayName = \"Progress\";\nexport { Progress };\n", "export * from \"./Progress\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n isValidElement,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport \"./Radio.css\";\n\nexport type RadioElementType = HTMLInputElement;\n\nexport type RadioOverflowInfo = {\n vertical: boolean;\n horizontal: boolean;\n};\n\nexport type AriaRadioProps = {\n /**\n * Defines a string value that labels the current element.\n */\n \"aria-label\"?: string;\n /**\n * Identifies the element (or elements) that labels the current element.\n */\n \"aria-labelledby\"?: string;\n /**\n * Identifies the element (or elements) that describes the object.\n */\n \"aria-describedby\"?: string;\n /**\n * Identifies the element (or elements) that provide a detailed, extended description for the object.\n */\n \"aria-details\"?: string;\n};\n\nexport interface RadioProps\n extends DOMProps, AriaRadioProps, RefAttributes<RadioElementType> {\n children?: ReactNode;\n className?: string;\n label?: ReactNode;\n errorMessage?: string;\n value: string;\n isDisabled?: boolean;\n onChange?: (event: HTMLElementEvent<RadioElementType>) => void;\n defaultChecked?: boolean;\n /**\n * Callback fired when label overflow state changes.\n * Only invoked when the Radio is in horizontal orientation to prevent infinite loops with autoStack.\n * Provides information about vertical and horizontal overflow.\n */\n onOverflow?: (overflow: RadioOverflowInfo) => void;\n // Internal:** Do not use\n groupDisabled?: boolean;\n // Internal:** Do not use\n name?: string;\n // Internal:** Do not use\n selected?: string;\n // Internal:** Do not use\n setSelected?: React.Dispatch<React.SetStateAction<string>>;\n isRequired?: boolean;\n /**\n * **Internal:** Passed via cloneElement from RadioGroup.\n * @internal\n */\n orientation?: \"horizontal\" | \"vertical\";\n}\n\nconst Radio = ({ ref, ...props }: RadioProps) => {\n const {\n children,\n value,\n label,\n className,\n isDisabled,\n errorMessage,\n onChange,\n defaultChecked,\n groupDisabled,\n name,\n selected,\n setSelected,\n isRequired,\n onOverflow,\n orientation,\n ...otherProps\n } = props;\n const realDisabled = groupDisabled || isDisabled;\n const isMultiline = label && children;\n const isControlled = selected !== undefined;\n const isChecked = isControlled ? selected === value : defaultChecked;\n\n const contentRef = useRef<HTMLDivElement>(null);\n const prevOverflowRef = useRef<RadioOverflowInfo>({\n vertical: false,\n horizontal: false,\n });\n\n const hasIconFirst = useMemo(() => {\n if (!children || Children.count(children) === 0) return false;\n\n const firstChild = Children.toArray(children)[0];\n if (!isValidElement(firstChild)) return false;\n\n const props = firstChild.props as Record<string, unknown>;\n return \"icon\" in props && props.icon !== undefined;\n }, [children]);\n\n // Detect overflow and call callback\n useLayoutEffect(() => {\n if (!contentRef.current || !onOverflow) return;\n\n // Only detect overflow when in horizontal orientation\n // This prevents infinite loops when autoStack switches to vertical\n if (orientation === \"vertical\") {\n return;\n }\n\n const element = contentRef.current;\n\n // Check for content being cut off (true overflow)\n const scrollOverflowVertical = element.scrollHeight > element.clientHeight;\n const scrollOverflowHorizontal = element.scrollWidth > element.clientWidth;\n\n // Check for multi-line text wrapping by comparing height to single line height\n const styles = window.getComputedStyle(element);\n const lineHeight = parseFloat(styles.lineHeight);\n const fontSize = parseFloat(styles.fontSize);\n const singleLineHeight = isNaN(lineHeight) ? fontSize * 1.2 : lineHeight;\n\n // Tolerance multiplier to account for sub-pixel rendering and line-height variations.\n // If element height is greater than single line, text has wrapped.\n const WRAP_DETECTION_TOLERANCE = 1.1;\n const hasWrapped =\n element.clientHeight > singleLineHeight * WRAP_DETECTION_TOLERANCE;\n\n const vertical = scrollOverflowVertical || hasWrapped;\n const horizontal = scrollOverflowHorizontal;\n\n const newOverflowState = { vertical, horizontal };\n const prevOverflow = prevOverflowRef.current;\n\n // Only call callback if state actually changed\n if (\n newOverflowState.vertical !== prevOverflow.vertical ||\n newOverflowState.horizontal !== prevOverflow.horizontal\n ) {\n prevOverflowRef.current = newOverflowState;\n onOverflow(newOverflowState);\n }\n }, [label, children, onOverflow, orientation]);\n\n const radioClasses = {\n \"--is-disabled\": realDisabled,\n \"--is-selected\": selected === value,\n \"--is-multiline\": !!isMultiline,\n \"--is-required\": isRequired,\n };\n const containerClasses = classNames(\n \"mobius-radio__label\",\n radioClasses,\n className,\n { \"--has-icon-first\": hasIconFirst },\n );\n\n const inputClasses = classNames(\"mobius-radio__input\", radioClasses);\n\n // Exclude props that are passed via cloneElement in `<RadioGroup />`\n const { \"aria-describedby\": _ariaDescribedBy, ...rest } = otherProps;\n\n // Handle all interactions through onChange event\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n // Update internal state for RadioGroup\n if (setSelected) {\n setSelected(event.target.value);\n }\n\n // Call parent onChange callback\n if (onChange) {\n // Create an HTMLElementEvent-compatible object\n const adaptedEvent: HTMLElementEvent<HTMLInputElement> = {\n ...event.nativeEvent,\n target: event.target,\n };\n onChange(adaptedEvent);\n }\n };\n\n return (\n <>\n <Label className={containerClasses}>\n <input\n aria-describedby={otherProps[\"aria-describedby\"]}\n disabled={realDisabled}\n ref={ref}\n className={inputClasses}\n value={value}\n tabIndex={0}\n type=\"radio\"\n onChange={handleChange}\n {...(isControlled\n ? { checked: isChecked }\n : { defaultChecked: isChecked })}\n name={name}\n required={isRequired}\n {...rest}\n />\n {isMultiline ? (\n <div ref={contentRef} className=\"mobius-radio__content--multiline\">\n <div className=\"mobius-radio__content-first-line\">{label}</div>\n <div className=\"mobius-radio__extra-content\">{children}</div>\n </div>\n ) : (\n <div ref={contentRef} className=\"mobius-radio__content\">\n {label || children}\n </div>\n )}\n </Label>\n {errorMessage && <ErrorMessage errorMessage={errorMessage} />}\n </>\n );\n};\n\nRadio.displayName = \"Radio\";\nexport { Radio };\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ReactElement, ReactNode, RefAttributes } from \"react\";\nimport {\n Children,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useId,\n useRef,\n useState,\n} from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { Validation } from \"../../types\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { HTMLElementEvent } from \"../../types/events\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport type { RadioOverflowInfo } from \"./Radio\";\n\nexport type RadioGroupElementType = HTMLDivElement;\n\nexport interface RadioGroupProps\n extends DOMProps, Validation, RefAttributes<RadioGroupElementType> {\n children: ReactNode;\n className?: string;\n orientation?: \"horizontal\" | \"vertical\";\n errorMessage?: string;\n // Callback that fires when select changes\n onChange?: (event: HTMLElementEvent<HTMLInputElement>) => void;\n /**\n * Automatically change orientation from horizontal to vertical when any Radio label overflows.\n * Only applies when orientation is set to \"horizontal\".\n */\n autoStack?: boolean;\n // Defines a string value that labels the current element.\n \"aria-label\"?: string;\n // Identifies the element (or elements) that labels the current element.\n \"aria-labelledby\"?: string;\n // Identifies the element that provides an error message for the object.\n \"aria-errormessage\"?: string;\n // Identifies the element (or elements) that describes the object.\n \"aria-describedby\"?: string;\n // Whether user input is required on the input before form submission.\n isRequired?: boolean;\n // Whether the input is disabled.\n isDisabled?: boolean;\n // Whether the input can be selected but not changed by the user.\n isReadOnly?: boolean;\n // The default value (uncontrolled).\n defaultValue?: string;\n // The content to display as the label.\n label?: ReactNode;\n /**\n * The value of the radio button, used when submitting an HTML form.\n * See [MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio#Value).\n */\n value?: string;\n name?: string;\n}\n\nconst getDefaultVal = (children: ReactNode, defaultValue?: string) => {\n if (Array.isArray(children) && defaultValue) {\n const option = children?.find(item => item.props.value === defaultValue);\n\n if (!option) return \"\";\n\n return option.props.value;\n }\n\n return \"\";\n};\n\nconst RadioGroup = ({ ref, ...props }: RadioGroupProps) => {\n const {\n label,\n isDisabled = false,\n isRequired,\n isInvalid,\n orientation = \"vertical\",\n className,\n errorMessage,\n children,\n defaultValue,\n value,\n isReadOnly,\n name,\n onChange,\n autoStack = false,\n ...rest\n } = props;\n const defaultSelected = getDefaultVal(children, value || defaultValue);\n const [selected, setSelected] = useState<string>(defaultSelected);\n const overflowsRef = useRef<Record<string, RadioOverflowInfo>>({});\n const [hasOverflow, setHasOverflow] = useState(false);\n\n // Handle controlled behavior - update state when value prop changes\n useEffect(() => {\n if (value !== undefined) {\n setSelected(value);\n }\n }, [value]);\n\n // Handle overflow detection and auto-stack if needed\n const handleOverflow = useCallback(\n (radioValue: string, overflow: RadioOverflowInfo) => {\n overflowsRef.current = {\n ...overflowsRef.current,\n [radioValue]: overflow,\n };\n\n // Check if any radio has overflow\n const anyOverflow = Object.values(overflowsRef.current).some(\n o => o.vertical || o.horizontal,\n );\n\n if (anyOverflow !== hasOverflow) {\n setHasOverflow(anyOverflow);\n }\n },\n [hasOverflow],\n );\n\n // Determine effective orientation (auto-stack if needed)\n const effectiveOrientation =\n autoStack && orientation === \"horizontal\" && hasOverflow\n ? \"vertical\"\n : orientation;\n\n const validationClasses = useValidationClasses({ isInvalid });\n const radioClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n [`--is-${effectiveOrientation}`]: true,\n [className || \"\"]: true,\n };\n const radioGroupClasses = classNames(\n \"mobius\",\n \"mobius-radio-group\",\n radioClasses,\n validationClasses,\n );\n const radioWrapperClasses = classNames(\"mobius-radio__wrapper\", {\n [`--is-${effectiveOrientation}`]: true,\n });\n const labelClasses = classNames(radioClasses, validationClasses);\n const errorMessageId = useId();\n const defaultNameAttrId = useId();\n const nameAttribute = name || defaultNameAttrId;\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n const labelId = useId();\n\n return (\n <div\n {...rest}\n aria-describedby={describedBy}\n aria-disabled={isDisabled}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-label={props[\"aria-label\"]}\n aria-labelledby={props[\"aria-labelledby\"] || labelId}\n aria-orientation={effectiveOrientation}\n aria-readonly={isReadOnly}\n aria-required={isRequired}\n ref={ref}\n className={radioGroupClasses}\n role=\"radiogroup\"\n >\n <Stack gap=\"xs\">\n {label && (\n <Label htmlFor={name} id={labelId} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={radioWrapperClasses}>\n {Children.map(children, child => {\n if (isValidElement(child)) {\n const childValue = (child.props as { value?: string }).value;\n return cloneElement(\n child as ReactElement,\n {\n orientation: effectiveOrientation,\n groupDisabled: isDisabled,\n name: nameAttribute,\n selected: selected || defaultSelected, // in case state does not update\n setSelected,\n isRequired,\n \"aria-describedby\": describedBy,\n onChange,\n onOverflow: childValue\n ? (overflow: RadioOverflowInfo) =>\n handleOverflow(childValue, overflow)\n : undefined,\n } as Record<string, unknown>,\n );\n }\n\n return child;\n })}\n </div>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n </div>\n );\n};\n\nRadioGroup.displayName = \"RadioGroup\";\nexport { RadioGroup };\n", "export * from \"./Radio\";\nexport * from \"./RadioGroup\";\n", "import type { ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport interface SegmentGroupProps extends DOMProps {\n className?: string;\n horizontal?: boolean;\n gap?: \"size-xs\" | \"size-s\" | \"size-m\" | \"size-l\" | \"size-xl\" | \"size-xxl\";\n children?: ReactNode;\n}\n\nconst SegmentGroup = (props: SegmentGroupProps) => {\n const { children, horizontal, gap, className, ...rest } = props;\n\n const gapClass = gap ? `gap-${gap}` : \"\";\n const classes = classNames(\n \"mobius\",\n \"mobius-segment-group\",\n className,\n { \"--is-horizontal\": horizontal },\n gapClass,\n );\n\n return (\n <div className={classes} {...rest}>\n {children}\n </div>\n );\n};\n\nSegmentGroup.displayName = \"SegmentGroup\";\nexport { SegmentGroup };\n", "import type { ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Segment.css\";\n\nexport interface SegmentProps extends DOMProps {\n className?: string;\n heading?: string;\n /** Background colour for Segment */\n colour?: \"subtle\" | \"primary\" | \"secondary\";\n /** When inverted, text is white. Use on darker backgrounds. */\n inverted?: boolean;\n children?: ReactNode;\n}\n\nconst Segment = (props: SegmentProps) => {\n const { heading, children, colour, inverted, className, ...rest } = props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-segment\",\n colour,\n { inverted },\n className,\n );\n\n return (\n <div className={classes} {...rest}>\n {heading && <div className=\"mobius-segment__heading\">{heading}</div>}\n {children}\n </div>\n );\n};\n\nSegment.displayName = \"Segment\";\nexport { Segment };\n", "export * from \"./SegmentGroup\";\nexport * from \"./Segment\";\n", "\"use client\";\n\nimport { chevronDown } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport type { ChangeEvent, ReactElement, RefAttributes } from \"react\";\nimport { useId } from \"react\";\nimport { useValidationClasses } from \"../../hooks\";\nimport type { UseLabelProps } from \"../../hooks/useLabel\";\nimport { useLabel } from \"../../hooks/useLabel\";\nimport type { DOMProps, Validation } from \"../../types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Icon } from \"../Icon\";\nimport { Label } from \"../Label\";\nimport type { OptionProps } from \"../Option\";\nimport { Stack } from \"../Stack\";\nimport \"./Select.css\";\n\nexport type SelectElementType = HTMLSelectElement;\nexport interface SelectProps\n extends\n UseLabelProps,\n Validation,\n DOMProps,\n RefAttributes<SelectElementType> {\n name?: string;\n onChange?: (e: ChangeEvent<HTMLSelectElement>) => void;\n value?: string;\n defaultValue?: string;\n className?: string;\n errorMessage?: string;\n children?: ReactElement<OptionProps>[] | ReactElement<OptionProps>;\n \"aria-describedby\"?: string;\n isDisabled?: boolean;\n}\n\nconst Select = ({ ref, ...props }: SelectProps) => {\n const {\n label,\n onChange,\n isInvalid,\n errorMessage,\n isDisabled = false,\n isRequired,\n ...otherProps\n } = props;\n\n const { labelProps, fieldProps } = useLabel({\n label,\n ...otherProps,\n });\n\n const validationClasses = useValidationClasses({ isInvalid });\n\n const stateClasses = {\n \"--is-disabled\": isDisabled,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n };\n\n const sharedClasses = classNames(validationClasses, stateClasses);\n\n const wrapperClasses = classNames(\n \"mobius-select__wrapper\",\n sharedClasses,\n otherProps.className,\n );\n const selectClasses = classNames(\n \"mobius-select\",\n sharedClasses,\n otherProps.className,\n );\n const labelClasses = classNames(\n \"mobius-label\",\n sharedClasses,\n otherProps.className,\n );\n const iconClasses = classNames(\"mobius-select__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n props[\"aria-describedby\"],\n ]);\n\n const handleChange = (e: ChangeEvent<HTMLSelectElement>) => {\n if (onChange) {\n onChange(e);\n }\n };\n\n return (\n <Stack className=\"mobius mobius-select__outer\" gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {label}\n </Label>\n )}\n <div className={wrapperClasses}>\n <select\n {...otherProps}\n {...fieldProps}\n ref={ref}\n multiple={false}\n className={selectClasses}\n disabled={isDisabled}\n aria-invalid={!!errorMessage}\n aria-describedby={describedBy}\n aria-required={isRequired}\n required={isRequired}\n onChange={handleChange}\n />\n <span className={iconClasses}>\n <Icon icon={chevronDown} />\n </span>\n </div>\n {errorMessage && (\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n )}\n </Stack>\n );\n};\n\nSelect.displayName = \"Select\";\nexport { Select };\n", "export * from \"./Select\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { ChangeEvent } from \"react\";\nimport { useRef, useState } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { UseLabelProps } from \"../../hooks\";\nimport { useLabel } from \"../../hooks\";\nimport { Label } from \"../Label\";\nimport { numberFormatter } from \"./helpers\";\nimport \"./Slider.css\";\n\nexport interface SliderProps extends DOMProps, UseLabelProps {\n label?: string;\n variant?: \"primary\" | \"secondary\";\n className?: string;\n minValue?: number;\n maxValue?: number;\n defaultValue?: number;\n value?: number;\n step?: number;\n isDisabled?: boolean;\n onChange?: (value: number | undefined) => void;\n onChangeEnd?: (value: number | undefined) => void;\n minLabel?: string;\n maxLabel?: string;\n formatOptions?: Intl.NumberFormatOptions;\n}\n\nexport const Slider = (props: SliderProps) => {\n const {\n id,\n className,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n minValue,\n maxValue,\n step = 1,\n defaultValue = 0,\n value,\n onChange,\n onChangeEnd,\n variant = \"primary\",\n minLabel,\n maxLabel,\n formatOptions,\n isDisabled = false,\n } = props;\n const trackRef = useRef(null);\n const [currentValue, setCurrentValue] = useState<number>(\n value || defaultValue || 0,\n );\n const [isDragging, setIsDraggging] = useState<boolean>(false);\n const { labelProps, fieldProps } = useLabel({\n id,\n label,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n });\n const formattedValue = numberFormatter(currentValue, formatOptions);\n\n const classes = classNames(\"mobius\", \"mobius-slider\", className, {\n \"--is-disabled\": isDisabled,\n \"--is-primary\": variant === \"primary\",\n \"--is-secondary\": variant === \"secondary\",\n \"--is-dragging\": isDragging,\n });\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const val = +e.target.value;\n setCurrentValue(val);\n if (onChange) {\n onChange(val);\n }\n };\n\n const handleChangeStart = () => {\n setIsDraggging(true);\n };\n\n const handleChangeEnd = () => {\n setIsDraggging(false);\n if (onChangeEnd) {\n onChangeEnd(currentValue);\n }\n };\n\n return (\n <div className={classes}>\n <div className=\"mobius-slider__label-wrapper\">\n {label && <Label {...labelProps}>{label}</Label>}\n {label && (\n <output style={{ flex: \"1 0 auto\", textAlign: \"end\" }}>\n {formattedValue}\n </output>\n )}\n </div>\n\n {/* The track element holds the visible track line and the thumb. */}\n <div ref={trackRef} className=\"mobius-slider__track-wrapper\">\n <input\n className=\"mobius-slider__track\"\n type=\"range\"\n min={minValue}\n max={maxValue}\n value={currentValue}\n step={step}\n onChange={handleChange}\n autoComplete=\"off\"\n disabled={isDisabled}\n onMouseDown={handleChangeStart}\n onMouseUp={handleChangeEnd}\n onKeyDown={handleChangeStart}\n onKeyUp={handleChangeEnd}\n {...fieldProps}\n />\n </div>\n\n <div className=\"mobius-slider__labels\">\n <div className=\"mobius-slider__min-label\" data-testid=\"min-label\">\n {minLabel}\n </div>\n <div className=\"mobius-slider__max-label\" data-testid=\"max-label\">\n {maxLabel}\n </div>\n </div>\n </div>\n );\n};\n", "export * from \"./Slider\";\n", "import type { RefAttributes } from \"react\";\nimport { Children } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport interface SVGProps extends DOMProps, RefAttributes<SVGSVGElement> {\n children: React.ReactElement<React.SVGProps<SVGSVGElement>>;\n className?: string;\n style?: React.CSSProperties;\n}\nconst SVG = ({ ref, ...props }: SVGProps) => {\n const { children, className, ...otherProps } = props;\n\n const classes = classNames(\"mobius\", \"mobius-svg\", className);\n const svgNode = Children.only(children);\n // Remove originalType and mdxType props\n const { children: svgChildren, viewBox, xmlns } = svgNode.props;\n\n return (\n <svg\n viewBox={viewBox}\n xmlns={xmlns}\n ref={ref}\n {...otherProps}\n className={classes}\n >\n {svgChildren}\n </svg>\n );\n};\n\nSVG.displayName = \"SVG\";\nexport { SVG };\n", "export * from \"./SVG\";\n", "\"use client\";\n\nimport {\n type ChangeEvent,\n type RefAttributes,\n useState,\n useEffect,\n} from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { VisuallyHidden } from \"../VisuallyHidden\";\nimport \"./Switch.css\";\n\nexport type SwitchElementType = HTMLLabelElement;\n\nexport interface SwitchProps\n extends DOMProps, RefAttributes<SwitchElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n checked?: boolean;\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n isDisabled?: boolean;\n}\n\nconst Switch = ({ ref, ...props }: SwitchProps) => {\n const {\n checked = false,\n className,\n onChange,\n isDisabled = false,\n ...otherProps\n } = props;\n const [enabled, setEnabled] = useState<boolean>(checked);\n\n useEffect(() => {\n setEnabled(checked);\n }, [checked]);\n\n const classes = classNames(\n \"mobius\",\n \"mobius-switch\",\n {\n \"mobius-switch--checked\": enabled,\n \"mobius-switch--disabled\": isDisabled,\n },\n className,\n );\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n setEnabled(!enabled);\n if (onChange) {\n onChange(event);\n }\n };\n\n return (\n <label ref={ref} className={classes}>\n <VisuallyHidden>\n <span>{enabled ? \"On\" : \"Off\"}</span>\n </VisuallyHidden>\n <input\n type=\"checkbox\"\n role=\"switch\"\n checked={enabled}\n onChange={handleChange}\n disabled={isDisabled}\n {...otherProps}\n />\n <span className=\"mobius-switch__slider\"></span>\n </label>\n );\n};\n\nSwitch.displayName = \"Switch\";\nexport { Switch };\n", "export * from \"./Switch\";\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Table.css\";\n\nexport type TableElementType = HTMLTableElement;\n\nexport interface TableProps extends DOMProps, RefAttributes<TableElementType> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type TableRef = Ref<TableElementType>;\n\nconst Table = ({ ref, ...props }: TableProps) => {\n const classes = classNames(\"mobius\", \"mobius-table\", props.className);\n\n return <table ref={ref} {...props} className={classes} />;\n};\n\nTable.displayName = \"Table\";\nexport { Table };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface HeadProps extends RefAttributes<HTMLTableSectionElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type HeadRef = Ref<HTMLTableSectionElement>;\n\nconst Head = ({ ref, ...props }: HeadProps) => {\n const classes = classNames(\"mobius\", \"mobius-table__head\", props.className);\n\n return <thead ref={ref} {...props} className={classes} />;\n};\n\nHead.displayName = \"Table.Head\";\nexport { Head };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface BodyProps extends RefAttributes<HTMLTableSectionElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type BodyRef = Ref<HTMLTableSectionElement>;\n\nconst Body = ({ ref, ...props }: BodyProps) => {\n const classes = classNames(\"mobius\", \"mobius-table__body\", props.className);\n\n return <tbody ref={ref} {...props} className={classes} />;\n};\n\nBody.displayName = \"Table.Body\";\nexport { Body };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface FootProps extends RefAttributes<HTMLTableSectionElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type FootRef = Ref<HTMLTableSectionElement>;\n\nconst Foot = ({ ref, ...props }: FootProps) => {\n const classes = classNames(\"mobius\", \"mobius-table__foot\", props.className);\n\n return <tfoot ref={ref} {...props} className={classes} />;\n};\n\nFoot.displayName = \"Table.Foot\";\nexport { Foot };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface RowProps extends RefAttributes<HTMLTableRowElement> {\n children?: ReactNode;\n className?: string;\n}\n\nexport type RowRef = Ref<HTMLTableRowElement>;\n\nconst Row = ({ ref, ...props }: RowProps) => {\n const classes = classNames(\"mobius\", \"mobius-table__row\", props.className);\n\n return <tr ref={ref} {...props} className={classes} />;\n};\n\nRow.displayName = \"Table.Row\";\nexport { Row };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface HeaderCellProps extends RefAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n className?: string;\n colSpan?: number;\n rowSpan?: number;\n}\n\nexport type HeaderCellRef = Ref<HTMLTableCellElement>;\n\nconst HeaderCell = ({ ref, ...props }: HeaderCellProps) => {\n const classes = classNames(\n \"mobius\",\n \"mobius-table__head-cell\",\n props.className,\n );\n\n return <th {...props} ref={ref} className={classes} />;\n};\n\nHeaderCell.displayName = \"Table.HeaderCell\";\nexport { HeaderCell };\n", "import type { Ref, RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\n\nexport interface CellProps extends RefAttributes<HTMLTableCellElement> {\n children?: ReactNode;\n className?: string;\n colSpan?: number;\n rowSpan?: number;\n}\n\nexport type CellRef = Ref<HTMLTableCellElement>;\n\nconst Cell = ({ ref, ...props }: CellProps) => {\n const classes = classNames(\n \"mobius\",\n \"mobius-table__body-cell\",\n props.className,\n );\n\n return <td ref={ref} {...props} className={classes} />;\n};\n\nCell.displayName = \"Table.Cell\";\nexport { Cell };\n", "import { Table as TableComponent } from \"./Table\";\nimport { Head } from \"./Head\";\nimport { Body } from \"./Body\";\nimport { Foot } from \"./Foot\";\nimport { Row } from \"./Row\";\nimport { HeaderCell } from \"./HeaderCell\";\nimport { Cell } from \"./Cell\";\n\nimport type { TableElementType, TableProps, TableRef } from \"./Table\";\nimport type {\n HeadProps as TableHeadProps,\n HeadRef as TableHeadRef,\n} from \"./Head\";\nimport type {\n BodyProps as TableBodyProps,\n BodyRef as TableBodyRef,\n} from \"./Body\";\nimport type {\n FootProps as TableFootProps,\n FootRef as TableFootRef,\n} from \"./Foot\";\nimport type { RowProps as TableRowProps, RowRef as TableRowRef } from \"./Row\";\nimport type {\n HeaderCellProps as TableHeaderCellProps,\n HeaderCellRef as TableHeaderCellRef,\n} from \"./HeaderCell\";\nimport type {\n CellProps as TableCellProps,\n CellRef as TableCellRef,\n} from \"./Cell\";\n\nexport interface TableCompound extends React.FC<TableProps> {\n Head: React.FC<TableHeadProps>;\n Body: React.FC<TableBodyProps>;\n Foot: React.FC<TableFootProps>;\n Row: React.FC<TableRowProps>;\n HeaderCell: React.FC<TableHeaderCellProps>;\n Cell: React.FC<TableCellProps>;\n}\n\nconst Table: TableCompound = Object.assign(TableComponent, {\n Head,\n Body,\n Foot,\n Row,\n HeaderCell,\n Cell,\n});\n\nexport type {\n TableElementType,\n TableProps,\n TableRef,\n TableHeadProps,\n TableHeadRef,\n TableBodyProps,\n TableBodyRef,\n TableFootProps,\n TableFootRef,\n TableRowProps,\n TableRowRef,\n TableHeaderCellProps,\n TableHeaderCellRef,\n TableCellProps,\n TableCellRef,\n};\n\nTable.displayName = \"Table\";\nexport { Table };\n", "import type { ReactNode, RefAttributes } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport \"./Text.css\";\n\nexport type TextElementType = HTMLHeadingElement | HTMLParagraphElement;\nexport type TextVariantType =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"body\"\n | \"small\"\n | \"legal\"\n | \"title\";\nexport type ElementType = \"h1\" | \"h2\" | \"h3\" | \"h4\" | \"p\" | \"span\";\nexport interface TextProps extends DOMProps, RefAttributes<TextElementType> {\n /** HTML element for the text */\n elementType?: ElementType;\n /** Specify font size override */\n variant?: TextVariantType;\n /** Specify compact line height override */\n spacing?: \"loose\" | \"tight\";\n /** Custom class name for setting specific CSS */\n className?: string;\n children: ReactNode;\n style?: React.CSSProperties;\n}\n\nconst getElementType = (\n variant: TextVariantType | undefined,\n elementType: ElementType | undefined,\n) => {\n if (variant) {\n return [\"h1\", \"h2\", \"h3\", \"h4\"].includes(variant) ? variant : \"p\";\n }\n return elementType || \"p\";\n};\n\nconst Text = ({ ref, elementType: Component = \"p\", ...props }: TextProps) => {\n // Remove non-DOM props from element\n const { variant, className, spacing, ...otherProps } = props;\n\n // If a variant is supplied, set the class name and element type\n const elementType = getElementType(variant, Component);\n const variantType = variant || elementType;\n const classes = classNames(\n \"mobius\",\n \"mobius-text\",\n { [`--is-${variantType}`]: variantType },\n { [`--has-line-height-${spacing}`]: spacing },\n className,\n );\n\n return <Component ref={ref} {...otherProps} className={classes} />;\n};\n\nText.displayName = \"Text\";\nexport { Text };\n", "export * from \"./Text\";\n", "import classNames from \"classnames/dedupe\";\nimport type { RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\n\nexport type TextAreaInputElementType = HTMLTextAreaElement;\n\nexport interface InteractionStateProps {\n isSelected?: boolean;\n isDisabled?: boolean;\n}\n\nexport interface TextAreaInputProps\n extends\n DOMProps,\n InteractionStateProps,\n RefAttributes<TextAreaInputElementType> {\n className?: string;\n isReadOnly?: boolean;\n isRequired?: boolean;\n}\n\nconst TextAreaInput = ({ ref, ...props }: TextAreaInputProps) => {\n // Extract interaction props:\n const { isSelected, isDisabled, isReadOnly, isRequired, ...otherProps } =\n props;\n\n const classes = classNames(\n \"mobius\",\n \"mobius-text-area__input\",\n {\n \"--is-disabled\": isDisabled,\n \"--is-selected\": isSelected,\n \"--is-required\": isRequired,\n },\n otherProps.className,\n );\n\n return (\n <textarea\n ref={ref}\n {...otherProps}\n required={isRequired}\n readOnly={isReadOnly}\n className={classes}\n />\n );\n};\n\nTextAreaInput.displayName = \"TextAreaInput\";\nexport { TextAreaInput };\n", "export * from \"./TextAreaInput\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type { RefAttributes } from \"react\";\nimport type { UseTextFieldProps } from \"../../hooks\";\nimport { useTextField, useValidationClasses } from \"../../hooks\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport { Label } from \"../Label\";\nimport { Stack } from \"../Stack\";\nimport { TextAreaInput } from \"../TextAreaInput\";\nimport \"./TextArea.css\";\n\nexport type TextAreaElementType = HTMLTextAreaElement;\n\nexport interface TextAreaProps\n extends UseTextFieldProps, DOMProps, RefAttributes<TextAreaElementType> {\n className?: string;\n errorMessage?: string;\n}\n\nconst TextArea = ({ ref, ...props }: TextAreaProps) => {\n const {\n isDisabled,\n className,\n errorMessage,\n label,\n isInvalid,\n ...otherProps\n } = props;\n\n const { inputProps, labelProps, errorMessageProps } = useTextField(props);\n\n // Set class name for atom, including interaction state\n const classes = classNames(\"mobius\", \"mobius-text-area\", className);\n const validationClasses = useValidationClasses({ isInvalid });\n const inputClasses = classNames(\"mobius-text-area__input\", validationClasses);\n const labelClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n },\n validationClasses,\n );\n\n return (\n <Stack className={classes} gap=\"xs\">\n {label && (\n <Label {...labelProps} className={labelClasses}>\n {props.label}\n </Label>\n )}\n <TextAreaInput\n {...otherProps}\n {...inputProps}\n ref={ref}\n className={inputClasses}\n isDisabled={isDisabled}\n aria-invalid={errorMessage != null}\n />\n <ErrorMessage {...errorMessageProps} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nTextArea.displayName = \"TextArea\";\nexport { TextArea };\n", "export * from \"./TextArea\";\n", "import type { RefAttributes } from \"react\";\nimport { useMemo } from \"react\";\nimport type { TextElementType, TextProps } from \"../Text/Text\";\nimport { Text } from \"../Text/Text\";\n\nexport type HTMLElementType = \"span\" | \"div\";\n\nexport interface TextOrHTMLProps\n extends Omit<TextProps, \"children\">, RefAttributes<TextElementType> {\n /** HTML string to be rendered with dangerouslySetInnerHTML */\n text: string;\n /** Custom class name for the dangerous HTML element */\n htmlClassName?: string;\n /** HTML element type for the dangerous HTML element */\n htmlElementType?: HTMLElementType;\n /** If true, wraps the dangerous HTML element inside a Text component */\n textWrapper?: boolean;\n}\n\nconst TextOrHTML = ({\n ref,\n text,\n htmlClassName,\n htmlElementType = \"span\",\n textWrapper = false,\n ...textProps\n}: TextOrHTMLProps) => {\n const DangerousComponent = htmlElementType;\n\n // Memoize the dangerouslySetInnerHTML object to prevent unnecessary re-renders\n // See: https://github.com/facebook/react/issues/31660\n const dangerousHTML = useMemo(() => ({ __html: text }), [text]);\n\n const dangerousElement = (\n <DangerousComponent\n className={htmlClassName}\n dangerouslySetInnerHTML={dangerousHTML}\n />\n );\n\n if (textWrapper) {\n return (\n <Text ref={ref} {...textProps}>\n {dangerousElement}\n </Text>\n );\n }\n\n return dangerousElement;\n};\n\nTextOrHTML.displayName = \"TextOrHTML\";\nexport { TextOrHTML };\n", "export * from \"./TextOrHTML\";\n", "import type { RefAttributes, ReactNode } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport type { DOMProps } from \"../../types/dom\";\nimport { Flex } from \"../Flex\";\nimport \"./Title.css\";\n\nexport type TitleElementType = HTMLDivElement;\n\nexport interface TitleProps extends DOMProps, RefAttributes<TitleElementType> {\n children?: ReactNode;\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n title: string;\n description: string;\n}\n\nconst Title = ({ ref, ...props }: TitleProps) => {\n const {\n elementType: Element = \"div\",\n title,\n description,\n ...otherProps\n } = props;\n\n const classes = classNames(\"mobius\", \"mobius-title\", otherProps.className);\n const headerClasses = classNames(\"mobius\", \"mobius-title__header\");\n const contentClasses = classNames(\"mobius\", \"mobius-title__description\");\n const containerClasses = classNames(\"mobius\", \"mobius-title__container\");\n\n return (\n <Element ref={ref} {...otherProps} className={classes}>\n <Flex flexDirection=\"column\" className={containerClasses}>\n <p className={headerClasses}>{title}</p>\n <p className={contentClasses}>{description}</p>\n </Flex>\n </Element>\n );\n};\n\nTitle.displayName = \"Title\";\nexport { Title };\n", "export * from \"./Title\";\n", "export { toast } from \"./Toast\";\nexport { Toaster } from \"./Toaster\";\nexport type { ToasterProps } from \"./Toaster\";\nexport type { ToastOptions, ToastVariant, ToastPosition } from \"./types\";\n", "import classNames from \"classnames/dedupe\";\nimport { useEffect, useRef, useState } from \"react\";\nimport { mergeRefs } from \"../../utils\";\nimport {\n REQUIRED_TRUSTPILOT_CLASS_NAME,\n SIMPLYBUSINESS_UNIT_ID,\n SIMPLYBUSINESS_UNIT_IDS,\n TRUSTPILOT_LINKS,\n TRUSTPILOT_WIDGET,\n} from \"./constants\";\nimport type { TrustProps } from \"./types\";\n\nexport const Trust = ({ ref, ...props }: TrustProps) => {\n const {\n elementType: Element = \"div\",\n variant,\n theme,\n locale,\n height,\n width,\n stars,\n className,\n } = props;\n const [isMounted, setIsMounted] = useState(false);\n const trustRef = useRef(null);\n\n const {\n templateId,\n className: variantClassName,\n styles,\n } = TRUSTPILOT_WIDGET[variant];\n const link = TRUSTPILOT_LINKS[locale];\n const businessUnitId =\n SIMPLYBUSINESS_UNIT_IDS[locale] || SIMPLYBUSINESS_UNIT_ID;\n\n const dataProps = {\n \"data-businessunit-id\": businessUnitId,\n \"data-locale\": locale,\n \"data-template-id\": templateId,\n \"data-theme\": theme,\n \"data-style-width\": width || \"100%\",\n \"data-style-height\": height,\n \"data-stars\": stars,\n };\n\n const classes = classNames(\n \"mobius\",\n \"mobius-trust\",\n REQUIRED_TRUSTPILOT_CLASS_NAME,\n {\n [`--is-${theme}`]: theme,\n [variantClassName]: variant,\n },\n className,\n );\n\n useEffect(() => {\n const hasTrustpilotLoaded =\n trustRef.current &&\n window?.Trustpilot &&\n window?.Trustpilot.loadFromElement;\n // If window.Trustpilot is available it means that we need to load the TrustBox from our ref.\n if (isMounted && hasTrustpilotLoaded) {\n window.Trustpilot.loadFromElement(trustRef.current, true);\n }\n }, [isMounted]);\n\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Load `<Trust>` client-side only to avoid SSR hydration issues\n if (!isMounted) return <div style={styles} />;\n\n return (\n <Element\n ref={mergeRefs([trustRef, ref])}\n className={classes}\n style={styles}\n {...dataProps}\n >\n <a\n href={link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mobius-trust__link\"\n >\n Trustpilot\n </a>\n </Element>\n );\n};\n", "import type { RefAttributes } from \"react\";\nimport type { DOMProps } from \"../../types/dom\";\nimport type { TRUSTPILOT_WIDGET } from \"./constants\";\n\ndeclare global {\n interface Window {\n Trustpilot: any;\n }\n}\n\nexport type TrustElementType = HTMLDivElement;\n\nexport interface TrustProps extends DOMProps, RefAttributes<TrustElementType> {\n /** Custom class name for setting specific CSS */\n className?: string;\n elementType?: React.ElementType;\n locale: \"en-US\" | \"en-GB\";\n variant: keyof typeof TRUSTPILOT_WIDGET;\n templateId?: string;\n height?: string;\n width?: string;\n theme: \"dark\" | \"light\";\n stars?: string;\n}\n", "export * from \"./Trust\";\nexport * from \"./types\";\n", "\"use client\";\n\nimport classNames from \"classnames/dedupe\";\nimport type React from \"react\";\nimport type { RefAttributes } from \"react\";\nimport { useEffect, useId, useRef, useState } from \"react\";\nimport { Accordion, TextOrHTML, useBreakpoint } from \"../..\";\nimport type { DOMProps } from \"../../types\";\nimport type { AccordionProps } from \"../Accordion/Accordion\";\nimport type { TextProps } from \"../Text/Text\";\nimport \"./ExpandableText.css\";\n\nexport type ExpandableTextElementType = HTMLDivElement;\n\nexport interface ExpandableTextProps\n extends DOMProps, RefAttributes<ExpandableTextElementType> {\n /** The text content to display (can be plain text or HTML) */\n text: string;\n /** Maximum number of lines to show when collapsed */\n maxLines?: number;\n /** Breakpoint at which collapsing should be applied. If not provided, collapsing is always applied */\n breakpoint?: \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n /** Text for the expand trigger */\n showText?: string;\n /** Text for the collapse trigger */\n hideText?: string;\n /** Custom class name for the container */\n className?: string;\n /** Props to pass to the Text component */\n textProps?: Partial<TextProps>;\n /** Props to pass to the Accordion component */\n accordionProps?: Partial<AccordionProps>;\n /** Callback when expansion state changes */\n onToggle?: (expanded: boolean) => void;\n}\n\nexport const ExpandableText = ({ ref, ...props }: ExpandableTextProps) => {\n const {\n text,\n maxLines = 3,\n breakpoint,\n showText = \"Read more\",\n hideText = \"Read less\",\n className,\n textProps = {},\n accordionProps = {},\n onToggle,\n ...otherProps\n } = props;\n\n const [isExpanded, setIsExpanded] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(false);\n const textRef = useRef<HTMLDivElement>(null);\n const { down } = useBreakpoint();\n\n // Generate unique ID for accessibility\n const baseId = useId();\n const expandButtonId = `expandable-text-expand-${baseId}`;\n\n // Determine if content should be collapsible based on breakpoint\n const shouldCollapse = breakpoint ? down(breakpoint) : true;\n\n useEffect(() => {\n if (!shouldCollapse || !textRef.current) {\n setIsCollapsed(false);\n return;\n }\n\n // Check if text is actually collapsed by comparing scroll height with client height\n const element = textRef.current;\n const isOverflowing = element.scrollHeight > element.clientHeight;\n setIsCollapsed(isOverflowing);\n }, [text, shouldCollapse, maxLines]);\n\n // If breakpoint is specified and we're above it, show full text without collapsible UI\n if (breakpoint && !shouldCollapse) {\n return (\n <div ref={ref} className={className} {...otherProps}>\n <TextOrHTML text={text} textWrapper {...textProps} />\n </div>\n );\n }\n\n const handleAccordionChange = (expanded: boolean) => {\n setIsExpanded(expanded);\n onToggle?.(expanded);\n };\n\n const classes = classNames(\"mobius-expandable-text\", className);\n const textContainerClasses = classNames(\"mobius-expandable-text__content\", {\n \"mobius-expandable-text__content--collapsed\": !isExpanded,\n });\n\n // CSS custom property for dynamic line clamping\n const textContainerStyle = {\n \"--line-clamp\": maxLines,\n } as React.CSSProperties;\n\n return (\n <div\n ref={ref}\n className={classes}\n data-testid=\"expandable-text\"\n {...otherProps}\n >\n <div\n ref={textRef}\n className={textContainerClasses}\n style={textContainerStyle}\n data-testid=\"expandable-text-content\"\n aria-describedby={isCollapsed ? expandButtonId : undefined}\n >\n <TextOrHTML elementType=\"span\" textWrapper text={text} {...textProps} />\n </div>\n {isCollapsed && (\n <Accordion\n showText={showText}\n hideText={hideText}\n headerPosition=\"bottom\"\n onChange={handleAccordionChange}\n onClick={(e?: React.MouseEvent) => {\n e?.stopPropagation();\n }}\n id={expandButtonId}\n {...accordionProps}\n />\n )}\n </div>\n );\n};\n\nExpandableText.displayName = \"ExpandableText\";\n", "export * from \"./ExpandableText\";\n", "\"use client\";\n\nimport type { ChangeEvent, FocusEvent, Ref, RefAttributes } from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport { useIMask } from \"react-imask\";\nimport type { FactoryOpts, InputMask, InputMaskElement } from \"imask\";\nimport type { TextFieldProps } from \"../TextField\";\nimport { TextField } from \"../TextField\";\n\nexport type MaskedFieldElementType = HTMLInputElement;\n\nexport interface MaskedFieldProps\n extends\n Omit<TextFieldProps, \"type\" | \"ref\">,\n RefAttributes<MaskedFieldElementType> {\n mask: FactoryOpts;\n \"data-testid\"?: string;\n /**\n * If true, onChange and onBlur events will emit the masked (formatted) value.\n * If false (default), events will emit the unmasked (raw) value.\n *\n * @example\n * // TelephoneQuestion uses useMaskedValue={true}\n * // User types: 5551234567\n * // onChange receives: \"(555) 123-4567\" (formatted for display/storage)\n *\n * @example\n * // CurrencyQuestion uses useMaskedValue={false}\n * // User types: 1234\n * // User sees: \"1,234\" (with thousands separator)\n * // onChange receives: \"1234\" (raw number for calculations)\n */\n useMaskedValue?: boolean;\n}\n\nexport type MaskedFieldRef = Ref<MaskedFieldElementType>;\n\n/**\n * Creates an onChange handler for IMask's onAccept callback.\n *\n * IMask calls onAccept every time the user types and the mask accepts the input.\n * This handler converts IMask's callback into a standard React onChange event.\n *\n * @param onChange - The onChange handler from parent component\n * @param useMaskedValue - Whether to emit the formatted value or raw value\n * @param name - The input's name attribute (for the synthetic event)\n *\n * @example\n * // TelephoneQuestion (US) - useMaskedValue=true\n * // User types: \"5551234567\"\n * // Emits: \"(555) 123-4567\" (formatted for display)\n * // Use case: Want to store/display the formatted phone number\n *\n * @example\n * // CurrencyQuestion - useMaskedValue=false\n * // User types: \"1234.56\"\n * // User sees: \"1,234.56\" (with formatting)\n * // Emits: \"1234.56\" (raw value for calculations)\n * // Use case: Need numeric value for backend/calculations\n */\nconst useAcceptHandler = (\n onChange: MaskedFieldProps[\"onChange\"],\n useMaskedValue: boolean,\n name?: string,\n) => {\n return useCallback(\n (maskedValue: string, maskInstance: InputMask<FactoryOpts>) => {\n // Exit early if no onChange handler provided\n if (!onChange) {\n return;\n }\n\n // IMask provides two values:\n // 1. maskedValue: The formatted value user sees (e.g., \"(555) 123-4567\")\n // 2. maskInstance.unmaskedValue: The raw value without formatting (e.g., \"5551234567\")\n const formattedValue = maskedValue;\n const rawValue = maskInstance.unmaskedValue;\n\n // Choose which value to emit based on useMaskedValue prop\n const valueToEmit = useMaskedValue ? formattedValue : rawValue;\n\n // Create a synthetic React event that matches the standard onChange signature\n // This allows parent components to handle it like any other input change\n onChange({\n target: { name, value: valueToEmit },\n } as ChangeEvent<HTMLInputElement>);\n },\n [onChange, useMaskedValue, name],\n );\n};\n\n/**\n * Creates a ref callback that forwards the input element to both IMask and the parent component.\n *\n * React allows two ways to pass refs:\n * 1. Ref callback function: (element) => { ... }\n * 2. Ref object: { current: element }\n *\n * This hook handles both cases and also ensures IMask gets the element reference it needs.\n *\n * @param imaskRef - IMask's ref (needs the element to apply masking)\n * @param forwardedRef - Parent component's ref (could be function or object)\n *\n * @example\n * // Parent uses callback ref\n * <MaskedField ref={(el) => console.log(el)} />\n *\n * @example\n * // Parent uses useRef\n * const inputRef = useRef(null);\n * <MaskedField ref={inputRef} />\n */\nconst useCombinedRef = (\n imaskRef: React.MutableRefObject<InputMaskElement | null>,\n forwardedRef?: MaskedFieldRef,\n) => {\n return useCallback(\n (element: HTMLInputElement | null) => {\n // First, give the element to IMask so it can apply masking\n imaskRef.current = element;\n\n // Then forward the element to the parent component's ref\n // Handle both callback refs and ref objects\n\n // Case 1: Parent passed a callback ref function\n if (typeof forwardedRef === \"function\") {\n forwardedRef(element);\n }\n // Case 2: Parent passed a ref object (from useRef)\n else if (forwardedRef) {\n forwardedRef.current = element;\n }\n // Case 3: No ref was forwarded (forwardedRef is null/undefined)\n // Do nothing - this is fine\n },\n [imaskRef, forwardedRef],\n );\n};\n\n/**\n * Creates an onBlur handler that extracts the correct value from IMask.\n *\n * When the user tabs away or clicks outside the input, we need to emit\n * the current value (either formatted or raw) via the onBlur event.\n *\n * @param onBlur - The onBlur handler from parent component\n * @param maskRef - Reference to the IMask instance (provides current values)\n * @param useMaskedValue - Whether to emit the formatted value or raw value\n * @param name - The input's name attribute (for the synthetic event)\n *\n * @example\n * // TelephoneQuestion - useMaskedValue=true\n * // Input displays: \"(555) 123-4567\"\n * // onBlur emits: \"(555) 123-4567\" (formatted)\n *\n * @example\n * // CurrencyQuestion - useMaskedValue=false\n * // Input displays: \"$1,234.56\"\n * // onBlur emits: \"1234.56\" (raw for validation/submission)\n */\nconst useBlurHandler = (\n onBlur: MaskedFieldProps[\"onBlur\"],\n maskRef: React.MutableRefObject<InputMask<FactoryOpts> | null>,\n useMaskedValue: boolean,\n name?: string,\n) => {\n return useCallback(\n (event: FocusEvent<Element>) => {\n // Exit early if no onBlur handler provided or mask isn't initialized\n if (!onBlur || !maskRef.current) {\n return;\n }\n\n // Extract current values from the IMask instance\n // maskRef.current.value: The formatted value (e.g., \"(555) 123-4567\")\n // maskRef.current.unmaskedValue: The raw value (e.g., \"5551234567\")\n const formattedValue = maskRef.current.value;\n const rawValue = maskRef.current.unmaskedValue;\n\n // Choose which value to emit based on useMaskedValue prop\n const valueToEmit = useMaskedValue ? formattedValue : rawValue;\n\n // Create an enhanced event that preserves the original event properties\n // but overrides the target to include our extracted value\n onBlur({\n ...event,\n target: { ...event.target, name, value: valueToEmit },\n } as FocusEvent<Element>);\n },\n [onBlur, maskRef, useMaskedValue, name],\n );\n};\n\n/**\n * Controlled MaskedField - for use with value prop.\n * Syncs external value changes to IMask via useEffect.\n *\n * Use this when:\n * - The parent component manages the input state\n * - You need to programmatically update the value\n * - You need validation or transformation on every change\n */\nconst ControlledMaskedField = ({\n mask,\n useMaskedValue = false,\n value,\n onChange,\n onBlur,\n name,\n forwardedRef,\n ...textFieldProps\n}: Omit<MaskedFieldProps, \"defaultValue\"> & {\n value: string | number;\n forwardedRef?: MaskedFieldRef;\n}) => {\n const onAccept = useAcceptHandler(onChange, useMaskedValue, name);\n const { ref: imaskRef, maskRef, setValue } = useIMask(mask, { onAccept });\n\n const combinedRef = useCombinedRef(imaskRef, forwardedRef);\n const handleBlur = useBlurHandler(onBlur, maskRef, useMaskedValue, name);\n\n // Sync external value changes to IMask\n useEffect(() => {\n if (!maskRef.current) {\n return;\n }\n\n const stringValue = value.toString();\n const currentMasked = maskRef.current.value;\n const currentUnmasked = maskRef.current.unmaskedValue;\n\n // Only update if value actually changed (prevents infinite loops)\n if (currentMasked !== stringValue && currentUnmasked !== stringValue) {\n setValue(stringValue);\n }\n }, [value, maskRef, setValue, imaskRef]);\n\n return (\n <TextField\n {...textFieldProps}\n ref={combinedRef}\n name={name}\n onBlur={handleBlur}\n />\n );\n};\n\n/**\n * Uncontrolled MaskedField - for use with defaultValue prop.\n * No value synchronization needed - IMask manages the value internally.\n *\n * Use this when:\n * - You only need the final value on submit\n * - You don't need to react to intermediate changes\n * - You want simpler code without state management\n */\nconst UncontrolledMaskedField = ({\n mask,\n useMaskedValue = false,\n defaultValue,\n onChange,\n onBlur,\n name,\n forwardedRef,\n ...textFieldProps\n}: Omit<MaskedFieldProps, \"value\"> & {\n defaultValue?: string | number;\n forwardedRef?: MaskedFieldRef;\n}) => {\n const onAccept = useAcceptHandler(onChange, useMaskedValue, name);\n const { ref: imaskRef, maskRef } = useIMask(mask, { onAccept });\n\n const combinedRef = useCombinedRef(imaskRef, forwardedRef);\n const handleBlur = useBlurHandler(onBlur, maskRef, useMaskedValue, name);\n\n return (\n <TextField\n {...textFieldProps}\n ref={combinedRef}\n name={name}\n onBlur={handleBlur}\n defaultValue={defaultValue?.toString()}\n />\n );\n};\n\nconst MaskedField = ({ ref: forwardedRef, ...props }: MaskedFieldProps) => {\n const { value, defaultValue, ...rest } = props;\n\n // Check for \"value\" in props (not `value !== undefined`) to maintain consistent\n // controlled/uncontrolled state throughout component lifetime and prevent focus loss.\n // Example: CurrencyQuestion passes value={undefined} initially, then value={5} after typing.\n if (\"value\" in props) {\n return (\n <ControlledMaskedField\n {...rest}\n value={value ?? \"\"}\n forwardedRef={forwardedRef}\n />\n );\n } else {\n return (\n <UncontrolledMaskedField\n {...rest}\n defaultValue={defaultValue}\n forwardedRef={forwardedRef}\n />\n );\n }\n};\n\nMaskedField.displayName = \"MaskedField\";\n\nexport { MaskedField };\n", "\"use client\";\n\nimport loadable from \"@loadable/component\";\nimport { TextField } from \"../TextField\";\nimport type { MaskedFieldProps } from \"./MaskedField\";\n\n/** Lazy-loads MaskedField (and react-imask) so consumers importing only TextField don't bundle react-imask. */\nconst LoadableMaskedField = loadable(() => import(\"./MaskedField\"), {\n resolveComponent: mod => mod.MaskedField,\n});\n\nexport function MaskedField(props: MaskedFieldProps) {\n const {\n mask: _mask,\n useMaskedValue: _useMaskedValue,\n \"data-testid\": _dataTestId,\n ref: forwardedRef,\n ...textFieldProps\n } = props;\n return (\n <LoadableMaskedField\n {...props}\n fallback={\n <TextField\n {...textFieldProps}\n ref={forwardedRef}\n type=\"text\"\n isDisabled\n isReadOnly\n />\n }\n />\n );\n}\n\nMaskedField.displayName = \"MaskedField\";\n\nexport type {\n MaskedFieldProps,\n MaskedFieldRef,\n MaskedFieldElementType,\n} from \"./MaskedField\";\n", "export * from \"./Accordion\";\nexport * from \"./AddressLookup\";\nexport * from \"./Alert\";\nexport * from \"./Box\";\nexport * from \"./Breadcrumbs\";\nexport * from \"./Button\";\nexport * from \"./Checkbox\";\nexport * from \"./Combobox\";\nexport * from \"./Container\";\nexport * from \"./DateField\";\nexport * from \"./Divider\";\nexport * from \"./Drawer\";\nexport * from \"./DropdownMenu\";\nexport * from \"./ErrorMessage\";\nexport * from \"./Fieldset\";\nexport * from \"./Flex\";\nexport * from \"./Grid\";\nexport * from \"./Icon\";\nexport * from \"./Image\";\nexport * from \"./Label\";\nexport * from \"./Link\";\nexport * from \"./LinkButton\";\nexport * from \"./List\";\nexport * from \"./LoadingIndicator\";\nexport * from \"./Logo\";\nexport * from \"./Modal\";\nexport * from \"./NumberField\";\nexport * from \"./Option\";\nexport * from \"./PasswordField\";\nexport * from \"./Popover\";\nexport * from \"./Progress\";\nexport * from \"./Radio\";\nexport * from \"./Segment\";\nexport * from \"./Select\";\nexport * from \"./Slider\";\nexport * from \"./Stack\";\nexport * from \"./SVG\";\nexport * from \"./Switch\";\nexport * from \"./Table\";\nexport * from \"./Text\";\nexport * from \"./TextArea\";\nexport * from \"./TextAreaInput\";\nexport * from \"./TextField\";\nexport * from \"./TextOrHTML\";\nexport * from \"./Title\";\nexport * from \"./Toast\";\nexport * from \"./Trust\";\nexport * from \"./ExpandableText\";\nexport * from \"./VisuallyHidden\";\nexport * from \"./MaskedField\";\n", "export interface DOMProps {\n id?: string | undefined;\n}\n", "import type {\n ClipboardEvent,\n CompositionEvent,\n FocusEvent,\n KeyboardEvent,\n} from \"react\";\n\nexport interface KeyboardEvents {\n /** Event called when the value changes (mandatory for controlled components) */\n onKeyUp?: (e: KeyboardEvent) => void;\n\n /** Event called when the value changes (mandatory for controlled components) */\n onKeyDown?: (e: KeyboardEvent) => void;\n}\n\nexport interface ClipboardEvents {\n /** Fired when the user initiates a copy action through the browser's user interface. */\n onCopy?: (e: ClipboardEvent) => void;\n\n /** Fired when the user initiates a cut action through the browser's user interface. */\n onCut?: (e: ClipboardEvent) => void;\n\n /** Fired when the user initiates a paste action through the browser's user interface. */\n onPaste?: (e: ClipboardEvent) => void;\n}\n\nexport interface CompositionEvents {\n /** Fired when a text composition system such as an input method editor completes or cancels the current composition session. */\n onCompositionEnd?: (e: CompositionEvent) => void;\n\n /** Fired when a text composition system such as an input method editor starts a new composition session. */\n onCompositionStart?: (e: CompositionEvent) => void;\n\n /** Fired when a new character is received in the context of a text composition session controlled by a text composition system such as an input method editor. */\n onCompositionUpdate?: (e: CompositionEvent) => void;\n}\n\nexport interface FocusEvents {\n /** Fired when an element has lost focus. */\n onBlur?: (e: FocusEvent) => void;\n\n /** Fired when an element has gained focus. */\n onFocus?: (e: FocusEvent) => void;\n}\n\nexport interface InputEvents {\n /** Event called when the value changes (mandatory for controlled components) */\n onChange?: (value: string) => void;\n}\n\nexport type HTMLElementEvent<T extends HTMLElement> = Event & {\n target: T;\n};\n\nexport interface Validation {\n /** Whether user input is required on the input before form submission. */\n isRequired?: boolean;\n /** Whether the input value is invalid. */\n isInvalid?: boolean;\n}\n", "export type IconDefinition = {\n iconName: string;\n width: number;\n height: number;\n svgPathData: string;\n iconType: \"stroke\" | \"fill\";\n strokeWidth?: number;\n fill?: string | undefined;\n};\n", "export type SizeType = \"xxs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\" | \"xxl\";\n\nexport type SpacingType = SizeType | number;\n", "export * from \"./dom\";\nexport * from \"./events\";\nexport * from \"./icon\";\nexport * from \"./size\";\n", "\"use client\";\n\nexport * from \"./components\";\nexport * from \"./hooks\";\nexport * from \"./types\";\n", "import { error } from \"@simplybusiness/icons\";\nimport classNames from \"classnames/dedupe\";\nimport { TextOrHTML } from \"../..\";\nimport { Icon } from \"../Icon\";\nimport \"./ErrorMessage.css\";\n\nexport interface ErrorMessageProps {\n errorMessage?: string;\n id?: string;\n className?: string;\n}\n\nexport const ErrorMessage = ({\n id,\n errorMessage,\n className,\n}: ErrorMessageProps) => {\n const classes = classNames(\"mobius\", \"mobius-error-message\", className);\n\n if (!errorMessage) return null;\n\n return (\n <div id={id} className={classes} data-testid=\"ErrorMessage\" role=\"alert\">\n <Icon\n icon={error}\n className=\"mobius-error-message__icon\"\n aria-hidden=\"true\"\n />\n <TextOrHTML\n elementType=\"span\"\n className=\"mobius-error-message__text\"\n text={errorMessage}\n />\n </div>\n );\n};\n\nErrorMessage.displayName = \"ErrorMessage\";\n", "export * from \"./ErrorMessage\";\n", "\"use client\";\n\nimport type { ChangeEvent } from \"react\";\nimport { useRef, useId, useState, useEffect } from \"react\";\nimport classNames from \"classnames/dedupe\";\nimport { squareTick, square } from \"@simplybusiness/icons\";\nimport { ErrorMessage } from \"../ErrorMessage\";\nimport type { CheckboxElementType, CheckboxProps } from \"./types\";\nimport { spaceDelimitedList } from \"../../utils/spaceDelimitedList\";\nimport { useValidationClasses } from \"../../hooks\";\nimport { Icon } from \"../Icon\";\nimport { Stack } from \"../Stack\";\nimport \"./Checkbox.css\";\n\nexport const Checkbox = ({ ref, ...props }: CheckboxProps) => {\n const {\n id,\n label,\n isDisabled,\n isRequired,\n isInvalid,\n onChange,\n className,\n errorMessage,\n selected,\n defaultSelected = false,\n isReadOnly,\n isLastItem,\n name,\n value,\n [\"aria-describedby\"]: ariaDescribedBy,\n ...rest\n } = props;\n const [checked, setChecked] = useState<boolean>(defaultSelected);\n const fallbackRef = useRef<HTMLInputElement>(null);\n const refObj = ref || fallbackRef;\n const inputId = useId();\n\n const isControlled = typeof selected === \"boolean\";\n useEffect(() => {\n if (isControlled) {\n setChecked(selected);\n }\n }, [selected, isControlled]);\n\n const validationClasses = useValidationClasses({ isInvalid });\n const sharedClasses = classNames(\n {\n \"--is-disabled\": isDisabled,\n \"--is-selected\": checked,\n \"--is-required\": typeof isRequired === \"boolean\" && isRequired,\n \"--is-optional\": typeof isRequired === \"boolean\" && !isRequired,\n },\n validationClasses,\n );\n // Append an additional wrapper class name to differenitate from input\n const wrapperClasses = classNames(\n \"mobius\",\n \"mobius-checkbox\",\n sharedClasses,\n className,\n );\n const labelClasses = classNames(\"mobius-checkbox__label\", sharedClasses);\n const inputClasses = classNames(\"mobius-checkbox__input\", sharedClasses);\n const iconClasses = classNames(\"mobius-checkbox__icon\", sharedClasses);\n const errorMessageId = useId();\n const shouldErrorMessageShow = errorMessage ? errorMessageId : undefined;\n const describedBy = spaceDelimitedList([\n shouldErrorMessageShow,\n ariaDescribedBy,\n ]);\n const labelId = useId();\n\n const handleChange = (event: ChangeEvent<CheckboxElementType>) => {\n setChecked(!checked);\n if (onChange) {\n onChange(event, isLastItem);\n }\n };\n\n return (\n <Stack gap=\"xs\" className={wrapperClasses}>\n <label className={labelClasses}>\n <input\n aria-describedby={describedBy}\n aria-errormessage={shouldErrorMessageShow}\n aria-invalid={isInvalid}\n aria-labelledby={labelId}\n readOnly={isReadOnly}\n disabled={isDisabled}\n ref={refObj}\n className={inputClasses}\n onChange={handleChange}\n type=\"checkbox\"\n checked={checked}\n required={isRequired}\n id={id || inputId}\n name={name}\n value={value}\n {...rest}\n />\n <Icon\n icon={checked ? squareTick : square}\n size=\"md\"\n className={iconClasses}\n />\n <span id={labelId} className=\"mobius-checkbox__visible-label\">\n {label}\n </span>\n </label>\n <ErrorMessage id={errorMessageId} errorMessage={errorMessage} />\n </Stack>\n );\n};\n\nCheckbox.displayName = \"Checkbox\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAa;AAAb;AAAA;AAAA;AAAO,IAAM,uBAAuB,CAAC,UAAmC;AACtE,YAAM,gBAAyC,CAAC;AAChD,aAAO,KAAK,KAAK,EAAE,QAAQ,SAAO;AAChC,YAAI,MAAM,GAAG,MAAM,QAAW;AAC5B,wBAAc,GAAG,IAAI,MAAM,GAAG;AAAA,QAChC;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AAAA;AAAA;;;ACRA,IAEa;AAFb;AAAA;AAAA;AAEO,IAAM,kBAAkB,CAC7B,YACuB;AACvB,UAAI,OAAO,YAAY,UAAU;AAC/B,eAAO,cAAc,OAAO;AAAA,MAC9B;AAEA,UAAI,OAAO,YAAY,UAAU;AAC/B,eAAO,GAAG,OAAO;AAAA,MACnB;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACXO,SAAS,UACd,MACgB;AAChB,SAAO,WAAS;AACd,SAAK,QAAQ,SAAO;AAClB,UAAI,OAAO,QAAQ,YAAY;AAC7B,YAAI,KAAK;AAAA,MACX,WAAW,OAAO,MAAM;AACtB,QAAC,IAAmC,UAAU;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAfA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACa;AADb;AAAA;AAAA;AACO,IAAM,iBAAiB,MAAM,OAAO,sBAAsB;AAAA;AAAA;;;ACDjE,IAEa;AAFb;AAAA;AAAA;AAEO,IAAM,cAAc,CAAC,SAA+B;AACzD,UAAI,CAAC,MAAM;AACT,eAAO,CAAC;AAAA,MACV;AAEA,aAAO;AAAA,QACL,YAAY,SAAS;AAAA,QACrB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,WAAW,SAAS;AAAA,QACpB,YAAY,SAAS;AAAA,MACvB;AAAA,IACF;AAAA;AAAA;;;AChBA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,mBACd,MACoB;AACpB,SAAO,KAAK,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK;AAC3C;AAJA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;;;ACTA,IAIa,iBA8BA;AAlCb;AAAA;AAAA;AAAA;AACA;AAGO,IAAM,kBAAkB,CAAC,UAA0B;AACxD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI;AAEJ,YAAM,aAAa;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,KAAK,gBAAgB,GAAG;AAAA,QACxB,WAAW,gBAAgB,SAAS;AAAA,QACpC,QAAQ,gBAAgB,MAAM;AAAA,MAChC;AAEA,aAAO,qBAAqB,UAAU;AAAA,IACxC;AAEO,IAAM,aAAa,CACxB,UACwC;AACxC,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,aAAO;AAAA,QACL;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AClEA,mBAGA,aAeI,oBAbE;AALN;AAAA;AAAA;AAAA,oBAAuB;AAEvB;AACA,kBAAO;AAeH;AAbJ,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,cAAU,cAAAA,SAAW,UAAU,eAAe,SAAS;AAE7D,YAAM,CAAC,YAAY,SAAS,IAAI,WAAW,UAAU;AACrD,YAAM,aAAa,gBAAgB,UAAU;AAE7C,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,YACL,GAAG;AAAA,YACH,GAAG;AAAA,UACL;AAAA,UACA,WAAW;AAAA,UACV,GAAG;AAAA;AAAA,MACN;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;AC9BnB;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,aAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACQO,SAAS,KAAK;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAc;AACZ,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AAEA,QAAM,cAAU,eAAAC;AAAA,IACd;AAAA,IACA;AAAA,IACA,eAAe,WAAW;AAAA,IAC1B,UAAU,IAAI;AAAA,IACd;AAAA,IACA;AAAA,MACE,CAAC,GAAG,WAAW,KAAK,GAAG;AAAA,MACvB,CAAC,GAAG,WAAW,OAAO,GAAG,QAAQ;AAAA,MACjC,CAAC,GAAG,WAAW,eAAe,GAAG;AAAA,IACnC;AAAA,EACF;AAEA,QAAM,EAAE,UAAU,OAAO,QAAQ,YAAY,IAAI;AACjD,QAAM,oBAAoB,SAAS,MAAM,GAAG,EAAE,KAAK,GAAG;AAEtD,QAAM,eAAe,GAAG,sBAAsB,iBAAiB,CAAC;AAChE,QAAM,YAAY,SAAS;AAE3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,WAAU;AAAA,MACV,aAAW;AAAA,MACX,WAAW;AAAA,MACX,MAAK;AAAA,MACL,OAAM;AAAA,MACN,SAAS,OAAO,KAAK,IAAI,MAAM;AAAA,MAC/B,OAAO,EAAE,MAAM;AAAA,MACd,GAAG;AAAA,MAEJ;AAAA,qDAAC,WAAO,qBAAU;AAAA,QAClB,6CAAC,UAAK,MAAK,gBAAe,GAAG,aAAa;AAAA;AAAA;AAAA,EAC5C;AAEJ;AA5DA,IAAAC,gBAEA,aA2CIC,qBAzCE,aAEA;AANN;AAAA;AAAA;AAAA,IAAAD,iBAAuB;AAEvB,kBAAO;AA2CH,IAAAC,sBAAA;AAzCJ,IAAM,cAAc;AAEpB,IAAM,wBAAwB,CAAC,QAC7B,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC;AAAA;AAAA;;;ACP3C,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,aAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AAAA;AAAA;;;ACDA,IAEAC,gBAGA,cA2DQC,qBApCK;AA5Bb;AAAA;AAAA;AAEA,IAAAD,iBAAuB;AACvB,IAAAE;AACA,IAAAC;AACA,mBAA4B;AA2DpB,IAAAF,sBAAA;AApCD,IAAM,gBAAgB,CAAC;AAAA,MAC5B;AAAA,MACA,aAAa,cAAc;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAA0B;AACxB,YAAM,kBAAc,eAAAG,SAAW,0BAA0B;AAAA,QACvD,aAAa;AAAA,MACf,CAAC;AACD,YAAM,kBAAc,eAAAA,SAAW,+BAA+B;AAAA,QAC5D,aAAa;AAAA,MACf,CAAC;AACD,YAAM,gBAAgB,CAAC,MAA+B;AACpD,YAAI,SAAS;AACX,kBAAQ,CAAC;AAAA,QACX;AACA,eAAO;AAAA,MACT;AAEA,YAAM,gBAAgB,CAAC,MAAqB;AAC1C,YAAI,EAAE,QAAQ,OAAO,EAAE,QAAQ,SAAS;AACtC,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,gBAAgB;AAClB,eACE;AAAA,UAAC;AAAA;AAAA,YACC,gBAAe;AAAA,YACf,YAAW;AAAA,YACX,WAAU;AAAA,YAEV;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,IAAI;AAAA,kBACJ,WAAW;AAAA,kBACX,SAAS;AAAA,kBACT,WAAW;AAAA,kBACX,MAAK;AAAA,kBACL,UAAU;AAAA,kBACV,iBAAe,CAAC,CAAC;AAAA,kBACjB,iBAAe;AAAA,kBAEf;AAAA,iEAAC,eAAY,WAAU,+BACpB,gBACH;AAAA,oBACA,6CAAC,QAAK,MAAM,0BAAa,WAAW,aAAa;AAAA;AAAA;AAAA,cACnD;AAAA,cACC;AAAA;AAAA;AAAA,QACH;AAAA,MAEJ;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,UACJ,WAAW;AAAA,UACX,SAAS;AAAA,UACT,WAAW;AAAA,UACX,MAAK;AAAA,UACL,UAAU;AAAA,UACV,iBAAe,CAAC,CAAC;AAAA,UACjB,iBAAe;AAAA,UAEf;AAAA,yDAAC,eAAY,WAAU,+BAA+B,gBAAK;AAAA,YAC3D,6CAAC,QAAK,MAAM,0BAAa,WAAW,aAAa;AAAA;AAAA;AAAA,MACnD;AAAA,IAEJ;AAAA;AAAA;;;ACnGA,IAEAC,gBAEA,cACA,qBAQA,kBAoGIC,qBAxES;AAzCb;AAAA;AAAA;AAAA;AAEA,IAAAD,iBAAuB;AAEvB,mBAA2C;AAC3C,0BAAwC;AAOxC;AACA,uBAAO;AAoGH,IAAAC,sBAAA;AAxEG,IAAM,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AAC9D,YAAM;AAAA,QACJ,WAAW;AAAA,QACX,WAAW;AAAA,QACX,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,MAAM;AAAA,QAAC;AAAA,QAClB;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,CAAC,gBAAgB,iBAAiB,QAAI,uBAAS;AAAA,QACnD,MAAM;AAAA,QACN,eAAe;AAAA,MACjB,CAAC;AACD,YAAM,2BAAuB,6CAAwB;AAErD,YAAM,uBAAmB,eAAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN;AAAA,UACE,oBAAoB,eAAe,iBAAiB,CAAC;AAAA,UACrD,aAAa,eAAe;AAAA,QAC9B;AAAA,MACF;AACA,YAAM,8BAA0B,eAAAA;AAAA,QAC9B;AAAA,QACA;AAAA,UACE,aAAa,eAAe;AAAA,QAC9B;AAAA,MACF;AACA,YAAM,qBAAiB,eAAAA,SAAW,6BAA6B;AAAA,QAC7D,aAAa,eAAe;AAAA,MAC9B,CAAC;AAED,YAAM,WAAW,eAAe,OAAO,WAAW;AAElD,YAAM,eAAe,MAAM;AAEzB,YAAI,CAAC,eAAe,QAAQ,QAAQ;AAClC,iBAAO;AAAA,QACT;AACA,YAAI,eAAe,QAAQ,SAAS;AAClC,kBAAQ;AAAA,QACV;AACA,YAAI,UAAU;AACZ,mBAAS,CAAC,eAAe,IAAI;AAAA,QAC/B;AACA,0BAAkB;AAAA,UAChB,MAAM,CAAC,eAAe;AAAA,UACtB,eAAe;AAAA,QACjB,CAAC;AAAA,MACH;AAEA,kCAAU,MAAM;AACd,0BAAkB;AAAA,UAChB,MAAM;AAAA,UACN,eAAe;AAAA,QACjB,CAAC;AAAA,MACH,GAAG,CAAC,SAAS,CAAC;AAGd,YAAM,aAAS,oBAAM;AACrB,YAAM,cAAc,oBAAoB,MAAM;AAC9C,YAAM,YAAY,mBAAmB,MAAM;AAE3C,aACE,8CAAC,SAAI,KAAW,GAAG,MAAM,WAAW,kBACjC;AAAA,2BAAmB,SAClB;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,aAAa;AAAA,YACb,QAAQ;AAAA,YACR;AAAA,YACA,cAAc,eAAe;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WAAW;AAAA,YACX,eAAa,CAAC,eAAe;AAAA,YAC7B,mBAAiB;AAAA,YACjB,MAAK;AAAA,YAEL,uDAAC,SAAI,WAAW,gBAAiB,gBAAM,UAAS;AAAA;AAAA,QAClD;AAAA,QACC,mBAAmB,YAClB;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,QAAQ;AAAA,YACR;AAAA,YACA,cAAc,eAAe;AAAA,YAC7B;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,SAEJ;AAAA,IAEJ;AAEA,cAAU,cAAc;AAAA;AAAA;;;ACtJxB,IAAAC,gBAGA,gBAqBMC,qBAdA;AAVN;AAAA;AAAA;AAAA,IAAAD,iBAAuB;AAGvB,qBAAO;AAqBD,IAAAC,sBAAA;AAdN,IAAM,UAAU,CAAC;AAAA,MACf,oBAAoB,kBAAkB;AAAA,MACtC;AAAA,MACA,GAAG;AAAA,IACL,MAAoB;AAClB,YAAM,cAAU,eAAAC,SAAW,UAAU,kBAAkB,SAAS;AAEhE,aACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,MAAK;AAAA,UACL,oBAAkB;AAAA,UACjB,GAAG;AAAA,UAEJ,uDAAC,SAAI,WAAU,yBAAwB;AAAA;AAAA,MACzC;AAAA,IAEJ;AAEA,YAAQ,cAAc;AAAA;AAAA;;;AC7BtB,IAAAC,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAGAC,eACAC,gBAIA,sBA4DUC,qBAxCJ;AA5BN;AAAA;AAAA;AAAA;AAGA,IAAAF,gBAAmC;AACnC,IAAAC,iBAAuB;AAEvB;AACA,IAAAE;AACA,2BAAO;AA4DG,IAAAD,sBAAA;AAxCV,IAAM,gBAAgB,CAAC,UAA8B;AACnD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,SAAS,UAAU,QAAI,wBAAsB,oBAAI,IAAI,CAAC;AAE7D,YAAM,cAAU,eAAAE,SAAW,UAAU,yBAAyB,SAAS;AAEvE,YAAM,wBAAwB,CAAC,IAAY,WAAoB;AAC7D,mBAAW,UAAQ;AACjB,gBAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,cAAI,QAAQ;AACV,gBAAI,CAAC,eAAe;AAClB,qBAAO,MAAM;AAAA,YACf;AACA,mBAAO,IAAI,EAAE;AAAA,UACf,OAAO;AACL,mBAAO,OAAO,EAAE;AAAA,UAClB;AACA,iBAAO;AAAA,QACT,CAAC;AAED,YAAI,QAAQ;AACV,mBAAS,EAAE;AAAA,QACb,OAAO;AACL,oBAAU,EAAE;AAAA,QACd;AAAA,MACF;AAEA,aACE,6CAAC,SAAI,WAAW,SAAU,GAAG,MAC1B,kBAAQ,IAAI,CAAC,MAAM,UAAU;AAC5B,cAAM,EAAE,IAAI,QAAQ,QAAQ,IAAI;AAChC,cAAM,SAAS,QAAQ,IAAI,EAAE;AAC7B,eACE,8CAAC,0BACC;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,WAAW;AAAA,cACX,UAAU;AAAA,cACV,UAAU;AAAA,cACV,UAAU,CAAAC,YAAU,sBAAsB,IAAIA,OAAM;AAAA,cAEnD;AAAA;AAAA,UACH;AAAA,UACC,QAAQ,QAAQ,SAAS,KAAK,6CAAC,WAAQ;AAAA,aAT3B,EAUf;AAAA,MAEJ,CAAC,GACH;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;ACrF5B,IAAAC,kBAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IAEAC,sBAKAC,eAea,qBASP,SAEA,eAgBA;AAjDN;AAAA;AAAA;AAAA;AAEA,IAAAD,uBAIO;AACP,IAAAC,gBAA+C;AAexC,IAAM,sBAAsB;AAAA,MACjC,EAAE,MAAM,MAAM,OAAO,IAAI;AAAA,MACzB,EAAE,MAAM,MAAM,OAAO,IAAI;AAAA,MACzB,EAAE,MAAM,MAAM,OAAO,IAAI;AAAA,MACzB,EAAE,MAAM,MAAM,OAAO,IAAI;AAAA,MACzB,EAAE,MAAM,MAAM,OAAO,KAAK;AAAA,MAC1B,EAAE,MAAM,OAAO,OAAO,KAAK;AAAA,IAC7B;AAEA,IAAM,UAAmC,EAAE,SAAS,KAAK;AAEzD,IAAM,gBAAgB,CAAC,aAA8B,gBAAwB;AAG3E,YAAM,UAAU,YAAY;AAAA,QAC1B,gBAAc,WAAW,SAAS,cAAc;AAAA,MAClD;AACA,YAAM,WAAW,YAAY,CAAC;AAC9B,YAAM,UAAU,YAAY,YAAY,SAAS,CAAC;AAClD,YAAM,QAAQ,YAAY,UAAU,CAAC;AAErC,UAAI,YAAY,EAAG,QAAO;AAC1B,UAAI,YAAY,GAAI,QAAO;AAE3B,aAAO;AAAA,IACT;AAEA,IAAM,gBAAgB,CACpB,sBACsB;AACtB,YAAM,mBAAe,kCAAY;AACjC,YAAM,cAAc,qBAAqB;AACzC,YAAM,oBAAoB,YAAY,CAAC;AAEvC,YAAM,CAAC,aAAa,cAAc,QAAI;AAAA,QACpC,OAAO,YAAY,WAAW,cAC1B,OAAO,aACP,kBAAkB;AAAA,MACxB;AAEA,+CAAe,UAAU,MAAM,eAAe,OAAO,UAAU,GAAG,OAAO;AAEzE,YAAM,qBAAiB,wCAAkB,aAAa,GAAG;AAIzD,YAAM,wBAAoB;AAAA,QACxB,MACE,CAAC,gBAAgB,YAAY,WAAW,IACpC,oBACA,cAAc,aAAa,cAAc;AAAA,QAC/C,CAAC,cAAc,aAAa,mBAAmB,cAAc;AAAA,MAC/D;AAEA,YAAM,SAAK;AAAA,QACT,CAAC,SAAmB;AAClB,gBAAM,YAAY,YAAY,UAAU,UAAQ,KAAK,SAAS,IAAI;AAClE,cAAI,cAAc,IAAI;AACpB,mBAAO;AAAA,UACT;AACA,gBAAM,eAAe,YAAY;AAAA,YAC/B,UAAQ,KAAK,SAAS,kBAAkB;AAAA,UAC1C;AAEA,iBAAO,gBAAgB;AAAA,QACzB;AAAA,QACA,CAAC,mBAAmB,WAAW;AAAA,MACjC;AAEA,YAAM,WAAO;AAAA,QACX,CAAC,SAAmB;AAClB,gBAAM,YAAY,YAAY,UAAU,UAAQ,KAAK,SAAS,IAAI;AAClE,cAAI,cAAc,IAAI;AACpB,mBAAO;AAAA,UACT;AACA,gBAAM,eAAe,YAAY;AAAA,YAC/B,UAAQ,KAAK,SAAS,kBAAkB;AAAA,UAC1C;AAEA,iBAAO,gBAAgB;AAAA,QACzB;AAAA,QACA,CAAC,mBAAmB,WAAW;AAAA,MACjC;AAEA,aAAO;AAAA,QACL,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;AC/GA,IAAAC,sBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACuBO,SAAS,UAAU;AAAA,EACxB,cAAc;AAAA,EACd,OAAO;AAAA,EACP,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmB;AACjB,QAAM,kBAAc;AAAA,IAClB,CAAC,UAA+C;AAC9C,UAAI,YAAY;AACd;AAAA,MACF;AAEA,gBAAU,KAAK;AACf,gBAAU,KAAK;AAAA,IACjB;AAAA,IACA,CAAC,YAAY,SAAS,OAAO;AAAA,EAC/B;AAEA,WAAS,UAAU;AACjB,QAAI,MAAM;AACR,aAAO;AAAA,IACT;AAEA,QAAI,gBAAgB,KAAK;AACvB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,QAAM,aACJ,gBAAgB,WACZ,EAAE,KAAK,IACP;AAAA,IACE,MAAM,QAAQ;AAAA,EAChB;AAEN,SAAO;AAAA,IACL,aAAa;AAAA,MACX,MAAM,gBAAgB,MAAM,OAAO;AAAA,MACnC,QAAQ,gBAAgB,MAAM,SAAS;AAAA,MACvC,KAAK,gBAAgB,MAAM,MAAM;AAAA,MACjC,UAAU,aAAa,KAAK;AAAA,MAC5B,UAAU,cAAc;AAAA,MACxB,iBAAiB,cAAc;AAAA,MAC/B,MACE,gBAAgB,WAAW,gBAAgB,WAAW,OAAO;AAAA,MAC/D,OACE,gBAAgB,WAAW,gBAAgB,WAAW,QAAQ;AAAA,MAChE,GAAG;AAAA,MACH,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAnFA,IACAC;AADA;AAAA;AAAA;AACA,IAAAA,gBAA4B;AAAA;AAAA;;;ACD5B,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,eAIa;AALb;AAAA;AAAA;AACA,IAAAA,gBAA4C;AAC5C;AAGO,IAAM,oBAAoB,MAAM;AACrC,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,KAAK;AAC9D,YAAM,uBAAmB,sBAAO,KAAK;AAErC,mCAAU,MAAM;AACd,4BAAoB,eAAe,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC;AAEL,YAAM,iBAAiB,OACrB,QACG;AACH,YACE,CAAC,iBAAiB,WAClB,CAAC,oBACD,OAAO,WAAW,eAClB,IAAI,YAAY,MAChB;AACA,gBAAM,EAAE,SAAS,eAAe,IAAI,MAAM,OAAO,iBAAiB;AAElE,2BAAiB,UAAU;AAC3B,cAAI;AACF,gBAAI,IAAI,SAAS;AACf,6BAAe,eAAe,IAAI,OAAO;AAAA,YAC3C;AAAA,UACF,SAASC,QAAO;AACd,oBAAQ,MAAM,kCAAkCA,MAAK;AAAA,UACvD;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,MACF;AAAA,IACF;AAAA;AAAA;;;ACtCA,IAAAC,0BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,eAEAC,sBAgBM,uBACA,8BAEO;AAtBb;AAAA;AAAA;AACA,IAAAD,gBAAiD;AACjD;AACA,IAAAC,uBAAkC;AAClC,IAAAC;AAeA,IAAM,wBAAwB;AAC9B,IAAM,+BAA+B;AAE9B,IAAM,YAAY,CAAC,UAA0B;AAClD,YAAM,EAAE,KAAK,QAAQ,YAAY,QAAQ,QAAQ,IAAI;AACrD,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,wBAAS,KAAK;AAC9D,YAAM,mBAAmB,oBAAoB,WAAW;AACxD,YAAM,EAAE,eAAe,IAAI,kBAAkB;AAE7C,mCAAU,MAAM;AACd,4BAAoB,eAAe,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC;AAGL,YAAM,4BACH,IAAI,WACH;AAAA,QACE,iBAAiB,IAAI,OAAO,EACzB,iBAAiB,WAAW,WAAW,EACvC,QAAQ,MAAM,EAAE;AAAA,MACrB,KACF;AAEF,kDAAkB,EAAE,SAAS,OAAO,CAAC;AAErC,YAAM,WAAO,2BAAY,MAAM;AAC7B,YAAI,SAAS,UAAU;AACvB,iBAAS;AAAA,MACX,GAAG,CAAC,QAAQ,GAAG,CAAC;AAEhB,YAAM,YAAQ,2BAAY,MAAM;AAC9B,YAAI,SAAS,MAAM;AACnB,kBAAU;AAAA,MACZ,GAAG,CAAC,SAAS,GAAG,CAAC;AAGjB,YAAM,kBAAc;AAAA,QAClB,CAAC,UAA+C;AAC9C,cAAI,OAAO;AAGT,kBAAM,eAAe;AAGrB,kBAAM,gBAAgB;AAAA,UACxB;AAEA,cAAI,kBAAkB;AACpB,gBAAI,SAAS,UAAU,OAAO,qBAAqB;AAEnD,uBAAW,MAAM,MAAM,GAAG,yBAAyB;AAAA,UACrD,OAAO;AACL,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,QACA,CAAC,2BAA2B,OAAO,KAAK,gBAAgB;AAAA,MAC1D;AAEA,mCAAU,MAAM;AACd,uBAAe,eAAe;AAC5B,cAAI,UAAU,CAAC,IAAI,SAAS,MAAM;AAChC,kBAAM,eAAe,GAAG;AAExB,iBAAK;AAGL,uBAAW,MAAM;AACf,kBAAI,SAAS,UAAU,IAAI,qBAAqB;AAAA,YAClD,GAAG,CAAC;AAAA,UACN,WAAW,CAAC,UAAU,IAAI,SAAS,MAAM;AACvC,wBAAY;AAAA,UACd;AAAA,QACF;AAEA,aAAK,aAAa;AAAA,MACpB,GAAG,CAAC,aAAa,QAAQ,MAAM,KAAK,cAAc,CAAC;AAEnD,aAAO;AAAA,QACL;AAAA,QACA,OAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;;;ACpGA,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC0BO,SAAS,SAAS;AAAA,EACvB,IAAI;AAAA,EACJ;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,mBAAmB;AACrB,GAAkB;AAChB,MAAI,aAA2C,CAAC;AAChD,MAAI,aAA2C,CAAC;AAEhD,QAAM,kCAA8B,sBAAO,KAAK;AAEhD,QAAM,iBAAa,qBAAM;AACzB,QAAM,KAAK,cAAc;AACzB,QAAM,cAAU,qBAAM;AAEtB,MAAI,OAAO;AACT,qBAAiB,iBAAiB,GAAG,OAAO,IAAI,cAAc,KAAK;AACnE,iBAAa;AAAA,MACX,IAAI;AAAA,MACJ,SAAS,qBAAqB,UAAU,KAAK;AAAA,IAC/C;AAAA,EACF,WACE,CAAC,kBACD,CAAC,aACD,CAAC,4BAA4B,SAC7B;AACA,gCAA4B,UAAU;AACtC,YAAQ;AAAA,MACN;AAAA,IACF;AAAA,EACF;AAEA,eAAa;AAAA,IACX;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,EACrB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AArEA,IACAC;AADA;AAAA;AAAA;AACA,IAAAA,gBAA8B;AAAA;AAAA;;;ACD9B,IAAAC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACKO,SAAS,aAAa,OAA8C;AACzE,QAAM;AAAA,IACJ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,mBAAmB;AAAA,EACrB,IAAI;AACJ,QAAM,EAAE,YAAY,WAAW,IAAI,SAAS,KAAK;AAEjD,QAAM,oBAAgB,qBAAM;AAC5B,QAAM,mBAAmB,EAAE,IAAI,cAAc;AAE7C,QAAM,qBAAiB,qBAAM;AAC7B,QAAM,oBAAoB,EAAE,IAAI,eAAe;AAE/C,QAAM,kBAAkB,mBAAmB;AAAA,IACzC,MAAM,eAAe;AAAA,IACrB,MAAM,gBAAgB;AAAA,IACtB,MAAM,kBAAkB;AAAA,EAC1B,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,MACV,cAAc,MAAM;AAAA,MACpB,OAAO,MAAM;AAAA,MACb,UAAU,MAAM;AAAA,MAChB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,UAAU;AAAA,MACV,iBAAiB,eAAe,OAAO,OAAO;AAAA,MAC9C,gBAAgB,MAAM;AAAA,MACtB,oBAAoB;AAAA,MACpB,qBAAqB,MAAM,mBAAmB;AAAA,MAC9C,MAAM,MAAM;AAAA,MAEZ,MAAM,qBAAqB,UAAU,MAAM,OAAO;AAAA,MAClD,SAAS,qBAAqB,UAAU,MAAM,UAAU;AAAA,MAExD,cAAc,MAAM;AAAA,MACpB,WAAW,MAAM;AAAA,MACjB,WAAW,MAAM;AAAA,MACjB,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM;AAAA,MACnB,WAAW,MAAM;AAAA;AAAA,MAGjB,QAAQ,MAAM;AAAA,MACd,OAAO,MAAM;AAAA,MACb,SAAS,MAAM;AAAA;AAAA,MAGf,kBAAkB,MAAM;AAAA,MACxB,oBAAoB,MAAM;AAAA,MAC1B,qBAAqB,MAAM;AAAA;AAAA,MAG3B,UAAU,MAAM;AAAA;AAAA,MAGhB,eAAe,MAAM;AAAA,MACrB,SAAS,MAAM;AAAA;AAAA,MAGf,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,MAEd,GAAG;AAAA,IACL;AAAA,EACF;AACF;AA7EA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,gBAAsB;AACtB;AACA;AAAA;AAAA;;;ACFA,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,qBAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AAAA;AAAA;;;ACDA,IAIa;AAJb;AAAA;AAAA;AAIO,IAAM,uBAAuB,CAAC,UAAqC;AACxE,YAAM,EAAE,UAAU,IAAI;AAEtB,UAAI,WAAW;AACb,eAAO;AAAA,MACT;AAEA,UAAI,cAAc,OAAO;AACvB,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AChBA,IAAAC,6BAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AAAA;AAAA;;;ACNA,IAEAC,gBAEA,cAsBIC,qBAPE;AAnBN;AAAA;AAAA;AAEA,IAAAD,iBAAuB;AAEvB,mBAAO;AAsBH,IAAAC,sBAAA;AAPJ,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM,EAAE,aAAa,UAAU,SAAS,UAAU,GAAG,WAAW,IAAI;AAEpE,YAAM,cAAU,eAAAC,SAAW,UAAU,gBAAgB,MAAM,SAAS;AACpE,iBAAW,YAAY;AAEvB,aACE,6CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAC3C,UACH;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;AChCpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,gBAGA,cA2BSC,qBAZI;AApBb;AAAA;AAAA;AAEA,IAAAD,iBAAuB;AAGvB,mBAAO;AA2BE,IAAAC,sBAAA;AAZF,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AACtD,YAAM,EAAE,aAAa,UAAU,OAAO,KAAK,GAAG,WAAW,IAAI;AAE7D,YAAM,cAAU,eAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,CAAC,SAAS,GAAG,EAAE,GAAG;AAAA,QACpB;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aAAO,6CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAChE;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACnCpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,gBAEAC,eAEa;AAJb;AAAA;AAAA;AAAA,IAAAD,iBAAuB;AAEvB,IAAAC,gBAA6B;AAEtB,IAAM,yBAAyB,CACpC,WACA,mBACA,cACG;AACH,UAAI,CAAC,UAAW,QAAO;AAEvB,iBAAO,4BAAa,WAAW;AAAA,QAC7B,eAAW,eAAAC;AAAA,UACR,UAAU,MAAiC;AAAA,UAC5C;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAA0B;AAAA,IAC5B;AAAA;AAAA;;;AClBA,IAEAC,iBAeA,kBAsGQC,qBAjEF;AAtDN;AAAA;AAAA;AAAA;AAEA,IAAAD,kBAAuB;AASvB;AAEA,IAAAE;AACA,IAAAC;AACA,IAAAC;AACA;AACA,uBAAO;AAsGC,IAAAH,sBAAA;AAjER,IAAM,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AACvD,YAAM;AAAA,QACJ;AAAA,QACA,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,EAAE,YAAY,YAAY,kBAAkB,IAAI,aAAa;AAAA,QACjE,GAAG;AAAA,QACH,qBAAqB;AAAA,MACvB,CAAC;AAED,YAAM,SAAS,SAAS;AAExB,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAE5D,YAAM,mBAAmB;AAAA,QACvB,iBAAiB;AAAA,QACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,QACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,QACrD,eAAe;AAAA,QACf,CAAC,aAAa,EAAE,GAAG;AAAA,MACrB;AAEA,YAAM,oBAAgB,gBAAAI,SAAW,mBAAmB,gBAAgB;AAEpE,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,UACE,iBAAiB;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AAEA,YAAM,uBAAmB,gBAAAA;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,0BAAsB,gBAAAA;AAAA,QAC1B;AAAA,QACA;AAAA,MACF;AAEA,aACE,8CAAC,SAAM,KAAI,MAAK,WAAW,kBACxB;AAAA,iBAAS,CAAC,UACT,6CAAC,SAAO,GAAG,YAAY,WAAW,cAC/B,iBACH;AAAA,QAEF,8CAAC,SAAI,WAAU,sCACZ;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UACA,8CAAC,SAAI,WAAW,qBACb;AAAA;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACE,GAAG;AAAA,gBACH,GAAG;AAAA,gBACJ;AAAA,gBACA;AAAA,gBACA,WAAW;AAAA;AAAA,YACb;AAAA,YACC;AAAA,cACC;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,aACF;AAAA,UACC;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,WACF;AAAA,QACC,YACC,6CAAC,SAAI,WAAU,+BAA+B,UAAS;AAAA,QAGzD,6CAAC,gBAAc,GAAG,mBAAmB,cAA4B;AAAA,SACnE;AAAA,IAEJ;AAEA,cAAU,cAAc;AAAA;AAAA;;;ACnKxB,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACgBO,SAAS,eAAe,OAA4B;AACzD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,aAAa,YAAY;AAAA,IACzB,GAAG;AAAA,EACL,IAAI;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,YAAY;AAAA,MACd;AAAA,MACC,GAAG;AAAA,MAEH;AAAA;AAAA,EACH;AAEJ;AA5CA,IAyBIC;AAzBJ;AAAA;AAAA;AAyBI,IAAAA,uBAAA;AAAA;AAAA;;;ACzBJ,IAAAC,uBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACOO,SAAS,cACd,SACqC;AACrC,MAAI,CAAC,QAAS,QAAO;AACrB,SACE,OAAO,QAAQ,CAAC,MAAM,YACtB,aAAa,QAAQ,CAAC,KACtB,QAAQ,CAAC,EAAE,YAAY,UACvB,aAAa,QAAQ,CAAC,KACtB,QAAQ,CAAC,EAAE,YAAY;AAE3B;AAQO,SAAS,cACd,SACA,YACoB;AACpB,MAAI,cAAc,OAAO,GAAG;AAC1B,WAAO,QACJ,IAAI,kBAAgB;AAAA,MACnB,GAAG;AAAA,MACH,SAAS,YAAY,QAAQ;AAAA,QAAO,YAClC,eAAe,MAAM,EAClB,YAAY,EACZ,SAAS,WAAW,YAAY,CAAC;AAAA,MACtC;AAAA,IACF,EAAE,EACD,OAAO,iBAAe,YAAY,QAAQ,SAAS,CAAC;AAAA,EACzD;AAEA,SAAO,QAAQ;AAAA,IAAO,YACpB,eAAe,MAAM,EAAG,YAAY,EAAE,SAAS,WAAW,YAAY,CAAC;AAAA,EACzE;AACF;AA9CA,IAoBa,gBAGA,gBA6BA;AApDb,IAAAC,cAAA;AAAA;AAAA;AAoBO,IAAM,iBAAiB,CAAC,WAC7B,OAAO,WAAW,WAAW,SAAS,QAAQ;AAEzC,IAAM,iBAAiB,CAAC,WAC7B,OAAO,WAAW,WAAW,SAAS,QAAQ;AA4BzC,IAAM,oBAAoB,CAAC,QAAgB,UAChD,GAAG,MAAM,IAAI,MACV,KAAK,EACL,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE,CAAC;AAAA;AAAA;;;ACzD5B,IAAAC,gBACAC,iBA2CQC,sBAvCK;AALb;AAAA;AAAA;AAAA,IAAAF,iBAAkC;AAClC,IAAAC,kBAAuB;AACvB,IAAAE;AA0CQ,IAAAD,uBAAA;AAvCD,IAAM,SAAS,CAA2B;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,IACF,MAA8B;AAC5B,YAAM,gBAAY,uBAAsB,IAAI;AAC5C,YAAM,cAAc,eAAe,MAAM,KAAK;AAC9C,YAAM,SAAS;AAAA,QACb,sBAAsB;AAAA,QACtB;AAAA,MACF;AAEA,oCAAU,MAAM;AACd,YACE,iBACA,UAAU,WACV,UAAU,QAAQ,gBAClB;AACA,oBAAU,QAAQ,eAAe,EAAE,OAAO,UAAU,CAAC;AAAA,QACvD;AAAA,MACF,GAAG,CAAC,aAAa,CAAC;AAElB,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK;AAAA,UACL,MAAK;AAAA,UACL,eAAa;AAAA,UAEb;AAAA,UACA,iBAAe;AAAA,UACf,aAAa,MAAM,eAAe,MAAM;AAAA,UACxC,eAAW,gBAAAE,SAAW,2BAA2B,WAAW;AAAA,YAC1D,2CAA2C;AAAA,UAC7C,CAAC;AAAA,UAEA,4BACC,8CAAC,mBAAgB,QAAgB,eAA8B,IAE/D,eAAe,MAAM;AAAA;AAAA,QAXlB,eAAe,MAAM;AAAA,MAa5B;AAAA,IAEJ;AAAA;AAAA;;;AClDA,IAAAC,iBAoEWC,sBA3DL,cA0BO;AAnCb;AAAA;AAAA;AAAA,IAAAD,kBAAuB;AACvB;AAMA,IAAAE;AA6DW,IAAAD,uBAAA;AA3DX,IAAM,eAAe,CACnB,QACA,OACA,eACW;AACX,UAAI;AACJ,UAAI,OAAO,WAAW,YAAY,OAAO,GAAI,OAAM,OAAO;AAAA,eACjD,OAAO,WAAW,SAAU,OAAM,GAAG,OAAO,KAAK,KAAK,OAAO,KAAK;AAAA,eAClE,OAAO,WAAW,SAAU,OAAM;AAAA,UACtC,OAAM,OAAO,KAAK;AAEvB,aAAO,eAAe,SAAY,GAAG,UAAU,IAAI,GAAG,KAAK;AAAA,IAC7D;AAcO,IAAM,UAAU,CAA2B;AAAA,MAChD;AAAA,MACA,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAAuB;AACrB,YAAM,cAAU,gBAAAE,SAAW,yBAAyB;AAAA,QAClD,iCAAiC,CAAC;AAAA,MACpC,CAAC;AAED,eAAS,YACP,QACA,YACA,OACA;AACA,YACE,OAAO,WAAW,YAClB,QAAQ,UACR,OAAO,OAAO,OAAO,UACrB;AACA,iBAAO,OAAO;AAAA,QAChB;AACA,eAAO,cAAc,OAAO,IACxB,GAAG,EAAE,WAAW,UAAU,IAAI,KAAK,KACnC,GAAG,EAAE,WAAW,KAAK;AAAA,MAC3B;AAGA,UAAI,CAAC,QAAQ;AACX,eAAO,8CAAC,SAAI,MAAK,WAAU,IAAQ,WAAW,SAAS;AAAA,MACzD;AAEA,UAAI,WAAW,QAAQ,WAAW,GAAG;AACnC,eACE,8CAAC,SAAI,MAAK,WAAU,IAAQ,WAAW,SACrC,wDAAC,SAAI,WAAU,+BAA8B,wBAAU,GACzD;AAAA,MAEJ;AAEA,aACE,8CAAC,SAAI,MAAK,WAAU,IAAQ,WAAW,SACpC,wBAAc,OAAO,IAClB,QAAQ,IAAI,CAAC,QAAQ,eACnB;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UAEL,mBAAiB,GAAG,EAAE,UAAU,UAAU;AAAA,UAC1C,WAAU;AAAA,UAEV;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,IAAI,GAAG,EAAE,UAAU,UAAU;AAAA,gBAC7B,WAAU;AAAA,gBAET,iBAAO;AAAA;AAAA,YACV;AAAA,YACC,OAAO,QAAQ,IAAI,CAAC,aAAa,UAChC;AAAA,cAAC;AAAA;AAAA,gBAEC,QAAQ;AAAA,gBACR,eACE,qBAAqB,SACrB,0BAA0B;AAAA,gBAE5B;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,IAAI,YAAY,aAAa,YAAY,KAAK;AAAA;AAAA,cATzC,aAAa,aAAa,OAAO,UAAU;AAAA,YAUlD,CACD;AAAA;AAAA;AAAA,QAxBI,OAAO;AAAA,MAyBd,CACD,IACD,OAAO,YAAY,cACjB,QAAQ,IAAI,CAAC,QAAQ,UACnB;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA,eAAe,qBAAqB;AAAA,UACpC;AAAA,UACA;AAAA,UACA;AAAA,UACA,IAAI,YAAY,QAAQ,GAAG,KAAK;AAAA;AAAA,QAN3B,aAAa,QAAQ,KAAK;AAAA,MAOjC,CACD,IACD,MACR;AAAA,IAEJ;AAAA;AAAA;;;AC3HO,SAAS,qBAAqB,SAAsC;AACzE,QAAM,CAAC,kBAAkB,mBAAmB,QAAI;AAAA,IAC9C,WAAW,QAAQ,SAAS,IAAI;AAAA,EAClC;AACA,QAAM,CAAC,uBAAuB,wBAAwB,QAAI,yBAAS,CAAC;AAEpE,WAAS,sBAAsB;AAC7B,UAAM,UAAU,cAAc,OAAO;AAErC,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,QAAI,SAAS;AACX,YAAM,QAAQ,QAAQ,qBAAqB;AAC3C,UAAI,qBAAqB,MAAM,QAAQ,SAAS,GAAG;AACjD,YAAI,0BAA0B,QAAQ,SAAS,GAAG;AAChD;AAAA,QACF;AAEA,4BAAoB,CAAC;AACrB,iCAAyB,wBAAwB,CAAC;AAAA,MACpD,OAAO;AACL,4BAAoB,mBAAmB,CAAC;AAAA,MAC1C;AAAA,IACF,OAAO;AACL,UAAI,qBAAqB,QAAQ,SAAS,GAAG;AAC3C;AAAA,MACF;AACA,0BAAoB,mBAAmB,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,WAAS,0BAA0B;AACjC,UAAM,UAAU,cAAc,OAAO;AAErC,QAAI,qBAAqB,KAAK,0BAA0B,GAAG;AACzD;AAAA,IACF;AAEA,QAAI,SAAS;AACX,UAAI,qBAAqB,GAAG;AAE1B,cAAM,iBAAiB,wBAAwB;AAC/C,cAAM,YAAY,QAAQ,cAAc;AACxC,iCAAyB,cAAc;AACvC,4BAAoB,UAAU,QAAQ,SAAS,CAAC;AAAA,MAClD,OAAO;AACL,4BAAoB,mBAAmB,CAAC;AAAA,MAC1C;AAAA,IACF,OAAO;AACL,0BAAoB,mBAAmB,CAAC;AAAA,IAC1C;AAAA,EACF;AAEA,WAAS,uBAAuB;AAC9B,wBAAoB,CAAC;AACrB,6BAAyB,CAAC;AAAA,EAC5B;AAEA,WAAS,sBAAsB;AAC7B,UAAM,UAAU,cAAc,OAAO;AAErC,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,QAAI,SAAS;AACX,YAAM,iBAAiB,QAAQ,SAAS;AACxC,YAAM,YAAY,QAAQ,cAAc;AACxC,+BAAyB,cAAc;AACvC,0BAAoB,UAAU,QAAQ,SAAS,CAAC;AAAA,IAClD,OAAO;AACL,0BAAoB,QAAQ,SAAS,CAAC;AAAA,IACxC;AAAA,EACF;AAEA,QAAM,iBAAiB,MAAM;AAC3B;AAAA,MACE,OAAO,YAAY,eAAe,QAAQ,SAAS,IAAI;AAAA,IACzD;AACA,6BAAyB,CAAC;AAAA,EAC5B;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAjGA,IAAAC;AAAA;AAAA;AAAA;AAAA,IAAAA,iBAAyB;AAEzB,IAAAC;AAAA;AAAA;;;ACYO,SAAS,mBAA6C;AAAA,EAC3D;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,yBAE5C,MAAS;AACX,QAAM,0BAAsB;AAAA,IAC1B;AAAA;AAAA,IAEA,UAAU,IAAI;AAAA,EAChB;AACA,QAAM,CAAC,WAAW,YAAY,QAAI,yBAAS,KAAK;AAChD,QAAM,CAACC,QAAO,QAAQ,QAAI,yBAAuB,IAAI;AAIrD,QAAM,sBAAkB,uBAAO,YAAY;AAC3C,kBAAgB,UAAU;AAC1B,QAAM,oBAAgB,uBAAO,UAAU;AACvC,gBAAc,UAAU;AAExB,gCAAU,MAAM;AACd,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,EAAE,OAAO,IAAI;AAEnB,UAAM,eAAe,YAAY;AAC/B,mBAAa,IAAI;AACjB,eAAS,IAAI;AACb,UAAI;AACF,YAAI,gBAAgB,SAAS;AAC3B,cAAI,oBAAoB,SAAS,iBAAiB;AAChD,+BAAmB,MAAS;AAC5B;AAAA,UACF;AACA,gBAAM,SAAS,MAAM,gBAAgB,QAAQ,qBAAqB;AAAA,YAChE;AAAA,UACF,CAAC;AACD,6BAAmB,MAAM;AACzB,wBAAc,UAAU,mBAAmB;AAAA,QAC7C,WAAW,SAAS;AAClB,6BAAmB,cAAc,SAAS,mBAAmB,CAAC;AAAA,QAChE,OAAO;AACL,mBAAS,IAAI,MAAM,qBAAqB,CAAC;AAAA,QAC3C;AAAA,MACF,SAAS,GAAY;AACnB,YAAI,aAAa,gBAAgB,EAAE,SAAS,cAAc;AAExD;AAAA,QACF;AACA,iBAAS,CAAU;AAAA,MACrB,UAAE;AACA,qBAAa,KAAK;AAAA,MACpB;AAAA,IACF;AAEA,QAAI,CAAC,qBAAqB,SAAS;AACjC,WAAK,aAAa;AAAA,IACpB,OAAO;AACL,0BAAoB,UAAU;AAAA,IAChC;AAEA,WAAO,MAAM;AACX,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,WAAS,sBAAsB,YAAyC;AACtE,iBAAa,IAAI;AACjB,WAAO,WACJ,KAAK,kBAAkB,EACvB,MAAM,QAAQ,EACd,QAAQ,MAAM,aAAa,KAAK,CAAC;AAAA,EACtC;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAAA;AAAA,IACA,SAASA,UAAS;AAAA,EACpB;AACF;AA3GA,IAAAC,sBACAC;AADA;AAAA;AAAA;AAAA,IAAAD,uBAAkC;AAClC,IAAAC,iBAA4C;AAE5C,IAAAC;AAAA;AAAA;;;ACHA,IAAAC,sBACAC,iBAGAC,gBASA,iBA2VIC,sBAzVE,eA0YO;AAzZb;AAAA;AAAA;AAAA,IAAAH,uBAA6B;AAC7B,IAAAC,kBAAuB;AAGvB,IAAAC,iBAAmD;AACnD;AACA,IAAAE;AACA,IAAAC;AACA;AAEA;AACA;AACA,IAAAC;AACA,sBAAO;AA2VH,IAAAH,uBAAA;AAzVJ,IAAM,gBAAgB,CAA2B;AAAA,MAC/C;AAAA,MACA,GAAG;AAAA,IACL,MAAwB;AACtB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,0BAAsB,uBAAO,KAAK;AACxC,YAAM,kBAAc,uBAAyB,IAAI;AACjD,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,gBAAgB,EAAE;AAC/D,YAAM,CAAC,QAAQ,SAAS,QAAI,yBAAS,KAAK;AAC1C,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAClD,YAAM,EAAE,iBAAiB,uBAAuB,WAAW,OAAAI,OAAM,IAC/D,mBAAmB;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACH,YAAM,CAAC,iBAAiB,kBAAkB,QAAI;AAAA,QAC5CA,QAAO,WAAW;AAAA,MACpB;AACA,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI,qBAAqB,eAAe;AAExC,YAAM,WAAW,OAAO;AACxB,YAAM,gBAAY,sBAAM;AACxB,YAAM,eAAW,sBAAM;AACvB,YAAM,qBAAiB,uBAA8B,IAAI;AACzD,YAAM,wBAAoB,uBAAO,KAAK;AACtC,YAAM,sBAAkB,uBAAO,KAAK;AACpC,YAAM,EAAE,KAAK,IAAI,cAAc;AAC/B,YAAM,WAAW,KAAK,IAAI;AAE1B,oCAAU,MAAM;AACd,2BAAmBA,QAAO,WAAW,YAAY;AAAA,MACnD,GAAG,CAACA,QAAO,YAAY,CAAC;AAGxB,YAAM,gBAAgB,MAAS;AAE7B,cAAM,cAAc,kBAChB,cAAc,eAAe,IAC3B,gBAAgB,CAAC,GAAG,QAAQ,CAAC,IAC7B,gBAAgB,CAAC,IACnB,UACE,cAAc,OAAO,IACnB,QAAQ,CAAC,GAAG,QAAQ,CAAC,IACrB,QAAQ,CAAC,IACX;AAGN,YAAI,OAAO,gBAAgB,UAAU;AACnC,iBAAO;AAAA,QACT;AAGA,eAAO,EAAE,OAAO,IAAI,OAAO,GAAG;AAAA,MAChC;AAEA,YAAM,cAAc,CAAC,MAAkB;AACrC,kBAAU,CAAC;AACX,YAAI,CAAC,mBAAmB,gBAAgB,WAAW,EAAG;AACtD,YAAI,eAAe,SAAS;AAC1B,uBAAa,eAAe,OAAO;AACnC,yBAAe,UAAU;AAAA,QAC3B;AAGA,cAAM,iBACJ,kBAAkB,WAAW,EAAE,kBAAkB;AACnD,YAAI,kBAAkB,SAAS;AAC7B,4BAAkB,UAAU;AAAA,QAC9B;AAGA,YAAI,gBAAgB,WAAW,CAAC,gBAAgB;AAC9C;AAAA,QACF;AAGA,YAAI,gBAAgB;AAClB,oBAAU,IAAI;AACd,0BAAgB,UAAU;AAAA,QAC5B;AAAA,MACF;AAEA,oCAAU,MAAM;AACd,YAAI,CAAC,YAAY,OAAO,aAAa,WAAY;AACjD,cAAM,eAAe,SAAS;AAC9B,YAAI,CAAC,aAAc;AAEnB,cAAM,kBAAkB,MAAM;AAE5B,4BAAkB,UAAU;AAAA,QAC9B;AAEA,qBAAa,iBAAiB,aAAa,eAAe;AAC1D,eAAO,MAAM;AACX,uBAAa,oBAAoB,aAAa,eAAe;AAAA,QAC/D;AAAA,MACF,GAAG,CAAC,QAAQ,CAAC;AAEb,6CAAa,MAAM;AACjB,YAAI,eAAe,SAAS;AAC1B,uBAAa,eAAe,OAAO;AAAA,QACrC;AAAA,MACF,CAAC;AAED,YAAM,oBAAoB,CAAC,MAA2C;AACpE,cAAM,WAAW,EAAE,OAAO;AAC1B,sBAAc,QAAQ;AACtB,2BAAmB,MAAS;AAC5B,wBAAgB,UAAU;AAC1B,sBAAc,IAAI;AAElB,YAAI,CAAC,cAAc;AACjB,oBAAU,IAAI;AAAA,QAChB;AACA,uBAAe;AACf,mBAAW,CAAC;AAAA,MACd;AAEA,YAAM,qBAAqB,CAAC,WAAc;AACxC,cAAM,MAAM,eAAe,MAAM;AAGjC,YAAI,CAAC,OAAO,QAAQ,GAAI;AAExB,YACE,OAAO,WAAW,YAClB,cAAc,UACd,OAAO,YACP,OAAO,OAAO,aAAa,YAC3B;AACA,0BAAgB,UAAU;AAC1B,qBAAW,MAAM;AACf,gBAAI,YAAY,OAAO,aAAa,cAAc,SAAS,SAAS;AAClE,uBAAS,QAAQ,MAAM;AAAA,YACzB;AAAA,UACF,GAAG,CAAC;AACJ,gBAAM,kBAAkB,OAAO,SAAS;AACxC,gCAAsB,eAAe;AACrC,0BACG,KAAK,MAAM;AACV,sBAAU,IAAI;AACd,0BAAc,IAAI;AAAA,UACpB,CAAC,EACA,MAAM,MAAM;AAAA,UAEb,CAAC;AACH;AAAA,QACF;AAGA,4BAAoB,UAAU;AAC9B,wBAAgB,UAAU;AAE1B,sBAAc,KAAK;AACnB,2BAAmB,MAAS;AAC5B,kBAAU,KAAK;AACf,sBAAc,GAAG;AACjB,qBAAa,MAAM;AAAA,MACrB;AAEA,YAAM,iBAAiB,MAAM;AAC3B,YAAI,CAAC,gBAAiB,QAAO;AAC7B,YAAI,cAAc,eAAe,GAAG;AAClC,iBAAO,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AAAA,QACtC;AAEA,eAAO,gBAAgB,CAAC;AAAA,MAC1B;AAEA,YAAM,uBAAuB,MAAM;AACjC,YAAI,CAAC,gBAAiB,QAAO;AAC7B,YAAI,qBAAqB,GAAI,QAAO;AAEpC,YAAI,cAAc,eAAe,GAAG;AAClC,gBAAM,QAAQ,gBAAgB,qBAAqB;AACnD,iBAAO,OAAO,QAAQ,gBAAgB;AAAA,QACxC;AAEA,eAAO,gBAAgB,gBAAgB;AAAA,MACzC;AAEA,YAAM,yBAAyB,MAAM;AACnC,cAAM,SAAS,qBAAqB;AACpC,YAAI,CAAC,OAAQ,QAAO;AAEpB,YAAI,cAAc,eAAe,GAAG;AAClC,iBAAO,GAAG,SAAS,WAAW,qBAAqB,IAAI,gBAAgB;AAAA,QACzE;AAEA,eAAO,GAAG,SAAS,WAAW,gBAAgB;AAAA,MAChD;AAEA,YAAM,aAAa,CAAC,MAAoC;AAGtD,YAAI,CAAC,gBAAgB,SAAS;AAC5B,gBAAM,YAAY,WAAW,KAAK;AAClC,gBAAM,iBAAiB,UAAU,YAAY;AAC7C,gBAAM,oBAAoB,qBAAqB;AAC/C,gBAAM,QAAQ,eAAe,iBAAiB;AAE9C,cAAI,mBAAmB,OAAO,YAAY,GAAG;AAE3C,uBAAW,MAAM;AACf,iCAAmB,iBAAsB;AAAA,YAC3C,GAAG,CAAC;AAAA,UACN,WAAW,cAAc,IAAI;AAE3B,uBAAW,MAAM;AACf,iCAAmB,cAAc,CAAC;AAAA,YACpC,GAAG,CAAC;AAAA,UACN,OAAO;AAEL;AAAA,cACE,gBAAgB;AAAA,YAClB;AACA,uBAAW,MAAM;AACf,4BAAc,EAAE;AAAA,YAClB,GAAG,CAAC;AAAA,UACN;AAAA,QACF;AAEA,uBAAe,UAAU,WAAW,MAAM;AACxC,mBAAS,CAAC;AACV,oBAAU,KAAK;AACf,wBAAc,KAAK;AAAA,QACrB,GAAG,GAAG;AAAA,MACR;AAEA,YAAM,gBAAgB,CAAC,MAA2B;AAChD,gBAAQ,EAAE,KAAK;AAAA,UACb,KAAK;AACH,cAAE,eAAe;AACjB,4BAAgB,UAAU;AAC1B,sBAAU,IAAI;AACd,gCAAoB;AACpB;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,4BAAgB,UAAU;AAC1B,sBAAU,IAAI;AACd,oCAAwB;AACxB;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,4BAAgB,UAAU;AAC1B,sBAAU,IAAI;AACd,iCAAqB;AACrB;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,4BAAgB,UAAU;AAC1B,sBAAU,IAAI;AACd,gCAAoB;AACpB;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,gBAAI,QAAQ;AACV,oBAAM,iBAAiB,qBAAqB,KAAK,eAAe;AAChE,kBAAI,gBAAgB;AAClB,mCAAmB,cAAc;AAAA,cACnC;AAAA,YACF;AACA;AAAA,UACF,KAAK;AACH,cAAE,eAAe;AACjB,0BAAc,EAAE;AAChB,sBAAU,KAAK;AACf,2BAAe;AACf;AAAA,UACF;AAAA,QAEF;AAAA,MACF;AAEA,oCAAU,MAAM;AACd,YAAI,OAAO;AACT,wBAAc,KAAK;AAAA,QACrB;AAAA,MACF,GAAG,CAAC,KAAK,CAAC;AAGV,oCAAU,MAAM;AACd,YAAI,gBAAgB,YAAY;AAC9B,oBAAU,CAAC,CAAC,mBAAmB,gBAAgB,SAAS,CAAC;AAAA,QAC3D;AAAA,MACF,GAAG,CAAC,iBAAiB,cAAc,UAAU,CAAC;AAE9C,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,UACE,gCAAgC;AAAA,UAChC,+BAA+B;AAAA,UAC/B,8BAA8B;AAAA,QAChC;AAAA,QACA;AAAA,MACF;AAEA,YAAM,mBAAmB,MAAM;AAC7B,YAAI,UAAW,QAAO;AACtB,YAAI,CAAC,mBAAmB,gBAAgB,WAAW,GAAG;AACpD,iBAAO,aAAa,qBAAqB;AAAA,QAC3C;AACA,cAAM,QAAQ,cAAc,eAAe,IACvC,gBAAgB,OAAO,CAAC,KAAK,UAAU,MAAM,MAAM,QAAQ,QAAQ,CAAC,IACpE,gBAAgB;AACpB,eAAO,UAAU,aACb,GAAG,KAAK,UAAU,UAAU,IAAI,KAAK,GAAG,eACxC;AAAA,MACN;AAEA,aACE,+CAAC,SAAI,IAAQ,eAAY,4BAA2B,WAAW,SAC7D;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,aAAU;AAAA,YACV,IAAI;AAAA,YACJ,aAAY;AAAA,YACZ,WAAU;AAAA,YAET,2BAAiB;AAAA;AAAA,QACpB;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,WAAU;AAAA,YACV,MAAK;AAAA,YACL,OAAO;AAAA,YACP;AAAA,YACA,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,UAAU;AAAA,YACV,cAAa;AAAA,YACb,oBAAkB,YAAY,WAAW;AAAA,YACzC,qBAAkB;AAAA,YAClB,iBAAc;AAAA,YACd,aAAW;AAAA,YACX,iBAAe;AAAA,YACf,iBAAe;AAAA,YACf,yBACE,qBAAqB,KAAK,SAAY,uBAAuB;AAAA,YAE/D,cAAc;AAAA,YACd,KAAK;AAAA,YACL,cAAc,gBAAgB,mBAAmBD,QAAO;AAAA;AAAA,QAC1D;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ;AAAA,YACA;AAAA,YACA,SAAS;AAAA,YACT;AAAA,YACA;AAAA,YACA,gBAAgB;AAAA,YAChB;AAAA,YACA;AAAA;AAAA,QACF;AAAA,SACF;AAAA,IAEJ;AAEO,IAAM,WAAW;AAAA;AAAA;;;ACzZxB,IAAAE,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AAAA;AAAA;;;ACCO,SAAS,sBACd,UACiC;AACjC,SAAO,MAAM,QAAQ,QAAQ,KAAK,SAAS,KAAK,UAAQ,WAAW,IAAI;AACzE;AANA,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACaA,SAAS,oBACP,EAAE,MAAM,GACR,sBACA;AACA,MAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,KAAK,GAAG;AACnC,UAAM,MAAM,kBAAkB;AAAA,EAChC;AAEA,MAAI,sBAAsB,KAAK,GAAG;AAChC,UAAM,MAAM,MAAM,CAAC,EAAE,WAAW;AAAA,EAClC;AAEA,SAAQ,MAAmC,IAAI,WAAS;AAAA,IACtD,IAAI,KAAK;AAAA,IACT,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,WAAW;AAAA,IACxC,OAAO,KAAK;AAAA;AAAA;AAAA,IAGZ,UACE,KAAK,SAAS,YACV,SACA,YAAY;AACV,YAAM,SAAS,MAAM,qBAAqB,SAAS,KAAK,EAAE;AAC1D,aAAO,oBAAoB,QAAQ,oBAAoB;AAAA,IACzD;AAAA,EACR,EAAE;AACJ;AAvCA,IAAAC,eACAC,gBAkGYC,sBA1DC;AAzCb;AAAA;AAAA;AAAA,IAAAF,gBAAuB;AACvB,IAAAC,iBAAsC;AAEtC,IAAAE;AACA,IAAAC;AAOA,IAAAC;AAwFY,IAAAH,uBAAA;AA1DL,IAAM,gBAAgB,CAAC;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAA0B;AACxB,YAAM,CAACI,QAAO,SAAS,QAAI,yBAAuB,IAAI;AAEtD,YAAM,eAAW;AAAA,QACf,CAAC,aAA2B;AAC1B,cAAI,YAAY,KAAM,WAAU,QAAQ;AACxC,oBAAU,QAAQ;AAAA,QACpB;AAAA,QACA,CAAC,OAAO;AAAA,MACV;AAEA,YAAM,mBAAe;AAAA,QACnB,OAAO,eAAuB;AAC5B,cAAI;AACF,kBAAM,WAAW,MAAM,qBAAqB,OAAO,UAAU;AAC7D,qBAAS,IAAI;AACb,kBAAM,UAAU,oBAAoB,UAAU,oBAAoB;AAClE,iCAAqB;AACrB,mBAAO;AAAA,UACT,SAAS,GAAG;AACV,qBAAS,CAAU;AACnB,mBAAO,CAAC;AAAA,UACV;AAAA,QACF;AAAA,QACA,CAAC,sBAAsB,UAAU,kBAAkB;AAAA,MACrD;AAEA,YAAM,iBAAiB,CAAC,aAA6B;AACnD,iBAAS,IAAI;AAEb,YAAI,OAAO,aAAa,YAAY,CAAC,SAAS,IAAI;AAChD,mBAAS,IAAI,MAAM,4BAA4B,CAAC;AAChD,iBAAO,QAAQ,QAAQ;AAAA,QACzB;AAEA,eAAO,qBACJ,IAAI,SAAS,EAAE,EACf,KAAK,iBAAiB,EACtB,MAAM,QAAQ;AAAA,MACnB;AAEA,YAAM,mBAAoBA,UAAS,uBAAwB;AAE3D,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ;AAAA,UACA,YAAY;AAAA,UACZ;AAAA,UACA,cAAc;AAAA,UACd,MAAM,8CAAC,QAAK,MAAM,sBAAQ;AAAA;AAAA,MAC5B;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;ACxG5B;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,sBAAA;AAAA;AAAA;AAAA;AACA;AACA,IAAAC;AAAA;AAAA;;;ACmBA,SAAS,eAAe,OAAsC;AAC5D,SACE,UAAU,UACV,UAAU,aACV,UAAU,aACV,UAAU;AAEd;AA5BA,IAAAC,eACAC,iBAIA,cAqEQC,sBA5CF;AA9BN;AAAA;AAAA;AAAA,IAAAF,gBAAuD;AACvD,IAAAC,kBAAuB;AAGvB,IAAAE;AACA,mBAAO;AAqEC,IAAAD,uBAAA;AA5CR,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB,SAAS;AAAA,QACT,OAAO;AAAA,QACP;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,UAAI,CAAC,KAAM,QAAO;AAElB,YAAM,UACJ,eAAe,eAAe,WAAW,IAAI,cAAc;AAE7D,YAAM,aACJ,YAAY,YAAY,uBAAuB,eAAe,OAAO;AAEvE,YAAM,cAAU,gBAAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,UAAU,YAAY;AAAA,UACtB,aAAa,YAAY;AAAA,UACzB,aAAa,YAAY;AAAA,UACzB,WAAW,YAAY;AAAA,UACvB,gBAAgB;AAAA,QAClB;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,OAAO;AAAA,QACX,MAAM;AAAA,QACN,SAAS;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAEA,YAAM,oBAAgB,gBAAAA,SAAW,UAAU,sBAAsB;AACjE,YAAM,kBAAc,gBAAAA,SAAW,UAAU,oBAAoB;AAC7D,YAAM,qBAAiB,gBAAAA,SAAW,UAAU,uBAAuB;AAEnE,aACE,+CAAC,WAAQ,KAAU,MAAK,SAAS,GAAG,YAAY,WAAW,SACzD;AAAA,sDAAC,UAAK,WAAW,aACf,wDAAC,QAAK,MAAM,KAAK,OAAO,GAAG,OAAO,YAAY,GAChD;AAAA,QACA,+CAAC,SACE;AAAA,oBAAU,8CAAC,OAAE,WAAW,eAAgB,kBAAO;AAAA,UAChD,8CAAC,SAAI,WAAW,gBAAiB,UAAS;AAAA,WAC5C;AAAA,SACF;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACpFpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBAGA,YAgDIC,sBA9CE;AALN;AAAA;AAAA;AAAA,IAAAD,kBAAuB;AAEvB;AACA,iBAAO;AAgDH,IAAAC,uBAAA;AA9CJ,IAAM,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,MAAgB;AAC3C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,cAAU,gBAAAC,SAAW,UAAU,cAAc,WAAW,SAAS;AAEvE,YAAM,aAAa,qBAAqB;AAAA,QACtC,SAAS,gBAAgB,OAAO;AAAA,QAChC,eAAe,gBAAgB,iBAAiB,QAAQ;AAAA,QACxD,cAAc,gBAAgB,gBAAgB,QAAQ;AAAA,QACtD,YAAY,gBAAgB,cAAc,iBAAiB;AAAA,QAC3D,cAAc,gBAAgB,gBAAgB,gBAAgB;AAAA,QAC9D,eAAe,gBAAgB,iBAAiB,eAAe;AAAA,QAC/D,aAAa,gBAAgB,eAAe,kBAAkB;AAAA,QAC9D;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AAED,aACE,8CAAC,WAAQ,KAAU,OAAO,YAAa,GAAG,YAAY,WAAW,SAAS;AAAA,IAE9E;AAEA,QAAI,cAAc;AAAA;AAAA;;;ACvDlB,IAAAC,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAGAC,gBACAC,iBACA,oBA0BMC,sBAfA;AAhBN;AAAA;AAAA;AAAA;AAGA,IAAAF,iBAAuC;AACvC,IAAAC,kBAAuB;AACvB,yBAAO;AA0BD,IAAAC,uBAAA;AAfN,IAAM,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,MAAwB;AAC3D,YAAM,EAAE,cAAc,YAAY,cAAc,IAAI;AACpD,YAAM,EAAE,SAAS,IAAI,EAAE,UAAU,EAAE,cAAc,UAAU,EAAE;AAC7D,YAAM,EAAE,UAAU,GAAG,WAAW,IAAI;AACpC,YAAM,aAAa,wBAAS,QAAQ,QAAQ;AAG5C,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE,8CAAC,SAAI,KAAW,GAAG,YAAa,GAAG,UAAU,WAAW,SACtD,wDAAC,QACE,qBAAW;AAAA,QAAI,CAAC,OAAO,UACtB;AAAA,UACE;AAAA,UACA;AAAA,YACE,KAAK;AAAA,YACL,WAAW,MAAM,WAAW,SAAS;AAAA,UACvC;AAAA,QACF;AAAA,MACF,GACF,GACF;AAAA,IAEJ;AAEA,gBAAY,cAAc;AAAA;AAAA;;;AC9C1B,IAGAC,gBACAC,iBA+BMC,sBAPA;AA5BN;AAAA;AAAA;AAAA;AAGA,IAAAF,iBAAuC;AACvC,IAAAC,kBAAuB;AAEvB,IAAAE;AA6BM,IAAAD,uBAAA;AAPN,IAAM,iBAAiB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA2B;AACjE,YAAM;AAAA,QACJ,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,gBAAgB,cAAc;AAAA,QAC9B;AAAA,QACA,YACE,8CAAC,OAAI,WAAU,gCAA+B,eAAY,QACvD,eACH;AAAA,QAEF,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,EAAE,UAAU,IAAI;AAAA,QACpB,WAAW;AAAA,UACT,gBAAgB,YAAY,cAAc;AAAA,UAC1C,iBAAiB,cAAc;AAAA,UAC/B,GAAG;AAAA,QACL;AAAA,MACF;AAGA,YAAM,cAAU,gBAAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AAEA,YAAM,QACJ,OAAO,aAAa,WAClB,8CAAC,UAAM,GAAG,WAAY,UAAS,IAE9B,wBAAS,KAAK,QAAQ;AAG3B,aACE,+CAAC,QAAG,WAAW,SACZ;AAAA,yCAAa,OAAO;AAAA,UACnB,GAAI,MAAM;AAAA,UACV,GAAG;AAAA,UACH;AAAA,QACF,CAA4B;AAAA,QAC3B,CAAC,MAAM,aAAa;AAAA,SACvB;AAAA,IAEJ;AAEA,mBAAe,cAAc;AAAA;AAAA;;;AC3E7B,IAAAC,oBAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IACAC,eAYIC,sBAJE;AATN;AAAA;AAAA;AACA,IAAAD,gBAAwB;AACxB,IAAAE;AACA,IAAAC;AAUI,IAAAF,uBAAA;AAJJ,IAAM,UAAU,CAAC,UAAwB;AACvC,YAAM,EAAE,SAAS,IAAI;AAErB,aACE,gFACE;AAAA,sDAAC,SAAI,WAAU,+BACb,wDAAC,QAAK,MAAM,uBAAS,MAAI,MAAC,MAAK,MAAK,GACtC;AAAA,QACA,8CAAC,kBAAe,WAAU,+BAA8B,qBAExD;AAAA,QACC;AAAA,SACH;AAAA,IAEJ;AAAA;AAAA;;;ACvBA,IAAAG,eAKEC,sBADI;AAJN;AAAA;AAAA;AAAA,IAAAD,gBAAqB;AACrB,IAAAE;AACA,IAAAC;AAGE,IAAAF,uBAAA;AADF,IAAM,UAAU,MACd,gFACE;AAAA,oDAAC,SAAI,WAAU,+BACb,wDAAC,QAAK,MAAM,oBAAM,MAAK,MAAK,GAC9B;AAAA,MACA,8CAAC,kBAAe,WAAU,+BAA8B,qBAExD;AAAA,OACF;AAAA;AAAA;;;ACZF,IAGAG,iBAMA,eA2DIC,sBAhCE;AApCN;AAAA;AAAA;AAAA;AAGA,IAAAD,kBAAuB;AAEvB;AAEA,IAAAE;AACA;AACA,oBAAO;AA2DH,IAAAD,uBAAA;AAhCJ,IAAM,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM;AAAA,QACJ;AAAA,QACA,aAAa,YAAY;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,OAAO;AAAA,QAEP;AAAA,QAEA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,EAAE,YAAY,IAAI,UAAU,KAAK;AAGvC,iBAAW,gBAAY,gBAAAE;AAAA,QACrB;AAAA,QACA;AAAA,QACA,aAAa,OAAO;AAAA,QACpB,UAAU,IAAI;AAAA,QACd;AAAA,UACE,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,UAChB,gBAAgB,aAAa,CAAC;AAAA,QAChC;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE,+CAAC,aAAU,KAAW,GAAG,aAAc,GAAG,YACvC;AAAA,oBAAY,8CAAC,WAAS,UAAS,IAAa;AAAA,QAC5C,aAAa,CAAC,aAAa,8CAAC,WAAQ;AAAA,SACvC;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;AC3ErB,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,iBACAC,gBAiBA,sBAuGIC,sBArGS;AAtBb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AACvB,IAAAC,iBAUO;AACP;AACA;AACA,IAAAE;AACA,IAAAC;AACA,IAAAC;AAEA,2BAAO;AAuGH,IAAAH,uBAAA;AArGG,IAAM,gBAAgB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA0B;AACtE,YAAM;AAAA,QACJ;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,CAAC;AAAA,QAChB;AAAA,QACA;AAAA,QACA,mBAAmB;AAAA,QACnB,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAmB,YAAY;AAI/D,YAAM,uBAAmB,uBAAO,KAAK;AACrC,YAAM,0BAAsB,uBAAiB,YAAY;AAEzD,oCAAU,MAAM;AAEd,cAAM,aACJ,aAAa,WAAW,oBAAoB,QAAQ,UACpD,aAAa;AAAA,UACX,CAAC,KAAK,UAAU,QAAQ,oBAAoB,QAAQ,KAAK;AAAA,QAC3D;AAEF,YAAI,cAAc,CAAC,iBAAiB,SAAS;AAC3C,sBAAY,YAAY;AACxB,8BAAoB,UAAU;AAC9B,2BAAiB,UAAU;AAAA,QAC7B;AAAA,MACF,GAAG,CAAC,YAAY,CAAC;AAEjB,YAAM,2BAAuB,gBAAAI;AAAA,QAC3B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,UACE,mBAAmB,gBAAgB;AAAA,UACnC,iBAAiB,gBAAgB;AAAA,UACjC,iBAAiB,OAAO,eAAe,aAAa;AAAA,UACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,QACvD;AAAA,MACF;AACA,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,UACE,iBAAiB;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AACA,YAAM,qBAAiB,sBAAM;AAC7B,YAAM,yBAAyB,eAAe,iBAAiB;AAC/D,YAAM,cAAc,mBAAmB;AAAA,QACrC;AAAA,QACA,MAAM,kBAAkB;AAAA,MAC1B,CAAC;AACD,YAAM,cAAU,sBAAM;AAEtB,YAAM,eAAe,CACnB,OACA,aAAa,UACV;AACH,cAAM;AAAA,UACJ,QAAQ,EAAE,OAAO,QAAQ;AAAA,QAC3B,IAAI;AACJ,YAAI,WAAW,CAAC,GAAG,QAAQ;AAE3B,YAAI,CAAC,SAAS;AACZ,qBAAW,SAAS,OAAO,UAAQ,SAAS,KAAK;AAAA,QACnD;AAEA,YAAI,SAAS;AACX,qBAAW,CAAC,GAAG,UAAU,KAAK;AAAA,QAChC;AAEA,YAAI,WAAW,oBAAoB,YAAY;AAC7C,qBAAW,CAAC,KAAK;AAAA,QACnB;AAEA,oBAAY,QAAQ;AACpB,mBAAW,QAAQ;AAAA,MACrB;AAEA,YAAM,gBAAgB,wBAAS,QAAQ,QAAQ;AAC/C,YAAM,eAAe,cAClB;AAAA,QACC,eACE,+BAAe,KAAK,KAAM,MAAuB,SAAS;AAAA,MAC9D,EACC,IAAI;AACP,YAAM,wBACJ,gBAAgB,SAAS,SAAS,aAAa,MAAM,KAAK;AAE5D,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,mBAAiB,MAAM,iBAAiB,KAAK;AAAA,UAC7C;AAAA,UACA,WAAW;AAAA,UACX,MAAK;AAAA,UACL,OACE;AAAA,YACE,4BAA4B,eAAe,wBAAS,MAAM,QAAQ;AAAA,UACpE;AAAA,UAGD;AAAA,qBACC,8CAAC,SAAM,aAAY,QAAO,IAAI,SAAS,WAAW,cAC/C,iBACH;AAAA,YAEF,8CAAC,SAAI,WAAU,kCACZ,wBAAc,IAAI,WAAS;AAC1B,sBAAI,+BAAe,KAAK,GAAG;AAEzB,sBAAM,aAAa,UAAU;AAC7B,sBAAM,kBACJ,cACC,oBAAoB,yBAAyB,CAAC;AAEjD,sBAAM,aAAa,MAAM;AAKzB,2BAAO;AAAA,kBACL;AAAA,kBACA;AAAA,oBACE,YAAY;AAAA,oBACZ;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA,UAAU,SAAS,SAAS,WAAW,KAAK;AAAA,oBAC5C,UAAU,WAAW,YAAY;AAAA,oBACjC,oBAAoB;AAAA,kBACtB;AAAA,gBACF;AAAA,cACF;AAEA,qBAAO;AAAA,YACT,CAAC,GACH;AAAA,YACC,gBACC,8CAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA;AAAA;AAAA,MAElE;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;ACnL5B,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA,IAAAC;AACA;AACA,IAAAC;AAAA;AAAA;;;ACFA,IAMAC,iBAIA,kBA0BSC,sBAVH;AA1BN;AAAA;AAAA;AAMA,IAAAD,kBAAuB;AAGvB;AACA,uBAAO;AA0BE,IAAAC,uBAAA;AAVT,IAAM,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AACvD,YAAM,EAAE,aAAa,UAAU,OAAO,OAAO,MAAM,GAAG,WAAW,IAAI;AAErE,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,YAAY,IAAI;AAAA,QAChB,WAAW;AAAA,MACb;AAEA,aAAO,8CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAChE;AAEA,cAAU,cAAc;AAAA;AAAA;;;ACvCxB,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACa,qBAqBA;AAtBb;AAAA;AAAA;AACO,IAAM,sBAAsB,CAAC,MAAc,WAA4B;AAC5E,YAAM,YAAY,KAAK,MAAM,MAAM;AACnC,YAAM,cAAc,SAAS,OAAO,MAAM,MAAM,IAAI,CAAC,QAAQ,MAAM,IAAI;AACvE,YAAM,UAAqC,CAAC;AAC5C,YAAM,gBAA0B,CAAC;AAEjC,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,gBAAQ,YAAY,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,SAAS,UAAU,CAAC,GAAG,EAAE,IAAI;AAAA,MACxE;AAEA,oBAAc,KAAK,QAAQ,MAAM,GAAG,SAAS,KAAK,MAAM;AACxD,oBAAc;AAAA,SACX,QAAQ,IAAI,IAAI,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,SAAS,KAAK;AAAA,MAClE;AACA,oBAAc;AAAA,SACX,QAAQ,IAAI,IAAI,KAAK,MAAM,OAAO,QAAQ,IAAI,GAAG,SAAS,KAAK;AAAA,MAClE;AAEA,aAAO,cAAc,KAAK,GAAG;AAAA,IAC/B;AAEO,IAAM,cAAc,CAAC,MAAe,SAAS,iBAA0B;AAC5E,UAAI,CAAC,KAAM,QAAO;AAGlB,YAAM,eAAe,oBAAoB,MAAM,MAAM;AAGrD,YAAM,CAAC,SAAS,UAAU,MAAM,IAAI,aAAa,MAAM,GAAG;AAC1D,YAAM,OAAO,SAAS,SAAS,EAAE;AACjC,YAAM,QAAQ,SAAS,UAAU,EAAE;AACnC,YAAM,MAAM,SAAS,QAAQ,EAAE;AAG/B,UAAI,QAAQ,KAAK,QAAQ,IAAI;AAC3B,eAAO;AAAA,MACT;AAGA,YAAM,cAAc,IAAI,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ;AACrD,aAAO,MAAM,KAAK,OAAO;AAAA,IAC3B;AAAA;AAAA;;;AC1CA,IAEAC,iBAEAC,gBAqGIC,sBAlFS,eAGA;AA1Bb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAA4C;AAC5C;AACA,IAAAE;AAKA;AA8FI,IAAAD,uBAAA;AAlFG,IAAM,gBACX;AAEK,IAAM,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,MAAsB;AAC9D,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAACE,QAAO,QAAQ,QAAI,yBAA6B,YAAY;AACnE,YAAM,CAAC,WAAW,YAAY,QAAI,yBAA8B,MAAS;AACzE,YAAM,eAAW,uBAA6B,IAAI;AAClD,YAAM,cAAU,gBAAAC,SAAW,qBAAqB,SAAS;AAIzD,YAAM,eAAe,MAAM,oBAAoB,KAAK,MAAM,IAAI;AAC9D,YAAM,eAAe,MAAM,oBAAoB,KAAK,MAAM,IAAI;AAC9D,YAAM,wBAAwB,eAC1B,oBAAoB,cAAc,MAAM,IACxC;AACJ,YAAM,iBAAiB,QAAQ,oBAAoB,OAAO,MAAM,IAAI;AAEpE,YAAM,kBAAkB,CAACD,WAAmB;AAC1C,iBAASA,MAAK;AACd,qBAAa,IAAI;AAAA,MACnB;AAEA,YAAM,gBAAgB,MAAM;AAC1B,iBAAS,MAAM,YAAY;AAC3B,qBAAa,KAAK;AAAA,MACpB;AAGA,oCAAU,MAAM;AACd,YAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC7B,0BAAgB,qBAAqB,GAAG,EAAE;AAC1C;AAAA,QACF;AACA,YAAI,CAAC,YAAY,KAAK,MAAM,GAAG;AAC7B,0BAAgB,qBAAqB,GAAG,EAAE;AAC1C;AAAA,QACF;AAEA,YAAI,OAAO,KAAK;AACd,gBAAM,UAAU,IAAI,KAAK,GAAG;AAC5B,gBAAM,UAAU,IAAI,KAAK,GAAG;AAC5B,cAAI,UAAU,SAAS;AACrB,4BAAgB,aAAa;AAAA,UAC/B,OAAO;AACL,0BAAc;AAAA,UAChB;AAAA,QACF,OAAO;AACL,wBAAc;AAAA,QAChB;AAAA,MAEF,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC;AAErB,YAAM,WAAW,MAAM;AAGrB,cAAM,eAAe,SAAS,SAAS,cAAc;AAErD,YAAI,CAAC,cAAc;AACjB,0BAAgB,oBAAoB;AAAA,QACtC,OAAO;AACL,wBAAc;AAAA,QAChB;AAAA,MACF;AAGA,YAAM,aAAa,CAAC,UAA+B;AACjD,iBAAS;AACT,mBAAW,SAAS,KAAK;AAAA,MAC3B;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,UAAU,CAAC,UAAU,GAAG,CAAC;AAAA,UAC9B,WAAW;AAAA,UACX,MAAK;AAAA,UACL,KAAK;AAAA,UACL,KAAK;AAAA,UACL,cAAc,gBAAgBA;AAAA,UAC9B;AAAA,UACA,cAAc;AAAA,UACd,OAAO;AAAA,UACP,QAAQ;AAAA,UACP,GAAG;AAAA;AAAA,MACN;AAAA,IAEJ;AAEA,cAAU,cAAc;AAAA;AAAA;;;ACzHxB,IAAAE,kBAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IAQEC,sBADI;AAPN;AAAA;AAAA;AAQE,IAAAA,uBAAA;AADF,IAAM,UAAU,CAAC,EAAE,KAAK,UAAU,GAAG,WAAW,MAC9C,8CAAC,SAAI,KAAW,GAAG,YAAY,WAAU,0BACtC,UACH;AAGF,YAAQ,cAAc;AAAA;AAAA;;;ACbtB,IAAAC,gBAGa;AAHb;AAAA;AAAA;AAAA,IAAAA,iBAA8B;AAGvB,IAAM,oBAAgB,8BAAkC;AAAA,MAC7D,SAAS,MAAM;AAAA,MAAC;AAAA,MAChB,YAAY;AAAA,MACZ,UAAU;AAAA,IACZ,CAAC;AAAA;AAAA;;;ACPD,IAEAC,iBACAC,gBAMA,eAwDIC,sBApDE,yBAEA;AAfN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AACvB,IAAAC,iBAA4D;AAC5D;AACA;AACA,IAAAE;AACA;AAEA,oBAAO;AAwDH,IAAAD,uBAAA;AApDJ,IAAM,0BAA0B;AAEhC,IAAM,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI;AACJ,YAAM,gBAAY,uBAAiC,IAAI;AACvD,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAS,KAAK;AAC9D,YAAM,EAAE,MAAM,IAAI,UAAU;AAAA,QAC1B,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,UACV,WAAW;AAAA,UACX,aAAa;AAAA,QACf;AAAA,MACF,CAAC;AACD,YAAM,WAAW,qCAAiC,sBAAM,CAAC;AACzD,YAAM,WAAW,qBAAiB,sBAAM,CAAC;AAEzC,YAAM,oBAAgB,gBAAAE;AAAA,QACpB;AAAA,QACA;AAAA,QACA,KAAK,SAAS;AAAA,QACd;AAAA,QACA;AAAA,UACE,uBAAuB;AAAA,QACzB;AAAA,MACF;AAEA,oCAAU,MAAM;AACd,4BAAoB,eAAe,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC;AAEL,YAAM,mBAAe;AAAA,QACnB,OAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,UACA;AAAA,QACF;AAAA,QACA,CAAC,OAAO,YAAY,QAAQ;AAAA,MAC9B;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,QAAI,sBAAM;AAAA,UACV,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC;AAAA,UAC/B,UAAU;AAAA,UACV,WAAW;AAAA,UACX,oBAAkB;AAAA,UAClB,mBAAiB;AAAA,UAEjB;AAAA,0DAAC,kBACC,wDAAC,SAAI,IAAI,UAAW,oBAAS,GAC/B;AAAA,YACA,8CAAC,cAAc,UAAd,EAAuB,OAAO,cAC5B,UACH;AAAA;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;ACnFrB,IAAAC,gBAGa;AAHb;AAAA;AAAA;AAAA,IAAAA,iBAA2B;AAC3B;AAEO,IAAM,YAAY,MAAM;AAC7B,YAAM,EAAE,SAAS,YAAY,SAAS,QAAI,2BAAW,aAAa;AAElE,aAAO,EAAE,SAAS,YAAY,SAAS;AAAA,IACzC;AAAA;AAAA;;;ACPA,IAEAC,eAgBMC,sBALA;AAbN;AAAA;AAAA;AAEA,IAAAD,gBAAsB;AAEtB,IAAAE;AACA,IAAAC;AACA;AAYM,IAAAF,uBAAA;AALN,IAAM,SAAS,CAAC,EAAE,KAAK,UAAU,GAAG,WAAW,MAAmB;AAChE,YAAM,EAAE,SAAS,YAAY,SAAS,IAAI,UAAU;AAEpD,aACE,+CAAC,YAAO,KAAW,GAAG,YAAY,WAAU,yBAC1C;AAAA,sDAAC,QAAG,IAAI,UAAW,UAAS;AAAA,QAC5B;AAAA,UAAC;AAAA;AAAA,YACC,cAAW;AAAA,YACX,SAAQ;AAAA,YACR,SAAS;AAAA,YACT,WAAU;AAAA,YACV,MAAK;AAAA,YAEL;AAAA,4DAAC,QAAK,MAAM,qBAAO;AAAA,cAAE;AAAA,cAAE;AAAA;AAAA;AAAA,QACzB;AAAA,SACF;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;AChCrB,IAcMG;AAdN,IAAAC,eAAA;AAAA;AAAA;AAIA;AACA;AAOA;AAEA,IAAMD,UAAS,OAAO,OAAO,QAAiB;AAAA,MAC5C;AAAA,MACA;AAAA,IACF,CAAC;AAED,IAAAA,QAAO,cAAc;AAAA;AAAA;;;ACnBrB,IAGAE,gBACA,4CACAC,iBAIA,qBAyDIC,sBArCE;AA7BN;AAAA;AAAA;AAAA;AAGA,IAAAF,iBAAiE;AACjE,iDAA4B;AAC5B,IAAAC,kBAAuB;AAGvB,IAAAE;AACA,0BAAO;AAyDH,IAAAD,uBAAA;AArCJ,IAAM,eAAe,CAAC,EAAE,KAAK,GAAG,MAAM,MAAyB;AAC7D,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAwB,IAAI;AAC5D,YAAM,gBAAgB,wBAAS,MAAM,QAAQ;AAC7C,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF,QAAI,2CAAAE,SAAgB,aAAa;AAEjC,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,qBAAiB,gBAAAA,SAAW,UAAU,+BAA+B;AAC3E,YAAM,kBAAc,gBAAAA,SAAW,UAAU,8BAA8B;AAAA,QACrE,aAAa;AAAA,MACf,CAAC;AAED,YAAM,mBAAmB,CAAC,EAAE,QAAQ,GAAoB,UAAkB;AACxE,oBAAY,KAAK;AACjB,kBAAU,KAAK;AAEf,YAAI,SAAS;AACX,kBAAQ;AAAA,QACV;AAAA,MACF;AAEA,aACE,+CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAC3C;AAAA,sBACC,6BAAa,SAAS;AAAA,UACpB,WAAW;AAAA,UACX;AAAA,UACA;AAAA,UACA,GAAG;AAAA,QACL,CAA4B,IAE5B,8CAAC,UAAO,WAAW,gBAAiB,GAAG,aACpC,iBACH;AAAA,QAEF,8CAAC,QAAG,WAAW,aAAa,MAAK,QAC9B,kCAAS,IAAI,UAAU,CAAC,OAAO,UAAU;AACxC,kBAAI,+BAAe,KAAK,GAAG;AAEzB,uBAAO,6BAAa,OAAO;AAAA,cACzB,SAAS,MACP,iBAAiB,MAAM,OAAkC,KAAK;AAAA,cAChE,QAAQ,UAAU;AAAA,cAClB,GAAG,UAAU,KAAK;AAAA,YACpB,CAIC;AAAA,UACH;AAEA,iBAAO;AAAA,QACT,CAAC,GACH;AAAA,SACF;AAAA,IAEJ;AAEA,iBAAa,cAAc;AAAA;AAAA;;;ACtG3B,IACAC,gBACAC,iBA+CeC,sBA/BT;AAlBN;AAAA;AAAA;AACA,IAAAF,iBAAuD;AACvD,IAAAC,kBAAuB;AA+CR,IAAAC,uBAAA;AA/Bf,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,EAAE,eAAe,OAAO;AAAA,QACxB,WAAW;AAAA,MACb;AAEA,aACE,8CAAC,WAAQ,KAAU,SAAmB,GAAG,YACtC,kCAAS,IAAI,UAAU,WAAS;AAC/B,gBAAI,+BAAe,KAAK,GAAG;AACzB,gBAAM,mBAAe,gBAAAA;AAAA,YAClB,MAAM,MAAiC;AAAA,YACxC;AAAA,UACF;AACA,qBAAO;AAAA,YACL;AAAA,YACA;AAAA,cACE,WAAW;AAAA,YACb;AAAA,UACF;AAAA,QACF;AAEA,eAAO,8CAAC,UAAK,WAAW,SAAU,iBAAM;AAAA,MAC1C,CAAC,GACH;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACvDnB,IAkBMC;AAlBN,IAAAC,qBAAA;AAAA;AAAA;AAAA;AACA;AAiBA,IAAMD,gBAAqC,OAAO;AAAA,MAChD;AAAA,MACA;AAAA,QACE;AAAA,MACF;AAAA,IACF;AAWA,IAAAA,cAAa,cAAc;AAAA;AAAA;;;AClC3B,IAEAE,iBAEAC,gBAGA,iBAqDsBC,sBAzChB,aAqCA;AAxDN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAAoC;AAEpC,IAAAE;AACA,sBAAO;AAqDe,IAAAD,uBAAA;AAzCtB,IAAM,cAAc,CAClB,UACiE;AACjE,YAAM,EAAE,OAAO,IAAI;AAEnB,UAAI,cAA2B,CAAC;AAChC,UAAI,iBAAiC;AAAA,QACnC,MAAM;AAAA,MACR;AAEA,YAAM,eAAW,sBAAM;AACvB,UAAI,QAAQ;AACV,sBAAc;AAAA,UACZ,GAAG;AAAA,UACH,IAAI;AAAA,QACN;AACA,yBAAiB;AAAA,UACf,GAAG;AAAA,UACH,mBAAmB;AAAA,QACrB;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAWA,IAAM,WAAW,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,MAAqB;AAC3D,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,kBAAkB,8CAAC,YAAO;AAAA,QAC1B,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,EAAE,aAAa,eAAe,IAAI,YAAY,KAAK;AAEzD,YAAM,cAAU,gBAAAE,SAAW,UAAU,mBAAmB,MAAM,SAAS;AAGvE,kBAAY,YAAY;AAExB,aACE,+CAAC,QAAM,GAAG,gBAAiB,GAAG,YAAY,WAAW,SAClD;AAAA,sBAAU,6BAAa,iBAAiB,EAAE,GAAG,YAAY,GAAG,CAAC,MAAM,CAAC;AAAA,QACpE;AAAA,SACH;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;;;AC/EvB,IAAAC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,iBAuESC,sBA9BH;AA1CN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB;AAqES,IAAAC,uBAAA;AA9BT,IAAM,OAAO,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,MAAiB;AACnD,YAAM;AAAA,QACJ,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,cAAU,gBAAAC,SAAW,UAAU,eAAe,SAAS;AAE7D,YAAM,SAAwB,qBAAqB;AAAA,QACjD,WAAW;AAAA,QACX,SAAS;AAAA,QACT,qBAAqB,UAAU,OAAO;AAAA,QACtC,KAAK,gBAAgB,GAAG;AAAA,QACxB,WAAW,gBAAgB,SAAS;AAAA,QACpC,QAAQ,gBAAgB,MAAM;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AAED,aAAO,8CAAC,SAAI,OAAO,QAAQ,WAAW,SAAU,GAAG,MAAM;AAAA,IAC3D;AAEA,SAAK,cAAc;AAAA;AAAA;;;AC3EnB,IAGAC,gBACAC,iBA+ESC,sBAlDI,kBAUA,cAEP;AA7CN,IAAAC,aAAA;AAAA;AAAA;AAAA;AAGA,IAAAH,iBAAoC;AACpC,IAAAC,kBAAuB;AAEvB;AA6ES,IAAAC,uBAAA;AAlDF,IAAM,mBAAmB,CAAC,WAC/B,OAAO,QAAQ,MAAM,EAAE;AAAA,MACrB,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM;AACtB,cAAM,WAAW,OAAO,OAAO,IAAI;AACnC,cAAM,cAAc,SAAS,SAAS,SAAS,CAAC;AAChD,eAAO,EAAE,GAAG,MAAM,CAAC,GAAG,GAAG,SAAS,YAAY;AAAA,MAChD;AAAA,MACA,CAAC;AAAA,IACH;AAEK,IAAM,eAAe;AAE5B,IAAM,WAAW,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,MAAqB;AAC3D,YAAM;AAAA,QACJ,YAAY,EAAE,MAAM,eAAe;AAAA,MACrC,IAAI,cAAc;AAClB,YAAM;AAAA,QACJ;AAAA,QACA,KAAK,MAAM,QAAQ,IAAI,IAAI,eAAe;AAAA,QAC1C;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,gBAAgB,iBAAiB;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AACD,YAAM,CAAC,gBAAgB,iBAAiB,QAAI,yBAA6B;AACzE,YAAM,cAAU,gBAAAE,SAAW,qBAAqB,SAAS;AAEzD,oCAAU,MAAM;AACd,0BAAkB,cAAc,cAAc,CAAC;AAAA,MACjD,GAAG,CAAC,gBAAgB,aAAa,CAAC;AAElC,YAAM,SAAwB;AAAA,QAC5B,YAAY,iBAAiB,QAAQ,cAAc,KAAK;AAAA,QACxD;AAAA,QACA;AAAA,MACF;AAEA,aAAO,8CAAC,SAAI,OAAO,EAAE,GAAG,OAAO,GAAG,WAAW,SAAU,GAAG,MAAM;AAAA,IAClE;AAEA,aAAS,cAAc;AAAA;AAAA;;;ACtFvB,IASMC;AATN,IAAAC,aAAA;AAAA;AAAA;AACA;AAEA,IAAAC;AAMA,IAAMF,QAAqB,OAAO,OAAO,MAAe;AAAA,MACtD,MAAM;AAAA,IACR,CAAC;AAED,IAAAA,MAAK,cAAc;AAAA;AAAA;;;ACbnB,IAEAG,iBA4BSC,sBARH;AAtBN;AAAA;AAAA;AAEA,IAAAD,kBAAuB;AA4Bd,IAAAC,uBAAA;AART,IAAM,QAAQ,CAAC;AAAA,MACb;AAAA,MACA;AAAA,MACA,aAAa,YAAY;AAAA,MACzB,GAAG;AAAA,IACL,MAAkB;AAChB,YAAM,cAAU,gBAAAC,SAAW,UAAU,gBAAgB,WAAW,SAAS;AAEzE,aAAO,8CAAC,aAAU,KAAU,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAC5E;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACjCpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAOAC,iBACA,aAmDIC,sBA1BE;AAjCN;AAAA;AAAA;AAOA,IAAAD,kBAAuB;AACvB,kBAAO;AAmDH,IAAAC,uBAAA;AA1BJ,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM;AAAA,QACJ,aAAa;AAAA,QACb,aAAa,YAAY;AAAA,QACzB;AAAA,QACA;AAAA,QACA,UAAU;AAAA,QACV,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,iBAAgC;AAAA,QACpC,eAAe;AAAA,MACjB;AAEA,YAAM,SAAS,EAAE,GAAG,OAAO,GAAI,cAAc,eAAgB;AAC7D,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB,OAAO;AAAA,QACvB;AAAA,UACE,iBAAiB;AAAA,QACnB;AAAA,MACF;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,OAAO;AAAA,UACP,WAAW;AAAA,UACX,iBAAe,aAAa,OAAO;AAAA,UAClC,GAAG;AAAA,UAEH,gBAAM;AAAA;AAAA,MACT;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACvEnB,IAAAC,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBA8BIC;AA9BJ;AAAA;AAAA;AAAA,IAAAD,kBAAuB;AA8BnB,IAAAC,uBAAA;AAAA;AAAA;;;AC9BJ,IAAAC,mBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,gBACAC,iBAEA,aA8CIC,sBAxBE;AA1BN;AAAA;AAAA;AACA,IAAAF,iBAAuD;AACvD,IAAAC,kBAAuB;AAEvB,kBAAO;AA8CH,IAAAC,uBAAA;AAxBJ,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,YAAyB,MAAM,YAAY,OAAO;AACxD,YAAM,EAAE,UAAU,MAAM,GAAG,WAAW,IAAI;AAI1C,YAAM,EAAE,WAAW,eAAe,YAAY,GAAG,UAAU,IAAI;AAE/D,YAAM,cAAc;AAAA,QAClB,GAAG;AAAA,QACH,UAAU;AAAA,MACZ;AAEA,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,cAAc;AAAA,UACd,CAAC,QAAQ,aAAa,EAAE,GAAG;AAAA,QAC7B;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE,8CAAC,aAAU,KAAW,GAAG,aAAa,WAAW,SAC9C,kCAAS,IAAI,UAAU,WAAS;AAC/B,gBAAI,+BAAe,KAAK,GAAG;AAEzB,qBAAO,6BAAa,OAAO;AAAA,YACzB,YAAY;AAAA,UACd,CAA+B;AAAA,QACjC;AAEA,eAAO;AAAA,MACT,CAAC,GACH;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACjEnB,IACAC,iBA8BQC,sBAjBF;AAdN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AA8Bf,IAAAC,uBAAA;AAjBR,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AACrD,YAAM,EAAE,YAAY,MAAM,UAAU,GAAG,WAAW,IAAI;AACtD,YAAM,cAAc,QAAQ;AAC5B,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,cAAc;AAAA,QAChB;AAAA,QACA,MAAM;AAAA,MACR;AACA,YAAM,qBAAiB,gBAAAA,SAAW,UAAU,2BAA2B;AACvE,YAAM,kBAAc,gBAAAA,SAAW,UAAU,mBAAmB;AAE5D,UAAI,aAAa;AACf,eACE,8CAAC,QAAG,KAAW,GAAG,YAAY,WAAW,SACvC,yDAAC,UAAK,WAAW,gBACf;AAAA,wDAAC,UAAK,WAAW,aAAc,uBAAY;AAAA,UAC1C;AAAA,WACH,GACF;AAAA,MAEJ;AAEA,aACE,8CAAC,QAAG,KAAW,GAAG,YAAY,WAAW,SACtC,UACH;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;;;AC9CvB,IAAAC,aAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IACAC,iBACAC,eAGA,yBAeIC,sBAVE;AAVN;AAAA;AAAA;AACA,IAAAF,kBAAuB;AACvB,IAAAC,gBAAwB;AAExB,IAAAE;AACA,8BAAO;AAeH,IAAAD,uBAAA;AAVJ,IAAM,mBAAmB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA6B;AACrE,YAAM,EAAE,OAAO,uBAAS,GAAG,WAAW,IAAI;AAE1C,YAAM,cAAU,gBAAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE,8CAAC,QAAK,MAAY,MAAI,MAAC,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAEzE;AAEA,qBAAiB,cAAc;AAAA;AAAA;;;ACxB/B,IAAAC,yBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,iBA6BQC,sBAfK;AAfb;AAAA;AAAA;AACA,IAAAD,kBAAuB;AA6Bf,IAAAC,uBAAA;AAfD,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AACpD,YAAM,EAAE,WAAW,OAAO,QAAQ,GAAG,WAAW,IAAI;AAEpD,YAAM,cAAU,gBAAAC,SAAW,UAAU,eAAe,SAAS;AAE7D,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA,WAAW;AAAA,UACX,SAAQ;AAAA,UACP,GAAG;AAAA,UAEJ;AAAA,0DAAC,UACC;AAAA,cAAC;AAAA;AAAA,gBACC,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,IAAG;AAAA,gBAEH;AAAA,gEAAC,UAAK,WAAU,WAAU,QAAO,MAAK;AAAA,kBACtC,8CAAC,UAAK,WAAU,WAAU,QAAO,QAAO;AAAA;AAAA;AAAA,YAC1C,GACF;AAAA,YACA,+CAAC,OACC;AAAA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,GAAE;AAAA;AAAA,cACJ;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,GAAE;AAAA;AAAA,cACJ;AAAA,cACA;AAAA,gBAAC;AAAA;AAAA,kBACC,MAAK;AAAA,kBACL,GAAE;AAAA;AAAA,cACJ;AAAA,eACF;AAAA;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,SAAK,cAAc;AAAA;AAAA;;;AC3DnB,IAAAC,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAQEC,sBADIC;AAPN,IAAAC,gBAAA;AAAA;AAAA;AAQE,IAAAF,uBAAA;AADF,IAAMC,WAAU,CAAC,EAAE,KAAK,UAAU,GAAG,WAAW,MAC9C,8CAAC,SAAI,KAAW,GAAG,YAAY,WAAU,yBACtC,UACH;AAGF,IAAAA,SAAQ,cAAc;AAAA;AAAA;;;ACbtB,IAAAE,gBAGa;AAHb;AAAA;AAAA;AAAA,IAAAA,iBAA8B;AAGvB,IAAM,mBAAe,8BAAiC;AAAA,MAC3D,SAAS,MAAM;AAAA,MAAC;AAAA,MAChB,YAAY;AAAA,IACd,CAAC;AAAA;AAAA;;;ACND,IAAAC,gBAGa;AAHb;AAAA;AAAA;AAAA,IAAAA,iBAA2B;AAC3B;AAEO,IAAM,WAAW,MAAM;AAC5B,YAAM,EAAE,SAAS,WAAW,QAAI,2BAAW,YAAY;AAEvD,aAAO,EAAE,SAAS,WAAW;AAAA,IAC/B;AAAA;AAAA;;;ACPA,IAEAC,eAiBMC,sBANAC;AAbN,IAAAC,eAAA;AAAA;AAAA;AAEA,IAAAH,gBAAsB;AAEtB,IAAAI;AACA,IAAAC;AACA;AAaM,IAAAJ,uBAAA;AANN,IAAMC,UAAS,CAAC,EAAE,KAAK,UAAU,GAAG,WAAW,MAAmB;AAChE,YAAM,EAAE,SAAS,WAAW,IAAI,SAAS;AAEzC,aACE,+CAAC,YAAO,KAAW,GAAG,YAAY,WAAU,wBACzC;AAAA;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,cAAW;AAAA,YACX,SAAQ;AAAA,YACR,SAAS;AAAA,YACT,WAAU;AAAA,YAEV;AAAA,4DAAC,QAAK,MAAM,qBAAO;AAAA,cAAE;AAAA,cAAE;AAAA;AAAA;AAAA,QACzB;AAAA,SACF;AAAA,IAEJ;AAEA,IAAAA,QAAO,cAAc;AAAA;AAAA;;;AC/BrB,IAEAI,iBACAC,gBAMA,cAgEMC,sBA5DAC,0BAEA;AAfN;AAAA;AAAA;AAAA;AAEA,IAAAH,kBAAuB;AACvB,IAAAC,iBAAqD;AACrD;AACA;AACA;AACA;AAEA,mBAAO;AAgED,IAAAC,uBAAA;AA5DN,IAAMC,2BAA0B;AAEhC,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,kBAAkB,mBAAmB,QAAI,yBAAS,KAAK;AAE9D,oCAAU,MAAM;AACd,4BAAoB,eAAe,CAAC;AAAA,MACtC,GAAG,CAAC,CAAC;AAEL,YAAM,gBAAY,uBAAiC,IAAI;AACvD,YAAM,EAAE,MAAM,IAAI,UAAU;AAAA,QAC1B,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,UACV,WAAW,CAAC,CAAC;AAAA,UACb,aAAaA;AAAA,QACf;AAAA,MACF,CAAC;AAED,YAAM,mBAAe,gBAAAC;AAAA,QACnB;AAAA,QACA;AAAA,QACA;AAAA,UACE,uBAAuB,CAAC;AAAA;AAAA,UACxB,uBAAuB,oBAAoB;AAAA,UAC3C,cAAc,cAAc;AAAA,UAC5B,UAAU,cAAc;AAAA,UACxB,mBAAmB;AAAA,QACrB;AAAA,QACA;AAAA,MACF;AAEA,YAAM,mBAAe;AAAA,QACnB,OAAO;AAAA,UACL,SAAS;AAAA,UACT;AAAA,QACF;AAAA,QACA,CAAC,OAAO,UAAU;AAAA,MACpB;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,UAAU,CAAC,WAAW,GAAG,CAAC;AAAA,UAC/B,UAAU;AAAA,UACV,WAAW;AAAA,UACV,GAAG;AAAA,UAEJ,wDAAC,aAAa,UAAb,EAAsB,OAAO,cAC3B,UACH;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;AChFpB,IAcMC;AAdN,IAAAC,cAAA;AAAA;AAAA;AAIA,IAAAC;AAKA,IAAAC;AACA;AAIA,IAAMH,SAAQ,OAAO,OAAO,OAAgB;AAAA,MAC1C,QAAAI;AAAA,MACA,SAAAC;AAAA,IACF,CAAC;AAED,IAAAL,OAAM,cAAc;AAAA;AAAA;;;ACnBpB,IAEAM,iBAEAC,gBAMA,oBA2GIC,sBAvFS;AA9Bb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAAmE;AACnE,IAAAE;AAKA,yBAAO;AA2GH,IAAAD,uBAAA;AAvFG,IAAM,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,MAAwB;AAClE,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM;AAAA,QACJ,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,GAAG;AAAA,MACL,IAAI;AAKJ,YAAM,sBAAkB,uBAAgC,IAAI;AAC5D,YAAM,mBAAe,4BAAY,CAAC,OAAc,GAAG,eAAe,GAAG,CAAC,CAAC;AAEvE,oCAAU,MAAM;AACd,eAAO,MAAM;AACX,0BAAgB,SAAS,oBAAoB,SAAS,YAAY;AAClE,0BAAgB,UAAU;AAAA,QAC5B;AAAA,MACF,GAAG,CAAC,YAAY,CAAC;AAEjB,YAAM,uBAAmB,gBAAAE,SAAW,uBAAuB,WAAW;AAAA,QACpE,uBAAuB;AAAA,MACzB,CAAC;AAED,YAAM,oBAAoB,CACxB,UACG;AACH,cAAM,EAAE,KAAK,IAAI,MAAM;AACvB,YAAI,QAAQ,OAAO,UAAU,IAAI,KAAK,SAAS,KAAK;AAClD,gBAAM,eAAe;AAAA,QACvB;AACA,YAAI,YAAY,YAAY,KAAK,SAAS,KAAK;AAC7C,gBAAM,eAAe;AAAA,QACvB;AAAA,MACF;AAEA,YAAM,aAAa,CAAC,UAA8C;AAChE,cAAM,EAAE,MAAM,IAAI,MAAM;AACxB,cAAM,WAAW,WAAW,KAAK;AAGjC,YAAI,QAAQ,OAAO,KAAK,CAAC,MAAM,QAAQ,GAAG;AACxC,gBAAM,YAAY,YAAY;AAC9B,gBAAM,QAAQ,KAAK,OAAO,WAAW,aAAa,IAAI;AACtD,gBAAM,eAAe,YAAY,QAAQ;AAGzC,cAAI,iBAAiB,UAAU;AAC7B,kBAAM,OAAO,QAAQ,aAAa,SAAS;AAE3C,kBAAM,cAAc,IAAI,MAAM,UAAU,EAAE,SAAS,KAAK,CAAC;AACzD,kBAAM,OAAO,cAAc,WAAW;AAEtC,kBAAM,uBAAuB;AAAA,cAC3B,GAAG;AAAA,cACH,QAAQ,MAAM;AAAA,cACd,eAAe,MAAM;AAAA,YACvB;AACA,uBAAW,WAAW,oBAAoB;AAAA,UAC5C;AAAA,QACF;AAEA,uBAAe,KAAK;AAAA,MACtB;AAEA,YAAM,iBAAiC;AAAA,QACrC,GAAG;AAAA,QACH,SAAS,OAAK;AACZ,gBAAM,KAAK,EAAE;AACb,0BAAgB,SAAS,oBAAoB,SAAS,YAAY;AAClE,0BAAgB,UAAU;AAC1B,aAAG,iBAAiB,SAAS,cAAc,EAAE,SAAS,MAAM,CAAC;AAC7D,0BAAgB,CAAuC;AAAA,QACzD;AAAA,QACA,QAAQ,OAAK,WAAW,CAAuC;AAAA,MACjE;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,WAAW;AAAA,UACX,eAAe;AAAA,UACf,MAAK;AAAA,UACL,KAAK,YAAY;AAAA,UACjB,KAAK,YAAY;AAAA,UACjB;AAAA,UACA;AAAA,UACA,cACE,gBAAgB,OAAO,cAAc,SAAS,IAAI;AAAA;AAAA,MAEtD;AAAA,IAEJ;AAEA,gBAAY,cAAc;AAAA;AAAA;;;ACrI1B,IAAAC,oBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAcSC,sBANHC;AARN,IAAAC,eAAA;AAAA;AAAA;AAcS,IAAAF,uBAAA;AANT,IAAMC,UAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM,EAAE,YAAY,GAAG,KAAK,IAAI;AAChC,YAAM,cAAc;AAAA,QAClB,GAAG;AAAA,QACH,UAAU;AAAA,MACZ;AACA,aAAO,8CAAC,YAAQ,GAAG,aAAa,KAAU;AAAA,IAC5C;AAEA,IAAAA,QAAO,cAAc;AAAA;AAAA;;;ACjBrB,IAAAE,eAAA;AAAA;AAAA;AAAA,IAAAA;AAAA;AAAA;;;ACAA,IAAAC,eAsBIC,sBAdS;AARb;AAAA;AAAA;AAAA,IAAAD,gBAA8B;AAC9B;AAqBI,IAAAC,uBAAA;AAdG,IAAM,iBAAiB,CAAC;AAAA,MAC7B,OAAO;AAAA,MACP;AAAA,IACF,MACE;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,SAAS,OAAK;AACZ,YAAE,eAAe;AACjB,kBAAQ;AAAA,QACV;AAAA,QACA,cAAY,GAAG,OAAO,SAAS,MAAM;AAAA,QACrC,eAAY;AAAA,QAEZ,wDAAC,QAAK,MAAM,OAAO,yBAAW,mBAAK,eAAY,QAAO;AAAA;AAAA,IACxD;AAAA;AAAA;;;ACvBF,IAEAC,iBACAC,gBAQA,sBAkCQC,sBA9BK;AAfb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AACvB,IAAAC,iBAAiC;AACjC;AACA,IAAAE;AAKA;AACA,2BAAO;AAkCC,IAAAD,uBAAA;AA9BD,IAAM,gBAAgB,CAAC;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAA0B;AACxB,YAAM,CAAC,MAAM,OAAO,QAAI,yBAAS,KAAK;AACtC,YAAM,OAAO,OAAO,SAAS;AAC7B,YAAM,cAAU,gBAAAE,SAAW,yBAAyB,SAAS;AAC7D,YAAM,eAAW,uBAA6B,IAAI;AAElD,YAAM,4BAA4B,MAAM;AACtC,cAAM,iBAAiB,SAAS,SAAS;AACzC,cAAM,eAAe,SAAS,SAAS;AAEvC,gBAAQ,aAAW,CAAC,OAAO;AAC3B,8BAAsB,MAAM;AAC1B,mBAAS,SAAS,MAAM;AACxB,cAAI,kBAAkB,QAAQ,gBAAgB,MAAM;AAClD,qBAAS,SAAS,kBAAkB,gBAAgB,YAAY;AAAA,UAClE;AAAA,QACF,CAAC;AAAA,MACH;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC,KAAK,UAAU,CAAC,UAAU,GAAG,CAAC;AAAA,UAC9B,WAAW;AAAA,UACV,GAAG;AAAA,UACJ;AAAA,UACA,cACE,8CAAC,kBAAe,SAAS,2BAA2B,MAAY;AAAA;AAAA,MAEpE;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;ACnD5B,IAAAC,sBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,gBAWAC,gBACAC,iBAEAF,gBACAG,sBAIA,gBAiHIC;AApIJ;AAAA;AAAA;AAAA,IAAAJ,iBAUO;AACP,IAAAC,iBAAsB;AACtB,IAAAC,kBAAuB;AAEvB,IAAAF,iBAAuE;AACvE,IAAAG,uBAA+B;AAI/B,qBAAO;AAiHH,IAAAC,uBAAA;AAAA;AAAA;;;ACpIJ,IAAAC,gBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACqCA,SAAS,uBACP,OACA,UACA,UACA;AACA,MAAI,WAAW,UAAU;AACvB,YAAQ,KAAK,mCAAmC;AAAA,EAClD;AACA,MAAI,QAAQ,UAAU;AACpB,YAAQ,KAAK,sCAAsC;AAAA,EACrD;AACA,MAAI,QAAQ,UAAU;AACpB,YAAQ,KAAK,yCAAyC;AAAA,EACxD;AACF;AAnDA,IAIAC,iBAEAC,gBAIA,iBA4DMC,sBAjBA,gBAUA,mBA8BA,eACA,mBACA,mBAEA;AAjGN;AAAA;AAAA;AAAA;AAIA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAAsB;AAEtB,IAAAE;AACA,IAAAC;AACA,sBAAO;AA4DD,IAAAF,uBAAA;AAjBN,IAAM,iBAAiB,CACrB,OACA,iBACW;AACX,UAAI,UAAU,UAAa,OAAO,MAAM,KAAK,GAAG;AAC9C,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAEA,IAAM,oBAAoB,CACxB,OACA,iBACA,cACG;AACH,UAAI,WAAW;AACb,eACE;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WAAU;AAAA,YACV,aAAY;AAAA,YAEX;AAAA;AAAA,QACH;AAAA,MAEJ;AAEA,aACE,8CAAC,kBACC;AAAA,QAAC;AAAA;AAAA,UACC,IAAI;AAAA,UACJ,WAAU;AAAA,UACV,aAAY;AAAA,UAEX;AAAA;AAAA,MACH,GACF;AAAA,IAEJ;AAEA,IAAM,gBAAgB;AACtB,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAE1B,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AACrD,YAAM,iBAAa,sBAAM;AACzB,YAAM,sBAAkB,sBAAM;AAC9B,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,iBAAiB,CAAC,CAAC;AAAA,QACnB;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACF,IAAI;AAEJ,UAAI,EAAE,OAAO,UAAU,SAAS,IAAI;AAEpC,cAAQ,eAAe,OAAO,aAAa;AAC3C,iBAAW,eAAe,UAAU,iBAAiB;AACrD,iBAAW,eAAe,UAAU,iBAAiB;AAGrD,UAAI,UAAU,UAAa,aAAa,UAAa,aAAa,QAAW;AAC3E,eAAO;AAAA,MACT;AAEA,6BAAuB,OAAO,UAAU,QAAQ;AAGhD,YAAM,QAAQ,CAAC,KAAa,KAAa,QACvC,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG;AAClC,YAAM,aAAa;AAAA,QACjB,KAAK,OAAQ,QAAQ,aAAa,WAAW,YAAa,GAAG;AAAA,QAC7D;AAAA,QACA;AAAA,MACF;AACA,YAAM,WAAW,GAAG,UAAU;AAE9B,YAAM,cAAU,gBAAAG,SAAW,UAAU,mBAAmB,WAAW;AAAA,QACjE,gBAAgB,YAAY;AAAA,QAC5B,kBAAkB,YAAY;AAAA,MAChC,CAAC;AAGD,YAAM,mBAA2C,CAAC;AAClD,uBAAiB,eAAe,IAAI,SAAS,SAAS;AACtD,uBAAiB,eAAe,IAAI,SAAS,SAAS;AACtD,uBAAiB,eAAe,IAAI,MAAM,SAAS;AACnD,uBAAiB,gBAAgB,IAC/B,0BAA0B,WACtB,eAAe,OAAO,UAAU,QAAQ,IACxC;AACN,YAAM,iBAAiB,kBAAkB,OAAO,iBAAiB,SAAS;AAE1E,aACE;AAAA,QAAC;AAAA;AAAA,UACC,IAAI,MAAM;AAAA,UACT,GAAG;AAAA,UACJ;AAAA,UACA,WAAW;AAAA,UACX,MAAK;AAAA,UACL,mBAAiB;AAAA,UAEhB;AAAA;AAAA,YACD,8CAAC,SAAI,WAAU,0BACb,wDAAC,SAAI,WAAU,wBAAuB,OAAO,EAAE,OAAO,SAAS,GAAG,GACpE;AAAA,YACC,kBACC,8CAAC,SAAM,eAAY,eAAc,aAAY,QAC1C,2BAAiB,gBAAgB,GACpC;AAAA;AAAA;AAAA,MAEJ;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;;;AC3KvB,IAAAC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,iBAEAC,gBAWA,cAqLIC,sBAzHE;AA3EN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAMO;AAGP,IAAAE;AACA,IAAAC;AACA,mBAAO;AAqLH,IAAAF,uBAAA;AAzHJ,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,eAAe,iBAAiB;AACtC,YAAM,cAAc,SAAS;AAC7B,YAAM,eAAe,aAAa;AAClC,YAAM,YAAY,eAAe,aAAa,QAAQ;AAEtD,YAAM,iBAAa,uBAAuB,IAAI;AAC9C,YAAM,sBAAkB,uBAA0B;AAAA,QAChD,UAAU;AAAA,QACV,YAAY;AAAA,MACd,CAAC;AAED,YAAM,mBAAe,wBAAQ,MAAM;AACjC,YAAI,CAAC,YAAY,wBAAS,MAAM,QAAQ,MAAM,EAAG,QAAO;AAExD,cAAM,aAAa,wBAAS,QAAQ,QAAQ,EAAE,CAAC;AAC/C,YAAI,KAAC,+BAAe,UAAU,EAAG,QAAO;AAExC,cAAMG,SAAQ,WAAW;AACzB,eAAO,UAAUA,UAASA,OAAM,SAAS;AAAA,MAC3C,GAAG,CAAC,QAAQ,CAAC;AAGb,0CAAgB,MAAM;AACpB,YAAI,CAAC,WAAW,WAAW,CAAC,WAAY;AAIxC,YAAI,gBAAgB,YAAY;AAC9B;AAAA,QACF;AAEA,cAAM,UAAU,WAAW;AAG3B,cAAM,yBAAyB,QAAQ,eAAe,QAAQ;AAC9D,cAAM,2BAA2B,QAAQ,cAAc,QAAQ;AAG/D,cAAM,SAAS,OAAO,iBAAiB,OAAO;AAC9C,cAAM,aAAa,WAAW,OAAO,UAAU;AAC/C,cAAM,WAAW,WAAW,OAAO,QAAQ;AAC3C,cAAM,mBAAmB,MAAM,UAAU,IAAI,WAAW,MAAM;AAI9D,cAAM,2BAA2B;AACjC,cAAM,aACJ,QAAQ,eAAe,mBAAmB;AAE5C,cAAM,WAAW,0BAA0B;AAC3C,cAAM,aAAa;AAEnB,cAAM,mBAAmB,EAAE,UAAU,WAAW;AAChD,cAAM,eAAe,gBAAgB;AAGrC,YACE,iBAAiB,aAAa,aAAa,YAC3C,iBAAiB,eAAe,aAAa,YAC7C;AACA,0BAAgB,UAAU;AAC1B,qBAAW,gBAAgB;AAAA,QAC7B;AAAA,MACF,GAAG,CAAC,OAAO,UAAU,YAAY,WAAW,CAAC;AAE7C,YAAM,eAAe;AAAA,QACnB,iBAAiB;AAAA,QACjB,iBAAiB,aAAa;AAAA,QAC9B,kBAAkB,CAAC,CAAC;AAAA,QACpB,iBAAiB;AAAA,MACnB;AACA,YAAM,uBAAmB,gBAAAC;AAAA,QACvB;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,oBAAoB,aAAa;AAAA,MACrC;AAEA,YAAM,mBAAe,gBAAAA,SAAW,uBAAuB,YAAY;AAGnE,YAAM,EAAE,oBAAoB,kBAAkB,GAAG,KAAK,IAAI;AAG1D,YAAM,eAAe,CAAC,UAA+C;AAEnE,YAAI,aAAa;AACf,sBAAY,MAAM,OAAO,KAAK;AAAA,QAChC;AAGA,YAAI,UAAU;AAEZ,gBAAM,eAAmD;AAAA,YACvD,GAAG,MAAM;AAAA,YACT,QAAQ,MAAM;AAAA,UAChB;AACA,mBAAS,YAAY;AAAA,QACvB;AAAA,MACF;AAEA,aACE,gFACE;AAAA,uDAAC,SAAM,WAAW,kBAChB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,oBAAkB,WAAW,kBAAkB;AAAA,cAC/C,UAAU;AAAA,cACV;AAAA,cACA,WAAW;AAAA,cACX;AAAA,cACA,UAAU;AAAA,cACV,MAAK;AAAA,cACL,UAAU;AAAA,cACT,GAAI,eACD,EAAE,SAAS,UAAU,IACrB,EAAE,gBAAgB,UAAU;AAAA,cAChC;AAAA,cACA,UAAU;AAAA,cACT,GAAG;AAAA;AAAA,UACN;AAAA,UACC,cACC,+CAAC,SAAI,KAAK,YAAY,WAAU,oCAC9B;AAAA,0DAAC,SAAI,WAAU,oCAAoC,iBAAM;AAAA,YACzD,8CAAC,SAAI,WAAU,+BAA+B,UAAS;AAAA,aACzD,IAEA,8CAAC,SAAI,KAAK,YAAY,WAAU,yBAC7B,mBAAS,UACZ;AAAA,WAEJ;AAAA,QACC,gBAAgB,8CAAC,gBAAa,cAA4B;AAAA,SAC7D;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACtOpB,IAEAC,iBAEAC,gBA6KMC,sBAhHA,eAYA;AA7EN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBASO;AACP;AAIA;AACA,IAAAE;AACA,IAAAC;AACA,IAAAC;AA4JM,IAAAH,uBAAA;AAhHN,IAAM,gBAAgB,CAAC,UAAqB,iBAA0B;AACpE,UAAI,MAAM,QAAQ,QAAQ,KAAK,cAAc;AAC3C,cAAM,SAAS,UAAU,KAAK,UAAQ,KAAK,MAAM,UAAU,YAAY;AAEvE,YAAI,CAAC,OAAQ,QAAO;AAEpB,eAAO,OAAO,MAAM;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AAEA,IAAM,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,MAAuB;AACzD,YAAM;AAAA,QACJ;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,kBAAkB,cAAc,UAAU,SAAS,YAAY;AACrE,YAAM,CAAC,UAAU,WAAW,QAAI,yBAAiB,eAAe;AAChE,YAAM,mBAAe,uBAA0C,CAAC,CAAC;AACjE,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AAGpD,oCAAU,MAAM;AACd,YAAI,UAAU,QAAW;AACvB,sBAAY,KAAK;AAAA,QACnB;AAAA,MACF,GAAG,CAAC,KAAK,CAAC;AAGV,YAAM,qBAAiB;AAAA,QACrB,CAAC,YAAoB,aAAgC;AACnD,uBAAa,UAAU;AAAA,YACrB,GAAG,aAAa;AAAA,YAChB,CAAC,UAAU,GAAG;AAAA,UAChB;AAGA,gBAAM,cAAc,OAAO,OAAO,aAAa,OAAO,EAAE;AAAA,YACtD,OAAK,EAAE,YAAY,EAAE;AAAA,UACvB;AAEA,cAAI,gBAAgB,aAAa;AAC/B,2BAAe,WAAW;AAAA,UAC5B;AAAA,QACF;AAAA,QACA,CAAC,WAAW;AAAA,MACd;AAGA,YAAM,uBACJ,aAAa,gBAAgB,gBAAgB,cACzC,aACA;AAEN,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,YAAM,eAAe;AAAA,QACnB,iBAAiB;AAAA,QACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,QACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,QACrD,CAAC,QAAQ,oBAAoB,EAAE,GAAG;AAAA,QAClC,CAAC,aAAa,EAAE,GAAG;AAAA,MACrB;AACA,YAAM,wBAAoB,gBAAAI;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,0BAAsB,gBAAAA,SAAW,yBAAyB;AAAA,QAC9D,CAAC,QAAQ,oBAAoB,EAAE,GAAG;AAAA,MACpC,CAAC;AACD,YAAM,mBAAe,gBAAAA,SAAW,cAAc,iBAAiB;AAC/D,YAAM,qBAAiB,sBAAM;AAC7B,YAAM,wBAAoB,sBAAM;AAChC,YAAM,gBAAgB,QAAQ;AAC9B,YAAM,yBAAyB,eAAe,iBAAiB;AAC/D,YAAM,cAAc,mBAAmB;AAAA,QACrC;AAAA,QACA,MAAM,kBAAkB;AAAA,MAC1B,CAAC;AACD,YAAM,cAAU,sBAAM;AAEtB,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,oBAAkB;AAAA,UAClB,iBAAe;AAAA,UACf,qBAAmB;AAAA,UACnB,gBAAc;AAAA,UACd,cAAY,MAAM,YAAY;AAAA,UAC9B,mBAAiB,MAAM,iBAAiB,KAAK;AAAA,UAC7C,oBAAkB;AAAA,UAClB,iBAAe;AAAA,UACf,iBAAe;AAAA,UACf;AAAA,UACA,WAAW;AAAA,UACX,MAAK;AAAA,UAEL,yDAAC,SAAM,KAAI,MACR;AAAA,qBACC,8CAAC,SAAM,SAAS,MAAM,IAAI,SAAS,WAAW,cAC3C,iBACH;AAAA,YAEF,8CAAC,SAAI,WAAW,qBACb,kCAAS,IAAI,UAAU,WAAS;AAC/B,sBAAI,+BAAe,KAAK,GAAG;AACzB,sBAAM,aAAc,MAAM,MAA6B;AACvD,2BAAO;AAAA,kBACL;AAAA,kBACA;AAAA,oBACE,aAAa;AAAA,oBACb,eAAe;AAAA,oBACf,MAAM;AAAA,oBACN,UAAU,YAAY;AAAA;AAAA,oBACtB;AAAA,oBACA;AAAA,oBACA,oBAAoB;AAAA,oBACpB;AAAA,oBACA,YAAY,aACR,CAAC,aACC,eAAe,YAAY,QAAQ,IACrC;AAAA,kBACN;AAAA,gBACF;AAAA,cACF;AAEA,qBAAO;AAAA,YACT,CAAC,GACH;AAAA,YACA,8CAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA,aAChE;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,eAAW,cAAc;AAAA;AAAA;;;ACvNzB,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IACAC,iBAuBIC,sBAbE;AAXN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAuBnB,IAAAC,uBAAA;AAbJ,IAAM,eAAe,CAAC,UAA6B;AACjD,YAAM,EAAE,UAAU,YAAY,KAAK,WAAW,GAAG,KAAK,IAAI;AAE1D,YAAM,WAAW,MAAM,OAAO,GAAG,KAAK;AACtC,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,mBAAmB,WAAW;AAAA,QAChC;AAAA,MACF;AAEA,aACE,8CAAC,SAAI,WAAW,SAAU,GAAG,MAC1B,UACH;AAAA,IAEJ;AAEA,iBAAa,cAAc;AAAA;AAAA;;;AC9B3B,IACAC,iBAEA,gBAwBIC,sBAZE;AAfN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB,qBAAO;AAwBH,IAAAC,uBAAA;AAZJ,IAAM,UAAU,CAAC,UAAwB;AACvC,YAAM,EAAE,SAAS,UAAU,QAAQ,UAAU,WAAW,GAAG,KAAK,IAAI;AAEpE,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA,EAAE,SAAS;AAAA,QACX;AAAA,MACF;AAEA,aACE,+CAAC,SAAI,WAAW,SAAU,GAAG,MAC1B;AAAA,mBAAW,8CAAC,SAAI,WAAU,2BAA2B,mBAAQ;AAAA,QAC7D;AAAA,SACH;AAAA,IAEJ;AAEA,YAAQ,cAAc;AAAA;AAAA;;;AClCtB,IAAAC,gBAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;;;ACDA,IAEAC,gBACAC,iBAEAC,gBAWA,eA8EQC,sBA1DF;AApCN;AAAA;AAAA;AAAA;AAEA,IAAAH,iBAA4B;AAC5B,IAAAC,kBAAuB;AAEvB,IAAAC,iBAAsB;AACtB;AAEA,IAAAE;AAEA;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AAEA,IAAAC;AACA,oBAAO;AA8EC,IAAAL,uBAAA;AA1DR,IAAM,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,EAAE,YAAY,WAAW,IAAI,SAAS;AAAA,QAC1C;AAAA,QACA,GAAG;AAAA,MACL,CAAC;AAED,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAE5D,YAAM,eAAe;AAAA,QACnB,iBAAiB;AAAA,QACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,QACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,MACvD;AAEA,YAAM,oBAAgB,gBAAAM,SAAW,mBAAmB,YAAY;AAEhE,YAAM,qBAAiB,gBAAAA;AAAA,QACrB;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,oBAAgB,gBAAAA;AAAA,QACpB;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb;AACA,YAAM,kBAAc,gBAAAA,SAAW,uBAAuB,aAAa;AACnE,YAAM,qBAAiB,sBAAM;AAC7B,YAAM,yBAAyB,eAAe,iBAAiB;AAC/D,YAAM,cAAc,mBAAmB;AAAA,QACrC;AAAA,QACA,MAAM,kBAAkB;AAAA,MAC1B,CAAC;AAED,YAAM,eAAe,CAAC,MAAsC;AAC1D,YAAI,UAAU;AACZ,mBAAS,CAAC;AAAA,QACZ;AAAA,MACF;AAEA,aACE,+CAAC,SAAM,WAAU,+BAA8B,KAAI,MAChD;AAAA,iBACC,8CAAC,SAAO,GAAG,YAAY,WAAW,cAC/B,iBACH;AAAA,QAEF,+CAAC,SAAI,WAAW,gBACd;AAAA;AAAA,YAAC;AAAA;AAAA,cACE,GAAG;AAAA,cACH,GAAG;AAAA,cACJ;AAAA,cACA,UAAU;AAAA,cACV,WAAW;AAAA,cACX,UAAU;AAAA,cACV,gBAAc,CAAC,CAAC;AAAA,cAChB,oBAAkB;AAAA,cAClB,iBAAe;AAAA,cACf,UAAU;AAAA,cACV,UAAU;AAAA;AAAA,UACZ;AAAA,UACA,8CAAC,UAAK,WAAW,aACf,wDAAC,QAAK,MAAM,4BAAa,GAC3B;AAAA,WACF;AAAA,QACC,gBACC,8CAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA,SAElE;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;AC3HrB,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,iBAEAC,gBAMA,eAgFMC;AA1FN;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAEvB,IAAAC,iBAAiC;AAMjC,oBAAO;AAgFD,IAAAC,uBAAA;AAAA;AAAA;;;AC1FN,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,gBACAC,iBAiBIC,sBATE;AAVN;AAAA;AAAA;AACA,IAAAF,iBAAyB;AACzB,IAAAC,kBAAuB;AAiBnB,IAAAC,uBAAA;AATJ,IAAM,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,MAAgB;AAC3C,YAAM,EAAE,UAAU,WAAW,GAAG,WAAW,IAAI;AAE/C,YAAM,cAAU,gBAAAC,SAAW,UAAU,cAAc,SAAS;AAC5D,YAAM,UAAU,wBAAS,KAAK,QAAQ;AAEtC,YAAM,EAAE,UAAU,aAAa,SAAS,MAAM,IAAI,QAAQ;AAE1D,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACC,GAAG;AAAA,UACJ,WAAW;AAAA,UAEV;AAAA;AAAA,MACH;AAAA,IAEJ;AAEA,QAAI,cAAc;AAAA;AAAA;;;AC/BlB,IAAAC,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,gBAMAC,iBAGA,eA6CIC,sBAhCE;AAxBN;AAAA;AAAA;AAAA;AAEA,IAAAF,iBAKO;AACP,IAAAC,kBAAuB;AAEvB,IAAAE;AACA,oBAAO;AA6CH,IAAAD,uBAAA;AAhCJ,IAAM,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,MAAmB;AACjD,YAAM;AAAA,QACJ,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA,aAAa;AAAA,QACb,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAkB,OAAO;AAEvD,oCAAU,MAAM;AACd,mBAAW,OAAO;AAAA,MACpB,GAAG,CAAC,OAAO,CAAC;AAEZ,YAAM,cAAU,gBAAAE;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,0BAA0B;AAAA,UAC1B,2BAA2B;AAAA,QAC7B;AAAA,QACA;AAAA,MACF;AAEA,YAAM,eAAe,CAAC,UAAyC;AAC7D,mBAAW,CAAC,OAAO;AACnB,YAAI,UAAU;AACZ,mBAAS,KAAK;AAAA,QAChB;AAAA,MACF;AAEA,aACE,+CAAC,WAAM,KAAU,WAAW,SAC1B;AAAA,sDAAC,kBACC,wDAAC,UAAM,oBAAU,OAAO,OAAM,GAChC;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,MAAK;AAAA,YACL,SAAS;AAAA,YACT,UAAU;AAAA,YACV,UAAU;AAAA,YACT,GAAG;AAAA;AAAA,QACN;AAAA,QACA,8CAAC,UAAK,WAAU,yBAAwB;AAAA,SAC1C;AAAA,IAEJ;AAEA,WAAO,cAAc;AAAA;AAAA;;;ACzErB,IAAAC,eAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,iBAEA,cAcSC,sBAHH;AAdN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB,mBAAO;AAcE,IAAAC,uBAAA;AAHT,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM,cAAU,gBAAAC,SAAW,UAAU,gBAAgB,MAAM,SAAS;AAEpE,aAAO,8CAAC,WAAM,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACzD;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACpBpB,IACAC,iBAYSC,sBAHH;AAVN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAYd,IAAAC,uBAAA;AAHT,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,cAAU,gBAAAC,SAAW,UAAU,sBAAsB,MAAM,SAAS;AAE1E,aAAO,8CAAC,WAAM,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACzD;AAEA,SAAK,cAAc;AAAA;AAAA;;;AChBnB,IACAC,iBAYSC,sBAHH;AAVN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAYd,IAAAC,uBAAA;AAHT,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,cAAU,gBAAAC,SAAW,UAAU,sBAAsB,MAAM,SAAS;AAE1E,aAAO,8CAAC,WAAM,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACzD;AAEA,SAAK,cAAc;AAAA;AAAA;;;AChBnB,IACAC,iBAYSC,sBAHH;AAVN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAYd,IAAAC,uBAAA;AAHT,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,cAAU,gBAAAC,SAAW,UAAU,sBAAsB,MAAM,SAAS;AAE1E,aAAO,8CAAC,WAAM,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACzD;AAEA,SAAK,cAAc;AAAA;AAAA;;;AChBnB,IACAC,iBAYSC,sBAHH;AAVN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAYd,IAAAC,uBAAA;AAHT,IAAM,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,MAAgB;AAC3C,YAAM,cAAU,gBAAAC,SAAW,UAAU,qBAAqB,MAAM,SAAS;AAEzE,aAAO,8CAAC,QAAG,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACtD;AAEA,QAAI,cAAc;AAAA;AAAA;;;AChBlB,IACAC,iBAkBSC,sBAPH;AAZN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAkBd,IAAAC,uBAAA;AAPT,IAAM,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,MAAuB;AACzD,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AAEA,aAAO,8CAAC,QAAI,GAAG,OAAO,KAAU,WAAW,SAAS;AAAA,IACtD;AAEA,eAAW,cAAc;AAAA;AAAA;;;ACtBzB,IACAC,iBAkBSC,sBAPH;AAZN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAkBd,IAAAC,uBAAA;AAPT,IAAM,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,MAAiB;AAC7C,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,MAAM;AAAA,MACR;AAEA,aAAO,8CAAC,QAAG,KAAW,GAAG,OAAO,WAAW,SAAS;AAAA,IACtD;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACtBnB,IAwCMC;AAxCN,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAkCA,IAAMD,SAAuB,OAAO,OAAO,OAAgB;AAAA,MACzD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAoBD,IAAAA,OAAM,cAAc;AAAA;AAAA;;;ACnEpB,IACAE,iBAEA,aAmDSC,sBAzBH,gBAUA;AAvCN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB,kBAAO;AAmDE,IAAAC,uBAAA;AAzBT,IAAM,iBAAiB,CACrB,SACA,gBACG;AACH,UAAI,SAAS;AACX,eAAO,CAAC,MAAM,MAAM,MAAM,IAAI,EAAE,SAAS,OAAO,IAAI,UAAU;AAAA,MAChE;AACA,aAAO,eAAe;AAAA,IACxB;AAEA,IAAM,OAAO,CAAC,EAAE,KAAK,aAAa,YAAY,KAAK,GAAG,MAAM,MAAiB;AAE3E,YAAM,EAAE,SAAS,WAAW,SAAS,GAAG,WAAW,IAAI;AAGvD,YAAM,cAAc,eAAe,SAAS,SAAS;AACrD,YAAM,cAAc,WAAW;AAC/B,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA,EAAE,CAAC,QAAQ,WAAW,EAAE,GAAG,YAAY;AAAA,QACvC,EAAE,CAAC,qBAAqB,OAAO,EAAE,GAAG,QAAQ;AAAA,QAC5C;AAAA,MACF;AAEA,aAAO,8CAAC,aAAU,KAAW,GAAG,YAAY,WAAW,SAAS;AAAA,IAClE;AAEA,SAAK,cAAc;AAAA;AAAA;;;ACzDnB,IAAAC,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBAsCIC,sBAjBE;AArBN;AAAA;AAAA;AAAA,IAAAD,kBAAuB;AAsCnB,IAAAC,uBAAA;AAjBJ,IAAM,gBAAgB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA0B;AAE/D,YAAM,EAAE,YAAY,YAAY,YAAY,YAAY,GAAG,WAAW,IACpE;AAEF,YAAM,cAAU,gBAAAC;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,UACE,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,QACnB;AAAA,QACA,WAAW;AAAA,MACb;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACC,GAAG;AAAA,UACJ,UAAU;AAAA,UACV,UAAU;AAAA,UACV,WAAW;AAAA;AAAA,MACb;AAAA,IAEJ;AAEA,kBAAc,cAAc;AAAA;AAAA;;;AChD5B,IAAAC,sBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAEAC,iBASA,iBAkCIC,sBAxBE;AArBN;AAAA;AAAA;AAAA;AAEA,IAAAD,kBAAuB;AAGvB;AAEA,IAAAE;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,sBAAO;AAkCH,IAAAJ,uBAAA;AAxBJ,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AACrD,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,EAAE,YAAY,YAAY,kBAAkB,IAAI,aAAa,KAAK;AAGxE,YAAM,cAAU,gBAAAK,SAAW,UAAU,oBAAoB,SAAS;AAClE,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,YAAM,mBAAe,gBAAAA,SAAW,2BAA2B,iBAAiB;AAC5E,YAAM,mBAAe,gBAAAA;AAAA,QACnB;AAAA,UACE,iBAAiB;AAAA,QACnB;AAAA,QACA;AAAA,MACF;AAEA,aACE,+CAAC,SAAM,WAAW,SAAS,KAAI,MAC5B;AAAA,iBACC,8CAAC,SAAO,GAAG,YAAY,WAAW,cAC/B,gBAAM,OACT;AAAA,QAEF;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACH,GAAG;AAAA,YACJ;AAAA,YACA,WAAW;AAAA,YACX;AAAA,YACA,gBAAc,gBAAgB;AAAA;AAAA,QAChC;AAAA,QACA,8CAAC,gBAAc,GAAG,mBAAmB,cAA4B;AAAA,SACnE;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;;;AChEvB,IAAAC,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,gBAiCIC,sBAfE;AAnBN;AAAA;AAAA;AACA,IAAAD,iBAAwB;AAExB;AA+BI,IAAAC,uBAAA;AAfJ,IAAM,aAAa,CAAC;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA,kBAAkB;AAAA,MAClB,cAAc;AAAA,MACd,GAAG;AAAA,IACL,MAAuB;AACrB,YAAM,qBAAqB;AAI3B,YAAM,oBAAgB,wBAAQ,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC;AAE9D,YAAM,mBACJ;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX,yBAAyB;AAAA;AAAA,MAC3B;AAGF,UAAI,aAAa;AACf,eACE,8CAAC,QAAK,KAAW,GAAG,WACjB,4BACH;AAAA,MAEJ;AAEA,aAAO;AAAA,IACT;AAEA,eAAW,cAAc;AAAA;AAAA;;;ACnDzB,IAAAC,mBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IACAC,iBAGA,cA4BMC,sBAfA;AAjBN;AAAA;AAAA;AACA,IAAAD,kBAAuB;AAEvB,IAAAE;AACA,mBAAO;AA4BD,IAAAD,uBAAA;AAfN,IAAM,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,MAAkB;AAC/C,YAAM;AAAA,QACJ,aAAa,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,cAAU,gBAAAE,SAAW,UAAU,gBAAgB,WAAW,SAAS;AACzE,YAAM,oBAAgB,gBAAAA,SAAW,UAAU,sBAAsB;AACjE,YAAM,qBAAiB,gBAAAA,SAAW,UAAU,2BAA2B;AACvE,YAAM,uBAAmB,gBAAAA,SAAW,UAAU,yBAAyB;AAEvE,aACE,8CAAC,WAAQ,KAAW,GAAG,YAAY,WAAW,SAC5C,yDAAC,QAAK,eAAc,UAAS,WAAW,kBACtC;AAAA,sDAAC,OAAE,WAAW,eAAgB,iBAAM;AAAA,QACpC,8CAAC,OAAE,WAAW,gBAAiB,uBAAY;AAAA,SAC7C,GACF;AAAA,IAEJ;AAEA,UAAM,cAAc;AAAA;AAAA;;;ACxCpB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,iBACAC,gBAuEyBC;AAxEzB;AAAA;AAAA;AAAA,IAAAF,kBAAuB;AACvB,IAAAC,iBAA4C;AAuEnB,IAAAC,uBAAA;AAAA;AAAA;;;ACxEzB,IAAAC,cAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AAAA;AAAA;;;ACDA,IAEAC,iBAGAC,gBAKA,uBAoEQC,sBA1CK;AApCb;AAAA;AAAA;AAAA;AAEA,IAAAF,kBAAuB;AAGvB,IAAAC,iBAAmD;AACnD;AAIA,4BAAO;AAoEC,IAAAC,uBAAA;AA1CD,IAAM,iBAAiB,CAAC,EAAE,KAAK,GAAG,MAAM,MAA2B;AACxE,YAAM;AAAA,QACJ;AAAA,QACA,WAAW;AAAA,QACX;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,QACX;AAAA,QACA,YAAY,CAAC;AAAA,QACb,iBAAiB,CAAC;AAAA,QAClB;AAAA,QACA,GAAG;AAAA,MACL,IAAI;AAEJ,YAAM,CAAC,YAAY,aAAa,QAAI,yBAAS,KAAK;AAClD,YAAM,CAAC,aAAa,cAAc,QAAI,yBAAS,KAAK;AACpD,YAAM,cAAU,uBAAuB,IAAI;AAC3C,YAAM,EAAE,KAAK,IAAI,cAAc;AAG/B,YAAM,aAAS,sBAAM;AACrB,YAAM,iBAAiB,0BAA0B,MAAM;AAGvD,YAAM,iBAAiB,aAAa,KAAK,UAAU,IAAI;AAEvD,oCAAU,MAAM;AACd,YAAI,CAAC,kBAAkB,CAAC,QAAQ,SAAS;AACvC,yBAAe,KAAK;AACpB;AAAA,QACF;AAGA,cAAM,UAAU,QAAQ;AACxB,cAAM,gBAAgB,QAAQ,eAAe,QAAQ;AACrD,uBAAe,aAAa;AAAA,MAC9B,GAAG,CAAC,MAAM,gBAAgB,QAAQ,CAAC;AAGnC,UAAI,cAAc,CAAC,gBAAgB;AACjC,eACE,8CAAC,SAAI,KAAU,WAAuB,GAAG,YACvC,wDAAC,cAAW,MAAY,aAAW,MAAE,GAAG,WAAW,GACrD;AAAA,MAEJ;AAEA,YAAM,wBAAwB,CAAC,aAAsB;AACnD,sBAAc,QAAQ;AACtB,mBAAW,QAAQ;AAAA,MACrB;AAEA,YAAM,cAAU,gBAAAC,SAAW,0BAA0B,SAAS;AAC9D,YAAM,2BAAuB,gBAAAA,SAAW,mCAAmC;AAAA,QACzE,8CAA8C,CAAC;AAAA,MACjD,CAAC;AAGD,YAAM,qBAAqB;AAAA,QACzB,gBAAgB;AAAA,MAClB;AAEA,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,WAAW;AAAA,UACX,eAAY;AAAA,UACX,GAAG;AAAA,UAEJ;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,KAAK;AAAA,gBACL,WAAW;AAAA,gBACX,OAAO;AAAA,gBACP,eAAY;AAAA,gBACZ,oBAAkB,cAAc,iBAAiB;AAAA,gBAEjD,wDAAC,cAAW,aAAY,QAAO,aAAW,MAAC,MAAa,GAAG,WAAW;AAAA;AAAA,YACxE;AAAA,YACC,eACC;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA;AAAA,gBACA,gBAAe;AAAA,gBACf,UAAU;AAAA,gBACV,SAAS,CAAC,MAAyB;AACjC,qBAAG,gBAAgB;AAAA,gBACrB;AAAA,gBACA,IAAI;AAAA,gBACH,GAAG;AAAA;AAAA,YACN;AAAA;AAAA;AAAA,MAEJ;AAAA,IAEJ;AAEA,mBAAe,cAAc;AAAA;AAAA;;;ACnI7B,IAAAC,uBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA,IAGAC,gBACA,oBA0OIC,sBAlLE,kBAoDA,gBAgDA,gBA0CA,uBAsDA,yBA8BA;AA9RN;AAAA;AAAA;AAAA;AAGA,IAAAD,iBAAuC;AACvC,yBAAyB;AAGzB,IAAAE;AAuOI,IAAAD,uBAAA;AAlLJ,IAAM,mBAAmB,CACvB,UACA,gBACA,SACG;AACH,iBAAO;AAAA,QACL,CAAC,aAAqB,iBAAyC;AAE7D,cAAI,CAAC,UAAU;AACb;AAAA,UACF;AAKA,gBAAM,iBAAiB;AACvB,gBAAM,WAAW,aAAa;AAG9B,gBAAM,cAAc,iBAAiB,iBAAiB;AAItD,mBAAS;AAAA,YACP,QAAQ,EAAE,MAAM,OAAO,YAAY;AAAA,UACrC,CAAkC;AAAA,QACpC;AAAA,QACA,CAAC,UAAU,gBAAgB,IAAI;AAAA,MACjC;AAAA,IACF;AAuBA,IAAM,iBAAiB,CACrB,UACA,iBACG;AACH,iBAAO;AAAA,QACL,CAAC,YAAqC;AAEpC,mBAAS,UAAU;AAMnB,cAAI,OAAO,iBAAiB,YAAY;AACtC,yBAAa,OAAO;AAAA,UACtB,WAES,cAAc;AACrB,yBAAa,UAAU;AAAA,UACzB;AAAA,QAGF;AAAA,QACA,CAAC,UAAU,YAAY;AAAA,MACzB;AAAA,IACF;AAuBA,IAAM,iBAAiB,CACrB,QACA,SACA,gBACA,SACG;AACH,iBAAO;AAAA,QACL,CAAC,UAA+B;AAE9B,cAAI,CAAC,UAAU,CAAC,QAAQ,SAAS;AAC/B;AAAA,UACF;AAKA,gBAAM,iBAAiB,QAAQ,QAAQ;AACvC,gBAAM,WAAW,QAAQ,QAAQ;AAGjC,gBAAM,cAAc,iBAAiB,iBAAiB;AAItD,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,QAAQ,EAAE,GAAG,MAAM,QAAQ,MAAM,OAAO,YAAY;AAAA,UACtD,CAAwB;AAAA,QAC1B;AAAA,QACA,CAAC,QAAQ,SAAS,gBAAgB,IAAI;AAAA,MACxC;AAAA,IACF;AAWA,IAAM,wBAAwB,CAAC;AAAA,MAC7B;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAGM;AACJ,YAAM,WAAW,iBAAiB,UAAU,gBAAgB,IAAI;AAChE,YAAM,EAAE,KAAK,UAAU,SAAS,SAAS,QAAI,6BAAS,MAAM,EAAE,SAAS,CAAC;AAExE,YAAM,cAAc,eAAe,UAAU,YAAY;AACzD,YAAM,aAAa,eAAe,QAAQ,SAAS,gBAAgB,IAAI;AAGvE,oCAAU,MAAM;AACd,YAAI,CAAC,QAAQ,SAAS;AACpB;AAAA,QACF;AAEA,cAAM,cAAc,MAAM,SAAS;AACnC,cAAM,gBAAgB,QAAQ,QAAQ;AACtC,cAAM,kBAAkB,QAAQ,QAAQ;AAGxC,YAAI,kBAAkB,eAAe,oBAAoB,aAAa;AACpE,mBAAS,WAAW;AAAA,QACtB;AAAA,MACF,GAAG,CAAC,OAAO,SAAS,UAAU,QAAQ,CAAC;AAEvC,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL;AAAA,UACA,QAAQ;AAAA;AAAA,MACV;AAAA,IAEJ;AAWA,IAAM,0BAA0B,CAAC;AAAA,MAC/B;AAAA,MACA,iBAAiB;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL,MAGM;AACJ,YAAM,WAAW,iBAAiB,UAAU,gBAAgB,IAAI;AAChE,YAAM,EAAE,KAAK,UAAU,QAAQ,QAAI,6BAAS,MAAM,EAAE,SAAS,CAAC;AAE9D,YAAM,cAAc,eAAe,UAAU,YAAY;AACzD,YAAM,aAAa,eAAe,QAAQ,SAAS,gBAAgB,IAAI;AAEvE,aACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL;AAAA,UACA,QAAQ;AAAA,UACR,cAAc,cAAc,SAAS;AAAA;AAAA,MACvC;AAAA,IAEJ;AAEA,IAAM,cAAc,CAAC,EAAE,KAAK,cAAc,GAAG,MAAM,MAAwB;AACzE,YAAM,EAAE,OAAO,cAAc,GAAG,KAAK,IAAI;AAKzC,UAAI,WAAW,OAAO;AACpB,eACE;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ,OAAO,SAAS;AAAA,YAChB;AAAA;AAAA,QACF;AAAA,MAEJ,OAAO;AACL,eACE;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACJ;AAAA,YACA;AAAA;AAAA,QACF;AAAA,MAEJ;AAAA,IACF;AAEA,gBAAY,cAAc;AAAA;AAAA;;;AC5SnB,SAASE,aAAY,OAAyB;AACnD,QAAM;AAAA,IACJ,MAAM;AAAA,IACN,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,KAAK;AAAA,IACL,GAAG;AAAA,EACL,IAAI;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,UACE;AAAA,QAAC;AAAA;AAAA,UACE,GAAG;AAAA,UACJ,KAAK;AAAA,UACL,MAAK;AAAA,UACL,YAAU;AAAA,UACV,YAAU;AAAA;AAAA,MACZ;AAAA;AAAA,EAEJ;AAEJ;AAjCA,IAEA,kBAqBQC,sBAhBF;AAPN,IAAAC,oBAAA;AAAA;AAAA;AAAA;AAEA,uBAAqB;AACrB,IAAAC;AAoBQ,IAAAF,uBAAA;AAhBR,IAAM,0BAAsB,iBAAAG,SAAS,MAAM,yEAAyB;AAAA,MAClE,kBAAkB,SAAO,IAAI;AAAA,IAC/B,CAAC;AA0BD,IAAAJ,aAAY,cAAc;AAAA;AAAA;;;ACnC1B;AAAA;AAAA;AAAA,IAAAK;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AACA,IAAAC;AAAA;AAAA;;;ACjDA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAAA;;;ACHA;AAAA;AAAA;AAAA;AAEA;AACA;AACA,IAAAC;AAAA;AAAA;;;ACJA,IAAAC,gBACAC,iBAGAC,sBAkBIC,sBAVS;AAZb;AAAA;AAAA;AAAA,IAAAH,iBAAsB;AACtB,IAAAC,kBAAuB;AACvB;AACA,IAAAG;AACA,IAAAF,uBAAO;AAkBH,IAAAC,uBAAA;AAVG,IAAM,eAAe,CAAC;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,IACF,MAAyB;AACvB,YAAM,cAAU,gBAAAE,SAAW,UAAU,wBAAwB,SAAS;AAEtE,UAAI,CAAC,aAAc,QAAO;AAE1B,aACE,+CAAC,SAAI,IAAQ,WAAW,SAAS,eAAY,gBAAe,MAAK,SAC/D;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAU;AAAA,YACV,eAAY;AAAA;AAAA,QACd;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,aAAY;AAAA,YACZ,WAAU;AAAA,YACV,MAAM;AAAA;AAAA,QACR;AAAA,SACF;AAAA,IAEJ;AAEA,iBAAa,cAAc;AAAA;AAAA;;;ACrC3B,IAAAC,qBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAGAC,gBACAC,iBACAC,gBAOAC,kBAsEMC,sBApEO;AAdb,IAAAC,iBAAA;AAAA;AAGA,IAAAL,iBAAmD;AACnD,IAAAC,kBAAuB;AACvB,IAAAC,iBAAmC;AACnC,IAAAI;AAEA;AACA;AACA,IAAAC;AACA,IAAAC;AACA,IAAAL,mBAAO;AAsED,IAAAC,uBAAA;AApEC,IAAM,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,MAAqB;AAC5D,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,kBAAkB;AAAA,QAClB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,CAAC,kBAAkB,GAAG;AAAA,QACtB,GAAG;AAAA,MACL,IAAI;AACJ,YAAM,CAAC,SAAS,UAAU,QAAI,yBAAkB,eAAe;AAC/D,YAAM,kBAAc,uBAAyB,IAAI;AACjD,YAAM,SAAS,OAAO;AACtB,YAAM,cAAU,sBAAM;AAEtB,YAAM,eAAe,OAAO,aAAa;AACzC,oCAAU,MAAM;AACd,YAAI,cAAc;AAChB,qBAAW,QAAQ;AAAA,QACrB;AAAA,MACF,GAAG,CAAC,UAAU,YAAY,CAAC;AAE3B,YAAM,oBAAoB,qBAAqB,EAAE,UAAU,CAAC;AAC5D,YAAM,oBAAgB,gBAAAK;AAAA,QACpB;AAAA,UACE,iBAAiB;AAAA,UACjB,iBAAiB;AAAA,UACjB,iBAAiB,OAAO,eAAe,aAAa;AAAA,UACpD,iBAAiB,OAAO,eAAe,aAAa,CAAC;AAAA,QACvD;AAAA,QACA;AAAA,MACF;AAEA,YAAM,qBAAiB,gBAAAA;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,YAAM,mBAAe,gBAAAA,SAAW,0BAA0B,aAAa;AACvE,YAAM,mBAAe,gBAAAA,SAAW,0BAA0B,aAAa;AACvE,YAAM,kBAAc,gBAAAA,SAAW,yBAAyB,aAAa;AACrE,YAAM,qBAAiB,sBAAM;AAC7B,YAAM,yBAAyB,eAAe,iBAAiB;AAC/D,YAAM,cAAc,mBAAmB;AAAA,QACrC;AAAA,QACA;AAAA,MACF,CAAC;AACD,YAAM,cAAU,sBAAM;AAEtB,YAAM,eAAe,CAAC,UAA4C;AAChE,mBAAW,CAAC,OAAO;AACnB,YAAI,UAAU;AACZ,mBAAS,OAAO,UAAU;AAAA,QAC5B;AAAA,MACF;AAEA,aACE,+CAAC,SAAM,KAAI,MAAK,WAAW,gBACzB;AAAA,uDAAC,WAAM,WAAW,cAChB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,oBAAkB;AAAA,cAClB,qBAAmB;AAAA,cACnB,gBAAc;AAAA,cACd,mBAAiB;AAAA,cACjB,UAAU;AAAA,cACV,UAAU;AAAA,cACV,KAAK;AAAA,cACL,WAAW;AAAA,cACX,UAAU;AAAA,cACV,MAAK;AAAA,cACL;AAAA,cACA,UAAU;AAAA,cACV,IAAI,MAAM;AAAA,cACV;AAAA,cACA;AAAA,cACC,GAAG;AAAA;AAAA,UACN;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,UAAU,4BAAa;AAAA,cAC7B,MAAK;AAAA,cACL,WAAW;AAAA;AAAA,UACb;AAAA,UACA,8CAAC,UAAK,IAAI,SAAS,WAAU,kCAC1B,iBACH;AAAA,WACF;AAAA,QACA,8CAAC,gBAAa,IAAI,gBAAgB,cAA4B;AAAA,SAChE;AAAA,IAEJ;AAEA,aAAS,cAAc;AAAA;AAAA;",
|
|
6
6
|
"names": ["classNames", "init_Flex", "classNames", "import_dedupe", "import_jsx_runtime", "init_types", "init_Icon", "init_types", "import_dedupe", "import_jsx_runtime", "init_Flex", "init_Icon", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "init_Divider", "import_react", "import_dedupe", "import_jsx_runtime", "init_Divider", "classNames", "isOpen", "init_Accordion", "import_mobius_hooks", "import_react", "init_useBreakpoint", "import_react", "init_useButton", "import_react", "error", "init_useDialogPolyfill", "import_react", "import_mobius_hooks", "init_useDialogPolyfill", "init_useDialog", "import_react", "init_useLabel", "import_react", "init_types", "init_useTextField", "init_types", "init_useValidationClasses", "init_useBreakpoint", "init_useButton", "init_useDialog", "init_useDialogPolyfill", "init_useLabel", "init_useTextField", "init_useValidationClasses", "import_dedupe", "import_jsx_runtime", "classNames", "init_Label", "import_dedupe", "import_jsx_runtime", "classNames", "init_Stack", "import_dedupe", "import_react", "classNames", "import_dedupe", "import_jsx_runtime", "init_ErrorMessage", "init_Label", "init_Stack", "classNames", "init_TextField", "import_jsx_runtime", "init_VisuallyHidden", "init_utils", "import_react", "import_dedupe", "import_jsx_runtime", "init_utils", "classNames", "import_dedupe", "import_jsx_runtime", "init_utils", "classNames", "import_react", "init_utils", "error", "import_mobius_hooks", "import_react", "init_utils", "import_mobius_hooks", "import_dedupe", "import_react", "import_jsx_runtime", "init_TextField", "init_VisuallyHidden", "init_utils", "error", "classNames", "init_types", "init_Combobox", "init_types", "init_utils", "import_icons", "import_react", "import_jsx_runtime", "init_Combobox", "init_Icon", "init_utils", "error", "init_types", "init_AddressLookup", "init_types", "import_icons", "import_dedupe", "import_jsx_runtime", "init_Icon", "classNames", "init_Alert", "import_dedupe", "import_jsx_runtime", "classNames", "init_Box", "import_react", "import_dedupe", "import_jsx_runtime", "classNames", "import_react", "import_dedupe", "import_jsx_runtime", "init_Box", "classNames", "init_Breadcrumbs", "import_icons", "import_jsx_runtime", "init_Icon", "init_VisuallyHidden", "import_icons", "import_jsx_runtime", "init_Icon", "init_VisuallyHidden", "import_dedupe", "import_jsx_runtime", "init_useButton", "classNames", "init_Button", "import_dedupe", "import_react", "import_jsx_runtime", "init_ErrorMessage", "init_Label", "init_Checkbox", "classNames", "init_types", "init_Checkbox", "init_types", "import_dedupe", "import_jsx_runtime", "classNames", "init_Container", "import_dedupe", "import_react", "import_jsx_runtime", "init_TextField", "error", "classNames", "init_DateField", "import_jsx_runtime", "import_react", "import_dedupe", "import_react", "import_jsx_runtime", "init_VisuallyHidden", "classNames", "import_react", "import_icons", "import_jsx_runtime", "init_Button", "init_Icon", "Drawer", "init_Drawer", "import_react", "import_dedupe", "import_jsx_runtime", "init_Button", "useDropdownMenu", "classNames", "import_react", "import_dedupe", "import_jsx_runtime", "classNames", "DropdownMenu", "init_DropdownMenu", "import_dedupe", "import_react", "import_jsx_runtime", "init_Flex", "classNames", "init_Fieldset", "import_dedupe", "import_jsx_runtime", "classNames", "import_react", "import_dedupe", "import_jsx_runtime", "init_Item", "classNames", "Grid", "init_Grid", "init_Item", "import_dedupe", "import_jsx_runtime", "classNames", "init_Image", "import_dedupe", "import_jsx_runtime", "classNames", "init_Link", "import_dedupe", "import_jsx_runtime", "init_LinkButton", "import_react", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "init_List", "import_dedupe", "import_icons", "import_jsx_runtime", "init_Icon", "classNames", "init_LoadingIndicator", "import_dedupe", "import_jsx_runtime", "classNames", "init_Logo", "import_jsx_runtime", "Content", "init_Content", "import_react", "import_react", "import_icons", "import_jsx_runtime", "Header", "init_Header", "init_Button", "init_Icon", "import_dedupe", "import_react", "import_jsx_runtime", "TRANSITION_CSS_VARIABLE", "classNames", "Modal", "init_Modal", "init_Content", "init_Header", "Header", "Content", "import_dedupe", "import_react", "import_jsx_runtime", "init_TextField", "classNames", "init_NumberField", "import_jsx_runtime", "Option", "init_Option", "init_Option", "import_icons", "import_jsx_runtime", "import_dedupe", "import_react", "import_jsx_runtime", "init_TextField", "classNames", "init_PasswordField", "import_react", "import_icons", "import_dedupe", "import_mobius_hooks", "import_jsx_runtime", "init_Popover", "import_dedupe", "import_react", "import_jsx_runtime", "init_Label", "init_VisuallyHidden", "classNames", "init_Progress", "import_dedupe", "import_react", "import_jsx_runtime", "init_ErrorMessage", "init_Label", "props", "classNames", "import_dedupe", "import_react", "import_jsx_runtime", "init_ErrorMessage", "init_Label", "init_Stack", "classNames", "init_Radio", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "init_Segment", "import_icons", "import_dedupe", "import_react", "import_jsx_runtime", "init_useLabel", "init_ErrorMessage", "init_Icon", "init_Label", "init_Stack", "classNames", "init_Select", "import_dedupe", "import_react", "import_jsx_runtime", "init_Slider", "import_react", "import_dedupe", "import_jsx_runtime", "classNames", "init_SVG", "import_react", "import_dedupe", "import_jsx_runtime", "init_VisuallyHidden", "classNames", "init_Switch", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "import_dedupe", "import_jsx_runtime", "classNames", "Table", "init_Table", "import_dedupe", "import_jsx_runtime", "classNames", "init_Text", "import_dedupe", "import_jsx_runtime", "classNames", "init_TextAreaInput", "import_dedupe", "import_jsx_runtime", "init_ErrorMessage", "init_Label", "init_Stack", "init_TextAreaInput", "classNames", "init_TextArea", "import_react", "import_jsx_runtime", "init_TextOrHTML", "import_dedupe", "import_jsx_runtime", "init_Flex", "classNames", "init_Title", "import_dedupe", "import_react", "import_jsx_runtime", "init_types", "init_Trust", "init_types", "import_dedupe", "import_react", "import_jsx_runtime", "classNames", "init_ExpandableText", "import_react", "import_jsx_runtime", "init_TextField", "MaskedField", "import_jsx_runtime", "init_MaskedField", "init_TextField", "loadable", "init_Accordion", "init_AddressLookup", "init_Alert", "init_Box", "init_Breadcrumbs", "init_Button", "init_Combobox", "init_Container", "init_DateField", "init_Divider", "init_Drawer", "init_DropdownMenu", "init_ErrorMessage", "init_Fieldset", "init_Flex", "init_Grid", "init_Icon", "init_Image", "init_Label", "init_Link", "init_LinkButton", "init_List", "init_LoadingIndicator", "init_Logo", "init_Modal", "init_NumberField", "init_Option", "init_PasswordField", "init_Popover", "init_Progress", "init_Radio", "init_Segment", "init_Select", "init_Slider", "init_Stack", "init_SVG", "init_Switch", "init_Table", "init_Text", "init_TextArea", "init_TextAreaInput", "init_TextField", "init_TextOrHTML", "init_Title", "init_Trust", "init_ExpandableText", "init_VisuallyHidden", "init_MaskedField", "init_types", "init_types", "import_icons", "import_dedupe", "import_ErrorMessage", "import_jsx_runtime", "init_Icon", "classNames", "init_ErrorMessage", "import_react", "import_dedupe", "import_icons", "import_Checkbox", "import_jsx_runtime", "init_Checkbox", "init_ErrorMessage", "init_Icon", "init_Stack", "classNames"]
|
|
7
7
|
}
|