{"version":3,"sources":["../../src/snackbar/Snackbar.tsx","../../src/snackbar/SnackbarRegion.tsx","../../src/snackbar/SnackbarItem.tsx","../../src/snackbar/SnackbarItem.styles.ts","../../src/snackbar/snackbarVariants.ts","../../src/snackbar/SnackbarItemAction.tsx","../../src/snackbar/SnackbarItemContext.tsx","../../src/snackbar/SnackbarItemClose.tsx","../../src/snackbar/SnackbarItemIcon.tsx","../../src/snackbar/useSwipe.ts","../../src/snackbar/SnackbarRegion.styles.ts","../../src/snackbar/useSnackbarGlobalStore.ts","../../src/snackbar/index.ts"],"sourcesContent":["import {\n  type ToastOptions as SnackBarItemOptions,\n  ToastQueue,\n  useToastQueue,\n} from '@react-stately/toast'\nimport { type ReactElement, Ref, type RefObject, useEffect, useRef } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { type SnackbarItemValue } from './SnackbarItem'\nimport { SnackbarRegion, type SnackbarRegionProps } from './SnackbarRegion'\nimport { useSnackbarGlobalStore } from './useSnackbarGlobalStore'\n\n/**\n * We define here a global queue thanks to dedicated util from React Spectrum.\n * It is based on React `useSyncExternalStore` and allows us to consume data from\n * an external data store, and thus preventing use of React context that could\n * lead to unwanted rerenderings. It also simplifies initial implementation.\n */\nlet GLOBAL_SNACKBAR_QUEUE: ToastQueue<SnackbarItemValue> | null = null\n\nconst getGlobalSnackBarQueue = () => {\n  if (!GLOBAL_SNACKBAR_QUEUE) {\n    GLOBAL_SNACKBAR_QUEUE = new ToastQueue({\n      maxVisibleToasts: 1,\n      hasExitAnimation: true,\n    })\n  }\n\n  return GLOBAL_SNACKBAR_QUEUE\n}\n\nexport const clearSnackbarQueue = () => {\n  GLOBAL_SNACKBAR_QUEUE = null\n}\n\n/**\n * We define a global store to keep track of all providers instances, to ensure\n * we always have a single Snackbar container.\n */\nconst GLOBAL_SNACKBAR_STORE = {\n  providers: new Set<RefObject<HTMLDivElement | null>>(),\n  subscriptions: new Set<() => void>(),\n}\n\nexport type SnackbarProps = Omit<SnackbarRegionProps, 'state'> & {\n  ref?: Ref<HTMLDivElement>\n}\n\nexport const Snackbar = ({ ref: forwardedRef, ...props }: SnackbarProps): ReactElement | null => {\n  const ref = useRef<HTMLDivElement>(null)\n\n  const state = useToastQueue(getGlobalSnackBarQueue())\n\n  const { provider, addProvider, deleteProvider } = useSnackbarGlobalStore(GLOBAL_SNACKBAR_STORE)\n\n  useEffect(() => {\n    addProvider(ref)\n\n    return () => {\n      for (const toast of getGlobalSnackBarQueue().visibleToasts) {\n        toast.animation = undefined\n      }\n\n      deleteProvider(ref)\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n  return ref === provider && state.visibleToasts.length > 0\n    ? createPortal(<SnackbarRegion ref={forwardedRef} state={state} {...props} />, document.body)\n    : null\n}\n\nSnackbar.displayName = 'Snackbar'\n\nexport interface AddSnackbarArgs extends SnackbarItemValue, Omit<SnackBarItemOptions, 'timeout'> {\n  /**\n   * Handler that is called when the snackbar is closed, either by the user\n   * or after a timeout.\n   */\n  onClose?: () => void\n  /**\n   * A timeout to automatically close the snackbar after, in milliseconds.\n   * @default 5000\n   */\n  timeout?: number | null\n  /**\n   * The priority of the snackbar relative to other snackbars. Larger numbers indicate higher priority.\n   */\n  priority?: number\n}\n\nexport const addSnackbar = ({ onClose, timeout = 5000, priority, ...content }: AddSnackbarArgs) => {\n  const queue = getGlobalSnackBarQueue()\n\n  queue.add(content, {\n    onClose,\n    timeout: timeout && !content.onAction ? Math.max(timeout, 5000) : undefined,\n    priority,\n  })\n}\n","import { type AriaToastRegionProps, useToastRegion } from '@react-aria/toast'\nimport { cloneElement, type ComponentPropsWithRef, type ReactElement, useRef } from 'react'\n\nimport { SnackbarItem, type SnackbarItemProps } from './SnackbarItem'\nimport { SnackbarItemContext, type SnackbarItemState } from './SnackbarItemContext'\nimport { snackbarRegionVariant, type SnackbarRegionVariantProps } from './SnackbarRegion.styles'\n\nexport interface SnackbarRegionProps\n  extends ComponentPropsWithRef<'div'>,\n    AriaToastRegionProps,\n    SnackbarRegionVariantProps,\n    Pick<SnackbarItemState, 'state'> {\n  /**\n   * An accessibility label for the snackbar region.\n   * @default 'Notifications'\n   */\n  'aria-label'?: string\n  /**\n   * Identifies the element (or elements) that labels the current element.\n   */\n  'aria-labelledby'?: string\n  /**\n   * Identifies the element (or elements) that describes the object.\n   */\n  'aria-describedby'?: string\n  /**\n   * Identifies the element (or elements) that provide a detailed, extended description for the object.\n   */\n  'aria-details'?: string\n  /**\n   * The component/template used to display each snackbar from the queue\n   * @default 'Snackbar.Item'\n   */\n  children?: ReactElement<SnackbarItemProps, typeof SnackbarItem>\n}\n\nexport const SnackbarRegion = ({\n  children = <SnackbarItem />,\n  state,\n  position = 'bottom',\n  className,\n  ref: forwardedRef,\n  ...rest\n}: SnackbarRegionProps): ReactElement => {\n  const innerRef = useRef<HTMLDivElement>(null)\n  const ref = forwardedRef && typeof forwardedRef !== 'function' ? forwardedRef : innerRef\n\n  const { regionProps } = useToastRegion(rest, state, ref)\n\n  return (\n    <div\n      {...regionProps}\n      ref={ref}\n      data-position={position}\n      className={snackbarRegionVariant({ position, className })}\n    >\n      {state.visibleToasts.map(toast => (\n        <SnackbarItemContext.Provider key={toast.key} value={{ toast, state }}>\n          {cloneElement(children, { key: toast.key })}\n        </SnackbarItemContext.Provider>\n      ))}\n    </div>\n  )\n}\n","/* eslint-disable complexity */\nimport { useToast } from '@react-aria/toast'\nimport {\n  Children,\n  cloneElement,\n  type ComponentPropsWithRef,\n  type FC,\n  isValidElement,\n  type PropsWithChildren,\n  type ReactElement,\n  type ReactNode,\n  useCallback,\n  useRef,\n} from 'react'\n\nimport {\n  snackbarItemVariant,\n  snackbarItemVariantContent,\n  type SnackbarItemVariantContentProps,\n  type SnackbarItemVariantProps,\n} from './SnackbarItem.styles'\nimport { SnackbarItemAction, SnackbarItemActionProps } from './SnackbarItemAction'\nimport { SnackbarItemClose, SnackbarItemCloseProps } from './SnackbarItemClose'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\nimport { SnackbarItemIcon, SnackbarItemIconProps } from './SnackbarItemIcon'\nimport { useSwipe } from './useSwipe'\n\nexport interface SnackbarItemValue extends SnackbarItemVariantProps {\n  /**\n   * Icon that will be prepended before snackbar message\n   */\n  icon?: ReactNode\n  message: ReactNode\n  /**\n   * If `true` snackbar will display a close button\n   * @default false\n   */\n  isClosable?: boolean\n  /**\n   * A label for the action button within the toast.\n   */\n  actionLabel?: string\n  /**\n   * Handler that is called when the action button is pressed.\n   */\n  onAction?: () => void\n  /**\n   * If `true` the action button will be displayed on a new line.\n   * @default false\n   */\n  actionOnNewline?: boolean\n}\n\nexport interface SnackbarItemProps\n  extends ComponentPropsWithRef<'div'>,\n    SnackbarItemVariantProps,\n    SnackbarItemVariantContentProps {\n  /**\n   * Defines a string value that labels the current element.\n   */\n  'aria-label'?: string\n  /**\n   * Identifies the element (or elements) that labels the current element.\n   */\n  'aria-labelledby'?: string\n  /**\n   * Identifies the element (or elements) that describes the object.\n   */\n  'aria-describedby'?: string\n  /**\n   * Identifies the element (or elements) that provide a detailed, extended description for the object.\n   */\n  'aria-details'?: string\n}\n\nexport const SnackbarItem = ({\n  'aria-label': ariaLabel,\n  'aria-labelledby': ariaLabelledby,\n  'aria-describedby': ariaDescribedby,\n  'aria-details': ariaDetails,\n  design: designProp,\n  intent: intentProp,\n  actionOnNewline: actionOnNewlineProp,\n  className,\n  children,\n  ref: forwardedRef,\n  ...rest\n}: PropsWithChildren<SnackbarItemProps>) => {\n  const innerRef = useRef(null)\n  const ref = typeof forwardedRef !== 'function' ? forwardedRef || innerRef : innerRef\n\n  const { toast, state } = useSnackbarItemContext()\n\n  const { state: swipeState, direction: swipeDirection } = useSwipe({\n    swipeRef: ref,\n    onSwipeStart: state.pauseAll,\n    onSwipeCancel: state.resumeAll,\n    onSwipeEnd: ({ direction }) => {\n      ;['left', 'right'].includes(`${direction}`) && state.close(toast.key)\n    },\n  })\n\n  const { message, icon, isClosable, onAction, actionLabel } = toast.content\n  const intent = intentProp ?? toast.content.intent\n  const design = designProp ?? toast.content.design\n  const actionOnNewline = actionOnNewlineProp ?? toast.content.actionOnNewline\n\n  const ariaProps = {\n    ariaLabel,\n    ariaLabelledby,\n    ariaDescribedby,\n    ariaDetails,\n  }\n\n  const { toastProps, titleProps, closeButtonProps, contentProps } = useToast(\n    { toast, ...ariaProps },\n    state,\n    ref\n  )\n\n  const findElement = useCallback(\n    <P extends object>(elementDisplayName: string): ReactElement<P> | undefined => {\n      const childrenArray = Children.toArray(children)\n\n      const match = childrenArray\n        .filter(isValidElement)\n        .find(\n          (child): child is ReactElement<P> =>\n            !!(child.type as FC<P> & { displayName?: string }).displayName?.includes(\n              elementDisplayName\n            )\n        )\n\n      return match as ReactElement<P> | undefined\n    },\n    [children]\n  )\n\n  const iconFromChildren = findElement<SnackbarItemIconProps>('Snackbar.ItemIcon')\n  const actionBtnFromChildren = findElement<SnackbarItemActionProps>('Snackbar.ItemAction')\n  const closeBtnFromChildren = findElement<SnackbarItemCloseProps>('Snackbar.ItemClose')\n\n  return (\n    <div\n      className={snackbarItemVariant({ design, intent, className })}\n      data-animation={toast.animation}\n      {...(!(swipeState === 'cancel' && toast.animation === 'exiting') && {\n        'data-swipe': swipeState,\n        'data-swipe-direction': swipeDirection,\n      })}\n      {...(toast.animation === 'exiting' && {\n        // Remove snackbar when the exiting animation completes\n        onAnimationEnd: () => state.remove(toast.key),\n      })}\n      ref={ref}\n      {...toastProps}\n      {...rest}\n    >\n      <div className={snackbarItemVariantContent({ actionOnNewline })} {...contentProps}>\n        {/* 1. ICON */}\n        {renderSubComponent(iconFromChildren, icon ? SnackbarItemIcon : null, {\n          children: icon,\n        })}\n\n        {/* 2. MESSAGE */}\n        <p\n          className=\"px-md py-lg text-body-2 row-span-3\"\n          style={{ gridArea: 'message' }}\n          {...titleProps}\n        >\n          {message}\n        </p>\n\n        {/* 3. ACTION BUTTON */}\n        {renderSubComponent(\n          actionBtnFromChildren,\n          actionLabel && onAction ? SnackbarItemAction : null,\n          { intent, design, onClick: onAction, children: actionLabel }\n        )}\n\n        {/* 4. CLOSE BUTTON */}\n        {renderSubComponent(closeBtnFromChildren, isClosable ? SnackbarItemClose : null, {\n          intent,\n          design,\n          /**\n           * React Spectrum typing of aria-label is inaccurate, and aria-label value should never be undefined.\n           * See https://github.com/adobe/react-spectrum/blob/main/packages/%40react-aria/i18n/src/useLocalizedStringFormatter.ts#L40\n           */\n          'aria-label': closeButtonProps['aria-label'] as string,\n        })}\n      </div>\n    </div>\n  )\n}\n\nSnackbarItem.displayName = 'Snackbar.Item'\n\n/**\n * Returns compound item if found in children prop.\n * If not fallbacks to default item, conditionned by addSnackbar options.\n */\nconst renderSubComponent = <P extends object>(\n  childItem?: ReactElement<P>,\n  defaultItem?: FC<P> | null,\n  props?: P\n) => {\n  if (childItem) {\n    return cloneElement(childItem, { ...props, ...childItem.props })\n  } else if (defaultItem) {\n    const Item = defaultItem\n\n    return <Item {...(props as P)} />\n  } else {\n    return null\n  }\n}\n","import { cva, VariantProps } from 'class-variance-authority'\n\nimport { filledVariants, tintedVariants } from './snackbarVariants'\n\nexport const snackbarItemVariant = cva(\n  [\n    'rounded-md shadow-sm',\n    'max-w-[600px]',\n    'cursor-default pointer-events-auto touch-none select-none',\n    'absolute',\n    /**\n     * Focus\n     */\n    'group-focus-visible:outline-hidden group-focus-visible:u-outline group-not-focus-visible:ring-inset',\n    /**\n     * Positionning\n     */\n    'group-data-[position=bottom]:bottom-0 group-data-[position=bottom-left]:bottom-0 group-data-[position=bottom-right]:bottom-0',\n    'group-data-[position=top]:top-0 group-data-[position=top-left]:top-0 group-data-[position=top-right]:top-0',\n    /**\n     * Animation and opacity\n     */\n    '[animation-fill-mode: forwards]!',\n    'data-[animation=queued]:animate-fade-in',\n    'data-[animation=entering]:easing-decelerate-back',\n    'data-[animation=exiting]:easing-standard',\n    // Parent position bottom|bottom-left|bottom-right\n    'data-[animation=entering]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-in-bottom',\n    'data-[animation=exiting]:opacity-0 data-[animation=exiting]:transition-opacity',\n    'data-[animation=exiting]:group-data-[position=bottom]:[&:not([data-swipe])]:animate-slide-out-bottom',\n    'data-[animation=entering]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-in-bottom',\n    'data-[animation=exiting]:group-data-[position=bottom-left]:[&:not([data-swipe])]:animate-slide-out-bottom',\n    'data-[animation=entering]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-in-bottom',\n    'data-[animation=exiting]:group-data-[position=bottom-right]:[&:not([data-swipe])]:animate-slide-out-bottom',\n    // Parent position top|top-left|top-right\n    'data-[animation=entering]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-in-top',\n    'data-[animation=exiting]:group-data-[position=top]:[&:not([data-swipe])]:animate-slide-out-top',\n    'data-[animation=entering]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-in-top',\n    'data-[animation=exiting]:group-data-[position=top-left]:[&:not([data-swipe])]:animate-slide-out-top',\n    'data-[animation=entering]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-in-top',\n    'data-[animation=exiting]:group-data-[position=top-right]:[&:not([data-swipe])]:animate-slide-out-top',\n    /**\n     * Swipe\n     */\n    'data-[swipe=move]:data-[swipe-direction=right]:translate-x-(--swipe-position-x)',\n    'data-[swipe=move]:data-[swipe-direction=left]:translate-x-(--swipe-position-x)',\n    'data-[swipe=cancel]:translate-x-0',\n    'data-[swipe=end]:data-[swipe-direction=right]:animate-standalone-swipe-out-right',\n    'data-[swipe=end]:data-[swipe-direction=left]:animate-standalone-swipe-out-left',\n  ],\n  {\n    variants: {\n      /**\n       * Set different look and feel\n       * @default 'filled'\n       */\n      design: {\n        filled: '',\n        tinted: '',\n      },\n      /**\n       * Set color intent\n       * @default 'neutral'\n       */\n      intent: {\n        success: '',\n        alert: '',\n        error: '',\n        info: '',\n        neutral: '',\n        main: '',\n        basic: '',\n        support: '',\n        accent: '',\n        inverse: '',\n      },\n    },\n    compoundVariants: [...filledVariants, ...tintedVariants],\n    defaultVariants: {\n      design: 'filled',\n      intent: 'neutral',\n    },\n  }\n)\n\nexport const snackbarItemVariantContent = cva(\n  [\n    'inline-grid items-center',\n    'col-start-1 row-start-1',\n    'px-md', // applying padding on the parent prevents VoiceOver on Safari from reading snackbar content 🤷\n  ],\n  {\n    variants: {\n      /**\n       * Force action button displaying on a new line\n       * @default false\n       */\n      actionOnNewline: {\n        true: [\n          'grid-rows-[52px_1fr_52px]',\n          'grid-cols-[min-content_1fr_min-content]',\n          \"[grid-template-areas:'icon_message_close'_'._message_.'_'action_action_action']\",\n        ],\n        false: [\n          'grid-cols-[min-content_1fr_min-content_min-content]',\n          \"[grid-template-areas:'icon_message_action_close']\",\n        ],\n      },\n    },\n    defaultVariants: {\n      actionOnNewline: false,\n    },\n  }\n)\n\nexport type SnackbarItemVariantProps = VariantProps<typeof snackbarItemVariant>\nexport type SnackbarItemVariantContentProps = VariantProps<typeof snackbarItemVariantContent>\n","export const filledVariants = [\n  {\n    design: 'filled',\n    intent: 'success',\n    class: ['bg-success text-on-success'],\n  },\n  {\n    design: 'filled',\n    intent: 'alert',\n    class: ['bg-alert text-on-alert'],\n  },\n  {\n    design: 'filled',\n    intent: 'error',\n    class: ['bg-error text-on-error'],\n  },\n  {\n    design: 'filled',\n    intent: 'info',\n    class: ['bg-info text-on-info'],\n  },\n  {\n    design: 'filled',\n    intent: 'neutral',\n    class: ['bg-neutral text-on-neutral'],\n  },\n  {\n    design: 'filled',\n    intent: 'main',\n    class: ['bg-main text-on-main'],\n  },\n  {\n    design: 'filled',\n    intent: 'basic',\n    class: ['bg-basic text-on-basic'],\n  },\n  {\n    design: 'filled',\n    intent: 'support',\n    class: ['bg-support text-on-support'],\n  },\n  {\n    design: 'filled',\n    intent: 'accent',\n    class: ['bg-accent text-on-accent'],\n  },\n  {\n    design: 'filled',\n    intent: 'inverse',\n    class: ['bg-surface-inverse text-on-surface-inverse'],\n  },\n] as const\n\nexport const tintedVariants = [\n  {\n    design: 'tinted',\n    intent: 'success',\n    class: ['bg-success-container text-on-success-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'alert',\n    class: ['bg-alert-container text-on-alert-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'error',\n    class: ['bg-error-container text-on-error-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'info',\n    class: ['bg-info-container text-on-info-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'neutral',\n    class: ['bg-neutral-container text-on-neutral-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'main',\n    class: ['bg-main-container text-on-main-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'basic',\n    class: ['bg-basic-container text-on-basic-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'support',\n    class: ['bg-support-container text-on-support-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'accent',\n    class: ['bg-accent-container text-on-accent-container'],\n  },\n  {\n    design: 'tinted',\n    intent: 'inverse',\n    class: ['bg-surface-inverse text-on-surface-inverse'],\n  },\n] as const\n","import { cx } from 'class-variance-authority'\nimport { Ref } from 'react'\n\nimport { Button, type ButtonProps } from '../button'\nimport type { SnackbarItemVariantProps } from './SnackbarItem.styles'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\n\nexport type SnackbarItemActionProps = Omit<ButtonProps, 'size' | 'shape' | 'intent'> &\n  SnackbarItemVariantProps & {\n    ref?: Ref<HTMLButtonElement>\n  }\n\nexport const SnackbarItemAction = ({\n  design: designProp = 'filled',\n  intent: intentProp = 'neutral',\n  onClick,\n  children,\n  className,\n  ref,\n  ...rest\n}: SnackbarItemActionProps) => {\n  const { toast, state } = useSnackbarItemContext()\n\n  const intent = intentProp ?? toast.content.intent\n  const design = designProp ?? toast.content.design\n\n  return (\n    <Button\n      ref={ref}\n      size=\"md\"\n      shape=\"rounded\"\n      {...(intent === 'inverse'\n        ? {\n            design: 'ghost',\n            intent: 'surface',\n          }\n        : {\n            design,\n            intent: intent === 'error' ? 'danger' : intent,\n          })}\n      onClick={e => {\n        onClick?.(e)\n        state.close(toast.key)\n      }}\n      style={{ gridArea: 'action', ...rest.style }}\n      className={cx('ml-md justify-self-end', className)}\n      {...rest}\n    >\n      {children}\n    </Button>\n  )\n}\n\nSnackbarItemAction.displayName = 'Snackbar.ItemAction'\n","import { QueuedToast, ToastState } from '@react-stately/toast'\nimport { createContext, useContext } from 'react'\n\nimport type { SnackbarItemValue } from './SnackbarItem'\n\nexport interface SnackbarItemState<T = SnackbarItemValue> {\n  toast: QueuedToast<T>\n  state: ToastState<T>\n}\n\nexport const SnackbarItemContext = createContext<SnackbarItemState>({} as SnackbarItemState)\n\nexport const useSnackbarItemContext = () => useContext(SnackbarItemContext)\n","import { Close } from '@spark-ui/icons/Close'\nimport { cx } from 'class-variance-authority'\nimport { type ComponentPropsWithRef } from 'react'\n\nimport { Icon } from '../icon'\nimport { IconButton, type IconButtonProps } from '../icon-button'\nimport type { SnackbarItemVariantProps } from './SnackbarItem.styles'\nimport { useSnackbarItemContext } from './SnackbarItemContext'\n\nexport interface SnackbarItemCloseProps\n  extends Omit<ComponentPropsWithRef<'button'>, 'aria-label' | 'disabled'>,\n    Pick<IconButtonProps, 'aria-label'>,\n    SnackbarItemVariantProps {}\n\nexport const SnackbarItemClose = ({\n  design: designProp = 'filled',\n  intent: intentProp = 'neutral',\n  'aria-label': ariaLabel,\n  onClick,\n  className,\n  ref,\n  ...rest\n}: SnackbarItemCloseProps) => {\n  const { toast, state } = useSnackbarItemContext()\n\n  const intent = intentProp ?? toast.content.intent\n  const design = designProp ?? toast.content.design\n\n  return (\n    <IconButton\n      ref={ref}\n      size=\"md\"\n      shape=\"rounded\"\n      {...(intent === 'inverse'\n        ? {\n            design: 'ghost',\n            intent: 'surface',\n          }\n        : {\n            design,\n            intent: intent === 'error' ? 'danger' : intent,\n          })}\n      aria-label={ariaLabel}\n      onClick={e => {\n        onClick?.(e)\n        state.close(toast.key)\n      }}\n      style={{ gridArea: 'close', ...rest.style }}\n      className={cx('ml-md justify-self-end', className)}\n      {...rest}\n    >\n      <Icon size=\"sm\">\n        <Close />\n      </Icon>\n    </IconButton>\n  )\n}\n\nSnackbarItemClose.displayName = 'Snackbar.ItemClose'\n","import { cx } from 'class-variance-authority'\nimport type { ReactElement } from 'react'\n\nimport { Icon, type IconProps } from '../icon'\n\nexport type SnackbarItemIconProps = IconProps\n\nexport const SnackbarItemIcon = ({\n  children,\n  className,\n  ...rest\n}: SnackbarItemIconProps): ReactElement => (\n  <Icon\n    size=\"md\"\n    className={cx('mx-md', className)}\n    style={{ gridArea: 'icon', ...rest.style }}\n    {...rest}\n  >\n    {children}\n  </Icon>\n)\n\nSnackbarItemIcon.displayName = 'Snackbar.ItemIcon'\n","/* eslint-disable complexity */\nimport { type RefObject, useEffect, useRef, useState } from 'react'\n\ninterface SwipeArgs<T> {\n  swipeRef: RefObject<T | null>\n  onSwipeStart?: ({ state, direction }: SwipeReturn) => void\n  onSwipeMove?: ({ state, direction }: SwipeReturn) => void\n  onSwipeCancel?: ({ state, direction }: SwipeReturn) => void\n  onSwipeEnd?: ({ state, direction }: SwipeReturn) => void\n  threshold?: number\n}\n\ninterface SwipeReturn {\n  state?: 'start' | 'move' | 'cancel' | 'end'\n  direction?: 'up' | 'down' | 'right' | 'left' | null\n}\n\nconst SWIPE_THRESHOLD = 75\n\nexport const useSwipe = <T extends HTMLElement>({\n  swipeRef,\n  onSwipeStart,\n  onSwipeMove,\n  onSwipeCancel,\n  onSwipeEnd,\n  threshold = 10,\n}: SwipeArgs<T>): SwipeReturn => {\n  const [state, setState] = useState<SwipeReturn['state']>()\n\n  const direction = useRef<SwipeReturn['direction']>(null)\n  const origin = useRef<Record<'x' | 'y', number> | null>(null)\n  const delta = useRef<Record<'x' | 'y', number> | null>(null)\n\n  const handleSwipeStart = (evt: PointerEvent) => {\n    origin.current = { x: evt.clientX, y: evt.clientY }\n\n    /**\n     * Prevents unwanted text selection in Safari browser (longpress)\n     */\n    document.addEventListener('selectstart', e => e.preventDefault())\n  }\n\n  const handleSwipeMove = (evt: PointerEvent) => {\n    if (!origin.current) return\n\n    const deltaX = Math.abs(evt.clientX - origin.current.x)\n    const deltaY = Math.abs(evt.clientY - origin.current.y)\n\n    let moveState: SwipeReturn['state']\n\n    if (deltaX > deltaY && deltaX > threshold) {\n      direction.current = evt.clientX > origin.current.x ? 'right' : 'left'\n    } else if (deltaY > threshold) {\n      direction.current = evt.clientY > origin.current.y ? 'down' : 'up'\n    }\n\n    /**\n     * If no direction could be defined, then no move should be handled.\n     * This is particularly true with trackpads working with MacOS/Windows.\n     */\n    if (!direction.current) return\n\n    if (!delta.current) {\n      moveState = 'start'\n      delta.current = { x: deltaX, y: deltaY }\n      onSwipeStart?.({ state: moveState, direction: direction.current })\n    } else {\n      moveState = 'move'\n      delta.current = { x: deltaX, y: deltaY }\n      ;(swipeRef.current as T).style.setProperty(\n        '--swipe-position-x',\n        `${deltaX > deltaY ? evt.clientX - origin.current.x : 0}px`\n      )\n      ;(swipeRef.current as T).style.setProperty(\n        '--swipe-position-y',\n        `${!(deltaX > deltaY) ? evt.clientY - origin.current.y : 0}px`\n      )\n      onSwipeMove?.({ state: moveState, direction: direction.current })\n    }\n\n    setState(moveState)\n  }\n\n  const handleSwipeEnd = () => {\n    const proxyDelta = delta.current\n\n    origin.current = null\n    delta.current = null\n\n    if (proxyDelta) {\n      const { x: deltaX, y: deltaY } = proxyDelta\n\n      let endState: SwipeReturn['state']\n\n      if (deltaX > deltaY) {\n        if (deltaX > SWIPE_THRESHOLD) {\n          endState = 'end'\n          onSwipeEnd?.({ state: endState, direction: direction.current })\n        } else {\n          endState = 'cancel'\n          onSwipeCancel?.({ state: endState, direction: direction.current })\n        }\n      } else {\n        if (deltaY > SWIPE_THRESHOLD) {\n          endState = 'end'\n          onSwipeEnd?.({ state: endState, direction: direction.current })\n        } else {\n          endState = 'cancel'\n          onSwipeCancel?.({ state: endState, direction: direction.current })\n        }\n      }\n\n      setState(endState)\n\n      /**\n       * Prevents unwanted text selection in Safari browser (longpress)\n       */\n      document.removeEventListener('selectstart', e => e.preventDefault())\n    }\n  }\n\n  useEffect(() => {\n    if (!swipeRef.current) return\n\n    const swipeElement = swipeRef.current\n\n    swipeElement.addEventListener('pointerdown', handleSwipeStart)\n    document.addEventListener('pointermove', handleSwipeMove)\n    document.addEventListener('pointerup', handleSwipeEnd)\n\n    return () => {\n      swipeElement.removeEventListener('pointerdown', handleSwipeStart)\n      document.removeEventListener('pointermove', handleSwipeMove)\n      document.removeEventListener('pointerup', handleSwipeEnd)\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [])\n\n  return {\n    state,\n    direction: direction.current,\n  }\n}\n","import { cva, VariantProps } from 'class-variance-authority'\n\nexport const snackbarRegionVariant = cva(\n  [\n    'fixed inset-x-lg z-toast group',\n    'outline-hidden pointer-events-none',\n    'grid grid-rows-1 grid-cols-1 gap-lg',\n  ],\n  {\n    variants: {\n      /**\n       * Set snackbar item position\n       * @default 'bottom'\n       */\n      position: {\n        top: 'top-lg justify-items-center',\n        'top-right': 'top-lg justify-items-end',\n        'top-left': 'top-lg justify-items-start',\n        bottom: 'bottom-lg justify-items-center',\n        'bottom-right': 'bottom-lg justify-items-end',\n        'bottom-left': 'bottom-lg justify-items-start',\n      },\n    },\n    defaultVariants: {\n      position: 'bottom',\n    },\n  }\n)\n\nexport type SnackbarRegionVariantProps = VariantProps<typeof snackbarRegionVariant>\n","import { type RefObject, useCallback, useSyncExternalStore } from 'react'\n\ninterface UseSnackbarGlobalStoreArgs<T> {\n  providers: Set<T>\n  subscriptions: Set<() => void>\n}\n\ninterface UseSnackbarGlobalStoreReturn<T> {\n  provider: T\n  addProvider: (ref: T) => void\n  deleteProvider: (ref: T) => void\n}\n\n/**\n * This hook is a basic abstraction of useSyncExternalStore hook which allows us\n * to consume data from an external data store.\n *\n * Cf. https://react.dev/reference/react/useSyncExternalStore#subscribing-to-an-external-store\n */\n\nexport const useSnackbarGlobalStore = <T = RefObject<HTMLDivElement | null>>({\n  providers,\n  subscriptions,\n}: UseSnackbarGlobalStoreArgs<T>): UseSnackbarGlobalStoreReturn<T> => {\n  const subscribe = useCallback(\n    (listener: () => void) => {\n      subscriptions.add(listener)\n\n      return () => subscriptions.delete(listener)\n    },\n    [subscriptions]\n  )\n\n  const getLastSnackbarProvider = useCallback(() => [...providers].reverse()[0] as T, [providers])\n\n  const addProvider = useCallback(\n    (provider: T) => {\n      providers.add(provider)\n\n      for (const subscribeFn of subscriptions) {\n        subscribeFn()\n      }\n    },\n    [providers, subscriptions]\n  )\n\n  const deleteProvider = useCallback(\n    (provider: T) => {\n      providers.delete(provider)\n\n      for (const subscribeFn of subscriptions) {\n        subscribeFn()\n      }\n    },\n    [providers, subscriptions]\n  )\n\n  const provider = useSyncExternalStore(subscribe, getLastSnackbarProvider, getLastSnackbarProvider)\n\n  return {\n    provider,\n    addProvider,\n    deleteProvider,\n  }\n}\n","import {\n  addSnackbar,\n  type AddSnackbarArgs,\n  clearSnackbarQueue,\n  Snackbar as Root,\n  type SnackbarProps,\n} from './Snackbar'\nimport { SnackbarItem as Item, type SnackbarItemProps } from './SnackbarItem'\nimport {\n  SnackbarItemAction as ItemAction,\n  type SnackbarItemActionProps,\n} from './SnackbarItemAction'\nimport { SnackbarItemClose as ItemClose, type SnackbarItemCloseProps } from './SnackbarItemClose'\nimport { SnackbarItemIcon as ItemIcon, type SnackbarItemIconProps } from './SnackbarItemIcon'\n\nexport const Snackbar: typeof Root & {\n  Item: typeof Item\n  ItemAction: typeof ItemAction\n  ItemClose: typeof ItemClose\n  ItemIcon: typeof ItemIcon\n} = Object.assign(Root, {\n  Item,\n  ItemAction,\n  ItemClose,\n  ItemIcon,\n})\n\nSnackbar.displayName = 'Snackbar'\nItem.displayName = 'Snackbar.Item'\nItemAction.displayName = 'Snackbar.ItemAction'\nItemClose.displayName = 'Snackbar.ItemClose'\nItemIcon.displayName = 'Snackbar.ItemIcon'\n\nexport type {\n  SnackbarProps,\n  SnackbarItemProps,\n  SnackbarItemActionProps,\n  SnackbarItemCloseProps,\n  SnackbarItemIconProps,\n  AddSnackbarArgs,\n}\nexport { addSnackbar, clearSnackbarQueue }\n"],"mappings":"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","names":["useEffect","useRef","cloneElement","useRef","useRef","cx","jsx","cx","cx","jsx","cx","jsx","useRef","cva","jsx","useRef","cloneElement","useCallback","provider","jsx","useRef","useEffect","Snackbar"]}