{"version":3,"sources":["../../src/Toast.tsx","../../../../foundation/primitives-web/src/Box.tsx","../../../../foundation/primitives-web/src/filterDOMProps.ts","../../../../../node_modules/@emotion/memoize/dist/memoize.esm.js","../../../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js","../../src/ToastProvider.web.tsx"],"sourcesContent":["import React, { cloneElement, isValidElement } from \"react\";\n// @ts-expect-error - this will be resolved at build time\nimport { Box } from \"@xsolla/xui-primitives\";\nimport { useResolvedTheme, type ThemeOverrideProps } from \"@xsolla/xui-core\";\nimport {\n  IconButton,\n  type ButtonProps,\n  type IconButtonProps,\n} from \"@xsolla/xui-button\";\nimport { Typography } from \"@xsolla/xui-typography\";\nimport { Remove } from \"@xsolla/xui-icons-base\";\n\nexport type ToastType = \"alert\" | \"success\" | \"warning\" | \"info\";\n\nexport type ToastActionElement = React.ReactElement<\n  ButtonProps | IconButtonProps\n>;\n\nexport interface ToastProps extends ThemeOverrideProps {\n  /** Visual variant/tone of the toast */\n  type?: ToastType;\n  /** Title text (required for accessibility) */\n  title?: string;\n  /** Optional description text shown beneath the title */\n  description?: string;\n  /**\n   * Action element (Button/IconButton). The toast will inject\n   * `size=\"xs\"`, `variant=\"tertiary\"`, and a tone matching the toast type.\n   */\n  action?: React.ReactElement;\n  /** Show/hide close button */\n  showCloseButton?: boolean;\n  /** Close button click handler */\n  onClose?: () => void;\n  testID?: string;\n}\n\nconst TYPE_TO_BUTTON_TONE: Record<\n  ToastType,\n  \"alert\" | \"brandExtra\" | \"brand\" | \"mono\"\n> = {\n  alert: \"alert\",\n  success: \"brandExtra\",\n  warning: \"mono\",\n  info: \"brand\",\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n  type = \"info\",\n  title,\n  description,\n  action,\n  showCloseButton = true,\n  onClose,\n  testID,\n  themeMode,\n  themeProductContext,\n}) => {\n  const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n  const config = theme.sizing.toast();\n\n  const stripeColor: Record<ToastType, string> = {\n    alert: theme.colors.content.alert.primary,\n    success: theme.colors.content.success.secondary,\n    warning: theme.colors.content.warning.secondary,\n    info: theme.colors.content.brand.secondary,\n  };\n\n  const hasActions = Boolean(action) || showCloseButton;\n\n  return (\n    <Box\n      backgroundColor={theme.colors.background.primary}\n      borderRadius={config.borderRadius}\n      flexDirection=\"row\"\n      alignItems=\"stretch\"\n      overflow=\"hidden\"\n      width={440}\n      style={{ boxShadow: theme.shadow.surface }}\n      testID={testID}\n      role={type === \"alert\" ? \"alert\" : \"status\"}\n      aria-live={type === \"alert\" ? \"assertive\" : \"polite\"}\n      aria-label={`${type} toast`}\n    >\n      {/* Colored left stripe */}\n      <Box backgroundColor={stripeColor[type]} width={4} alignSelf=\"stretch\" />\n\n      {/* Body */}\n      <Box\n        flex={1}\n        flexDirection=\"row\"\n        alignItems=\"center\"\n        paddingHorizontal={16}\n        paddingVertical={12}\n        gap={16}\n      >\n        {/* Text */}\n        <Box flex={1} gap={2}>\n          {title && (\n            <Typography\n              variant=\"bodyMdAccent\"\n              color={theme.colors.content.primary}\n            >\n              {title}\n            </Typography>\n          )}\n          {description && (\n            <Typography variant=\"bodySm\" color={theme.colors.content.tertiary}>\n              {description}\n            </Typography>\n          )}\n        </Box>\n\n        {/* Actions */}\n        {hasActions && (\n          <Box\n            flexDirection=\"row\"\n            alignItems=\"center\"\n            alignSelf=\"stretch\"\n            gap={config.groupGap ?? 4}\n          >\n            {isValidElement(action) &&\n              cloneElement(action as ToastActionElement, {\n                size: \"xs\",\n                variant: \"tertiary\",\n                tone: TYPE_TO_BUTTON_TONE[type],\n              })}\n\n            {action && showCloseButton && (\n              <Box\n                width={1}\n                alignSelf=\"stretch\"\n                backgroundColor={theme.colors.border.secondary}\n              />\n            )}\n\n            {showCloseButton && (\n              <IconButton\n                variant=\"tertiary\"\n                tone=\"mono\"\n                size=\"xs\"\n                onPress={onClose}\n                aria-label=\"Close toast\"\n                icon={<Remove size={18} />}\n                hoverBackground=\"none\"\n              />\n            )}\n          </Box>\n        )}\n      </Box>\n    </Box>\n  );\n};\n\nToast.displayName = \"Toast\";\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport type { BoxProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledBox = styled(FilteredDiv)<BoxProps>`\n  display: flex;\n  box-sizing: border-box;\n  background-color: ${(props) => props.backgroundColor || \"transparent\"};\n  border-color: ${(props) => props.borderColor || \"transparent\"};\n  border-width: ${(props) =>\n    typeof props.borderWidth === \"number\"\n      ? `${props.borderWidth}px`\n      : props.borderWidth || 0};\n\n  ${(props) =>\n    props.borderBottomWidth !== undefined &&\n    `\n    border-bottom-width: ${typeof props.borderBottomWidth === \"number\" ? `${props.borderBottomWidth}px` : props.borderBottomWidth};\n    border-bottom-color: ${props.borderBottomColor || props.borderColor || \"transparent\"};\n    border-bottom-style: solid;\n  `}\n  ${(props) =>\n    props.borderTopWidth !== undefined &&\n    `\n    border-top-width: ${typeof props.borderTopWidth === \"number\" ? `${props.borderTopWidth}px` : props.borderTopWidth};\n    border-top-color: ${props.borderTopColor || props.borderColor || \"transparent\"};\n    border-top-style: solid;\n  `}\n  ${(props) =>\n    props.borderLeftWidth !== undefined &&\n    `\n    border-left-width: ${typeof props.borderLeftWidth === \"number\" ? `${props.borderLeftWidth}px` : props.borderLeftWidth};\n    border-left-color: ${props.borderLeftColor || props.borderColor || \"transparent\"};\n    border-left-style: solid;\n  `}\n  ${(props) =>\n    props.borderRightWidth !== undefined &&\n    `\n    border-right-width: ${typeof props.borderRightWidth === \"number\" ? `${props.borderRightWidth}px` : props.borderRightWidth};\n    border-right-color: ${props.borderRightColor || props.borderColor || \"transparent\"};\n    border-right-style: solid;\n  `}\n\n  border-style: ${(props) =>\n    props.borderStyle ||\n    (props.borderWidth ||\n    props.borderBottomWidth ||\n    props.borderTopWidth ||\n    props.borderLeftWidth ||\n    props.borderRightWidth\n      ? \"solid\"\n      : \"none\")};\n  border-radius: ${(props) =>\n    typeof props.borderRadius === \"number\"\n      ? `${props.borderRadius}px`\n      : props.borderRadius || 0};\n  height: ${(props) =>\n    typeof props.height === \"number\"\n      ? `${props.height}px`\n      : props.height || \"auto\"};\n  width: ${(props) =>\n    typeof props.width === \"number\"\n      ? `${props.width}px`\n      : props.width || \"auto\"};\n  min-width: ${(props) =>\n    typeof props.minWidth === \"number\"\n      ? `${props.minWidth}px`\n      : props.minWidth || \"auto\"};\n  min-height: ${(props) =>\n    typeof props.minHeight === \"number\"\n      ? `${props.minHeight}px`\n      : props.minHeight || \"auto\"};\n  max-width: ${(props) =>\n    typeof props.maxWidth === \"number\"\n      ? `${props.maxWidth}px`\n      : props.maxWidth || \"none\"};\n  max-height: ${(props) =>\n    typeof props.maxHeight === \"number\"\n      ? `${props.maxHeight}px`\n      : props.maxHeight || \"none\"};\n\n  padding: ${(props) =>\n    typeof props.padding === \"number\"\n      ? `${props.padding}px`\n      : props.padding || 0};\n  ${(props) =>\n    props.paddingHorizontal &&\n    `\n    padding-left: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n    padding-right: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n  `}\n  ${(props) =>\n    props.paddingVertical &&\n    `\n    padding-top: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n    padding-bottom: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n  `}\n  ${(props) =>\n    props.paddingTop !== undefined &&\n    `padding-top: ${typeof props.paddingTop === \"number\" ? `${props.paddingTop}px` : props.paddingTop};`}\n  ${(props) =>\n    props.paddingBottom !== undefined &&\n    `padding-bottom: ${typeof props.paddingBottom === \"number\" ? `${props.paddingBottom}px` : props.paddingBottom};`}\n  ${(props) =>\n    props.paddingLeft !== undefined &&\n    `padding-left: ${typeof props.paddingLeft === \"number\" ? `${props.paddingLeft}px` : props.paddingLeft};`}\n  ${(props) =>\n    props.paddingRight !== undefined &&\n    `padding-right: ${typeof props.paddingRight === \"number\" ? `${props.paddingRight}px` : props.paddingRight};`}\n\n  margin: ${(props) =>\n    typeof props.margin === \"number\" ? `${props.margin}px` : props.margin || 0};\n  ${(props) =>\n    props.marginTop !== undefined &&\n    `margin-top: ${typeof props.marginTop === \"number\" ? `${props.marginTop}px` : props.marginTop};`}\n  ${(props) =>\n    props.marginBottom !== undefined &&\n    `margin-bottom: ${typeof props.marginBottom === \"number\" ? `${props.marginBottom}px` : props.marginBottom};`}\n  ${(props) =>\n    props.marginLeft !== undefined &&\n    `margin-left: ${typeof props.marginLeft === \"number\" ? `${props.marginLeft}px` : props.marginLeft};`}\n  ${(props) =>\n    props.marginRight !== undefined &&\n    `margin-right: ${typeof props.marginRight === \"number\" ? `${props.marginRight}px` : props.marginRight};`}\n\n  flex-direction: ${(props) => props.flexDirection || \"column\"};\n  flex-wrap: ${(props) => props.flexWrap || \"nowrap\"};\n  align-items: ${(props) => props.alignItems || \"stretch\"};\n  justify-content: ${(props) => props.justifyContent || \"flex-start\"};\n  cursor: ${(props) =>\n    props.cursor\n      ? props.cursor\n      : props.onClick || props.onPress\n        ? \"pointer\"\n        : \"inherit\"};\n  position: ${(props) => props.position || \"static\"};\n  top: ${(props) =>\n    typeof props.top === \"number\" ? `${props.top}px` : props.top};\n  bottom: ${(props) =>\n    typeof props.bottom === \"number\" ? `${props.bottom}px` : props.bottom};\n  left: ${(props) =>\n    typeof props.left === \"number\" ? `${props.left}px` : props.left};\n  right: ${(props) =>\n    typeof props.right === \"number\" ? `${props.right}px` : props.right};\n  flex: ${(props) => props.flex};\n  flex-shrink: ${(props) => props.flexShrink ?? 1};\n  gap: ${(props) =>\n    typeof props.gap === \"number\" ? `${props.gap}px` : props.gap || 0};\n  align-self: ${(props) => props.alignSelf || \"auto\"};\n  /* Only emit overflow-x/y when explicitly set. Defaulting them to\n     visible after overflow would override the shorthand and break\n     clipping (e.g. OtherCard bottom-right promo image). */\n  overflow: ${(props) => props.overflow || \"visible\"};\n  ${(props) =>\n    props.overflowX != null ? `overflow-x: ${props.overflowX};` : \"\"}\n  ${(props) =>\n    props.overflowY != null ? `overflow-y: ${props.overflowY};` : \"\"}\n  z-index: ${(props) => props.zIndex};\n  opacity: ${(props) =>\n    props.opacity != null ? props.opacity : props.disabled ? 0.5 : 1};\n  pointer-events: ${(props) => (props.disabled ? \"none\" : \"auto\")};\n\n  /* \\`background\\` is emitted before \\`background-color\\` so a caller passing\n     both still gets backgroundColor as the winner. Use the shorthand for a\n     layered fill (e.g. an overlay tint over a resting surface colour), which\n     a single background-color cannot express. */\n  &:hover {\n    ${(props) =>\n      props.hoverStyle?.background &&\n      `background: ${props.hoverStyle.background};`}\n    ${(props) =>\n      props.hoverStyle?.backgroundColor &&\n      `background-color: ${props.hoverStyle.backgroundColor};`}\n    ${(props) =>\n      props.hoverStyle?.borderColor &&\n      `border-color: ${props.hoverStyle.borderColor};`}\n  }\n\n  &:active {\n    ${(props) =>\n      props.pressStyle?.background &&\n      `background: ${props.pressStyle.background};`}\n    ${(props) =>\n      props.pressStyle?.backgroundColor &&\n      `background-color: ${props.pressStyle.backgroundColor};`}\n  }\n`;\n\nexport const Box = React.forwardRef<\n  HTMLDivElement | HTMLButtonElement,\n  BoxProps\n>(\n  (\n    {\n      children,\n      onPress,\n      onKeyDown,\n      onKeyUp,\n      role,\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": ariaLabelledBy,\n      \"aria-current\": ariaCurrent,\n      \"aria-disabled\": ariaDisabled,\n      \"aria-live\": ariaLive,\n      \"aria-busy\": ariaBusy,\n      \"aria-describedby\": ariaDescribedBy,\n      \"aria-expanded\": ariaExpanded,\n      \"aria-haspopup\": ariaHasPopup,\n      \"aria-pressed\": ariaPressed,\n      \"aria-controls\": ariaControls,\n      tabIndex,\n      as,\n      src,\n      alt,\n      onError,\n      onLoad,\n      type,\n      disabled,\n      id,\n      testID,\n      \"data-testid\": dataTestId,\n      ...props\n    },\n    ref\n  ) => {\n    // Handle as=\"img\" for rendering images with proper border-radius\n    if (as === \"img\" && src) {\n      return (\n        <img\n          src={src}\n          alt={alt || \"\"}\n          onError={onError}\n          onLoad={onLoad}\n          data-testid={dataTestId || testID}\n          style={{\n            display: \"block\",\n            objectFit: \"cover\",\n            width:\n              typeof props.width === \"number\"\n                ? `${props.width}px`\n                : props.width,\n            height:\n              typeof props.height === \"number\"\n                ? `${props.height}px`\n                : props.height,\n            borderRadius:\n              typeof props.borderRadius === \"number\"\n                ? `${props.borderRadius}px`\n                : props.borderRadius,\n            position: props.position,\n            top: typeof props.top === \"number\" ? `${props.top}px` : props.top,\n            left:\n              typeof props.left === \"number\" ? `${props.left}px` : props.left,\n            right:\n              typeof props.right === \"number\"\n                ? `${props.right}px`\n                : props.right,\n            bottom:\n              typeof props.bottom === \"number\"\n                ? `${props.bottom}px`\n                : props.bottom,\n            ...props.style,\n          }}\n        />\n      );\n    }\n\n    return (\n      <StyledBox\n        ref={ref}\n        elementType={as}\n        id={id}\n        type={as === \"button\" ? type || \"button\" : undefined}\n        disabled={as === \"button\" ? disabled : undefined}\n        onClick={onPress}\n        onKeyDown={onKeyDown}\n        onKeyUp={onKeyUp}\n        role={role}\n        aria-label={ariaLabel}\n        aria-labelledby={ariaLabelledBy}\n        aria-current={ariaCurrent}\n        aria-disabled={ariaDisabled}\n        aria-busy={ariaBusy}\n        aria-describedby={ariaDescribedBy}\n        aria-expanded={ariaExpanded}\n        aria-haspopup={ariaHasPopup}\n        aria-pressed={ariaPressed}\n        aria-controls={ariaControls}\n        aria-live={ariaLive}\n        tabIndex={tabIndex !== undefined ? tabIndex : undefined}\n        data-testid={dataTestId || testID}\n        {...props}\n      >\n        {children}\n      </StyledBox>\n    );\n  }\n);\n\nBox.displayName = \"Box\";\n","import React from \"react\";\nimport isPropValid from \"@emotion/is-prop-valid\";\n\n// Props that @emotion/is-prop-valid incorrectly treats as valid HTML.\n// These are React Native or component-specific props that match\n// valid HTML patterns (on* event handlers, SVG attributes).\nexport const ADDITIONAL_BLOCKED_PROPS = new Set([\n  // RN-only event handlers (pass isPropValid's on* pattern)\n  \"onPress\",\n  \"onChangeText\",\n  \"onLayout\",\n  \"onMoveShouldSetResponder\",\n  \"onResponderGrant\",\n  \"onResponderMove\",\n  \"onResponderRelease\",\n  \"onResponderTerminate\",\n  // SVG attributes that pass isPropValid\n  \"strokeWidth\",\n  // CSS properties that pass isPropValid but are used as component props\n  \"overflow\",\n  \"opacity\",\n  \"cursor\",\n  \"fontSize\",\n  \"fontWeight\",\n  \"fontFamily\",\n  \"textDecoration\",\n  // Cross-platform layout prop that Text consumes as CSS, never as an\n  // attribute. Pinned explicitly because it is now spread into the styled\n  // component rather than destructured away before it can reach the DOM.\n  \"numberOfLines\",\n]);\n\nfunction shouldForwardProp(key: string): boolean {\n  if (ADDITIONAL_BLOCKED_PROPS.has(key)) return false;\n  return isPropValid(key);\n}\n\n/**\n * Creates a React component that renders the given HTML tag\n * but filters out non-HTML props before they reach the DOM.\n *\n * Uses @emotion/is-prop-valid (same library styled-components v4\n * uses internally) to automatically block invalid HTML attributes,\n * plus a small blocklist for false positives (RN on* handlers, SVG attrs).\n *\n * Usage: `const FilteredDiv = createFilteredElement(\"div\");`\n * Then:  `const StyledBox = styled(FilteredDiv)<BoxProps>\\`...\\`;`\n *\n * styled-components can still read ALL props for CSS interpolation,\n * but only valid HTML attributes are forwarded to the DOM element.\n */\nexport function createFilteredElement(defaultTag: string) {\n  const Component = React.forwardRef<HTMLElement, Record<string, unknown>>(\n    ({ children, elementType, ...props }, ref) => {\n      const Tag = (elementType as string) || defaultTag;\n      const htmlProps: Record<string, unknown> = {};\n      for (const key of Object.keys(props)) {\n        if (shouldForwardProp(key)) {\n          htmlProps[key] = props[key];\n        }\n      }\n      return React.createElement(\n        Tag,\n        { ref, ...htmlProps },\n        children as React.ReactNode\n      );\n    }\n  );\n  Component.displayName = `Filtered(${defaultTag})`;\n  return Component;\n}\n","function memoize(fn) {\n  var cache = {};\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","import React, {\n  createContext,\n  useCallback,\n  useContext,\n  useEffect,\n  useLayoutEffect,\n  useMemo,\n  useRef,\n  useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { TOAST_LAYER } from \"@xsolla/xui-core\";\nimport { Toast, type ToastProps, type ToastType } from \"./Toast\";\n\nexport type ToastPosition =\n  | \"top-right\"\n  | \"top-left\"\n  | \"top-center\"\n  | \"bottom-right\"\n  | \"bottom-left\"\n  | \"bottom-center\";\n\nexport type ToastVariant = \"default\" | \"sonner\";\n\nexport interface ToastOptions extends Omit<\n  ToastProps,\n  \"type\" | \"onClose\" | \"testID\"\n> {\n  /**\n   * Auto-dismiss duration in ms. Pass 0 to disable auto-dismiss.\n   * Defaults derived from `type`: success 4500, info/warning 6500, alert 9000.\n   */\n  duration?: number;\n  /** Stable id — if provided and a toast with that id already exists, it's replaced. */\n  id?: string;\n  /** Called when the toast is dismissed (auto or manual). */\n  onDismiss?: () => void;\n}\n\nexport interface ToastQueueItem extends ToastOptions {\n  id: string;\n  type: ToastType;\n  createdAt: number;\n}\n\nexport interface ToastApi {\n  alert: (options: ToastOptions) => string;\n  success: (options: ToastOptions) => string;\n  warning: (options: ToastOptions) => string;\n  info: (options: ToastOptions) => string;\n  show: (type: ToastType, options: ToastOptions) => string;\n  dismiss: (id: string) => void;\n  dismissAll: () => void;\n}\n\ninterface ToastContextValue {\n  api: ToastApi;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nconst DEFAULT_DURATIONS: Record<ToastType, number> = {\n  success: 4500,\n  info: 6500,\n  warning: 6500,\n  alert: 9000,\n};\n\nconst POSITION_STYLES: Record<ToastPosition, React.CSSProperties> = {\n  \"top-right\": { top: 16, right: 16, alignItems: \"flex-end\" },\n  \"top-left\": { top: 16, left: 16, alignItems: \"flex-start\" },\n  \"top-center\": {\n    top: 16,\n    left: \"50%\",\n    transform: \"translateX(-50%)\",\n    alignItems: \"center\",\n  },\n  \"bottom-right\": { bottom: 16, right: 16, alignItems: \"flex-end\" },\n  \"bottom-left\": { bottom: 16, left: 16, alignItems: \"flex-start\" },\n  \"bottom-center\": {\n    bottom: 16,\n    left: \"50%\",\n    transform: \"translateX(-50%)\",\n    alignItems: \"center\",\n  },\n};\n\nexport interface ToastProviderProps {\n  children: React.ReactNode;\n  /** Where toasts appear on screen. Defaults to top-right. */\n  position?: ToastPosition;\n  /** Maximum number of simultaneously visible toasts. Defaults to 3. */\n  limit?: number;\n  /** DOM node to portal the viewport into. Defaults to document.body. */\n  container?: HTMLElement | null;\n  /**\n   * Enable enter & exit animations. Defaults to `true`.\n   * When `false`, toasts appear and disappear instantly.\n   */\n  animated?: boolean;\n  /** Animation duration in ms. Defaults to 220 (default variant) / 400 (sonner). */\n  animationDuration?: number;\n  /**\n   * Visual variant.\n   * - `\"default\"` — toasts slide in from the edge and stack vertically.\n   * - `\"sonner\"` — shadcn/sonner-style stacked-cards: toasts overlap as a deck\n   *   with back cards scaled & peeking; hovering the stack expands it.\n   */\n  variant?: ToastVariant;\n  testID?: string;\n}\n\n// Off-screen transform used as the enter start / exit end state, derived\n// from the viewport position (slides in from the closest edge).\nconst enterTransform = (position: ToastPosition): string => {\n  if (position.endsWith(\"right\")) return \"translateX(110%)\";\n  if (position.endsWith(\"left\")) return \"translateX(-110%)\";\n  return position.startsWith(\"top\") ? \"translateY(-110%)\" : \"translateY(110%)\";\n};\n\n// CSS to anchor an absolutely-positioned sonner item to the viewport corner.\nconst SONNER_ANCHOR: Record<ToastPosition, React.CSSProperties> = {\n  \"top-right\": { top: 0, right: 0 },\n  \"top-left\": { top: 0, left: 0 },\n  \"top-center\": { top: 0, left: \"50%\", marginLeft: -220 },\n  \"bottom-right\": { bottom: 0, right: 0 },\n  \"bottom-left\": { bottom: 0, left: 0 },\n  \"bottom-center\": { bottom: 0, left: \"50%\", marginLeft: -220 },\n};\n\nconst SONNER_GAP = 8;\nconst SONNER_PEEK = 6;\nconst SONNER_SCALE_STEP = 0.06;\nconst MAX_VISIBLE_BACK = 2; // beyond this index, toasts fade to zero\n\ninterface ToastItemProps {\n  item: ToastQueueItem;\n  position: ToastPosition;\n  variant: ToastVariant;\n  animated: boolean;\n  animationDuration: number;\n  exiting: boolean;\n  // Sonner-specific\n  frontIndex: number;\n  expanded: boolean;\n  cumulativeOffset: number;\n  reportHeight: (id: string, h: number) => void;\n  // Common\n  onClose: () => void;\n  onPause: () => void;\n  onResume: () => void;\n  onHoverIn: (id: string) => void;\n  onHoverOut: (id: string) => void;\n}\n\nconst ToastItem: React.FC<ToastItemProps> = ({\n  item,\n  position,\n  variant,\n  animated,\n  animationDuration,\n  exiting,\n  frontIndex,\n  expanded,\n  cumulativeOffset,\n  reportHeight,\n  onClose,\n  onPause,\n  onResume,\n  onHoverIn,\n  onHoverOut,\n}) => {\n  const [entered, setEntered] = useState(!animated);\n  const ref = useRef<HTMLDivElement | null>(null);\n  const hoveredRef = useRef(false);\n\n  useEffect(() => {\n    if (!animated) return;\n    let raf2 = 0;\n    const raf1 = window.requestAnimationFrame(() => {\n      raf2 = window.requestAnimationFrame(() => setEntered(true));\n    });\n    return () => {\n      window.cancelAnimationFrame(raf1);\n      window.cancelAnimationFrame(raf2);\n    };\n  }, [animated]);\n\n  // Guarantee hover state is cleaned up if the item unmounts while hovered\n  // (mouseLeave doesn't fire on disappearing elements).\n  useEffect(\n    () => () => {\n      if (hoveredRef.current) {\n        hoveredRef.current = false;\n        onHoverOut(item.id);\n      }\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    []\n  );\n\n  // Measure height for sonner stacking math.\n  useLayoutEffect(() => {\n    if (variant !== \"sonner\" || !ref.current) return;\n    const el = ref.current;\n    const report = () =>\n      reportHeight(item.id, el.getBoundingClientRect().height);\n    report();\n    if (typeof ResizeObserver === \"undefined\") return;\n    const ro = new ResizeObserver(report);\n    ro.observe(el);\n    return () => ro.disconnect();\n  }, [variant, item.id, reportHeight]);\n\n  const isSonner = variant === \"sonner\";\n  const isBottom = position.startsWith(\"bottom\");\n  const isCenter = position.endsWith(\"center\");\n  const dir = isBottom ? -1 : 1; // direction items move to \"stack back\"\n\n  let transform: string;\n  let opacity = 1;\n  let zIndex = 1000 - frontIndex;\n\n  const offTransform = enterTransform(position);\n  const showOff = animated && (!entered || exiting);\n\n  if (isSonner) {\n    // Horizontal centering baseline for *-center positions\n    const xBase = \"\"; // marginLeft handles centering for sonner-anchored items\n\n    if (showOff) {\n      transform = `${xBase} ${offTransform}`.trim();\n      opacity = 0;\n    } else if (frontIndex === 0) {\n      transform = `${xBase} translateY(0) scale(1)`;\n    } else if (expanded) {\n      // Spread out using measured cumulative offsets\n      transform = `${xBase} translateY(${dir * cumulativeOffset}px) scale(1)`;\n    } else {\n      // Collapsed stack: peek behind front, scaled down\n      const peek = SONNER_PEEK * frontIndex;\n      const scale = Math.max(0.7, 1 - SONNER_SCALE_STEP * frontIndex);\n      transform = `${xBase} translateY(${dir * peek}px) scale(${scale})`;\n      if (frontIndex > MAX_VISIBLE_BACK) opacity = 0;\n    }\n  } else {\n    // Default variant: simple slide-in / slide-out\n    transform = showOff ? offTransform : \"translateX(0) translateY(0)\";\n    opacity = showOff ? 0 : 1;\n  }\n\n  const style: React.CSSProperties = {\n    pointerEvents: opacity === 0 ? \"none\" : \"auto\",\n    transform,\n    opacity,\n    zIndex,\n    transition: animated\n      ? `transform ${animationDuration}ms cubic-bezier(0.16, 1, 0.3, 1), opacity ${animationDuration}ms ease`\n      : undefined,\n    willChange: animated ? \"transform, opacity\" : undefined,\n    transformOrigin: isSonner\n      ? isCenter\n        ? isBottom\n          ? \"bottom center\"\n          : \"top center\"\n        : isBottom\n          ? `bottom ${position.endsWith(\"right\") ? \"right\" : \"left\"}`\n          : `top ${position.endsWith(\"right\") ? \"right\" : \"left\"}`\n      : undefined,\n    ...(isSonner\n      ? {\n          position: \"absolute\" as const,\n          width: 440,\n          ...SONNER_ANCHOR[position],\n        }\n      : null),\n  };\n\n  return (\n    <div\n      ref={ref}\n      style={style}\n      onMouseEnter={() => {\n        onPause();\n        if (!hoveredRef.current) {\n          hoveredRef.current = true;\n          onHoverIn(item.id);\n        }\n      }}\n      onMouseLeave={() => {\n        onResume();\n        if (hoveredRef.current) {\n          hoveredRef.current = false;\n          onHoverOut(item.id);\n        }\n      }}\n      // Ignore focus moves between descendants (e.g. action → close button) —\n      // those are still inside the toast and shouldn't toggle the timer.\n      onFocus={(e) => {\n        if (e.currentTarget.contains(e.relatedTarget as Node | null)) return;\n        onPause();\n        if (!hoveredRef.current) {\n          hoveredRef.current = true;\n          onHoverIn(item.id);\n        }\n      }}\n      onBlur={(e) => {\n        if (e.currentTarget.contains(e.relatedTarget as Node | null)) return;\n        onResume();\n        if (hoveredRef.current) {\n          hoveredRef.current = false;\n          onHoverOut(item.id);\n        }\n      }}\n    >\n      <Toast\n        type={item.type}\n        title={item.title}\n        description={item.description}\n        action={item.action}\n        showCloseButton={item.showCloseButton}\n        onClose={onClose}\n        themeMode={item.themeMode}\n        themeProductContext={item.themeProductContext}\n      />\n    </div>\n  );\n};\n\nlet idCounter = 0;\nconst nextId = () => `toast-${Date.now()}-${++idCounter}`;\n\nexport const ToastProvider: React.FC<ToastProviderProps> = ({\n  children,\n  position = \"top-right\",\n  limit = 3,\n  container,\n  animated = true,\n  animationDuration,\n  variant = \"default\",\n  testID,\n}) => {\n  const isSonner = variant === \"sonner\";\n  const effectiveDuration = animationDuration ?? (isSonner ? 400 : 220);\n\n  const [toasts, setToasts] = useState<ToastQueueItem[]>([]);\n  const [exiting, setExiting] = useState<Set<string>>(() => new Set());\n  const [heights, setHeights] = useState<Record<string, number>>({});\n  const [hoveredIds, setHoveredIds] = useState<Set<string>>(() => new Set());\n  const exitTimeoutsRef = useRef<Map<string, number>>(new Map());\n  const timersRef = useRef<\n    Map<string, { remaining: number; startedAt: number; timeoutId: number }>\n  >(new Map());\n  const onDismissRef = useRef<Map<string, () => void>>(new Map());\n  const dismissRef = useRef<(id: string) => void>(() => {});\n\n  const reportHeight = useCallback((id: string, h: number) => {\n    setHeights((prev) => (prev[id] === h ? prev : { ...prev, [id]: h }));\n  }, []);\n\n  const clearTimer = useCallback((id: string) => {\n    const entry = timersRef.current.get(id);\n    if (entry) {\n      window.clearTimeout(entry.timeoutId);\n      timersRef.current.delete(id);\n    }\n  }, []);\n\n  const removeNow = useCallback((id: string) => {\n    const cb = onDismissRef.current.get(id);\n    onDismissRef.current.delete(id);\n    setToasts((prev) => prev.filter((t) => t.id !== id));\n    setExiting((prev) => {\n      if (!prev.has(id)) return prev;\n      const next = new Set(prev);\n      next.delete(id);\n      return next;\n    });\n    setHeights((prev) => {\n      if (!(id in prev)) return prev;\n      const next = { ...prev };\n      delete next[id];\n      return next;\n    });\n    setHoveredIds((prev) => {\n      if (!prev.has(id)) return prev;\n      const next = new Set(prev);\n      next.delete(id);\n      return next;\n    });\n    cb?.();\n  }, []);\n\n  const dismiss = useCallback(\n    (id: string) => {\n      clearTimer(id);\n      if (!animated) {\n        removeNow(id);\n        return;\n      }\n      if (exitTimeoutsRef.current.has(id)) return;\n      setExiting((prev) => {\n        const next = new Set(prev);\n        next.add(id);\n        return next;\n      });\n      const timeoutId = window.setTimeout(() => {\n        exitTimeoutsRef.current.delete(id);\n        removeNow(id);\n      }, effectiveDuration);\n      exitTimeoutsRef.current.set(id, timeoutId);\n    },\n    [clearTimer, animated, effectiveDuration, removeNow]\n  );\n\n  useEffect(() => {\n    dismissRef.current = dismiss;\n  }, [dismiss]);\n\n  const startTimer = useCallback((id: string, duration: number) => {\n    if (duration <= 0) return;\n    const timeoutId = window.setTimeout(() => {\n      dismissRef.current(id);\n    }, duration);\n    timersRef.current.set(id, {\n      remaining: duration,\n      startedAt: Date.now(),\n      timeoutId,\n    });\n  }, []);\n\n  const pauseTimer = useCallback((id: string) => {\n    const entry = timersRef.current.get(id);\n    if (!entry) return;\n    const elapsed = Date.now() - entry.startedAt;\n    const remaining = Math.max(0, entry.remaining - elapsed);\n    window.clearTimeout(entry.timeoutId);\n    timersRef.current.set(id, {\n      remaining,\n      startedAt: Date.now(),\n      timeoutId: 0,\n    });\n  }, []);\n\n  const resumeTimer = useCallback(\n    (id: string) => {\n      const entry = timersRef.current.get(id);\n      if (!entry || entry.timeoutId !== 0) return;\n      startTimer(id, entry.remaining);\n    },\n    [startTimer]\n  );\n\n  // Fire any registered onDismiss for `id` and clear all per-toast bookkeeping.\n  // Used when a toast is replaced (same id re-issued) or evicted by limit\n  // overflow — both are documented dismissal paths.\n  const cleanupDroppedToast = useCallback(\n    (id: string) => {\n      clearTimer(id);\n      const exitTimeoutId = exitTimeoutsRef.current.get(id);\n      if (exitTimeoutId) {\n        window.clearTimeout(exitTimeoutId);\n        exitTimeoutsRef.current.delete(id);\n      }\n      setExiting((prev) => {\n        if (!prev.has(id)) return prev;\n        const next = new Set(prev);\n        next.delete(id);\n        return next;\n      });\n      const cb = onDismissRef.current.get(id);\n      onDismissRef.current.delete(id);\n      cb?.();\n    },\n    [clearTimer]\n  );\n\n  const show = useCallback(\n    (type: ToastType, options: ToastOptions): string => {\n      const id = options.id ?? nextId();\n      const duration = options.duration ?? DEFAULT_DURATIONS[type];\n      const item: ToastQueueItem = {\n        ...options,\n        id,\n        type,\n        createdAt: Date.now(),\n      };\n\n      // If this id is currently exiting (replacement during exit animation),\n      // cancel the pending exit so the new toast doesn't get marked exiting\n      // and the old timeout doesn't remove it.\n      const pendingExit = exitTimeoutsRef.current.get(id);\n      if (pendingExit) {\n        window.clearTimeout(pendingExit);\n        exitTimeoutsRef.current.delete(id);\n        setExiting((prev) => {\n          if (!prev.has(id)) return prev;\n          const next = new Set(prev);\n          next.delete(id);\n          return next;\n        });\n      }\n\n      // Manage the onDismiss slot atomically: replacing without a new\n      // callback should not leave the previous one registered.\n      if (options.onDismiss) {\n        onDismissRef.current.set(id, options.onDismiss);\n      } else {\n        onDismissRef.current.delete(id);\n      }\n\n      setToasts((prev) => {\n        const replaced = prev.filter((t) => t.id === id);\n        const withoutDup = prev.filter((t) => t.id !== id);\n        const next = [...withoutDup, item];\n        const overflow =\n          next.length > limit ? next.slice(0, next.length - limit) : [];\n\n        // Replaced toasts: their onDismiss has already been overwritten\n        // above, so just clear timers (no callback to fire).\n        replaced.forEach((t) => {\n          clearTimer(t.id);\n          const ex = exitTimeoutsRef.current.get(t.id);\n          if (ex) {\n            window.clearTimeout(ex);\n            exitTimeoutsRef.current.delete(t.id);\n          }\n        });\n\n        // Overflow toasts: fire onDismiss and clean up.\n        overflow.forEach((t) => {\n          if (t.id === id) return; // never the freshly-added one\n          cleanupDroppedToast(t.id);\n        });\n\n        return next.length > limit ? next.slice(next.length - limit) : next;\n      });\n\n      clearTimer(id);\n      startTimer(id, duration);\n\n      return id;\n    },\n    [clearTimer, startTimer, limit, cleanupDroppedToast]\n  );\n\n  const dismissAll = useCallback(() => {\n    const ids = Array.from(timersRef.current.keys());\n    ids.forEach((id) => dismiss(id));\n    setToasts((prev) => {\n      prev.forEach((t) => {\n        if (!ids.includes(t.id)) dismiss(t.id);\n      });\n      return prev;\n    });\n  }, [dismiss]);\n\n  const api = useMemo<ToastApi>(\n    () => ({\n      alert: (options) => show(\"alert\", options),\n      success: (options) => show(\"success\", options),\n      warning: (options) => show(\"warning\", options),\n      info: (options) => show(\"info\", options),\n      show,\n      dismiss,\n      dismissAll,\n    }),\n    [show, dismiss, dismissAll]\n  );\n\n  useEffect(\n    () => () => {\n      timersRef.current.forEach((entry) =>\n        window.clearTimeout(entry.timeoutId)\n      );\n      timersRef.current.clear();\n      exitTimeoutsRef.current.forEach((id) => window.clearTimeout(id));\n      exitTimeoutsRef.current.clear();\n    },\n    []\n  );\n\n  const portalTarget =\n    container ?? (typeof document !== \"undefined\" ? document.body : null);\n\n  const isBottom = position.startsWith(\"bottom\");\n\n  // Build the render list with frontIndex (0 = newest = front of stack).\n  // toasts[] is oldest → newest. For default variant the visual order is:\n  //   top-*: newest first in DOM (so it appears at the top edge)\n  //   bottom-*: newest last in DOM (so it appears at the bottom edge)\n  // For sonner the DOM order doesn't affect visual stacking (all absolute,\n  // controlled by z-index), but for tab order we keep front-first in DOM.\n  const orderedItems = (() => {\n    if (isSonner) {\n      // newest first\n      return [...toasts].reverse().map((item, i) => ({ item, frontIndex: i }));\n    }\n    // default\n    if (isBottom) {\n      // newest last → frontIndex 0 is the last item\n      return toasts.map((item, i) => ({\n        item,\n        frontIndex: toasts.length - 1 - i,\n      }));\n    }\n    return [...toasts].reverse().map((item, i) => ({ item, frontIndex: i }));\n  })();\n\n  // Cumulative offset used by sonner-expanded layout: sum of heights of items\n  // closer to the front (smaller frontIndex) plus gap.\n  const offsetByFrontIndex = useMemo(() => {\n    const map: Record<number, number> = { 0: 0 };\n    let cumulative = 0;\n    // Walk in front-first order.\n    const sorted = [...orderedItems].sort(\n      (a, b) => a.frontIndex - b.frontIndex\n    );\n    for (let i = 0; i < sorted.length; i++) {\n      const fi = sorted[i].frontIndex;\n      if (fi === 0) continue;\n      const prev = sorted[i - 1];\n      cumulative += (heights[prev.item.id] ?? 64) + SONNER_GAP;\n      map[fi] = cumulative;\n    }\n    return map;\n  }, [orderedItems, heights]);\n\n  const expanded = isSonner && hoveredIds.size > 0;\n\n  // For sonner: keep the viewport sized so it captures hover even when only\n  // the front toast is visible.\n  const frontHeight = (() => {\n    const front = orderedItems.find((x) => x.frontIndex === 0);\n    return front ? (heights[front.item.id] ?? 64) : 0;\n  })();\n\n  const sonnerExpandedHeight =\n    frontHeight +\n    orderedItems\n      .filter((x) => x.frontIndex > 0)\n      .reduce((sum, x) => sum + (heights[x.item.id] ?? 64) + SONNER_GAP, 0);\n\n  return (\n    <ToastContext.Provider value={{ api }}>\n      {children}\n      {portalTarget &&\n        createPortal(\n          <div\n            data-toast-viewport=\"\"\n            data-testid={testID}\n            data-variant={variant}\n            data-expanded={expanded ? \"\" : undefined}\n            style={{\n              position: \"fixed\",\n              zIndex: TOAST_LAYER,\n              pointerEvents: \"none\",\n              maxWidth: \"calc(100vw - 32px)\",\n              ...(isSonner\n                ? {\n                    width: 440,\n                    height: expanded ? sonnerExpandedHeight : frontHeight,\n                    transition: animated\n                      ? `height ${effectiveDuration}ms cubic-bezier(0.16, 1, 0.3, 1)`\n                      : undefined,\n                    ...POSITION_STYLES[position],\n                    // override flex (we use absolute children in sonner mode)\n                    display: \"block\",\n                  }\n                : {\n                    display: \"flex\",\n                    flexDirection: \"column\",\n                    gap: 8,\n                    ...POSITION_STYLES[position],\n                  }),\n            }}\n          >\n            {orderedItems.map(({ item, frontIndex }) => (\n              <ToastItem\n                key={item.id}\n                item={item}\n                position={position}\n                variant={variant}\n                animated={animated}\n                animationDuration={effectiveDuration}\n                exiting={exiting.has(item.id)}\n                frontIndex={frontIndex}\n                expanded={expanded}\n                cumulativeOffset={offsetByFrontIndex[frontIndex] ?? 0}\n                reportHeight={reportHeight}\n                onClose={() => dismiss(item.id)}\n                onPause={() => pauseTimer(item.id)}\n                onResume={() => resumeTimer(item.id)}\n                onHoverIn={(id) => {\n                  if (!isSonner) return;\n                  setHoveredIds((prev) => {\n                    if (prev.has(id)) return prev;\n                    const next = new Set(prev);\n                    next.add(id);\n                    return next;\n                  });\n                }}\n                onHoverOut={(id) => {\n                  if (!isSonner) return;\n                  setHoveredIds((prev) => {\n                    if (!prev.has(id)) return prev;\n                    const next = new Set(prev);\n                    next.delete(id);\n                    return next;\n                  });\n                }}\n              />\n            ))}\n          </div>,\n          portalTarget\n        )}\n    </ToastContext.Provider>\n  );\n};\n\nToastProvider.displayName = \"ToastProvider\";\n\nexport const useToast = (): ToastApi => {\n  const ctx = useContext(ToastContext);\n  if (!ctx) {\n    throw new Error(\"useToast must be used within a <ToastProvider />\");\n  }\n  return ctx.api;\n};\n"],"mappings":";AAAA,SAAgB,cAAc,sBAAsB;;;ACApD,OAAOA,YAAW;AAClB,OAAO,YAAY;;;ACDnB,OAAO,WAAW;;;ACAlB,SAAS,QAAQ,IAAI;AACnB,MAAI,QAAQ,CAAC;AACb,SAAO,SAAU,KAAK;AACpB,QAAI,MAAM,GAAG,MAAM,OAAW,OAAM,GAAG,IAAI,GAAG,GAAG;AACjD,WAAO,MAAM,GAAG;AAAA,EAClB;AACF;AAEA,IAAO,sBAAQ;;;ACNf,IAAI,kBAAkB;AAEtB,IAAI,QAAQ;AAAA,EAAQ,SAAU,MAAM;AAClC,WAAO,gBAAgB,KAAK,IAAI,KAAK,KAAK,WAAW,CAAC,MAAM,OAEzD,KAAK,WAAW,CAAC,MAAM,OAEvB,KAAK,WAAW,CAAC,IAAI;AAAA,EAC1B;AAAA;AAEA;AAEA,IAAO,4BAAQ;;;AFRR,IAAM,2BAA2B,oBAAI,IAAI;AAAA;AAAA,EAE9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAIA;AACF,CAAC;AAED,SAAS,kBAAkB,KAAsB;AAC/C,MAAI,yBAAyB,IAAI,GAAG,EAAG,QAAO;AAC9C,SAAO,0BAAY,GAAG;AACxB;AAgBO,SAAS,sBAAsB,YAAoB;AACxD,QAAM,YAAY,MAAM;AAAA,IACtB,CAAC,EAAE,UAAU,aAAa,GAAG,MAAM,GAAG,QAAQ;AAC5C,YAAM,MAAO,eAA0B;AACvC,YAAM,YAAqC,CAAC;AAC5C,iBAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,YAAI,kBAAkB,GAAG,GAAG;AAC1B,oBAAU,GAAG,IAAI,MAAM,GAAG;AAAA,QAC5B;AAAA,MACF;AACA,aAAO,MAAM;AAAA,QACX;AAAA,QACA,EAAE,KAAK,GAAG,UAAU;AAAA,QACpB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,YAAU,cAAc,YAAY,UAAU;AAC9C,SAAO;AACT;;;ADiKQ;AAlOR,IAAM,cAAc,sBAAsB,KAAK;AAE/C,IAAM,YAAY,OAAO,WAAW;AAAA;AAAA;AAAA,sBAGd,CAAC,UAAU,MAAM,mBAAmB,aAAa;AAAA,kBACrD,CAAC,UAAU,MAAM,eAAe,aAAa;AAAA,kBAC7C,CAAC,UACf,OAAO,MAAM,gBAAgB,WACzB,GAAG,MAAM,WAAW,OACpB,MAAM,eAAe,CAAC;AAAA;AAAA,IAE1B,CAAC,UACD,MAAM,sBAAsB,UAC5B;AAAA,2BACuB,OAAO,MAAM,sBAAsB,WAAW,GAAG,MAAM,iBAAiB,OAAO,MAAM,iBAAiB;AAAA,2BACtG,MAAM,qBAAqB,MAAM,eAAe,aAAa;AAAA;AAAA,GAErF;AAAA,IACC,CAAC,UACD,MAAM,mBAAmB,UACzB;AAAA,wBACoB,OAAO,MAAM,mBAAmB,WAAW,GAAG,MAAM,cAAc,OAAO,MAAM,cAAc;AAAA,wBAC7F,MAAM,kBAAkB,MAAM,eAAe,aAAa;AAAA;AAAA,GAE/E;AAAA,IACC,CAAC,UACD,MAAM,oBAAoB,UAC1B;AAAA,yBACqB,OAAO,MAAM,oBAAoB,WAAW,GAAG,MAAM,eAAe,OAAO,MAAM,eAAe;AAAA,yBAChG,MAAM,mBAAmB,MAAM,eAAe,aAAa;AAAA;AAAA,GAEjF;AAAA,IACC,CAAC,UACD,MAAM,qBAAqB,UAC3B;AAAA,0BACsB,OAAO,MAAM,qBAAqB,WAAW,GAAG,MAAM,gBAAgB,OAAO,MAAM,gBAAgB;AAAA,0BACnG,MAAM,oBAAoB,MAAM,eAAe,aAAa;AAAA;AAAA,GAEnF;AAAA;AAAA,kBAEe,CAAC,UACf,MAAM,gBACL,MAAM,eACP,MAAM,qBACN,MAAM,kBACN,MAAM,mBACN,MAAM,mBACF,UACA,OAAO;AAAA,mBACI,CAAC,UAChB,OAAO,MAAM,iBAAiB,WAC1B,GAAG,MAAM,YAAY,OACrB,MAAM,gBAAgB,CAAC;AAAA,YACnB,CAAC,UACT,OAAO,MAAM,WAAW,WACpB,GAAG,MAAM,MAAM,OACf,MAAM,UAAU,MAAM;AAAA,WACnB,CAAC,UACR,OAAO,MAAM,UAAU,WACnB,GAAG,MAAM,KAAK,OACd,MAAM,SAAS,MAAM;AAAA,eACd,CAAC,UACZ,OAAO,MAAM,aAAa,WACtB,GAAG,MAAM,QAAQ,OACjB,MAAM,YAAY,MAAM;AAAA,gBAChB,CAAC,UACb,OAAO,MAAM,cAAc,WACvB,GAAG,MAAM,SAAS,OAClB,MAAM,aAAa,MAAM;AAAA,eAClB,CAAC,UACZ,OAAO,MAAM,aAAa,WACtB,GAAG,MAAM,QAAQ,OACjB,MAAM,YAAY,MAAM;AAAA,gBAChB,CAAC,UACb,OAAO,MAAM,cAAc,WACvB,GAAG,MAAM,SAAS,OAClB,MAAM,aAAa,MAAM;AAAA;AAAA,aAEpB,CAAC,UACV,OAAO,MAAM,YAAY,WACrB,GAAG,MAAM,OAAO,OAChB,MAAM,WAAW,CAAC;AAAA,IACtB,CAAC,UACD,MAAM,qBACN;AAAA,oBACgB,OAAO,MAAM,sBAAsB,WAAW,GAAG,MAAM,iBAAiB,OAAO,MAAM,iBAAiB;AAAA,qBACrG,OAAO,MAAM,sBAAsB,WAAW,GAAG,MAAM,iBAAiB,OAAO,MAAM,iBAAiB;AAAA,GACxH;AAAA,IACC,CAAC,UACD,MAAM,mBACN;AAAA,mBACe,OAAO,MAAM,oBAAoB,WAAW,GAAG,MAAM,eAAe,OAAO,MAAM,eAAe;AAAA,sBAC7F,OAAO,MAAM,oBAAoB,WAAW,GAAG,MAAM,eAAe,OAAO,MAAM,eAAe;AAAA,GACnH;AAAA,IACC,CAAC,UACD,MAAM,eAAe,UACrB,gBAAgB,OAAO,MAAM,eAAe,WAAW,GAAG,MAAM,UAAU,OAAO,MAAM,UAAU,GAAG;AAAA,IACpG,CAAC,UACD,MAAM,kBAAkB,UACxB,mBAAmB,OAAO,MAAM,kBAAkB,WAAW,GAAG,MAAM,aAAa,OAAO,MAAM,aAAa,GAAG;AAAA,IAChH,CAAC,UACD,MAAM,gBAAgB,UACtB,iBAAiB,OAAO,MAAM,gBAAgB,WAAW,GAAG,MAAM,WAAW,OAAO,MAAM,WAAW,GAAG;AAAA,IACxG,CAAC,UACD,MAAM,iBAAiB,UACvB,kBAAkB,OAAO,MAAM,iBAAiB,WAAW,GAAG,MAAM,YAAY,OAAO,MAAM,YAAY,GAAG;AAAA;AAAA,YAEpG,CAAC,UACT,OAAO,MAAM,WAAW,WAAW,GAAG,MAAM,MAAM,OAAO,MAAM,UAAU,CAAC;AAAA,IAC1E,CAAC,UACD,MAAM,cAAc,UACpB,eAAe,OAAO,MAAM,cAAc,WAAW,GAAG,MAAM,SAAS,OAAO,MAAM,SAAS,GAAG;AAAA,IAChG,CAAC,UACD,MAAM,iBAAiB,UACvB,kBAAkB,OAAO,MAAM,iBAAiB,WAAW,GAAG,MAAM,YAAY,OAAO,MAAM,YAAY,GAAG;AAAA,IAC5G,CAAC,UACD,MAAM,eAAe,UACrB,gBAAgB,OAAO,MAAM,eAAe,WAAW,GAAG,MAAM,UAAU,OAAO,MAAM,UAAU,GAAG;AAAA,IACpG,CAAC,UACD,MAAM,gBAAgB,UACtB,iBAAiB,OAAO,MAAM,gBAAgB,WAAW,GAAG,MAAM,WAAW,OAAO,MAAM,WAAW,GAAG;AAAA;AAAA,oBAExF,CAAC,UAAU,MAAM,iBAAiB,QAAQ;AAAA,eAC/C,CAAC,UAAU,MAAM,YAAY,QAAQ;AAAA,iBACnC,CAAC,UAAU,MAAM,cAAc,SAAS;AAAA,qBACpC,CAAC,UAAU,MAAM,kBAAkB,YAAY;AAAA,YACxD,CAAC,UACT,MAAM,SACF,MAAM,SACN,MAAM,WAAW,MAAM,UACrB,YACA,SAAS;AAAA,cACL,CAAC,UAAU,MAAM,YAAY,QAAQ;AAAA,SAC1C,CAAC,UACN,OAAO,MAAM,QAAQ,WAAW,GAAG,MAAM,GAAG,OAAO,MAAM,GAAG;AAAA,YACpD,CAAC,UACT,OAAO,MAAM,WAAW,WAAW,GAAG,MAAM,MAAM,OAAO,MAAM,MAAM;AAAA,UAC/D,CAAC,UACP,OAAO,MAAM,SAAS,WAAW,GAAG,MAAM,IAAI,OAAO,MAAM,IAAI;AAAA,WACxD,CAAC,UACR,OAAO,MAAM,UAAU,WAAW,GAAG,MAAM,KAAK,OAAO,MAAM,KAAK;AAAA,UAC5D,CAAC,UAAU,MAAM,IAAI;AAAA,iBACd,CAAC,UAAU,MAAM,cAAc,CAAC;AAAA,SACxC,CAAC,UACN,OAAO,MAAM,QAAQ,WAAW,GAAG,MAAM,GAAG,OAAO,MAAM,OAAO,CAAC;AAAA,gBACrD,CAAC,UAAU,MAAM,aAAa,MAAM;AAAA;AAAA;AAAA;AAAA,cAItC,CAAC,UAAU,MAAM,YAAY,SAAS;AAAA,IAChD,CAAC,UACD,MAAM,aAAa,OAAO,eAAe,MAAM,SAAS,MAAM,EAAE;AAAA,IAChE,CAAC,UACD,MAAM,aAAa,OAAO,eAAe,MAAM,SAAS,MAAM,EAAE;AAAA,aACvD,CAAC,UAAU,MAAM,MAAM;AAAA,aACvB,CAAC,UACV,MAAM,WAAW,OAAO,MAAM,UAAU,MAAM,WAAW,MAAM,CAAC;AAAA,oBAChD,CAAC,UAAW,MAAM,WAAW,SAAS,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO3D,CAAC,UACD,MAAM,YAAY,cAClB,eAAe,MAAM,WAAW,UAAU,GAAG;AAAA,MAC7C,CAAC,UACD,MAAM,YAAY,mBAClB,qBAAqB,MAAM,WAAW,eAAe,GAAG;AAAA,MACxD,CAAC,UACD,MAAM,YAAY,eAClB,iBAAiB,MAAM,WAAW,WAAW,GAAG;AAAA;AAAA;AAAA;AAAA,MAIhD,CAAC,UACD,MAAM,YAAY,cAClB,eAAe,MAAM,WAAW,UAAU,GAAG;AAAA,MAC7C,CAAC,UACD,MAAM,YAAY,mBAClB,qBAAqB,MAAM,WAAW,eAAe,GAAG;AAAA;AAAA;AAIvD,IAAM,MAAMC,OAAM;AAAA,EAIvB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,aAAa;AAAA,IACb,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf,GAAG;AAAA,EACL,GACA,QACG;AAEH,QAAI,OAAO,SAAS,KAAK;AACvB,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,KAAK,OAAO;AAAA,UACZ;AAAA,UACA;AAAA,UACA,eAAa,cAAc;AAAA,UAC3B,OAAO;AAAA,YACL,SAAS;AAAA,YACT,WAAW;AAAA,YACX,OACE,OAAO,MAAM,UAAU,WACnB,GAAG,MAAM,KAAK,OACd,MAAM;AAAA,YACZ,QACE,OAAO,MAAM,WAAW,WACpB,GAAG,MAAM,MAAM,OACf,MAAM;AAAA,YACZ,cACE,OAAO,MAAM,iBAAiB,WAC1B,GAAG,MAAM,YAAY,OACrB,MAAM;AAAA,YACZ,UAAU,MAAM;AAAA,YAChB,KAAK,OAAO,MAAM,QAAQ,WAAW,GAAG,MAAM,GAAG,OAAO,MAAM;AAAA,YAC9D,MACE,OAAO,MAAM,SAAS,WAAW,GAAG,MAAM,IAAI,OAAO,MAAM;AAAA,YAC7D,OACE,OAAO,MAAM,UAAU,WACnB,GAAG,MAAM,KAAK,OACd,MAAM;AAAA,YACZ,QACE,OAAO,MAAM,WAAW,WACpB,GAAG,MAAM,MAAM,OACf,MAAM;AAAA,YACZ,GAAG,MAAM;AAAA,UACX;AAAA;AAAA,MACF;AAAA,IAEJ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,aAAa;AAAA,QACb;AAAA,QACA,MAAM,OAAO,WAAW,QAAQ,WAAW;AAAA,QAC3C,UAAU,OAAO,WAAW,WAAW;AAAA,QACvC,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,cAAY;AAAA,QACZ,mBAAiB;AAAA,QACjB,gBAAc;AAAA,QACd,iBAAe;AAAA,QACf,aAAW;AAAA,QACX,oBAAkB;AAAA,QAClB,iBAAe;AAAA,QACf,iBAAe;AAAA,QACf,gBAAc;AAAA,QACd,iBAAe;AAAA,QACf,aAAW;AAAA,QACX,UAAU,aAAa,SAAY,WAAW;AAAA,QAC9C,eAAa,cAAc;AAAA,QAC1B,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,IAAI,cAAc;;;AD3SlB,SAAS,wBAAiD;AAC1D;AAAA,EACE;AAAA,OAGK;AACP,SAAS,kBAAkB;AAC3B,SAAS,cAAc;AA2EjB,gBAAAC,MAYE,YAZF;AAhDN,IAAM,sBAGF;AAAA,EACF,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,MAAM;AACR;AAEO,IAAM,QAA8B,CAAC;AAAA,EAC1C,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,EAAE,MAAM,IAAI,iBAAiB,EAAE,WAAW,oBAAoB,CAAC;AACrE,QAAM,SAAS,MAAM,OAAO,MAAM;AAElC,QAAM,cAAyC;AAAA,IAC7C,OAAO,MAAM,OAAO,QAAQ,MAAM;AAAA,IAClC,SAAS,MAAM,OAAO,QAAQ,QAAQ;AAAA,IACtC,SAAS,MAAM,OAAO,QAAQ,QAAQ;AAAA,IACtC,MAAM,MAAM,OAAO,QAAQ,MAAM;AAAA,EACnC;AAEA,QAAM,aAAa,QAAQ,MAAM,KAAK;AAEtC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,iBAAiB,MAAM,OAAO,WAAW;AAAA,MACzC,cAAc,OAAO;AAAA,MACrB,eAAc;AAAA,MACd,YAAW;AAAA,MACX,UAAS;AAAA,MACT,OAAO;AAAA,MACP,OAAO,EAAE,WAAW,MAAM,OAAO,QAAQ;AAAA,MACzC;AAAA,MACA,MAAM,SAAS,UAAU,UAAU;AAAA,MACnC,aAAW,SAAS,UAAU,cAAc;AAAA,MAC5C,cAAY,GAAG,IAAI;AAAA,MAGnB;AAAA,wBAAAA,KAAC,OAAI,iBAAiB,YAAY,IAAI,GAAG,OAAO,GAAG,WAAU,WAAU;AAAA,QAGvE;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,eAAc;AAAA,YACd,YAAW;AAAA,YACX,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,YACjB,KAAK;AAAA,YAGL;AAAA,mCAAC,OAAI,MAAM,GAAG,KAAK,GAChB;AAAA,yBACC,gBAAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,OAAO,MAAM,OAAO,QAAQ;AAAA,oBAE3B;AAAA;AAAA,gBACH;AAAA,gBAED,eACC,gBAAAA,KAAC,cAAW,SAAQ,UAAS,OAAO,MAAM,OAAO,QAAQ,UACtD,uBACH;AAAA,iBAEJ;AAAA,cAGC,cACC;AAAA,gBAAC;AAAA;AAAA,kBACC,eAAc;AAAA,kBACd,YAAW;AAAA,kBACX,WAAU;AAAA,kBACV,KAAK,OAAO,YAAY;AAAA,kBAEvB;AAAA,mCAAe,MAAM,KACpB,aAAa,QAA8B;AAAA,sBACzC,MAAM;AAAA,sBACN,SAAS;AAAA,sBACT,MAAM,oBAAoB,IAAI;AAAA,oBAChC,CAAC;AAAA,oBAEF,UAAU,mBACT,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,OAAO;AAAA,wBACP,WAAU;AAAA,wBACV,iBAAiB,MAAM,OAAO,OAAO;AAAA;AAAA,oBACvC;AAAA,oBAGD,mBACC,gBAAAA;AAAA,sBAAC;AAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,MAAK;AAAA,wBACL,MAAK;AAAA,wBACL,SAAS;AAAA,wBACT,cAAW;AAAA,wBACX,MAAM,gBAAAA,KAAC,UAAO,MAAM,IAAI;AAAA,wBACxB,iBAAgB;AAAA;AAAA,oBAClB;AAAA;AAAA;AAAA,cAEJ;AAAA;AAAA;AAAA,QAEJ;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,MAAM,cAAc;;;AK1JpB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAgTtB,gBAAAC,MAyUF,QAAAC,aAzUE;AAhQN,IAAM,eAAe,cAAwC,IAAI;AAEjE,IAAM,oBAA+C;AAAA,EACnD,SAAS;AAAA,EACT,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AACT;AAEA,IAAM,kBAA8D;AAAA,EAClE,aAAa,EAAE,KAAK,IAAI,OAAO,IAAI,YAAY,WAAW;AAAA,EAC1D,YAAY,EAAE,KAAK,IAAI,MAAM,IAAI,YAAY,aAAa;AAAA,EAC1D,cAAc;AAAA,IACZ,KAAK;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AAAA,EACA,gBAAgB,EAAE,QAAQ,IAAI,OAAO,IAAI,YAAY,WAAW;AAAA,EAChE,eAAe,EAAE,QAAQ,IAAI,MAAM,IAAI,YAAY,aAAa;AAAA,EAChE,iBAAiB;AAAA,IACf,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,IACX,YAAY;AAAA,EACd;AACF;AA6BA,IAAM,iBAAiB,CAAC,aAAoC;AAC1D,MAAI,SAAS,SAAS,OAAO,EAAG,QAAO;AACvC,MAAI,SAAS,SAAS,MAAM,EAAG,QAAO;AACtC,SAAO,SAAS,WAAW,KAAK,IAAI,sBAAsB;AAC5D;AAGA,IAAM,gBAA4D;AAAA,EAChE,aAAa,EAAE,KAAK,GAAG,OAAO,EAAE;AAAA,EAChC,YAAY,EAAE,KAAK,GAAG,MAAM,EAAE;AAAA,EAC9B,cAAc,EAAE,KAAK,GAAG,MAAM,OAAO,YAAY,KAAK;AAAA,EACtD,gBAAgB,EAAE,QAAQ,GAAG,OAAO,EAAE;AAAA,EACtC,eAAe,EAAE,QAAQ,GAAG,MAAM,EAAE;AAAA,EACpC,iBAAiB,EAAE,QAAQ,GAAG,MAAM,OAAO,YAAY,KAAK;AAC9D;AAEA,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,oBAAoB;AAC1B,IAAM,mBAAmB;AAsBzB,IAAM,YAAsC,CAAC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,CAAC,QAAQ;AAChD,QAAM,MAAM,OAA8B,IAAI;AAC9C,QAAM,aAAa,OAAO,KAAK;AAE/B,YAAU,MAAM;AACd,QAAI,CAAC,SAAU;AACf,QAAI,OAAO;AACX,UAAM,OAAO,OAAO,sBAAsB,MAAM;AAC9C,aAAO,OAAO,sBAAsB,MAAM,WAAW,IAAI,CAAC;AAAA,IAC5D,CAAC;AACD,WAAO,MAAM;AACX,aAAO,qBAAqB,IAAI;AAChC,aAAO,qBAAqB,IAAI;AAAA,IAClC;AAAA,EACF,GAAG,CAAC,QAAQ,CAAC;AAIb;AAAA,IACE,MAAM,MAAM;AACV,UAAI,WAAW,SAAS;AACtB,mBAAW,UAAU;AACrB,mBAAW,KAAK,EAAE;AAAA,MACpB;AAAA,IACF;AAAA;AAAA,IAEA,CAAC;AAAA,EACH;AAGA,kBAAgB,MAAM;AACpB,QAAI,YAAY,YAAY,CAAC,IAAI,QAAS;AAC1C,UAAM,KAAK,IAAI;AACf,UAAM,SAAS,MACb,aAAa,KAAK,IAAI,GAAG,sBAAsB,EAAE,MAAM;AACzD,WAAO;AACP,QAAI,OAAO,mBAAmB,YAAa;AAC3C,UAAM,KAAK,IAAI,eAAe,MAAM;AACpC,OAAG,QAAQ,EAAE;AACb,WAAO,MAAM,GAAG,WAAW;AAAA,EAC7B,GAAG,CAAC,SAAS,KAAK,IAAI,YAAY,CAAC;AAEnC,QAAM,WAAW,YAAY;AAC7B,QAAM,WAAW,SAAS,WAAW,QAAQ;AAC7C,QAAM,WAAW,SAAS,SAAS,QAAQ;AAC3C,QAAM,MAAM,WAAW,KAAK;AAE5B,MAAI;AACJ,MAAI,UAAU;AACd,MAAI,SAAS,MAAO;AAEpB,QAAM,eAAe,eAAe,QAAQ;AAC5C,QAAM,UAAU,aAAa,CAAC,WAAW;AAEzC,MAAI,UAAU;AAEZ,UAAM,QAAQ;AAEd,QAAI,SAAS;AACX,kBAAY,GAAG,KAAK,IAAI,YAAY,GAAG,KAAK;AAC5C,gBAAU;AAAA,IACZ,WAAW,eAAe,GAAG;AAC3B,kBAAY,GAAG,KAAK;AAAA,IACtB,WAAW,UAAU;AAEnB,kBAAY,GAAG,KAAK,eAAe,MAAM,gBAAgB;AAAA,IAC3D,OAAO;AAEL,YAAM,OAAO,cAAc;AAC3B,YAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,oBAAoB,UAAU;AAC9D,kBAAY,GAAG,KAAK,eAAe,MAAM,IAAI,aAAa,KAAK;AAC/D,UAAI,aAAa,iBAAkB,WAAU;AAAA,IAC/C;AAAA,EACF,OAAO;AAEL,gBAAY,UAAU,eAAe;AACrC,cAAU,UAAU,IAAI;AAAA,EAC1B;AAEA,QAAM,QAA6B;AAAA,IACjC,eAAe,YAAY,IAAI,SAAS;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY,WACR,aAAa,iBAAiB,6CAA6C,iBAAiB,YAC5F;AAAA,IACJ,YAAY,WAAW,uBAAuB;AAAA,IAC9C,iBAAiB,WACb,WACE,WACE,kBACA,eACF,WACE,UAAU,SAAS,SAAS,OAAO,IAAI,UAAU,MAAM,KACvD,OAAO,SAAS,SAAS,OAAO,IAAI,UAAU,MAAM,KACxD;AAAA,IACJ,GAAI,WACA;AAAA,MACE,UAAU;AAAA,MACV,OAAO;AAAA,MACP,GAAG,cAAc,QAAQ;AAAA,IAC3B,IACA;AAAA,EACN;AAEA,SACE,gBAAAD;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,cAAc,MAAM;AAClB,gBAAQ;AACR,YAAI,CAAC,WAAW,SAAS;AACvB,qBAAW,UAAU;AACrB,oBAAU,KAAK,EAAE;AAAA,QACnB;AAAA,MACF;AAAA,MACA,cAAc,MAAM;AAClB,iBAAS;AACT,YAAI,WAAW,SAAS;AACtB,qBAAW,UAAU;AACrB,qBAAW,KAAK,EAAE;AAAA,QACpB;AAAA,MACF;AAAA,MAGA,SAAS,CAAC,MAAM;AACd,YAAI,EAAE,cAAc,SAAS,EAAE,aAA4B,EAAG;AAC9D,gBAAQ;AACR,YAAI,CAAC,WAAW,SAAS;AACvB,qBAAW,UAAU;AACrB,oBAAU,KAAK,EAAE;AAAA,QACnB;AAAA,MACF;AAAA,MACA,QAAQ,CAAC,MAAM;AACb,YAAI,EAAE,cAAc,SAAS,EAAE,aAA4B,EAAG;AAC9D,iBAAS;AACT,YAAI,WAAW,SAAS;AACtB,qBAAW,UAAU;AACrB,qBAAW,KAAK,EAAE;AAAA,QACpB;AAAA,MACF;AAAA,MAEA,0BAAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,aAAa,KAAK;AAAA,UAClB,QAAQ,KAAK;AAAA,UACb,iBAAiB,KAAK;AAAA,UACtB;AAAA,UACA,WAAW,KAAK;AAAA,UAChB,qBAAqB,KAAK;AAAA;AAAA,MAC5B;AAAA;AAAA,EACF;AAEJ;AAEA,IAAI,YAAY;AAChB,IAAM,SAAS,MAAM,SAAS,KAAK,IAAI,CAAC,IAAI,EAAE,SAAS;AAEhD,IAAM,gBAA8C,CAAC;AAAA,EAC1D;AAAA,EACA,WAAW;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,UAAU;AAAA,EACV;AACF,MAAM;AACJ,QAAM,WAAW,YAAY;AAC7B,QAAM,oBAAoB,sBAAsB,WAAW,MAAM;AAEjE,QAAM,CAAC,QAAQ,SAAS,IAAI,SAA2B,CAAC,CAAC;AACzD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAsB,MAAM,oBAAI,IAAI,CAAC;AACnE,QAAM,CAAC,SAAS,UAAU,IAAI,SAAiC,CAAC,CAAC;AACjE,QAAM,CAAC,YAAY,aAAa,IAAI,SAAsB,MAAM,oBAAI,IAAI,CAAC;AACzE,QAAM,kBAAkB,OAA4B,oBAAI,IAAI,CAAC;AAC7D,QAAM,YAAY,OAEhB,oBAAI,IAAI,CAAC;AACX,QAAM,eAAe,OAAgC,oBAAI,IAAI,CAAC;AAC9D,QAAM,aAAa,OAA6B,MAAM;AAAA,EAAC,CAAC;AAExD,QAAM,eAAe,YAAY,CAAC,IAAY,MAAc;AAC1D,eAAW,CAAC,SAAU,KAAK,EAAE,MAAM,IAAI,OAAO,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,CAAE;AAAA,EACrE,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY,CAAC,OAAe;AAC7C,UAAM,QAAQ,UAAU,QAAQ,IAAI,EAAE;AACtC,QAAI,OAAO;AACT,aAAO,aAAa,MAAM,SAAS;AACnC,gBAAU,QAAQ,OAAO,EAAE;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,YAAY,YAAY,CAAC,OAAe;AAC5C,UAAM,KAAK,aAAa,QAAQ,IAAI,EAAE;AACtC,iBAAa,QAAQ,OAAO,EAAE;AAC9B,cAAU,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AACnD,eAAW,CAAC,SAAS;AACnB,UAAI,CAAC,KAAK,IAAI,EAAE,EAAG,QAAO;AAC1B,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,WAAK,OAAO,EAAE;AACd,aAAO;AAAA,IACT,CAAC;AACD,eAAW,CAAC,SAAS;AACnB,UAAI,EAAE,MAAM,MAAO,QAAO;AAC1B,YAAM,OAAO,EAAE,GAAG,KAAK;AACvB,aAAO,KAAK,EAAE;AACd,aAAO;AAAA,IACT,CAAC;AACD,kBAAc,CAAC,SAAS;AACtB,UAAI,CAAC,KAAK,IAAI,EAAE,EAAG,QAAO;AAC1B,YAAM,OAAO,IAAI,IAAI,IAAI;AACzB,WAAK,OAAO,EAAE;AACd,aAAO;AAAA,IACT,CAAC;AACD,SAAK;AAAA,EACP,GAAG,CAAC,CAAC;AAEL,QAAM,UAAU;AAAA,IACd,CAAC,OAAe;AACd,iBAAW,EAAE;AACb,UAAI,CAAC,UAAU;AACb,kBAAU,EAAE;AACZ;AAAA,MACF;AACA,UAAI,gBAAgB,QAAQ,IAAI,EAAE,EAAG;AACrC,iBAAW,CAAC,SAAS;AACnB,cAAM,OAAO,IAAI,IAAI,IAAI;AACzB,aAAK,IAAI,EAAE;AACX,eAAO;AAAA,MACT,CAAC;AACD,YAAM,YAAY,OAAO,WAAW,MAAM;AACxC,wBAAgB,QAAQ,OAAO,EAAE;AACjC,kBAAU,EAAE;AAAA,MACd,GAAG,iBAAiB;AACpB,sBAAgB,QAAQ,IAAI,IAAI,SAAS;AAAA,IAC3C;AAAA,IACA,CAAC,YAAY,UAAU,mBAAmB,SAAS;AAAA,EACrD;AAEA,YAAU,MAAM;AACd,eAAW,UAAU;AAAA,EACvB,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,aAAa,YAAY,CAAC,IAAY,aAAqB;AAC/D,QAAI,YAAY,EAAG;AACnB,UAAM,YAAY,OAAO,WAAW,MAAM;AACxC,iBAAW,QAAQ,EAAE;AAAA,IACvB,GAAG,QAAQ;AACX,cAAU,QAAQ,IAAI,IAAI;AAAA,MACxB,WAAW;AAAA,MACX,WAAW,KAAK,IAAI;AAAA,MACpB;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY,CAAC,OAAe;AAC7C,UAAM,QAAQ,UAAU,QAAQ,IAAI,EAAE;AACtC,QAAI,CAAC,MAAO;AACZ,UAAM,UAAU,KAAK,IAAI,IAAI,MAAM;AACnC,UAAM,YAAY,KAAK,IAAI,GAAG,MAAM,YAAY,OAAO;AACvD,WAAO,aAAa,MAAM,SAAS;AACnC,cAAU,QAAQ,IAAI,IAAI;AAAA,MACxB;AAAA,MACA,WAAW,KAAK,IAAI;AAAA,MACpB,WAAW;AAAA,IACb,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc;AAAA,IAClB,CAAC,OAAe;AACd,YAAM,QAAQ,UAAU,QAAQ,IAAI,EAAE;AACtC,UAAI,CAAC,SAAS,MAAM,cAAc,EAAG;AACrC,iBAAW,IAAI,MAAM,SAAS;AAAA,IAChC;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAKA,QAAM,sBAAsB;AAAA,IAC1B,CAAC,OAAe;AACd,iBAAW,EAAE;AACb,YAAM,gBAAgB,gBAAgB,QAAQ,IAAI,EAAE;AACpD,UAAI,eAAe;AACjB,eAAO,aAAa,aAAa;AACjC,wBAAgB,QAAQ,OAAO,EAAE;AAAA,MACnC;AACA,iBAAW,CAAC,SAAS;AACnB,YAAI,CAAC,KAAK,IAAI,EAAE,EAAG,QAAO;AAC1B,cAAM,OAAO,IAAI,IAAI,IAAI;AACzB,aAAK,OAAO,EAAE;AACd,eAAO;AAAA,MACT,CAAC;AACD,YAAM,KAAK,aAAa,QAAQ,IAAI,EAAE;AACtC,mBAAa,QAAQ,OAAO,EAAE;AAC9B,WAAK;AAAA,IACP;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAEA,QAAM,OAAO;AAAA,IACX,CAAC,MAAiB,YAAkC;AAClD,YAAM,KAAK,QAAQ,MAAM,OAAO;AAChC,YAAM,WAAW,QAAQ,YAAY,kBAAkB,IAAI;AAC3D,YAAM,OAAuB;AAAA,QAC3B,GAAG;AAAA,QACH;AAAA,QACA;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,MACtB;AAKA,YAAM,cAAc,gBAAgB,QAAQ,IAAI,EAAE;AAClD,UAAI,aAAa;AACf,eAAO,aAAa,WAAW;AAC/B,wBAAgB,QAAQ,OAAO,EAAE;AACjC,mBAAW,CAAC,SAAS;AACnB,cAAI,CAAC,KAAK,IAAI,EAAE,EAAG,QAAO;AAC1B,gBAAM,OAAO,IAAI,IAAI,IAAI;AACzB,eAAK,OAAO,EAAE;AACd,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAIA,UAAI,QAAQ,WAAW;AACrB,qBAAa,QAAQ,IAAI,IAAI,QAAQ,SAAS;AAAA,MAChD,OAAO;AACL,qBAAa,QAAQ,OAAO,EAAE;AAAA,MAChC;AAEA,gBAAU,CAAC,SAAS;AAClB,cAAM,WAAW,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAC/C,cAAM,aAAa,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AACjD,cAAM,OAAO,CAAC,GAAG,YAAY,IAAI;AACjC,cAAM,WACJ,KAAK,SAAS,QAAQ,KAAK,MAAM,GAAG,KAAK,SAAS,KAAK,IAAI,CAAC;AAI9D,iBAAS,QAAQ,CAAC,MAAM;AACtB,qBAAW,EAAE,EAAE;AACf,gBAAM,KAAK,gBAAgB,QAAQ,IAAI,EAAE,EAAE;AAC3C,cAAI,IAAI;AACN,mBAAO,aAAa,EAAE;AACtB,4BAAgB,QAAQ,OAAO,EAAE,EAAE;AAAA,UACrC;AAAA,QACF,CAAC;AAGD,iBAAS,QAAQ,CAAC,MAAM;AACtB,cAAI,EAAE,OAAO,GAAI;AACjB,8BAAoB,EAAE,EAAE;AAAA,QAC1B,CAAC;AAED,eAAO,KAAK,SAAS,QAAQ,KAAK,MAAM,KAAK,SAAS,KAAK,IAAI;AAAA,MACjE,CAAC;AAED,iBAAW,EAAE;AACb,iBAAW,IAAI,QAAQ;AAEvB,aAAO;AAAA,IACT;AAAA,IACA,CAAC,YAAY,YAAY,OAAO,mBAAmB;AAAA,EACrD;AAEA,QAAM,aAAa,YAAY,MAAM;AACnC,UAAM,MAAM,MAAM,KAAK,UAAU,QAAQ,KAAK,CAAC;AAC/C,QAAI,QAAQ,CAAC,OAAO,QAAQ,EAAE,CAAC;AAC/B,cAAU,CAAC,SAAS;AAClB,WAAK,QAAQ,CAAC,MAAM;AAClB,YAAI,CAAC,IAAI,SAAS,EAAE,EAAE,EAAG,SAAQ,EAAE,EAAE;AAAA,MACvC,CAAC;AACD,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,MAAM;AAAA,IACV,OAAO;AAAA,MACL,OAAO,CAAC,YAAY,KAAK,SAAS,OAAO;AAAA,MACzC,SAAS,CAAC,YAAY,KAAK,WAAW,OAAO;AAAA,MAC7C,SAAS,CAAC,YAAY,KAAK,WAAW,OAAO;AAAA,MAC7C,MAAM,CAAC,YAAY,KAAK,QAAQ,OAAO;AAAA,MACvC;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,MAAM,SAAS,UAAU;AAAA,EAC5B;AAEA;AAAA,IACE,MAAM,MAAM;AACV,gBAAU,QAAQ;AAAA,QAAQ,CAAC,UACzB,OAAO,aAAa,MAAM,SAAS;AAAA,MACrC;AACA,gBAAU,QAAQ,MAAM;AACxB,sBAAgB,QAAQ,QAAQ,CAAC,OAAO,OAAO,aAAa,EAAE,CAAC;AAC/D,sBAAgB,QAAQ,MAAM;AAAA,IAChC;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,eACJ,cAAc,OAAO,aAAa,cAAc,SAAS,OAAO;AAElE,QAAM,WAAW,SAAS,WAAW,QAAQ;AAQ7C,QAAM,gBAAgB,MAAM;AAC1B,QAAI,UAAU;AAEZ,aAAO,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,OAAO,EAAE,MAAM,YAAY,EAAE,EAAE;AAAA,IACzE;AAEA,QAAI,UAAU;AAEZ,aAAO,OAAO,IAAI,CAAC,MAAM,OAAO;AAAA,QAC9B;AAAA,QACA,YAAY,OAAO,SAAS,IAAI;AAAA,MAClC,EAAE;AAAA,IACJ;AACA,WAAO,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,OAAO,EAAE,MAAM,YAAY,EAAE,EAAE;AAAA,EACzE,GAAG;AAIH,QAAM,qBAAqB,QAAQ,MAAM;AACvC,UAAM,MAA8B,EAAE,GAAG,EAAE;AAC3C,QAAI,aAAa;AAEjB,UAAM,SAAS,CAAC,GAAG,YAAY,EAAE;AAAA,MAC/B,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE;AAAA,IAC7B;AACA,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,KAAK,OAAO,CAAC,EAAE;AACrB,UAAI,OAAO,EAAG;AACd,YAAM,OAAO,OAAO,IAAI,CAAC;AACzB,qBAAe,QAAQ,KAAK,KAAK,EAAE,KAAK,MAAM;AAC9C,UAAI,EAAE,IAAI;AAAA,IACZ;AACA,WAAO;AAAA,EACT,GAAG,CAAC,cAAc,OAAO,CAAC;AAE1B,QAAM,WAAW,YAAY,WAAW,OAAO;AAI/C,QAAM,eAAe,MAAM;AACzB,UAAM,QAAQ,aAAa,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC;AACzD,WAAO,QAAS,QAAQ,MAAM,KAAK,EAAE,KAAK,KAAM;AAAA,EAClD,GAAG;AAEH,QAAM,uBACJ,cACA,aACG,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,EAC9B,OAAO,CAAC,KAAK,MAAM,OAAO,QAAQ,EAAE,KAAK,EAAE,KAAK,MAAM,YAAY,CAAC;AAExE,SACE,gBAAAC,MAAC,aAAa,UAAb,EAAsB,OAAO,EAAE,IAAI,GACjC;AAAA;AAAA,IACA,gBACC;AAAA,MACE,gBAAAD;AAAA,QAAC;AAAA;AAAA,UACC,uBAAoB;AAAA,UACpB,eAAa;AAAA,UACb,gBAAc;AAAA,UACd,iBAAe,WAAW,KAAK;AAAA,UAC/B,OAAO;AAAA,YACL,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,eAAe;AAAA,YACf,UAAU;AAAA,YACV,GAAI,WACA;AAAA,cACE,OAAO;AAAA,cACP,QAAQ,WAAW,uBAAuB;AAAA,cAC1C,YAAY,WACR,UAAU,iBAAiB,qCAC3B;AAAA,cACJ,GAAG,gBAAgB,QAAQ;AAAA;AAAA,cAE3B,SAAS;AAAA,YACX,IACA;AAAA,cACE,SAAS;AAAA,cACT,eAAe;AAAA,cACf,KAAK;AAAA,cACL,GAAG,gBAAgB,QAAQ;AAAA,YAC7B;AAAA,UACN;AAAA,UAEC,uBAAa,IAAI,CAAC,EAAE,MAAM,WAAW,MACpC,gBAAAA;AAAA,YAAC;AAAA;AAAA,cAEC;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA,mBAAmB;AAAA,cACnB,SAAS,QAAQ,IAAI,KAAK,EAAE;AAAA,cAC5B;AAAA,cACA;AAAA,cACA,kBAAkB,mBAAmB,UAAU,KAAK;AAAA,cACpD;AAAA,cACA,SAAS,MAAM,QAAQ,KAAK,EAAE;AAAA,cAC9B,SAAS,MAAM,WAAW,KAAK,EAAE;AAAA,cACjC,UAAU,MAAM,YAAY,KAAK,EAAE;AAAA,cACnC,WAAW,CAAC,OAAO;AACjB,oBAAI,CAAC,SAAU;AACf,8BAAc,CAAC,SAAS;AACtB,sBAAI,KAAK,IAAI,EAAE,EAAG,QAAO;AACzB,wBAAM,OAAO,IAAI,IAAI,IAAI;AACzB,uBAAK,IAAI,EAAE;AACX,yBAAO;AAAA,gBACT,CAAC;AAAA,cACH;AAAA,cACA,YAAY,CAAC,OAAO;AAClB,oBAAI,CAAC,SAAU;AACf,8BAAc,CAAC,SAAS;AACtB,sBAAI,CAAC,KAAK,IAAI,EAAE,EAAG,QAAO;AAC1B,wBAAM,OAAO,IAAI,IAAI,IAAI;AACzB,uBAAK,OAAO,EAAE;AACd,yBAAO;AAAA,gBACT,CAAC;AAAA,cACH;AAAA;AAAA,YA/BK,KAAK;AAAA,UAgCZ,CACD;AAAA;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,KACJ;AAEJ;AAEA,cAAc,cAAc;AAErB,IAAM,WAAW,MAAgB;AACtC,QAAM,MAAM,WAAW,YAAY;AACnC,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AACA,SAAO,IAAI;AACb;","names":["React","React","jsx","jsx","jsxs"]}