react-floater
Version:
Floaters everywhere!
1 lines • 58.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.tsx","../src/components/Floater/index.tsx","../src/components/Floater/Arrow.tsx","../src/components/Floater/Container.tsx","../src/components/Floater/CloseButton.tsx","../src/literals.ts","../src/modules/helpers.ts","../src/components/Portal.tsx","../src/modules/hooks.ts","../src/components/Wrapper.tsx","../src/modules/styles.ts"],"sourcesContent":["import * as React from 'react';\nimport { PlainObject } from '@gilbarbara/types';\nimport { createPopper, Instance, ModifierArguments } from '@popperjs/core';\nimport is from 'is-lite';\nimport useTreeChanges from 'tree-changes-hook';\n\nimport Floater from './components/Floater';\nimport Portal from './components/Portal';\nimport Wrapper from './components/Wrapper';\nimport { POSITIONING_PROPS, STATUS } from './literals';\nimport {\n canUseDOM,\n enhanceProps,\n getFallbackPlacements,\n getModifiers,\n isFixed,\n isMobile,\n log,\n mergeModifier,\n once,\n randomId,\n} from './modules/helpers';\nimport { useMount, useSingleton, useUnmount, useUpdateEffect } from './modules/hooks';\nimport getStyles from './modules/styles';\nimport { Props, State, Statuses, Styles } from './types';\n\nexport default function ReactFloater(props: Props) {\n const {\n autoOpen = false,\n callback,\n children,\n component,\n content,\n debug = false,\n disableFlip = false,\n disableHoverToClick = false,\n event = 'click',\n eventDelay = 0.4,\n footer,\n getPopper,\n hideArrow = false,\n id,\n modifiers,\n offset = 15,\n open,\n placement = 'bottom',\n portalElement,\n showCloseButton = false,\n style,\n styles,\n target,\n title,\n wrapperOptions,\n } = enhanceProps(props);\n\n const [state, setState] = React.useReducer(\n (previousState: State, nextState: Partial<State>) => ({\n ...previousState,\n ...nextState,\n }),\n {\n currentPlacement: placement,\n positionWrapper: !!wrapperOptions?.position && !!target,\n status: STATUS.INIT,\n statusWrapper: STATUS.INIT,\n },\n );\n\n const arrowRef = React.useRef<HTMLSpanElement>(null);\n const childRef = React.useRef<HTMLElement>(null);\n const eventDelayTimer = React.useRef<number>();\n const floaterRef = React.useRef<HTMLDivElement>(null);\n const internalId = React.useRef(randomId());\n const isMounted = React.useRef(false);\n const popperRef = React.useRef<Instance>();\n const stateRef = React.useRef<State>(state);\n const wrapperPopper = React.useRef<Instance>();\n const wrapperRef = React.useRef<HTMLSpanElement>(null);\n const wrapperStyles = React.useRef<React.CSSProperties>({});\n\n const { currentPlacement, positionWrapper, status, statusWrapper } = state;\n\n const { changed } = useTreeChanges(state);\n const { changed: changedProps } = useTreeChanges(props);\n\n const updateState = React.useCallback(\n (nextState: Partial<State>, callback_?: () => void) => {\n if (isMounted.current) {\n setState(nextState);\n stateRef.current = { ...state, ...nextState };\n\n if (callback_) {\n callback_();\n }\n }\n },\n [setState, state],\n );\n\n const toggle = React.useCallback(\n (forceStatus?: Statuses) => {\n let nextStatus: Statuses =\n stateRef.current.status === STATUS.OPEN ? STATUS.CLOSING : STATUS.RENDER;\n\n if (!is.undefined(forceStatus)) {\n nextStatus = forceStatus;\n }\n\n updateState({\n status: nextStatus,\n statusWrapper: nextStatus === STATUS.CLOSING ? STATUS.RENDER : STATUS.IDLE,\n });\n },\n [updateState],\n );\n\n const targetElement = React.useRef(() => {\n if (!canUseDOM()) {\n return null;\n }\n\n if (target) {\n if (is.domElement(target)) {\n return target;\n }\n\n return document.querySelector(target) as HTMLElement;\n }\n\n return childRef.current ?? wrapperRef.current;\n });\n\n const currentDebug = React.useMemo(() => {\n return canUseDOM() && (debug || !!window.ReactFloaterDebug);\n }, [debug]);\n\n const currentEvent = React.useMemo(() => {\n if (event === 'hover' && isMobile() && !disableHoverToClick) {\n return 'click';\n }\n\n return event;\n }, [disableHoverToClick, event]);\n\n const currentStyles = React.useMemo(() => {\n const nextStyles: Styles = getStyles(styles);\n const element = targetElement.current();\n\n if (positionWrapper) {\n let wrapperCurrentStyles: React.CSSProperties | undefined;\n\n if (status !== STATUS.IDLE) {\n wrapperCurrentStyles = nextStyles.wrapperPosition;\n } else if (statusWrapper === STATUS.RENDER) {\n wrapperCurrentStyles = wrapperPopper.current?.state.styles;\n }\n\n nextStyles.wrapper = {\n ...nextStyles.wrapper,\n ...wrapperCurrentStyles,\n };\n }\n\n if (element) {\n const targetStyles = window.getComputedStyle(element);\n\n if (wrapperStyles.current) {\n nextStyles.wrapper = {\n ...nextStyles.wrapper,\n ...wrapperStyles.current,\n };\n } else if (!['relative', 'static'].includes(targetStyles.position)) {\n wrapperStyles.current = {};\n\n if (!positionWrapper) {\n POSITIONING_PROPS.forEach(d => {\n // eslint-disable-next-line unicorn/prefer-ternary\n if (d === 'position') {\n wrapperStyles.current[d] = targetStyles[d] as React.CSSProperties['position'];\n } else {\n wrapperStyles.current[d] = targetStyles[d];\n }\n });\n\n nextStyles.wrapper = {\n ...nextStyles.wrapper,\n ...wrapperStyles.current,\n };\n }\n }\n }\n\n return nextStyles;\n }, [positionWrapper, status, statusWrapper, styles]);\n\n const initPopper = React.useRef(() => {\n const nextStatus = stateRef.current.status === STATUS.RENDER ? STATUS.OPENING : STATUS.IDLE;\n const element = targetElement.current();\n\n if (placement === 'center') {\n setTimeout(() => {\n updateState({ status: nextStatus });\n }, 100);\n } else if (element) {\n if (floaterRef.current) {\n const { arrow, flip, offset: offsetModifier, ...rest } = getModifiers(modifiers);\n\n popperRef.current = createPopper(element, floaterRef.current, {\n placement,\n strategy: isFixed(targetElement.current()) ? 'fixed' : 'absolute',\n modifiers: [\n mergeModifier(\n {\n name: 'arrow',\n enabled: !hideArrow,\n options: {\n element: arrowRef.current,\n padding: 8,\n },\n },\n arrow,\n ),\n mergeModifier(\n {\n name: 'flip',\n enabled: !disableFlip,\n options: {\n altAxis: false,\n fallbackPlacements: getFallbackPlacements(placement || 'bottom'),\n },\n },\n flip,\n ),\n mergeModifier(\n {\n name: 'offset',\n enabled: true,\n options: {\n offset: [0, offset],\n },\n },\n offsetModifier,\n ),\n {\n name: 'updatePlacement',\n enabled: true,\n phase: 'afterWrite',\n fn: ({ instance, state: popperState }: ModifierArguments<PlainObject>) => {\n if (popperState.placement !== stateRef.current.currentPlacement) {\n popperRef.current = instance;\n updateState({ currentPlacement: popperState.placement });\n }\n },\n },\n {\n name: 'applyArrowStyle',\n enabled: true,\n phase: 'write',\n fn: ({ state: popperState }: ModifierArguments<PlainObject>) => {\n const {\n elements: { arrow: stateArrow },\n placement: statePlacement,\n } = popperState;\n\n if (stateArrow) {\n if (statePlacement.startsWith('top')) {\n stateArrow.style.bottom = '0px';\n stateArrow.style.right = '';\n } else if (statePlacement.startsWith('bottom')) {\n stateArrow.style.top = '0px';\n stateArrow.style.right = '';\n } else if (statePlacement.startsWith('left')) {\n stateArrow.style.right = '0px';\n stateArrow.style.bottom = '';\n } else if (statePlacement.startsWith('right')) {\n stateArrow.style.left = '0px';\n stateArrow.style.bottom = '';\n }\n }\n },\n },\n ...Object.values(rest),\n ],\n onFirstUpdate: popperState => {\n updateState({\n currentPlacement: popperState.placement,\n status: nextStatus,\n });\n\n if (placement !== popperState.placement) {\n setTimeout(() => {\n popperRef.current?.forceUpdate();\n });\n }\n },\n });\n\n if (getPopper && popperRef.current) {\n getPopper(popperRef.current, 'floater');\n }\n } else {\n updateState({\n status: STATUS.IDLE,\n });\n }\n\n if (wrapperRef.current && !wrapperPopper.current && stateRef.current.positionWrapper) {\n const wrapperOffset = wrapperOptions?.offset ? wrapperOptions.offset : 0;\n\n wrapperPopper.current = createPopper(element, wrapperRef.current, {\n placement: wrapperOptions?.placement ?? placement,\n modifiers: [\n {\n name: 'arrow',\n enabled: false,\n },\n {\n name: 'offset',\n options: {\n offset: [0, wrapperOffset],\n },\n },\n {\n name: 'flip',\n enabled: false,\n },\n ],\n onFirstUpdate: popperState => {\n updateState({ statusWrapper: STATUS.RENDER });\n\n if (placement !== popperState.placement) {\n setTimeout(() => {\n wrapperPopper.current?.forceUpdate();\n });\n }\n },\n });\n\n if (getPopper) {\n getPopper(wrapperPopper.current, 'wrapper');\n }\n }\n }\n });\n\n const handleLoad = React.useRef(() => {\n if (popperRef.current) {\n popperRef.current.forceUpdate();\n }\n\n if (wrapperPopper.current) {\n wrapperPopper.current.forceUpdate();\n }\n });\n\n const handleTransitionEnd = React.useRef(() => {\n if (wrapperPopper.current) {\n wrapperPopper.current.forceUpdate();\n }\n\n updateState(\n {\n status: stateRef.current.status === STATUS.OPENING ? STATUS.OPEN : STATUS.IDLE,\n },\n () => {\n if (callback) {\n callback(stateRef.current.status === STATUS.OPEN ? 'open' : 'close', enhanceProps(props));\n }\n },\n );\n });\n\n const handleClick = React.useCallback(() => {\n if (is.boolean(open)) {\n return;\n }\n\n if (currentEvent === 'click' || (currentEvent === 'hover' && positionWrapper)) {\n log({\n title: 'click',\n data: [{ event, status: status === STATUS.OPEN ? 'closing' : 'opening' }],\n debug: currentDebug,\n });\n\n toggle(status === 'idle' ? STATUS.RENDER : undefined);\n }\n }, [currentDebug, currentEvent, event, open, positionWrapper, status, toggle]);\n\n const handleMouseEnter = React.useCallback(() => {\n if (is.boolean(open) || isMobile() || currentEvent !== 'hover') {\n return;\n }\n\n log({\n title: 'mouseEnter',\n data: [{ key: 'originalEvent', value: event }],\n debug: currentDebug,\n });\n\n if (status === STATUS.IDLE) {\n clearTimeout(eventDelayTimer.current);\n eventDelayTimer.current = undefined;\n toggle(STATUS.RENDER);\n }\n }, [currentDebug, currentEvent, event, open, status, toggle]);\n\n const handleMouseLeave = React.useCallback(() => {\n if (is.boolean(open) || isMobile()) {\n return;\n }\n\n if (currentEvent === 'hover') {\n log({\n title: 'mouseLeave',\n data: [{ key: 'originalEvent', value: event }],\n debug: currentDebug,\n });\n\n const hasOpenStatus = ([STATUS.OPENING, STATUS.OPEN] as Statuses[]).includes(status);\n\n if (!eventDelay) {\n toggle(status === STATUS.CLOSING ? STATUS.IDLE : STATUS.CLOSING);\n } else if (!positionWrapper) {\n if (hasOpenStatus) {\n clearTimeout(eventDelayTimer.current);\n eventDelayTimer.current = window.setTimeout(() => {\n toggle();\n eventDelayTimer.current = undefined;\n }, eventDelay * 1000);\n }\n }\n }\n }, [currentDebug, currentEvent, event, eventDelay, open, positionWrapper, status, toggle]);\n\n const handleWrapperMount = React.useCallback(() => {\n if (positionWrapper) {\n initPopper.current();\n }\n }, [positionWrapper]);\n\n const cleanUp = () => {\n if (popperRef.current) {\n popperRef.current.destroy();\n popperRef.current = undefined;\n }\n\n if (wrapperPopper.current) {\n wrapperPopper.current.destroy();\n wrapperPopper.current = undefined;\n }\n };\n\n useSingleton(() => {\n if (canUseDOM()) {\n window.addEventListener('load', handleLoad.current);\n }\n });\n\n useMount(() => {\n isMounted.current = true;\n\n log({\n title: 'init',\n data: {\n hasChildren: !!children,\n hasTarget: !!target,\n isControlled: is.boolean(open),\n positionWrapper,\n target: targetElement.current(),\n floater: floaterRef.current,\n },\n debug: currentDebug,\n });\n\n initPopper.current();\n });\n\n useUnmount(() => {\n isMounted.current = false;\n\n cleanUp();\n window.removeEventListener('load', handleLoad.current);\n });\n\n // handle changes\n useUpdateEffect(() => {\n if (!canUseDOM()) {\n return;\n }\n\n if (changedProps('open')) {\n let forceStatus;\n\n // always follow `open` in controlled mode\n if (is.boolean(open)) {\n forceStatus = open ? STATUS.RENDER : STATUS.CLOSING;\n }\n\n toggle(forceStatus);\n }\n\n if (changedProps('wrapperOptions.position') || changedProps('target')) {\n updateState({\n positionWrapper: !!wrapperOptions?.position && !!target,\n });\n }\n\n if (\n (changed('status', STATUS.IDLE) && open) ||\n (changed('status', STATUS.IDLE, STATUS.INIT) && autoOpen)\n ) {\n toggle(STATUS.RENDER);\n }\n\n if (changed('status', STATUS.RENDER)) {\n if (popperRef.current) {\n popperRef.current.destroy();\n }\n\n initPopper.current();\n }\n\n if (floaterRef.current && changed('status', [STATUS.RENDER, STATUS.CLOSING])) {\n once(floaterRef.current, 'transitionend', handleTransitionEnd.current);\n }\n\n if (changed('status', STATUS.IDLE, STATUS.CLOSING) && popperRef.current) {\n popperRef.current.destroy();\n popperRef.current = undefined;\n\n if (wrapperPopper.current) {\n wrapperPopper.current.forceUpdate();\n }\n }\n });\n\n const wrapper = (\n <Wrapper\n childRef={childRef}\n id={id ?? internalId.current}\n isControlled={is.boolean(open)}\n onClick={handleClick}\n onMount={handleWrapperMount}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n status={status}\n style={style}\n styles={currentStyles.wrapper}\n wrapperRef={wrapperRef}\n >\n {children}\n </Wrapper>\n );\n\n return (\n <>\n <Portal\n hasChildren={!!children}\n internalId={internalId.current}\n placement={currentPlacement}\n portalElement={portalElement}\n target={target}\n zIndex={currentStyles.options.zIndex}\n >\n <Floater\n arrowRef={arrowRef}\n component={component}\n content={content}\n floaterRef={floaterRef}\n footer={footer}\n hideArrow={hideArrow || currentPlacement === 'center'}\n id={id ?? internalId.current}\n onClick={handleClick}\n placement={currentPlacement}\n positionWrapper={positionWrapper}\n showCloseButton={showCloseButton}\n status={status}\n styles={currentStyles}\n title={title}\n />\n {positionWrapper && wrapper}\n </Portal>\n {!positionWrapper && wrapper}\n </>\n );\n}\n\nexport type {\n Action,\n CustomComponentProps,\n Placement,\n PopperInstance,\n Props,\n Styles,\n} from './types';\n","import * as React from 'react';\nimport { PlainObject } from '@gilbarbara/types';\n\nimport Arrow from './Arrow';\nimport Container from './Container';\n\nimport { STATUS } from '../../literals';\nimport { isValidElement } from '../../modules/helpers';\nimport { CloseFunction, FloaterComponent, Statuses, Styles } from '../../types';\n\ninterface Props {\n arrowRef: React.Ref<HTMLSpanElement>;\n component?: FloaterComponent;\n content?: React.ReactNode;\n floaterRef: React.Ref<HTMLDivElement>;\n footer?: React.ReactNode;\n hideArrow: boolean;\n id: string;\n onClick: CloseFunction;\n placement: string;\n positionWrapper: boolean;\n showCloseButton?: boolean;\n status: Statuses;\n styles: Styles;\n title?: React.ReactNode;\n}\n\nfunction Floater(props: Props) {\n const {\n component,\n content,\n floaterRef,\n hideArrow,\n id,\n onClick: closeFn,\n placement,\n status,\n styles,\n } = props;\n\n const style = React.useMemo(() => {\n const {\n arrow: { length },\n floater,\n floaterCentered,\n floaterClosing,\n floaterOpening,\n floaterWithComponent,\n } = styles;\n let element: React.CSSProperties = { ...floater };\n\n if (!hideArrow) {\n if (placement.startsWith('top')) {\n element.padding = `0 0 ${length}px`;\n } else if (placement.startsWith('bottom')) {\n element.padding = `${length}px 0 0`;\n } else if (placement.startsWith('left')) {\n element.padding = `0 ${length}px 0 0`;\n } else if (placement.startsWith('right')) {\n element.padding = `0 0 0 ${length}px`;\n }\n }\n\n if (status === STATUS.CLOSING) {\n element = { ...element, ...floaterClosing };\n }\n\n if (status === STATUS.OPENING || status === STATUS.OPEN) {\n element = { ...element, ...floaterOpening };\n }\n\n if (placement === 'center') {\n element = { ...element, ...floaterCentered };\n }\n\n if (component) {\n element = { ...element, ...floaterWithComponent };\n }\n\n return element;\n }, [component, hideArrow, placement, status, styles]);\n\n const shouldRender = ['render', 'open', 'opening', 'closing'].includes(status);\n\n const output: PlainObject<React.ReactNode> = {};\n const classes = ['__floater'];\n const baseProps = { id, role: 'tooltip' };\n\n if (component) {\n const componentProps = { closeFn, ...baseProps };\n\n output.content = isValidElement(component)\n ? React.cloneElement(component, componentProps)\n : component(componentProps);\n } else {\n output.content = <Container {...props} content={content} />;\n }\n\n if (status === STATUS.OPEN) {\n classes.push('__floater__open');\n }\n\n if (!hideArrow) {\n output.arrow = <Arrow {...props} />;\n }\n\n if (!shouldRender) {\n return null;\n }\n\n return (\n <div ref={floaterRef} style={{ zIndex: styles.options.zIndex }}>\n <div className={classes.join(' ')} style={style} {...baseProps}>\n <div className=\"__floater__body\">\n {output.content}\n {output.arrow}\n </div>\n </div>\n </div>\n );\n}\n\nexport default React.memo(Floater);\n","import * as React from 'react';\n\nimport { Styles } from '../../types';\n\ninterface Props {\n arrowRef: React.Ref<HTMLSpanElement>;\n placement: string;\n styles: Styles;\n}\n\nexport default function FloaterArrow(props: Props) {\n const { arrowRef, placement, styles } = props;\n\n const {\n arrow: { color, display, length, position, spread },\n } = styles;\n const arrowStyles: React.CSSProperties = { display, position };\n\n let points;\n let x = spread;\n let y = length;\n\n if (placement.startsWith('top')) {\n points = `0,0 ${x / 2},${y} ${x},0`;\n } else if (placement.startsWith('bottom')) {\n points = `${x},${y} ${x / 2},0 0,${y}`;\n } else if (placement.startsWith('left')) {\n y = spread;\n x = length;\n points = `0,0 ${x},${y / 2} 0,${y}`;\n } else if (placement.startsWith('right')) {\n y = spread;\n x = length;\n points = `${x},${y} ${x},0 0,${y / 2}`;\n }\n\n return (\n <span ref={arrowRef} className=\"__floater__arrow\" style={arrowStyles}>\n <svg height={y} version=\"1.1\" width={x} xmlns=\"http://www.w3.org/2000/svg\">\n <polygon fill={color} points={points} />\n </svg>\n </span>\n );\n}\n","import * as React from 'react';\nimport is from 'is-lite';\n\nimport CloseButton from './CloseButton';\n\nimport { CloseFunction, Styles } from '../../types';\n\ninterface Props {\n content: React.ReactNode;\n footer?: React.ReactNode;\n onClick: CloseFunction<HTMLButtonElement>;\n open?: boolean;\n positionWrapper: boolean;\n showCloseButton?: boolean;\n styles: Styles;\n title?: React.ReactNode;\n}\n\nexport default function FloaterContainer(props: Props) {\n const { content, footer, onClick, open, positionWrapper, showCloseButton, styles, title } = props;\n\n const output: Record<string, React.ReactNode> = {\n content: React.isValidElement(content) ? (\n content\n ) : (\n <div className=\"__floater__content\" style={styles.content}>\n {content}\n </div>\n ),\n };\n\n if (title) {\n output.title = React.isValidElement(title) ? (\n title\n ) : (\n <div className=\"__floater__title\" style={styles.title}>\n {title}\n </div>\n );\n }\n\n if (footer) {\n output.footer = React.isValidElement(footer) ? (\n footer\n ) : (\n <div className=\"__floater__footer\" style={styles.footer}>\n {footer}\n </div>\n );\n }\n\n if ((showCloseButton || positionWrapper) && !is.boolean(open)) {\n output.close = <CloseButton onClick={onClick} styles={styles.close} />;\n }\n\n return (\n <div className=\"__floater__container\" style={styles.container}>\n {output.close}\n {output.title}\n {output.content}\n {output.footer}\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { CloseFunction } from '../../types';\n\ninterface Props {\n onClick: CloseFunction<HTMLButtonElement>;\n styles: React.CSSProperties;\n}\n\nexport default function FloaterCloseButton({ onClick, styles }: Props) {\n const { color, height, width, ...style } = styles;\n\n return (\n <button aria-label=\"close\" onClick={onClick} style={style} type=\"button\">\n <svg\n height={`${height}px`}\n preserveAspectRatio=\"xMidYMid\"\n version=\"1.1\"\n viewBox=\"0 0 18 18\"\n width={`${width}px`}\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g>\n <path\n d=\"M8.13911129,9.00268191 L0.171521827,17.0258467 C-0.0498027049,17.248715 -0.0498027049,17.6098394 0.171521827,17.8327545 C0.28204354,17.9443526 0.427188206,17.9998706 0.572051765,17.9998706 C0.71714958,17.9998706 0.862013139,17.9443526 0.972581703,17.8327545 L9.0000937,9.74924618 L17.0276057,17.8327545 C17.1384085,17.9443526 17.2832721,17.9998706 17.4281356,17.9998706 C17.5729992,17.9998706 17.718097,17.9443526 17.8286656,17.8327545 C18.0499901,17.6098862 18.0499901,17.2487618 17.8286656,17.0258467 L9.86135722,9.00268191 L17.8340066,0.973848225 C18.0553311,0.750979934 18.0553311,0.389855532 17.8340066,0.16694039 C17.6126821,-0.0556467968 17.254037,-0.0556467968 17.0329467,0.16694039 L9.00042166,8.25611765 L0.967006424,0.167268345 C0.745681892,-0.0553188426 0.387317931,-0.0553188426 0.165993399,0.167268345 C-0.0553311331,0.390136635 -0.0553311331,0.751261038 0.165993399,0.974176179 L8.13920499,9.00268191 L8.13911129,9.00268191 Z\"\n fill={color}\n />\n </g>\n </svg>\n </button>\n );\n}\n","export const POSITIONING_PROPS = ['position', 'top', 'right', 'bottom', 'left'] as const;\n\nexport const STATUS = {\n INIT: 'init',\n IDLE: 'idle',\n RENDER: 'render',\n OPENING: 'opening',\n OPEN: 'open',\n CLOSING: 'closing',\n ERROR: 'error',\n} as const;\n","import * as React from 'react';\nimport { Modifier, Placement } from '@popperjs/core';\nimport { deepmerge } from 'deepmerge-ts';\nimport is from 'is-lite';\nimport { SetRequired } from 'type-fest';\n\nimport { LogOptions, PopperModifiers, Props } from '../types';\n\nexport const portalId = 'react-floater-portal';\n\nexport function canUseDOM(): boolean {\n return !!(typeof window !== 'undefined' && window.document?.createElement);\n}\n\nexport function enhanceProps(props: Props) {\n return {\n autoOpen: false,\n debug: false,\n disableFlip: false,\n disableHoverToClick: false,\n event: 'click',\n eventDelay: 0.4,\n hideArrow: false,\n offset: 15,\n placement: 'bottom',\n showCloseButton: false,\n styles: {},\n target: null,\n wrapperOptions: {\n position: false,\n },\n ...props,\n } satisfies SetRequired<Props, 'wrapperOptions'>;\n}\n\nexport function getFallbackPlacements(placement: Placement): Placement[] | undefined {\n if (placement.startsWith('left')) {\n return ['top', 'bottom'];\n }\n\n if (placement.startsWith('right')) {\n return ['bottom', 'top'];\n }\n\n return undefined;\n}\n\nexport function getModifiers(modifiers?: PopperModifiers): PopperModifiers {\n const defaultOptions = {\n flip: {\n name: 'flip',\n enabled: true,\n options: {\n padding: 20,\n },\n },\n preventOverflow: {\n name: 'preventOverflow',\n enabled: true,\n options: {\n padding: 10,\n },\n },\n };\n\n return deepmerge(defaultOptions, modifiers ?? {});\n}\n\nexport function isFixed(el: HTMLElement | null): boolean {\n if (!el) {\n return false;\n }\n\n const { nodeName } = el;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n\n if (getComputedStyle(el).position === 'fixed') {\n return true;\n }\n\n return el.parentNode instanceof HTMLElement ? isFixed(el.parentNode) : false;\n}\n\nexport function isMobile(): boolean {\n return 'ontouchstart' in window && /Mobi/.test(navigator.userAgent);\n}\n\nexport function isValidElement(object: unknown): object is React.ReactElement {\n return React.isValidElement(object);\n}\n\n/**\n * Log method calls if debug is enabled\n */\nexport function log({ data, debug = false, title }: LogOptions): void {\n /* eslint-disable no-console */\n const logFn = console.log;\n\n if (debug && title && data) {\n console.groupCollapsed(\n `%creact-floater: ${title}`,\n 'color: #9b00ff; font-weight: bold; font-size: 12px;',\n );\n\n if (Array.isArray(data)) {\n data.forEach(d => {\n if (is.plainObject(d) && d.key) {\n logFn.apply(console, [d.key, d.value]);\n } else {\n logFn.apply(console, [d]);\n }\n });\n } else {\n logFn.apply(console, [data]);\n }\n\n console.groupEnd();\n }\n /* eslint-enable */\n}\n\nexport function mergeModifier(\n modifier: Partial<Modifier<any, any>>,\n customModifier?: Partial<Modifier<any, any>>,\n): Partial<Modifier<any, any>> {\n return deepmerge(modifier, customModifier ?? {});\n}\n\nexport function off(\n element: Element,\n eventType: string,\n handler: EventListener,\n options: boolean | EventListenerOptions = false,\n): void {\n element.removeEventListener(eventType, handler, options);\n}\n\nexport function on(\n element: HTMLElement,\n eventType: string,\n handler: EventListener,\n options: boolean | EventListenerOptions = false,\n): void {\n element.addEventListener(eventType, handler, options);\n}\n\nexport function once(\n element: HTMLElement,\n eventType: string,\n handler: EventListener,\n options: boolean | EventListenerOptions = false,\n): void {\n let nextCB: EventListener;\n\n // eslint-disable-next-line prefer-const\n nextCB = event => {\n handler(event);\n off(element, eventType, nextCB);\n };\n\n on(element, eventType, nextCB, options);\n}\n\nexport function randomId(): string {\n return `rf-${Math.round(Math.random() * 1e5)}`;\n}\n","import * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport is from 'is-lite';\n\nimport { canUseDOM, portalId } from '../modules/helpers';\nimport { useMount, useUnmount } from '../modules/hooks';\nimport { Placement, SelectorOrElement } from '../types';\n\ninterface Props {\n children: React.ReactNode;\n hasChildren: boolean;\n internalId: string;\n placement: Placement;\n portalElement?: SelectorOrElement;\n target?: SelectorOrElement;\n zIndex: string | number;\n}\n\nexport default function ReactFloaterPortal(props: Props) {\n const { children, hasChildren, internalId, placement, portalElement, target, zIndex } = props;\n const node = React.useRef<HTMLElement | null>(null);\n\n const initialize = React.useCallback(() => {\n if (!canUseDOM()) {\n return;\n }\n\n if (portalElement) {\n node.current = is.string(portalElement)\n ? (document.querySelector(portalElement) as HTMLElement)\n : portalElement;\n }\n\n if (!portalElement || !node.current) {\n const portal = document.getElementById(portalId);\n\n if (portal) {\n const ids: string[] = portal.dataset.ids?.split(',').filter(Boolean) ?? [];\n\n if (!ids.includes(internalId) && internalId) {\n ids.push(internalId);\n }\n\n portal.dataset.ids = ids.join(',');\n node.current = portal;\n } else {\n node.current = document.createElement('div');\n node.current.id = portalId;\n node.current.dataset.ids = internalId;\n node.current.style.zIndex = `${zIndex}`;\n\n document.body.appendChild(node.current);\n }\n }\n\n if (!portalElement && !document.getElementById(portalId)) {\n if (node.current) {\n document.body.appendChild(node.current);\n }\n }\n }, [internalId, portalElement, zIndex]);\n\n useMount(() => {\n if (!canUseDOM) {\n return;\n }\n\n initialize();\n });\n\n React.useEffect(() => {\n initialize();\n }, [initialize]);\n\n useUnmount(() => {\n if (!canUseDOM() || !node.current) {\n return;\n }\n\n try {\n if (node.current.id === portalId) {\n const ids: string[] = node.current.dataset.ids?.split(',') ?? [];\n\n if (ids.includes(internalId)) {\n node.current.dataset.ids = ids.filter(id => id !== internalId).join(',');\n }\n\n if (ids.length <= 1) {\n document.body.removeChild(node.current);\n node.current = null;\n }\n }\n } catch {\n node.current = null;\n }\n });\n\n if (node.current) {\n if (!hasChildren && !target && placement !== 'center') {\n return null;\n }\n\n return createPortal(children, node.current);\n }\n\n return null;\n}\n","import { DependencyList, EffectCallback, useEffect, useRef } from 'react';\n\nfunction useEffectOnce(effect: EffectCallback) {\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(effect, []);\n}\n\nexport function useMount(effect: EffectCallback) {\n useEffectOnce(effect);\n}\n\nexport function useSingleton(callback: () => void): void {\n const hasBeenCalled = useRef(false);\n\n if (hasBeenCalled.current) {\n return;\n }\n\n callback();\n hasBeenCalled.current = true;\n}\n\nexport function useUnmount(fn: () => any): void {\n const fnRef = useRef(fn);\n\n // update the ref each render so if it changes the newest callback will be invoked\n fnRef.current = fn;\n\n useEffectOnce(() => () => fnRef.current());\n}\n\nexport function useUpdateEffect(effect: EffectCallback, deps?: DependencyList) {\n const isFirst = useRef(true);\n\n useEffect(() => {\n if (!isFirst.current) {\n effect();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n\n if (isFirst.current) {\n isFirst.current = false;\n }\n}\n","import * as React from 'react';\nimport { PlainObject } from '@gilbarbara/types';\nimport is from 'is-lite';\n\nimport { STATUS } from '../literals';\nimport { useMount } from '../modules/hooks';\nimport { CloseFunction, Statuses } from '../types';\n\ninterface Props {\n childRef: React.RefObject<HTMLElement>;\n children: React.ReactNode;\n id: string;\n isControlled: boolean;\n onClick: CloseFunction<HTMLSpanElement>;\n onMount: () => void;\n onMouseEnter: CloseFunction<HTMLSpanElement>;\n onMouseLeave: CloseFunction<HTMLSpanElement>;\n status: Statuses;\n style?: React.CSSProperties;\n styles: React.CSSProperties;\n wrapperRef: React.RefObject<HTMLElement>;\n}\n\nfunction FloaterWrapper(props: Props) {\n const {\n childRef,\n children,\n id,\n isControlled,\n onClick,\n onMount,\n onMouseEnter,\n onMouseLeave,\n status,\n style,\n styles,\n wrapperRef,\n } = props;\n\n useMount(() => {\n onMount();\n });\n\n let element;\n\n const mergedStyles = {\n ...styles,\n ...style,\n ...(React.isValidElement(children) ? children.props.style : undefined),\n };\n\n let wrapperProps: PlainObject = {\n 'aria-describedby': ([STATUS.OPENING, STATUS.OPEN, STATUS.CLOSING] as Statuses[]).includes(\n status,\n )\n ? id\n : undefined,\n 'data-id': id,\n style: mergedStyles,\n };\n\n if (!isControlled) {\n wrapperProps = {\n ...wrapperProps,\n onClick,\n onMouseEnter,\n onMouseLeave,\n };\n }\n\n if (children) {\n if (\n React.Children.count(children) === 1 &&\n React.isValidElement(children) &&\n children.type !== React.Fragment\n ) {\n // eslint-disable-next-line unicorn/prefer-ternary\n if (is.function(children.type)) {\n element = (\n <span ref={wrapperRef}>\n {React.cloneElement(React.Children.only(children) as React.ReactElement, {\n innerRef: childRef,\n ...wrapperProps,\n })}\n </span>\n );\n } else {\n element = React.cloneElement(React.Children.only(children) as React.ReactElement, {\n ref: wrapperRef,\n ...wrapperProps,\n });\n }\n } else {\n element = (\n <span ref={wrapperRef} {...wrapperProps}>\n {children}\n </span>\n );\n }\n }\n\n return element ?? null;\n}\n\nexport default React.memo(FloaterWrapper);\n","import { deepmerge } from 'deepmerge-ts';\nimport { PartialDeep } from 'type-fest';\n\nimport { Styles } from '../types';\n\nconst defaultOptions = {\n zIndex: 100,\n};\n\nexport default function getStyles(styles?: PartialDeep<Styles>): Styles {\n const { options = {}, ...rest } = styles ?? {};\n\n return deepmerge(\n {\n arrow: {\n color: '#fff',\n display: 'inline-flex',\n length: 16,\n position: 'absolute',\n spread: 32,\n },\n close: {\n backgroundColor: 'transparent',\n border: 0,\n borderRadius: 0,\n color: '#555',\n fontSize: 0,\n height: 15,\n outline: 'none',\n padding: 10,\n position: 'absolute',\n right: 0,\n top: 0,\n width: 15,\n WebkitAppearance: 'none',\n },\n container: {\n backgroundColor: '#fff',\n color: '#666',\n minHeight: 60,\n minWidth: 200,\n padding: 20,\n position: 'relative',\n zIndex: 10,\n },\n content: {\n fontSize: 15,\n },\n footer: {\n borderTop: '1px solid #ccc',\n fontSize: 13,\n marginTop: 10,\n paddingTop: 5,\n },\n floater: {\n display: 'inline-block',\n filter: 'drop-shadow(0 0 3px rgba(0, 0, 0, 0.3))',\n maxWidth: 300,\n opacity: 0,\n position: 'relative',\n transition: 'opacity 0.3s',\n visibility: 'hidden',\n zIndex: options.zIndex,\n },\n floaterCentered: {\n left: '50%',\n position: 'fixed',\n top: '50%',\n transform: 'translate(-50%, -50%)',\n },\n floaterClosing: {\n opacity: 0,\n visibility: 'visible',\n },\n floaterOpening: {\n opacity: 1,\n visibility: 'visible',\n },\n floaterWithComponent: {\n maxWidth: '100%',\n },\n title: {\n borderBottom: '1px solid #555',\n color: '#555',\n fontSize: 18,\n marginBottom: 5,\n paddingBottom: 6,\n paddingRight: 18,\n },\n wrapper: {\n cursor: 'help',\n zIndex: options.zIndex,\n },\n wrapperPosition: {\n left: -1000,\n position: 'absolute',\n top: -1000,\n visibility: 'hidden',\n },\n options: deepmerge(defaultOptions, options),\n },\n rest,\n ) as Styles;\n}\n"],"mappings":";AAAA,YAAYA,YAAW;AAEvB,SAAS,oBAAiD;AAC1D,OAAOC,SAAQ;AACf,OAAO,oBAAoB;;;ACJ3B,YAAYC,YAAW;;;ACAvB,YAAY,WAAW;AAUR,SAAR,aAA8B,OAAc;AACjD,QAAM,EAAE,UAAU,WAAW,OAAO,IAAI;AAExC,QAAM;AAAA,IACJ,OAAO,EAAE,OAAO,SAAS,QAAQ,UAAU,OAAO;AAAA,EACpD,IAAI;AACJ,QAAM,cAAmC,EAAE,SAAS,SAAS;AAE7D,MAAI;AACJ,MAAI,IAAI;AACR,MAAI,IAAI;AAER,MAAI,UAAU,WAAW,KAAK,GAAG;AAC/B,aAAS,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,EACjC,WAAW,UAAU,WAAW,QAAQ,GAAG;AACzC,aAAS,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;AAAA,EACtC,WAAW,UAAU,WAAW,MAAM,GAAG;AACvC,QAAI;AACJ,QAAI;AACJ,aAAS,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;AAAA,EACnC,WAAW,UAAU,WAAW,OAAO,GAAG;AACxC,QAAI;AACJ,QAAI;AACJ,aAAS,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC;AAAA,EACtC;AAEA,SACE,oCAAC,UAAK,KAAK,UAAU,WAAU,oBAAmB,OAAO,eACvD,oCAAC,SAAI,QAAQ,GAAG,SAAQ,OAAM,OAAO,GAAG,OAAM,gCAC5C,oCAAC,aAAQ,MAAM,OAAO,QAAgB,CACxC,CACF;AAEJ;;;AC3CA,YAAYC,YAAW;AACvB,OAAO,QAAQ;;;ACDf,YAAYC,YAAW;AASR,SAAR,mBAAoC,EAAE,SAAS,OAAO,GAAU;AACrE,QAAM,EAAE,OAAO,QAAQ,OAAO,GAAG,MAAM,IAAI;AAE3C,SACE,qCAAC,YAAO,cAAW,SAAQ,SAAkB,OAAc,MAAK,YAC9D;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ,GAAG,MAAM;AAAA,MACjB,qBAAoB;AAAA,MACpB,SAAQ;AAAA,MACR,SAAQ;AAAA,MACR,OAAO,GAAG,KAAK;AAAA,MACf,OAAM;AAAA;AAAA,IAEN,qCAAC,WACC;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAM;AAAA;AAAA,IACR,CACF;AAAA,EACF,CACF;AAEJ;;;ADbe,SAAR,iBAAkC,OAAc;AACrD,QAAM,EAAE,SAAS,QAAQ,SAAS,MAAM,iBAAiB,iBAAiB,QAAQ,MAAM,IAAI;AAE5F,QAAM,SAA0C;AAAA,IAC9C,SAAe,sBAAe,OAAO,IACnC,UAEA,qCAAC,SAAI,WAAU,sBAAqB,OAAO,OAAO,WAC/C,OACH;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WAAO,QAAc,sBAAe,KAAK,IACvC,QAEA,qCAAC,SAAI,WAAU,oBAAmB,OAAO,OAAO,SAC7C,KACH;AAAA,EAEJ;AAEA,MAAI,QAAQ;AACV,WAAO,SAAe,sBAAe,MAAM,IACzC,SAEA,qCAAC,SAAI,WAAU,qBAAoB,OAAO,OAAO,UAC9C,MACH;AAAA,EAEJ;AAEA,OAAK,mBAAmB,oBAAoB,CAAC,GAAG,QAAQ,IAAI,GAAG;AAC7D,WAAO,QAAQ,qCAAC,sBAAY,SAAkB,QAAQ,OAAO,OAAO;AAAA,EACtE;AAEA,SACE,qCAAC,SAAI,WAAU,wBAAuB,OAAO,OAAO,aACjD,OAAO,OACP,OAAO,OACP,OAAO,SACP,OAAO,MACV;AAEJ;;;AE/DO,IAAM,oBAAoB,CAAC,YAAY,OAAO,SAAS,UAAU,MAAM;AAEvE,IAAM,SAAS;AAAA,EACpB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AACT;;;ACVA,YAAYC,YAAW;AAEvB,SAAS,iBAAiB;AAC1B,OAAOC,SAAQ;AAKR,IAAM,WAAW;AAEjB,SAAS,YAAqB;AACnC,SAAO,CAAC,EAAE,OAAO,WAAW,eAAe,OAAO,UAAU;AAC9D;AAEO,SAAS,aAAa,OAAc;AACzC,SAAO;AAAA,IACL,UAAU;AAAA,IACV,OAAO;AAAA,IACP,aAAa;AAAA,IACb,qBAAqB;AAAA,IACrB,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,QAAQ;AAAA,IACR,gBAAgB;AAAA,MACd,UAAU;AAAA,IACZ;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEO,SAAS,sBAAsB,WAA+C;AACnF,MAAI,UAAU,WAAW,MAAM,GAAG;AAChC,WAAO,CAAC,OAAO,QAAQ;AAAA,EACzB;AAEA,MAAI,UAAU,WAAW,OAAO,GAAG;AACjC,WAAO,CAAC,UAAU,KAAK;AAAA,EACzB;AAEA,SAAO;AACT;AAEO,SAAS,aAAa,WAA8C;AACzE,QAAMC,kBAAiB;AAAA,IACrB,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,SAAO,UAAUA,iBAAgB,aAAa,CAAC,CAAC;AAClD;AAEO,SAAS,QAAQ,IAAiC;AACvD,MAAI,CAAC,IAAI;AACP,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,SAAS,IAAI;AAErB,MAAI,aAAa,UAAU,aAAa,QAAQ;AAC9C,WAAO;AAAA,EACT;AAEA,MAAI,iBAAiB,EAAE,EAAE,aAAa,SAAS;AAC7C,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,sBAAsB,cAAc,QAAQ,GAAG,UAAU,IAAI;AACzE;AAEO,SAAS,WAAoB;AAClC,SAAO,kBAAkB,UAAU,OAAO,KAAK,UAAU,SAAS;AACpE;AAEO,SAASC,gBAAe,QAA+C;AAC5E,SAAa,sBAAe,MAAM;AACpC;AAKO,SAAS,IAAI,EAAE,MAAM,QAAQ,OAAO,MAAM,GAAqB;AAEpE,QAAM,QAAQ,QAAQ;AAEtB,MAAI,SAAS,SAAS,MAAM;AAC1B,YAAQ;AAAA,MACN,oBAAoB,KAAK;AAAA,MACzB;AAAA,IACF;AAEA,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAK,QAAQ,OAAK;AAChB,YAAIF,IAAG,YAAY,CAAC,KAAK,EAAE,KAAK;AAC9B,gBAAM,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;AAAA,QACvC,OAAO;AACL,gBAAM,MAAM,SAAS,CAAC,CAAC,CAAC;AAAA,QAC1B;AAAA,MACF,CAAC;AAAA,IACH,OAAO;AACL,YAAM,MAAM,SAAS,CAAC,IAAI,CAAC;AAAA,IAC7B;AAEA,YAAQ,SAAS;AAAA,EACnB;AAEF;AAEO,SAAS,cACd,UACA,gBAC6B;AAC7B,SAAO,UAAU,UAAU,kBAAkB,CAAC,CAAC;AACjD;AAEO,SAAS,IACd,SACA,WACA,SACA,UAA0C,OACpC;AACN,UAAQ,oBAAoB,WAAW,SAAS,OAAO;AACzD;AAEO,SAAS,GACd,SACA,WACA,SACA,UAA0C,OACpC;AACN,UAAQ,iBAAiB,WAAW,SAAS,OAAO;AACtD;AAEO,SAAS,KACd,SACA,WACA,SACA,UAA0C,OACpC;AACN,MAAI;AAGJ,WAAS,WAAS;AAChB,YAAQ,KAAK;AACb,QAAI,SAAS,WAAW,MAAM;AAAA,EAChC;AAEA,KAAG,SAAS,WAAW,QAAQ,OAAO;AACxC;AAEO,SAAS,WAAmB;AACjC,SAAO,MAAM,KAAK,MAAM,KAAK,OAAO,IAAI,GAAG,CAAC;AAC9C;;;AL7IA,SAAS,QAAQ,OAAc;AAC7B,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,QAAc,eAAQ,MAAM;AAChC,UAAM;AAAA,MACJ,OAAO,EAAE,OAAO;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAI,UAA+B,EAAE,GAAG,QAAQ;AAEhD,QAAI,CAAC,WAAW;AACd,UAAI,UAAU,WAAW,KAAK,GAAG;AAC/B,gBAAQ,UAAU,OAAO,MAAM;AAAA,MACjC,WAAW,UAAU,WAAW,QAAQ,GAAG;AACzC,gBAAQ,UAAU,GAAG,MAAM;AAAA,MAC7B,WAAW,UAAU,WAAW,MAAM,GAAG;AACvC,gBAAQ,UAAU,KAAK,MAAM;AAAA,MAC/B,WAAW,UAAU,WAAW,OAAO,GAAG;AACxC,gBAAQ,UAAU,SAAS,MAAM;AAAA,MACnC;AAAA,IACF;AAEA,QAAI,WAAW,OAAO,SAAS;AAC7B,gBAAU,EAAE,GAAG,SAAS,GAAG,eAAe;AAAA,IAC5C;AAEA,QAAI,WAAW,OAAO,WAAW,WAAW,OAAO,MAAM;AACvD,gBAAU,EAAE,GAAG,SAAS,GAAG,eAAe;AAAA,IAC5C;AAEA,QAAI,cAAc,UAAU;AAC1B,gBAAU,EAAE,GAAG,SAAS,GAAG,gBAAgB;AAAA,IAC7C;AAEA,QAAI,WAAW;AACb,gBAAU,EAAE,GAAG,SAAS,GAAG,qBAAqB;AAAA,IAClD;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,WAAW,WAAW,WAAW,QAAQ,MAAM,CAAC;AAEpD,QAAM,eAAe,CAAC,UAAU,QAAQ,WAAW,SAAS,EAAE,SAAS,MAAM;AAE7E,QAAM,SAAuC,CAAC;AAC9C,QAAM,UAAU,CAAC,WAAW;AAC5B,QAAM,YAAY,EAAE,IAAI,MAAM,UAAU;AAExC,MAAI,WAAW;AACb,UAAM,iBAAiB,EAAE,SAAS,GAAG,UAAU;AAE/C,WAAO,UAAUG,gBAAe,SAAS,IAC/B,oBAAa,WAAW,cAAc,IAC5C,UAAU,cAAc;AAAA,EAC9B,OAAO;AACL,WAAO,UAAU,qCAAC,oBAAW,GAAG,OAAO,SAAkB;AAAA,EAC3D;AAEA,MAAI,WAAW,OAAO,MAAM;AAC1B,YAAQ,KAAK,iBAAiB;AAAA,EAChC;AAEA,MAAI,CAAC,WAAW;AACd,WAAO,QAAQ,qCAAC,gBAAO,GAAG,OAAO;AAAA,EACnC;AAEA,MAAI,CAAC,cAAc;AACjB,WAAO;AAAA,EACT;AAEA,SACE,qCAAC,SAAI,KAAK,YAAY,OAAO,EAAE,QAAQ,OAAO,QAAQ,OAAO,KAC3D,qCAAC,SAAI,WAAW,QAAQ,KAAK,GAAG,GAAG,OAAe,GAAG,aACnD,qCAAC,SAAI,WAAU,qBACZ,OAAO,SACP,OAAO,KACV,CACF,CACF;AAEJ;AAEA,IAAO,kBAAc,YAAK,OAAO;;;AM1HjC,YAAYC,YAAW;AACvB,SAAS,oBAAoB;AAC7B,OAAOC,SAAQ;;;ACFf,SAAyC,WAAW,cAAc;AAElE,SAAS,cAAc,QAAwB;AAE7C,YAAU,QAAQ,CAAC,CAAC;AACtB;AAEO,SAAS,SAAS,QAAwB;AAC/C,gBAAc,MAAM;AACtB;AAEO,SAAS,aAAa,UAA4B;AACvD,QAAM,gBAAgB,OAAO,KAAK;AAElC,MAAI,cAAc,SAAS;AACzB;AAAA,EACF;AAEA,WAAS;AACT,gBAAc,UAAU;AAC1B;AAEO,SAAS,WAAW,IAAqB;AAC9C,QAAM,QAAQ,OAAO,EAAE;AAGvB,QAAM,UAAU;AAEhB,gBAAc,MAAM,MAAM,MAAM,QAAQ,CAAC;AAC3C;AAEO,SAAS,gBAAgB,QAAwB,MAAuB;AAC7E,QAAM,UAAU,OAAO,IAAI;AAE3B,YAAU,MAAM;AACd,QAAI,CAAC,QAAQ,SAAS;AACpB,aAAO;AAAA,IACT;AAAA,EAEF,GAAG,IAAI;AAEP,MAAI,QAAQ,SAAS;AACnB,YAAQ,UAAU;AAAA,EACpB;AACF;;;AD1Be,SAAR,mBAAoC,OAAc;AACvD,QAAM,EAAE,UAAU,aAAa,YAAY,WAAW,eAAe,QAAQ,OAAO,IAAI;AACxF,QAAM,OAAa,cAA2B,IAAI;AAElD,QAAM,aAAmB,mBAAY,MAAM;AACzC,QAAI,CAAC,UAAU,GAAG;AAChB;AAAA,IACF;AAEA,QAAI,eAAe;AACjB,WAAK,UAAUC,IAAG,OAAO,aAAa,IACjC,SAAS,cAAc,aAAa,IACrC;AAAA,IACN;AAEA,QAAI,CAAC,iBAAiB,CAAC,KAAK,SAAS;AACnC,YAAM,SAAS,SAAS,eAAe,QAAQ;AAE/C,UAAI,QAAQ;AACV,cAAM,MAAgB,OAAO,QAAQ,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO,KAAK,CAAC;AAEzE,YAAI,CAAC,IAAI,SAAS,UAAU,KAAK,YAAY;AAC3C,cAAI,KAAK,UAAU;AAAA,QACrB;AAEA,eAAO,QAAQ,MAAM,IAAI,KAAK,GAAG;AACjC,aAAK,UAAU;AAAA,MACjB,OAAO;AACL,aAAK,UAAU,SAAS,cAAc,KAAK;AAC3C,aAAK,QAAQ,KAAK;AAClB,aAAK,QAAQ,QAAQ,MAAM;AAC3B,aAAK,QAAQ,MAAM,SAAS,GAAG,MAAM;AAErC,iBAAS,KAAK,YAAY,KAAK,OAAO;AAAA,MACxC;AAAA,IACF;AAEA,QAAI,CAAC,iBAAiB,CAAC,SAAS,eAAe,QAAQ,GAAG;AACxD,UAAI,KAAK,SAAS;AAChB,iBAAS,KAAK,YAAY,KAAK,OAAO;AAAA,MACxC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,YAAY,eAAe,MAAM,CAAC;AAEtC,WAAS,MAAM;AACb,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,eAAW;AAAA,EACb,CAAC;AAED,EAAM,iBAAU,MAAM;AACpB,eAAW;AAAA,EACb,GAAG,CAAC,UAAU,CAAC;AAEf,aAAW,MAAM;AACf,QAAI,CAAC,UAAU,KAAK,CAAC,KAAK,SAAS;AACjC;AAAA,IACF;AAEA,QAAI;AACF,UAAI,KAAK,QAAQ,OAAO,UAAU;AAChC,cAAM,MAAgB,KAAK,QAAQ,QAAQ,KAAK,MAAM,GAAG,KAAK,CAAC;AAE/D,YAAI,IAAI,SAAS,UAAU,GAAG;AAC5B,eAAK,QAAQ,QAAQ,MAAM,IAAI,OAAO,QAAM,OAAO,UAAU,EAAE,KAAK,GAAG;AAAA,QACzE;AAEA,YAAI,IAAI,UAAU,GAAG;AACnB,mBAAS,KAAK,YAAY,KAAK,OAAO;AACtC,eAAK,UAAU;AAAA,QACjB;AAAA,MACF;AAAA,IACF,QAAQ;AACN,WAAK,UAAU;AAAA,IACjB;AAAA,EACF,CAAC;AAED,MAAI,KAAK,SAAS;AAChB,QAAI,CAAC,eAAe,CAAC,UAAU,cAAc,UAAU;AACrD,aAAO;AAAA,IACT;AAEA,WAAO,aAAa,UAAU,KAAK,OAAO;AAAA,EAC5C;AAEA,SAAO;AACT;;;AE1GA,YAAYC,YAAW;AAEvB,OAAOC,SAAQ;AAqBf,SAAS,eAAe,OAAc;AACpC,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,WAAS,MAAM;AACb,YAAQ;AAAA,EACV,CAAC;AAED,MAAI;AAEJ,QAAM,eAAe;AAAA,IACnB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAU,sBAAe,QAAQ,IAAI,SAAS,MAAM,QAAQ;AAAA,EAC9D;AAEA,MAAI,eAA4B;AAAA,IAC9B,oBAAqB,CAAC,OAAO,SAAS,OAAO,MAAM,OAAO,OAAO,EAAiB;AAAA,MAChF;AAAA,IACF,IACI,KACA;AAAA,IACJ,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AAEA,MAAI,CAAC,cAAc;AACjB,mBAAe;AAAA,MACb,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,MAAI,UAAU;AACZ,QACQ,gBAAS,MAAM,QAAQ,MAAM,KAC7B,sBAAe,QAAQ,KAC7B,SAAS,SAAe,iBACxB;AAEA,UAAIC,IAAG,SAAS,SAAS,IAAI,GAAG;AAC9B,kBACE,qCAAC,UAAK,KAAK,cACF,oBAAmB,gBAAS,KAAK,QAAQ,GAAyB;AAAA,UACvE,UAAU;AAAA,UACV,GAAG;AAAA,QACL,CAAC,CACH;AAAA,MAEJ,OAAO;AACL,kBAAgB,oBAAmB,gBAAS,KAAK,QAAQ,GAAyB;AAAA,UAChF,KAAK;AAAA,UACL,GAAG;AAAA,QACL,CAAC;AAAA,MACH;AAAA,IACF,OAAO;AACL,gBACE,qCAAC,UAAK,KAAK,YAAa,GAAG,gBACxB,QACH;AAAA,IAEJ;AAAA,EACF;AAEA,SAAO,WAAW;AACpB;AAEA,IAAO,kBAAc,YAAK,cAAc;;;ACxGxC,SAAS,aAAAC,kBAAiB;AAK1B,IAAM,iBAAiB;AAAA,EACrB,QAAQ;AACV;AAEe,SAAR,UAA2B,QAAsC;AACtE,QAAM,EAAE,UAAU,CAAC,GAAG,GAAG,KAAK,IAAI,UAAU,CAAC;AAE7C,SAAOA;AAAA,IACL;AAAA,MACE,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MACA,OAAO;AAAA,QACL,iBAAiB;AAAA,QACjB,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,QACT,UAAU;AAAA,QACV,OAAO;AAAA,QACP,KAAK;AAAA,QACL,OAAO;AAAA,QACP,kBAAkB;AAAA,MACpB;AAAA,MACA,WAAW;AAAA,QACT,iBAAiB;AAAA,QACjB,OAAO;AAAA,QACP,WAAW;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA,MACA,SAAS;AAAA,QACP,UAAU;AAAA,MACZ;AAAA,MACA,QAAQ;AAAA,QACN,WAAW;AAAA,QACX,UAAU;AAAA,QACV,WAAW;AAAA,QACX,YAAY;AAAA,MACd;AAAA,MACA,SAAS;AAAA,QACP,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,QACT,UAAU;AAAA,QACV,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK;AAAA,QACL,WAAW;AAAA,MACb;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,gBAAgB;AAAA,QACd,SAAS;AAAA,QACT,YAAY;AAAA,MACd;AAAA,MACA,sBAAsB;AAAA,QACpB,UAAU;AAAA,MACZ;AAAA,MACA,OAAO;AAAA,QACL,cAAc;AAAA,QACd,OAAO;AAAA,QACP,UAAU;AAAA,QACV,cAAc;AAAA,QACd,eAAe;AAAA,QACf,cAAc;AAAA,MAChB;AAAA,MACA,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,QAAQ,QAAQ;AAAA,MAClB;AAAA,MACA,iBAAiB;AAAA,QACf,MAAM;AAAA,QACN,UAAU;AAAA,QACV,KAAK;AAAA,QACL,YAAY;AAAA,MACd;AAAA,MACA,SAASA,WAAU,gBAAgB,OAAO;AAAA,IAC5C;AAAA,IACA;AAAA,EACF;AACF;;;AV7Ee,SAAR,aAA8B,OAAc;AACjD,QAAM;AAAA,IACJ,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,sBAAsB;AAAA,IACtB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA,kBAAkB;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,KAAK;AAEtB,QAAM,CAAC,OAAO,QAAQ,IAAU;AAAA,IAC9B,CAAC,eAAsB,eAA+B;AAAA,MACpD,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,IACA;AAAA,MACE,kBAAkB;AAAA,MAClB,iBAAiB,CAAC,CAAC,gBAAgB,YAAY,CAAC,CAAC;AAAA,MACjD,QAAQ,OAAO;AAAA,MACf,eAAe,OAAO;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,WAAiB,cAAwB,IAAI;AACnD,QAAM,WAAiB,cAAoB,IAAI;AAC/C,QAAM,kBAAwB,cAAe;AAC7C,QAAM,aAAmB,cAAuB,IAAI;AACpD,QAAM,aAAmB,cAAO,SAAS,CAAC;AAC1C,QAAM,YAAkB,cAAO,KAAK;AACpC,QAAM,YAAkB,cAAiB;AACzC,QAAM,WAAiB,cAAc,KAAK;AAC1C,QAAM,gBAAsB,cAAiB;AAC7C,QAAM,aAAmB,cAAwB,IAAI;AACrD,QAAM,gBAAsB,cAA4B,CAAC,CAAC;AAE1D,QAAM,EAAE,kBAAkB,iBAAiB,QAAQ,cAAc,IAAI;AAErE,QAAM,EAAE,QAAQ,IAAI,eAAe,KAAK;AACxC,QAAM,EAAE,SAAS,aAAa,IAAI,eAAe,KAAK;AAEtD,QAAM,cAAoB;AAAA,IACxB,CAAC,WAA2B,cAA2B;AACrD,UAAI,UAAU,SAAS;AACrB,iBAAS,SAAS;AAClB,iBAAS,UAAU,EAAE,GAAG,OAAO,GAAG,UAAU;AAE5C,YAAI,WAAW;AACb,oBAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,UAAU,KAAK;AAAA,EAClB;AAEA,QAAM,SAAe;AAAA,IACnB,CAAC,gBAA2B;AAC1B,UAAI,aACF,SAAS,QAAQ,WAAW,OAAO,OAAO,OAAO,UAAU,OAAO;AAEpE,UAAI,CAACC,IAAG,UAAU,WAAW,GAAG;AAC9B,qBAAa;AAAA,MACf;AAEA,kBAAY;AAAA,QACV,QAAQ;AAAA,QACR,eAAe,eAAe,OAAO,UAAU,OAAO,SAAS,OAAO;AAAA,MACxE,CAAC;AAAA,IACH;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,gBAAsB,cAAO,MAAM;AACvC,QAAI,CAAC,UAAU,GAAG;AAChB,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ;AACV,UAAIA,IAAG,WAAW,MAAM,GAAG;AACzB,eAAO;AAAA,MACT;AAEA,aAAO,SAAS,cAAc,MAAM;AAAA,IACtC;AAEA,WAAO,SAAS,WAAW,WAAW;AAAA,EACxC,CAAC;AAED,QAAM,eAAqB,eAAQ,MAAM;AACvC,WAAO,UAAU,MAAM,SAAS,CAAC,CAAC,OAAO;AAAA,EAC3C,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,eAAqB,eAAQ,MAAM;AACvC,QAAI,UAAU,WAAW,SAAS,KAAK,CAAC,qBAAqB;AAC3D,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,qBAAqB,KAAK,CAAC;AAE/B,QAAM,gBAAsB,eAAQ,MAAM;AACxC,UAAM,aAAqB,UAAU,MAAM;AAC3C,UAAM,UAAU,cAAc,QAAQ;AAEtC,QAAI,iBAAiB;AACnB,UAAI;AAEJ,UAAI,WAAW,OAAO,MAAM;AAC1B,+BAAuB,WAAW;AAAA,MACpC,WAAW,kBAAkB,OAAO,QAAQ;AAC1C,+BAAuB,cAAc,SAAS,MAAM;AAAA,MACtD;AAEA,iBAAW,UAAU;AAAA,QACnB,GAAG,WAAW;AAAA,QACd,GAAG;AAAA,MACL;AAAA,IACF;AAEA,QAAI,SAAS;AACX,YAAM,eAAe,OAAO,iBAAiB,OAAO;AAEpD,UAAI,cAAc,SAAS;AACzB,mBAAW,UAAU;AAAA,UACnB,GAAG,WAAW;AAAA,UACd,GAAG,cAAc;AAAA,QACnB;AAAA,MACF,WAAW,CAAC,CAAC,YAAY,QAAQ,EAAE,SAAS,aAAa,QAAQ,GAAG;AAClE,sBAAc,UAAU,CAAC;AAEzB,YAAI,CAAC,iBAAiB;AACpB,4BAAkB,QAAQ,OAAK;AAE7B,gBAAI,MAAM,YAAY;AACpB,4BAAc,QAAQ,CAAC,IAAI,aAAa,CAAC;AAAA,YAC3C,OAAO;AACL,4BAAc,QAAQ,CAAC,IAAI,aAAa,CAAC;AAAA,YAC3C;AAAA,UACF,CAAC;AAED,qBAAW,UAAU;AAAA,YACnB,GAAG,WAAW;AAAA,YACd,GAAG,cAAc;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,iBAAiB,QAAQ,eAAe,MAAM,CAAC;AAEnD,QAAM,aAAmB,cAAO,MAAM;AACpC,UAAM,aAAa,SAAS,QAAQ,WAAW,OAAO,SAAS,OAAO,UAAU,OAAO;AACvF,UAAM,UAAU,cAAc,QAAQ;AAEtC,QAAI,cAAc,UAAU;AAC1B,iBAAW,MAAM;AACf,oBAAY,EAAE,QAAQ,WAAW,CAAC;AAAA,MACpC,GAAG,GAAG;AAAA,IACR,WAAW,SAAS;AAClB,UAAI,WAAW,SAAS;AACtB,cAAM,EAAE,OAAO,MAAM,QAAQ,gBAAgB,GAAG,KAAK,IAAI,aAAa,SAAS;AAE/E,kBAAU,UAAU,aAAa,SAAS,WAAW,SAAS;AAAA,UAC5D;AAAA,UACA,UAAU,QAAQ,cAAc,QAAQ,CAAC,IAAI,UAAU;AAAA,UACvD,WAAW;AAAA,YACT;AAAA,cACE;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS,CAAC;AAAA,gBACV,SAAS;AAAA,kBACP,SAAS,SAAS;AAAA,kBAClB,SAAS;AAAA,gBACX;AAAA,cACF;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS,CAAC;AAAA,gBACV,SAAS;AAAA,kBACP,SAAS;AAAA,kBACT,oBAAoB,sBAAsB,aAAa,QAAQ;AAAA,gBACjE;AAAA,cACF;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE;AAAA,gBACE,MAAM;AAAA,gBACN,SAAS;AAAA,gBACT,SAAS;AAAA,kBACP,QAAQ,CAAC,GAAG,MAAM;AAAA,gBACpB;AAAA,cACF;AAAA,cACA;AAAA,YACF;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,cACT,OAAO;AAAA,cACP,IAAI,CAAC,EAAE,UAAU,OAAO,YAAY,MAAsC;AACxE,oBAAI,YAAY,cAAc,SAAS,QAAQ,kBAAkB;AAC/D,4BAAU,UAAU;AACpB,8BAAY,EAAE,kBAAkB,YAAY,UAAU,CAAC;AAAA,gBACzD;AAAA,cACF;AAAA,YACF;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,cACT,OAAO;AAAA,cACP,IAAI,CAAC,EAAE,OAAO,YAAY,MAAsC;AAC9D,sBAAM;AAAA,kBACJ,UAAU,EAAE,OAAO,WAAW;AAAA,kBAC9B,WAAW;AAAA,gBACb,IAAI;AAEJ,oBAAI,YAAY;AACd,sBAAI,eAAe,WAAW,KAAK,GAAG;AACpC,+BAAW,MAAM,SAAS;AAC1B,+BAAW,MAAM,QAAQ;AAAA,kBAC3B,WAAW,eAAe,WAAW,QAAQ,GAAG;AAC9C,+BAAW,MAAM,MAAM;AACvB,+BAAW,MAAM,QAAQ;AAAA,kBAC3B,WAAW,eAAe,WAAW,MAAM,GAAG;AAC5C,+BAAW,MAAM,QAAQ;AACzB,+BAAW,MAAM,SAAS;AAAA,kBAC5B,WAAW,eAAe,WAAW,OAAO,GAAG;AAC7C,+BAAW,MAAM,OAAO;AACxB,+BAAW,MAAM,SAAS;AAAA,kBAC5B;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,YACA,GAAG,OAAO,OAAO,IAAI;AAAA,UACvB;AAAA,UACA,eAAe,iBAAe;AAC5B,wBAAY;AAAA,cACV,kBAAkB,YAAY;AAAA,cAC9B,QAAQ;AAAA,YACV,CAAC;AAED,gBAAI,cAAc,YAAY,WAAW;AACvC,yBAAW,MAAM;AACf,0BAAU,SAAS,YAAY;AAAA,cACjC,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AAED,YAAI,aAAa,UAAU,SAAS;AAClC,oBAAU,UAAU,SAAS,SAAS;AAAA,QACxC;AAAA,MACF,OAAO;AACL,oBAAY;AAAA,UACV,QAAQ,OAAO;AAAA,QACjB,CAAC;AAAA,MACH;AAEA,UAAI,WAAW,WAAW,CAAC,cAAc,WAAW,SAAS,QAAQ,iBAAiB;AACpF,cAAM,gBAAgB,gBAAgB,SAAS,eAAe,SAAS;AAEvE,sBAAc,UAAU,aAAa,SAAS,WAAW,SAAS;AAAA,UAChE,WAAW,gBAAgB,aAAa;AAAA,UACxC,WAAW;AAAA,YACT;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,YACX;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,gBACP,QAAQ,CAAC,GAAG,aAAa;AAAA,cAC3B;AAAA,YACF;AAAA,YACA;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,YACX;AAAA,UACF;AAAA,UACA,eAAe,iBAAe;AAC5B,wBAAY,EAAE,eAAe,OAAO,OAAO,CAAC;AAE5C,gBAAI,cAAc,YAAY,WAAW;AACvC,yBAAW,MAAM;AACf,8BAAc,SAAS,YAAY;AAAA,cACrC,CAAC;AAAA,YACH;AAAA,UACF;AAAA,QACF,CAAC;AAED,YAAI,WAAW;AACb,oBAAU,cAAc,SAAS,SAAS;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,aAAmB,cAAO,MAAM;AACpC,QAAI,UAAU,SAAS;AACrB,gBAAU,QAAQ,YAAY;AAAA,IAChC;AAEA,QAAI,cAAc,SAAS;AACzB,oBAAc,QAAQ,YAAY;AAAA,IACpC;AAAA,EACF,CAAC;AAED,QAAM,sBAA4B,cAAO,MAAM;AAC7C,QAAI,cAAc,SAAS;AACzB,oBAAc,QAAQ,YAAY;AAAA,IACpC;AAEA;AAAA,MACE;AAAA,QACE,QAAQ,SAAS,QAAQ,WAAW,OAAO,UAAU,OAAO,OAAO,OAAO;AAAA,MAC5E;AAAA,MACA,MAAM;AACJ,YAAI,UAAU;AACZ,mBAAS,SAAS,QAAQ,WAAW,OAAO,OAAO,SAAS,SAAS,aAAa,KAAK,CAAC;AAAA,QAC1F;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,cAAoB,mBAAY,MAAM;AAC1C,QAAIA,IAAG,QAAQ,IAAI,GAAG;AACpB;AAAA,IACF;AAEA,QAAI,iBAAiB,WAAY,iBAAiB,WAAW,iBAAkB;AAC7E,UAAI;AAAA,QACF,OAAO;AAAA,QACP,MAAM,CAAC,EAAE,OAAO,QAAQ,WAAW,OAAO,OAAO,YAAY,UAAU,CAAC;AAAA,QACxE,OAAO;AAAA,MACT,CAAC;AAED,aAAO,WAAW,SAAS,OAAO,SAAS,MAAS;AAAA,IACtD;AAAA,EACF,GAAG,CAAC,cAAc,cAAc,OAAO,MAAM,iBAAiB,QAAQ,MAAM,CAAC;AAE7E,QAAM,mBAAyB,mBAAY,MAAM;AAC/C,QAAIA,IAAG,QAAQ,IAAI,KAAK,SAAS,KAAK,iBAAiB,SAAS;AAC9D;AAAA,IACF;AAEA,QAAI;AAAA,MACF,OAAO;AAAA,MACP,MAAM,CAAC,EAAE,KAAK,iBAAiB,OAAO,MAAM,CAAC;AAAA,MAC7C,OAAO;AAAA,IACT,CAAC;AAED,QAAI,WAAW,OAAO,MAAM;AAC1B,mBAAa,gBAAgB,OAAO;AACpC,sBAAgB,UAAU;AAC1B,aAAO,OAAO,MAAM;AAAA,IACtB;AAAA,EACF,GAAG,CAAC,cAAc,cAAc,OAAO,MAAM,QAAQ,MAAM,CAAC;AAE5D,QAAM,mBAAyB,mBAAY,MAAM;AAC/C,QAAIA,IAAG,QAAQ,IAAI,KAAK,SAAS,GAAG;AAClC;AAAA,IACF;AAEA,QAAI,iBAAiB,SAAS;AAC5B,UAAI;AAAA,QACF,OAAO;AAAA,QACP,MAAM,CAAC,EAAE,KAAK,iBAAiB,OAAO,MAAM,CAAC;AAAA,QAC7C,OAAO;AAAA,MACT,CAAC;AAED,YAAM,gBAAiB,CAAC,OAAO,SAAS,OAAO,IAAI,EAAiB,SAAS,MAAM;AAEnF,UAAI,CAAC,YAAY;AACf,eAAO,WAAW,OAAO,UAAU,OAAO,OAAO,OAAO,OAAO;AAAA,MACjE,WAAW,CAAC,iBAAiB;AAC3B,YAAI,eAAe;AACjB,uBAAa,gBAAgB,OAAO;AACpC,0BAAgB,UAAU,OAAO,WAAW,MAAM;AAChD,mBAAO;AACP,4BAAgB,UAAU;AAAA,UAC5B,GAAG,aAAa,GAAI;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,cAAc,cAAc,OAAO,YAAY,MAAM,iBAAiB,QAAQ,MAAM,CAAC;AAEzF,QAAM,qBAA2B,mBAAY,MAAM;AACjD,QAAI,iBAAiB;AACnB,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,eAAe,CAAC;AAEpB,QAAM,UAAU,MAAM;AACpB,QAAI,UAAU,SAAS;AACrB,gBAAU,QAAQ,QAAQ;AAC1B,gBAAU,UAAU;AAAA,IACtB;AAEA,QAAI,cAAc,SAAS;AACzB,oBAAc,QAAQ,QAAQ;AAC9B,oBAAc,UAAU;AAAA,IAC1B;AAAA,EACF;AAEA,eAAa,MAAM;AACjB,QAAI,UAAU,GAAG;AACf,aAAO,iBAAiB,QAAQ,WAAW,OAAO;AAAA,IACpD;AAAA,EACF,CAAC;AAED,WAAS,MAAM;AACb,cAAU,UAAU;AAEpB,QAAI;AAAA,MACF,OAAO;AAAA,MACP,MAAM;AAAA,QACJ,aAAa,CAAC,CAAC;AAAA,QACf,WAAW,CAAC,CAAC;AAAA,QACb,cAAcA,IAAG,QAAQ,IAAI;AAAA,QAC7B;AAAA,QACA,QAAQ,cAAc,QAAQ;AAAA,QAC9B,SAAS,WAAW;AAAA,MACtB;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,eAAW,QAAQ;AAAA,EACrB,CAAC;AAED,aAAW,MAAM;AACf,cAAU,UAAU;AAEpB,YAAQ;AACR,WAAO,oBAAoB,QAAQ,WAAW,OAAO;AAAA,EACvD,CAAC;AAGD,kBAAgB,MAAM;AACpB,QAAI,CAAC,UAAU,GAAG;AAChB;AAAA,IACF;AAEA,QAAI,aAAa,MAAM,GAAG;AACxB,UAAI;AAGJ,UAAIA,IAAG,QAAQ,IAAI,GAAG;AACpB,sBAAc,OAAO,OAAO,SAAS,OAAO;AAAA,MAC9C;AAEA,aAAO,WAAW;AAAA,IACpB;AAEA,QAAI,aAAa,yBAAyB,KAAK,aAAa,QAAQ,GAAG;AACrE,kBAAY;AAAA,QACV,iBAAiB,CAAC,CAAC,gBAAgB,YAAY,CAAC,CAAC;AAAA,MACnD,CAAC;AAAA,IACH;AAEA,QACG,QAAQ,UAAU,OAAO,IAAI,KAAK,QAClC,QAAQ,UAAU,OAAO,MAAM,OAAO,IAAI,KAAK,UAChD;AACA,aAAO,OAAO,MAAM;AAAA,IACtB;AAEA,QAAI,QAAQ,UAAU,OAAO,MAAM,GAAG;AACpC,UAAI,UAAU,SAAS;AACrB,kBAAU,QAAQ,QAAQ;AAAA,MAC5B;AAEA,iBAAW,QAAQ;AAAA,IACrB;AAEA,QAAI,WAAW,WAAW,QAAQ,UAAU,CAAC,OAAO,QAAQ,OAAO,OAAO,CAAC,GAAG;AAC5E,WAAK,WAAW,SAAS,iBAAiB,oBAAoB,OAAO;AAAA,IACvE;AAEA,QAAI,QAAQ,UAAU,OAAO,MAAM,OAAO,OAAO,KAAK,UAAU,SAAS;AACvE,gBAAU,QAAQ,QAAQ;AAC1B,gBAAU,UAAU;AAEpB,UAAI,cAAc,SAAS;AACzB,sBAAc,QAAQ,YAAY;AAAA,MACpC;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,UACJ;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,IAAI,MAAM,WAAW;AAAA,MACrB,cAAcA,IAAG,QAAQ,IAAI;AAAA,MAC7B,SAAS;AAAA,MACT,SAAS;AAAA,MACT,cAAc;AAAA,MACd,cAAc;AAAA,MACd;AAAA,MACA;AAAA,MACA,QAAQ,cAAc;AAAA,MACtB;AAAA;AAAA,IAEC;AAAA,EACH;AAGF,SACE,4DACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAa,CAAC,CAAC;AAAA,MACf,YAAY,WAAW;AAAA,MACvB,WAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,QAAQ,cAAc,QAAQ;AAAA;AAAA,IAE9B;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,aAAa,qBAAqB;AAAA,QAC7C,IAAI,MAAM,WAAW;AAAA,QACrB,SAAS;AAAA,QACT,WAAW;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA;AAAA,IACF;AAAA,IACC,mBAAmB;AAAA,EACtB,GACC,CAAC,mBAAmB,OACvB;AAEJ;","names":["React","is","React","React","React","React","is","defaultOptions","isValidElement","isValidElement","React","is","is","React","is","is","deepmerge","is"]}