{"version":3,"file":"index.cjs","sources":["../src/utils/performance.ts","../src/utils/useControllableState.ts","../src/utils/useId.ts","../src/components/TpAccordion/TpAccordionContext.tsx","../src/components/TpAccordion/TpAccordion.tsx","../node_modules/clsx/dist/clsx.mjs","../src/components/TpAccordion/TpAccordionItem.tsx","../src/components/TpAccordion/TpAccordionContent.tsx","../src/hooks/useCallbackWithYield.ts","../src/components/TpAccordion/TpAccordionTrigger.tsx","../src/components/TpModal/TpModalContext.tsx","../src/components/TpModal/TpModal.tsx","../src/components/TpModal/TpModalClose.tsx","../src/utils/useFocusTrap.ts","../src/components/TpModal/TpModalContent.tsx","../src/components/TpModal/TpModalDescription.tsx","../src/utils/useBodyScrollLock.ts","../src/components/TpModal/TpModalOverlay.tsx","../src/components/TpModal/TpModalTitle.tsx","../src/hooks/useStateWithYield.ts","../src/hooks/useTpAccordion.ts","../src/hooks/useTpModal.ts"],"sourcesContent":["/**\n * Break up heavy tasks and yield to main thread.\n *\n * @return {Promise<void>}\n */\nexport async function yieldToMainThread(): Promise<void> {\n  // Use scheduler.yield() if available, otherwise fall back to setTimeout\n  if (typeof window !== 'undefined' && window.scheduler?.yield) {\n    await window.scheduler.yield()\n    return\n  }\n\n  await new Promise<void>((resolve) => {\n    setTimeout(resolve, 0)\n  })\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\nimport { yieldToMainThread } from './performance'\n\ninterface UseControllableStateProps<T> {\n  value?: T\n  defaultValue?: T\n  onChange?: (value: T) => void\n}\n\n/**\n * Custom hook to handle both controlled and uncontrolled state\n * with automatic yielding to the main thread before state updates.\n */\nexport function useControllableState<T>({\n  value: controlledValue,\n  defaultValue,\n  onChange,\n}: UseControllableStateProps<T>): [T | undefined, (value: T) => Promise<void>] {\n  const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue)\n  const isControlled = controlledValue !== undefined\n  const value = isControlled ? controlledValue : uncontrolledValue\n  const onChangeRef = useRef(onChange)\n\n  useEffect(() => {\n    onChangeRef.current = onChange\n  })\n\n  const setValue = useCallback(\n    async (nextValue: T) => {\n      await yieldToMainThread()\n      if (!isControlled) {\n        setUncontrolledValue(nextValue)\n      }\n      onChangeRef.current?.(nextValue)\n    },\n    [isControlled]\n  )\n\n  return [value, setValue]\n}\n","import { useId as useReactId } from 'react'\n\n/**\n * Generate a unique ID with an optional prefix\n */\nexport function useId(prefix?: string): string {\n  const id = useReactId()\n  return prefix ? `${prefix}-${id}` : id\n}\n","import { createContext, useContext } from 'react'\nimport type { TpAccordionContextValue } from './TpAccordion.types'\n\nexport const TpAccordionContext = createContext<TpAccordionContextValue | undefined>(undefined)\n\nexport function useTpAccordionContext() {\n  const context = useContext(TpAccordionContext)\n\n  if (!context) {\n    throw new Error('TpAccordion compound components must be used within TpAccordion')\n  }\n\n  return context\n}\n","import { useCallback, useMemo } from 'react'\nimport { useControllableState } from '../../utils/useControllableState'\nimport { useId } from '../../utils/useId'\nimport type { TpAccordionProps } from './TpAccordion.types'\nimport { TpAccordionContext } from './TpAccordionContext'\n\nexport function TpAccordion({\n  children,\n  value: controlledValue,\n  defaultValue = [],\n  onValueChange,\n}: TpAccordionProps) {\n  const [value, setValue] = useControllableState({\n    value: controlledValue,\n    defaultValue,\n    onChange: onValueChange,\n  })\n\n  const baseId = useId('tpaccordion')\n\n  const onItemToggle = useCallback(\n    (itemValue: string) => {\n      const currentValue = value ?? []\n      const isOpen = currentValue.includes(itemValue)\n\n      if (isOpen) {\n        // Remove from array\n        setValue(currentValue.filter((v) => v !== itemValue))\n      } else {\n        // Add to array\n        setValue([...currentValue, itemValue])\n      }\n    },\n    [value, setValue]\n  )\n\n  const getItemId = useCallback((itemValue: string) => `${baseId}-item-${itemValue}`, [baseId])\n\n  const getContentId = useCallback(\n    (itemValue: string) => `${baseId}-content-${itemValue}`,\n    [baseId]\n  )\n\n  const getTriggerId = useCallback(\n    (itemValue: string) => `${baseId}-trigger-${itemValue}`,\n    [baseId]\n  )\n\n  const contextValue = useMemo(\n    () => ({\n      value: value ?? [],\n      onItemToggle,\n      getItemId,\n      getContentId,\n      getTriggerId,\n    }),\n    [value, onItemToggle, getItemId, getContentId, getTriggerId]\n  )\n\n  return <TpAccordionContext.Provider value={contextValue}>{children}</TpAccordionContext.Provider>\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import clsx from 'clsx'\nimport { createContext, useContext, useMemo } from 'react'\nimport styles from './TpAccordion.module.css'\nimport type { TpAccordionItemProps } from './TpAccordion.types'\nimport { useTpAccordionContext } from './TpAccordionContext'\n\ninterface TpAccordionItemContextValue {\n  value: string\n  isOpen: boolean\n}\n\nconst TpAccordionItemContext = createContext<TpAccordionItemContextValue | undefined>(undefined)\n\nexport function useTpAccordionItemContext() {\n  const context = useContext(TpAccordionItemContext)\n\n  if (!context) {\n    throw new Error('TpAccordionItem compound components must be used within TpAccordionItem')\n  }\n\n  return context\n}\n\nexport function TpAccordionItem({ children, value, className, ...props }: TpAccordionItemProps) {\n  const { value: openValues, getItemId } = useTpAccordionContext()\n  const isOpen = openValues.includes(value)\n\n  const contextValue = useMemo(\n    () => ({\n      value,\n      isOpen,\n    }),\n    [value, isOpen]\n  )\n\n  return (\n    <TpAccordionItemContext.Provider value={contextValue}>\n      <div id={getItemId(value)} className={clsx(styles.item, className)} {...props}>\n        {children}\n      </div>\n    </TpAccordionItemContext.Provider>\n  )\n}\n","import clsx from 'clsx'\nimport styles from './TpAccordion.module.css'\nimport type { TpAccordionContentProps } from './TpAccordion.types'\nimport { useTpAccordionContext } from './TpAccordionContext'\nimport { useTpAccordionItemContext } from './TpAccordionItem'\n\nexport function TpAccordionContent({ children, className, ...props }: TpAccordionContentProps) {\n  const { getContentId, getTriggerId } = useTpAccordionContext()\n  const { value, isOpen } = useTpAccordionItemContext()\n\n  return (\n    <section\n      id={getContentId(value)}\n      aria-labelledby={getTriggerId(value)}\n      className={clsx(styles.content, className)}\n      data-state={isOpen ? 'open' : 'closed'}\n      {...props}\n    >\n      <div className={styles.contentInner}>{children}</div>\n    </section>\n  )\n}\n","import { useCallback } from 'react'\nimport { yieldToMainThread } from '../utils/performance'\n\n/**\n * Hook that wraps useCallback with automatic yielding to the main thread.\n * Useful for event handlers and callbacks that need to improve INP.\n *\n * @example\n * const handleClick = useCallbackWithYield(() => {\n *   setState(true)\n * }, [setState])\n */\nexport function useCallbackWithYield<E extends React.SyntheticEvent>(\n  callback: (event: E) => void | Promise<void>,\n  deps: React.DependencyList\n) {\n  return useCallback(async (event: E) => {\n    await yieldToMainThread()\n    return callback(event)\n    // biome-ignore lint/correctness/useExhaustiveDependencies: We intentionally forward the deps array from the caller; this hook abstracts useCallback.\n  }, deps)\n}\n","import clsx from 'clsx'\nimport { useCallbackWithYield } from '../../hooks/useCallbackWithYield'\nimport styles from './TpAccordion.module.css'\nimport type { TpAccordionTriggerProps } from './TpAccordion.types'\nimport { useTpAccordionContext } from './TpAccordionContext'\nimport { useTpAccordionItemContext } from './TpAccordionItem'\n\nexport function TpAccordionTrigger({ children, className, ...props }: TpAccordionTriggerProps) {\n  const { onItemToggle, getTriggerId, getContentId } = useTpAccordionContext()\n  const { value, isOpen } = useTpAccordionItemContext()\n\n  const handleClick = useCallbackWithYield(() => {\n    onItemToggle(value)\n  }, [onItemToggle, value])\n\n  return (\n    <button\n      type=\"button\"\n      id={getTriggerId(value)}\n      aria-expanded={isOpen}\n      aria-controls={getContentId(value)}\n      className={clsx(styles.trigger, className)}\n      onClick={handleClick}\n      {...props}\n    >\n      {children}\n    </button>\n  )\n}\n","import { createContext, useContext } from 'react'\nimport type { TpModalContextValue } from './TpModal.types'\n\nexport const TpModalContext = createContext<TpModalContextValue | null>(null)\n\nexport function useTpModalContext() {\n  const context = useContext(TpModalContext)\n  if (!context) {\n    throw new Error('TpModal components must be used within a TpModal')\n  }\n  return context\n}\n","import { useCallback, useMemo } from 'react'\nimport { useControllableState } from '../../utils/useControllableState'\nimport { useId } from '../../utils/useId'\nimport type { TpModalProps } from './TpModal.types'\nimport { TpModalContext } from './TpModalContext'\n\nexport function TpModal({\n  children,\n  open: controlledOpen,\n  defaultOpen = false,\n  onOpenChange,\n}: TpModalProps) {\n  const [isOpen, setIsOpen] = useControllableState({\n    value: controlledOpen,\n    defaultValue: defaultOpen,\n    onChange: onOpenChange,\n  })\n\n  const titleId = useId('tpmodal-title')\n  const descriptionId = useId('tpmodal-description')\n\n  const open = useCallback(() => {\n    setIsOpen(true)\n  }, [setIsOpen])\n\n  const close = useCallback(() => {\n    setIsOpen(false)\n  }, [setIsOpen])\n\n  const contextValue = useMemo(\n    () => ({\n      isOpen: isOpen ?? false,\n      open,\n      close,\n      titleId,\n      descriptionId,\n    }),\n    [isOpen, open, close, titleId, descriptionId]\n  )\n\n  return <TpModalContext.Provider value={contextValue}>{children}</TpModalContext.Provider>\n}\n","import clsx from 'clsx'\nimport { useCallbackWithYield } from '../../hooks/useCallbackWithYield'\nimport styles from './TpModal.module.css'\nimport type { TpModalCloseProps } from './TpModal.types'\nimport { useTpModalContext } from './TpModalContext'\n\nexport function TpModalClose({\n  children,\n  className,\n  onClick,\n  'aria-label': ariaLabel = 'Close modal',\n  ...props\n}: TpModalCloseProps) {\n  const { close } = useTpModalContext()\n\n  const handleClick = useCallbackWithYield(\n    (event: React.MouseEvent<HTMLButtonElement>) => {\n      close()\n      onClick?.(event)\n    },\n    [close, onClick]\n  )\n\n  return (\n    <button\n      type=\"button\"\n      className={clsx(styles.close, className)}\n      onClick={handleClick}\n      aria-label={ariaLabel}\n      {...props}\n    >\n      {children}\n    </button>\n  )\n}\n","import { useEffect, useRef } from 'react'\n\nconst FOCUSABLE_ELEMENTS = [\n  'a[href]',\n  'area[href]',\n  'input:not([disabled]):not([type=\"hidden\"])',\n  'select:not([disabled])',\n  'textarea:not([disabled])',\n  'button:not([disabled])',\n  'iframe',\n  'object',\n  'embed',\n  '[contenteditable]',\n  '[tabindex]:not([tabindex^=\"-\"])',\n]\n\n/**\n * Hook to trap focus within a container element\n */\nexport function useFocusTrap(isActive: boolean) {\n  const containerRef = useRef<HTMLElement>(null)\n  const previousActiveElement = useRef<HTMLElement | null>(null)\n\n  useEffect(() => {\n    if (!isActive) return\n\n    const container = containerRef.current\n    if (!container) return\n\n    // Store the currently focused element\n    previousActiveElement.current = document.activeElement as HTMLElement\n\n    // Get all focusable elements\n    const getFocusableElements = (): HTMLElement[] => {\n      const elements = container.querySelectorAll<HTMLElement>(FOCUSABLE_ELEMENTS.join(','))\n      return Array.from(elements)\n    }\n\n    // Focus the first element\n    const focusableElements = getFocusableElements()\n    if (focusableElements.length > 0) {\n      focusableElements[0]?.focus()\n    }\n\n    // Handle tab key\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key !== 'Tab') return\n\n      const focusableElements = getFocusableElements()\n      if (focusableElements.length === 0) return\n\n      const firstElement = focusableElements[0]\n      const lastElement = focusableElements[focusableElements.length - 1]\n\n      if (!firstElement || !lastElement) return\n\n      if (event.shiftKey) {\n        // Shift + Tab\n        if (document.activeElement === firstElement) {\n          event.preventDefault()\n          lastElement.focus()\n        }\n      } else if (document.activeElement === lastElement) {\n        // Tab\n        event.preventDefault()\n        firstElement.focus()\n      }\n    }\n\n    document.addEventListener('keydown', handleKeyDown)\n\n    // Cleanup: restore focus\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown)\n      previousActiveElement.current?.focus()\n    }\n  }, [isActive])\n\n  return containerRef\n}\n","import clsx from 'clsx'\nimport { useCallback, useEffect } from 'react'\nimport { useFocusTrap } from '../../utils/useFocusTrap'\nimport styles from './TpModal.module.css'\nimport type { TpModalContentProps } from './TpModal.types'\nimport { useTpModalContext } from './TpModalContext'\n\nexport function TpModalContent({ children, className, ...props }: TpModalContentProps) {\n  const { isOpen, close, titleId, descriptionId } = useTpModalContext()\n  const contentRef = useFocusTrap(isOpen)\n\n  // Handle Escape key\n  const handleKeyDown = useCallback(\n    (event: KeyboardEvent) => {\n      if (event.key === 'Escape') {\n        event.preventDefault()\n        close()\n      }\n    },\n    [close]\n  )\n\n  useEffect(() => {\n    if (!isOpen) return\n\n    document.addEventListener('keydown', handleKeyDown)\n    return () => document.removeEventListener('keydown', handleKeyDown)\n  }, [isOpen, handleKeyDown])\n\n  // Stop propagation to prevent overlay click\n  const handleContentClick = (event: React.MouseEvent<HTMLDivElement>) => {\n    event.stopPropagation()\n  }\n\n  if (!isOpen) return null\n\n  return (\n    // biome-ignore lint/a11y/useKeyWithClickEvents: Keyboard events are handled via Escape key listener\n    <div\n      ref={contentRef as React.RefObject<HTMLDivElement>}\n      role=\"dialog\"\n      aria-modal=\"true\"\n      aria-labelledby={titleId}\n      aria-describedby={descriptionId}\n      className={clsx(styles.content, className)}\n      onClick={handleContentClick}\n      {...props}\n    >\n      {children}\n    </div>\n  )\n}\n","import clsx from 'clsx'\nimport styles from './TpModal.module.css'\nimport type { TpModalDescriptionProps } from './TpModal.types'\nimport { useTpModalContext } from './TpModalContext'\n\nexport function TpModalDescription({ children, className, ...props }: TpModalDescriptionProps) {\n  const { descriptionId } = useTpModalContext()\n\n  return (\n    <div id={descriptionId} className={clsx(styles.description, className)} {...props}>\n      {children}\n    </div>\n  )\n}\n","import { useEffect } from 'react'\n\n/**\n * Hook to lock body scroll when a modal is open\n */\nexport function useBodyScrollLock(isLocked: boolean) {\n  useEffect(() => {\n    if (!isLocked) return\n\n    const originalOverflow = document.body.style.overflow\n    const originalPaddingRight = document.body.style.paddingRight\n\n    // Get scrollbar width\n    const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth\n\n    // Lock scroll\n    document.body.style.overflow = 'hidden'\n\n    // Add padding to prevent layout shift\n    if (scrollbarWidth > 0) {\n      document.body.style.paddingRight = `${scrollbarWidth}px`\n    }\n\n    return () => {\n      document.body.style.overflow = originalOverflow\n      document.body.style.paddingRight = originalPaddingRight\n    }\n  }, [isLocked])\n}\n","import clsx from 'clsx'\nimport { createPortal } from 'react-dom'\nimport { useCallbackWithYield } from '../../hooks/useCallbackWithYield'\nimport { useBodyScrollLock } from '../../utils/useBodyScrollLock'\nimport styles from './TpModal.module.css'\nimport type { TpModalOverlayProps } from './TpModal.types'\nimport { useTpModalContext } from './TpModalContext'\n\nexport function TpModalOverlay({\n  children,\n  closeOnClick = true,\n  className,\n  onClick,\n  ...props\n}: TpModalOverlayProps) {\n  const { isOpen, close } = useTpModalContext()\n\n  useBodyScrollLock(isOpen)\n\n  const handleClick = useCallbackWithYield(\n    (event: React.MouseEvent<HTMLDivElement>) => {\n      if (closeOnClick) {\n        close()\n      }\n      onClick?.(event)\n    },\n    [closeOnClick, close, onClick]\n  )\n\n  if (!isOpen) return null\n\n  const overlay = (\n    // biome-ignore lint/a11y/noStaticElementInteractions: Overlay is intentionally clickable for modal dismissal\n    // biome-ignore lint/a11y/useKeyWithClickEvents: Escape key is handled in TpModalContent\n    <div className={clsx(styles.overlay, className)} onClick={handleClick} {...props}>\n      {children}\n    </div>\n  )\n\n  // Always render to body via portal\n  return createPortal(overlay, document.body)\n}\n","import clsx from 'clsx'\nimport styles from './TpModal.module.css'\nimport type { TpModalTitleProps } from './TpModal.types'\nimport { useTpModalContext } from './TpModalContext'\n\nexport function TpModalTitle({\n  children,\n  className,\n  as: Component = 'h2',\n  ...props\n}: TpModalTitleProps) {\n  const { titleId } = useTpModalContext()\n\n  return (\n    <Component id={titleId} className={clsx(styles.title, className)} {...props}>\n      {children}\n    </Component>\n  )\n}\n","import { useCallback, useState } from 'react'\nimport { yieldToMainThread } from '../utils/performance'\n\n/**\n * Hook that wraps useState with automatic yielding to the main thread.\n * The setter function will yield before updating state, improving INP.\n *\n * @example\n * const [isOpen, setIsOpen] = useStateWithYield(false)\n * // setIsOpen automatically yields before updating\n * <button onClick={() => setIsOpen(true)}>Open</button>\n */\nexport function useStateWithYield<T>(initialValue: T) {\n  const [state, setState] = useState(initialValue)\n\n  const setStateYielded = useCallback(async (value: T | ((prev: T) => T)) => {\n    await yieldToMainThread()\n    setState(value)\n  }, [])\n\n  return [state, setStateYielded] as const\n}\n","import { useCallback, useState } from 'react'\n\nexport interface UseTpAccordionReturn {\n  value: string[]\n  openItem: (itemValue: string) => void\n  closeItem: (itemValue: string) => void\n  toggleItem: (itemValue: string) => void\n  openAll: (itemValues: string[]) => void\n  closeAll: () => void\n}\n\n/**\n * Hook to manage accordion state\n * @param defaultValue - Initial open items (default: [])\n * @returns Object with value state and control functions\n */\nexport function useTpAccordion(defaultValue: string[] = []): UseTpAccordionReturn {\n  const [value, setValue] = useState(defaultValue)\n\n  const openItem = useCallback((itemValue: string) => {\n    setValue((prev) => (prev.includes(itemValue) ? prev : [...prev, itemValue]))\n  }, [])\n\n  const closeItem = useCallback((itemValue: string) => {\n    setValue((prev) => prev.filter((v) => v !== itemValue))\n  }, [])\n\n  const toggleItem = useCallback((itemValue: string) => {\n    setValue((prev) =>\n      prev.includes(itemValue) ? prev.filter((v) => v !== itemValue) : [...prev, itemValue]\n    )\n  }, [])\n\n  const openAll = useCallback((itemValues: string[]) => {\n    setValue(itemValues)\n  }, [])\n\n  const closeAll = useCallback(() => {\n    setValue([])\n  }, [])\n\n  return {\n    value,\n    openItem,\n    closeItem,\n    toggleItem,\n    openAll,\n    closeAll,\n  }\n}\n","import { useCallback, useState } from 'react'\n\nexport interface UseTpModalReturn {\n  isOpen: boolean\n  open: () => void\n  close: () => void\n  toggle: () => void\n}\n\n/**\n * Hook to manage modal state\n * @param defaultOpen - Initial open state (default: false)\n * @returns Object with isOpen state and control functions\n */\nexport function useTpModal(defaultOpen = false): UseTpModalReturn {\n  const [isOpen, setIsOpen] = useState(defaultOpen)\n\n  const open = useCallback(() => {\n    setIsOpen(true)\n  }, [])\n\n  const close = useCallback(() => {\n    setIsOpen(false)\n  }, [])\n\n  const toggle = useCallback(() => {\n    setIsOpen((prev) => !prev)\n  }, [])\n\n  return {\n    isOpen,\n    open,\n    close,\n    toggle,\n  }\n}\n"],"names":["useState","useRef","useEffect","useCallback","useReactId","createContext","useContext","useMemo","jsx","styles","close","focusableElements","overlay","createPortal"],"mappings":"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","x_google_ignoreList":[5]}