{"version":3,"sources":["/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-VIBREYUK.cjs","../src/components/persistent-pagination.tsx"],"names":[],"mappings":"AAAA,qFAAY;AACZ;AACE;AACF,wDAA6B;AAC7B;AACE;AACF,wDAA6B;AAC7B;AACA;ACwFQ,+CAAA;AA/BD,SAAS,oBAAA,CAAqB;AAAA,EACnC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA,EAAkB,GAAA;AAAA,EAClB,mBAAA,EAAqB;AACvB,CAAA,EAA8B;AAI5B,EAAA,uBACE,8BAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,kCAAA;AAAA,QACT,qCAAA;AAAA,QACA,kCAAA;AAAA,QACA,UAAA,GAAa,qBAAA;AAAA,QACb;AAAA,MACF,CAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,UAAA,EAAY,gBAAA,EAAkB,CAAA;AAAA,QACvC,kBAAA,EAAoB,CAAA,EAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AAGb,MAAA;AACC,QAAA;AAA0D,UAAA;AACJ,UAAA;AAAY,UAAA;AAAK,UAAA;AACvE,QAAA;AAIF,wBAAA;AAAC,UAAA;AAAA,UAAA;AACe,YAAA;AACP,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAEZ,YAAA;AAAA,UAAA;AACH,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;AAKgB;AACR,EAAA;AAEkB,EAAA;AACT,IAAA;AACG,IAAA;AACK,IAAA;AACD,IAAA;AACtB,EAAA;AAE0B,EAAA;AACT,IAAA;AACU,MAAA;AACzB,IAAA;AACe,IAAA;AACjB,EAAA;AAEO,EAAA;AACL,IAAA;AACA,IAAA;AACA,IAAA;AACF,EAAA;AACF;AAcgB;AACd,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AACmC;AAGhB,EAAA;AACO,EAAA;AACC,EAAA;AAErB,EAAA;AACgB,EAAA;AAGpB,EAAA;AAAC,IAAA;AAAA,IAAA;AACY,MAAA;AACT,QAAA;AACC,QAAA;AACD,QAAA;AACF,MAAA;AACO,MAAA;AACI,QAAA;AACW,QAAA;AACtB,MAAA;AACK,MAAA;AACM,MAAA;AACA,MAAA;AACG,MAAA;AACI,MAAA;AAGhB,MAAA;AAAc,QAAA;AAShB,wBAAA;AAAC,UAAA;AAAA,UAAA;AACe,YAAA;AACP,YAAA;AACL,cAAA;AACF,YAAA;AACa,YAAA;AAKb,YAAA;AAAC,cAAA;AAAA,cAAA;AACc,gBAAA;AACD,gBAAA;AACZ,gBAAA;AAAiD,gBAAA;AAAA,cAAA;AACnD,YAAA;AAAA,UAAA;AACF,QAAA;AAAA,MAAA;AAAA,IAAA;AAGF,EAAA;AAEJ;ADvF6B;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/openframe-oss-lib/openframe-oss-lib/openframe-frontend-core/dist/chunk-VIBREYUK.cjs","sourcesContent":[null,"'use client';\n\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn';\nimport { UnifiedPagination } from './unified-pagination';\n\ninterface PersistentPaginationProps {\n  /**\n   * Whether pagination is currently in a loading state\n   */\n  isLoading: boolean;\n  /**\n   * The pagination component\n   */\n  children: ReactNode;\n  /**\n   * Current page number\n   */\n  currentPage: number;\n  /**\n   * Total number of pages\n   */\n  totalPages: number;\n  /**\n   * Additional CSS classes\n   */\n  className?: string;\n  /**\n   * Disabled opacity (0-1)\n   */\n  disabledOpacity?: number;\n  /**\n   * Transition duration in milliseconds\n   */\n  transitionDuration?: number;\n  /**\n   * Whether to show loading state in pagination\n   */\n  showLoadingState?: boolean;\n}\n\n/**\n * PersistentPagination\n *\n * A wrapper component that keeps pagination visible during loading states\n * but provides visual feedback that it's temporarily disabled.\n *\n * Features:\n * - Maintains pagination visibility during content loading\n * - Disables interaction but preserves layout\n * - Shows current page context even when loading\n * - Provides accessibility support for loading states\n * - Smooth transitions between enabled/disabled states\n *\n * Usage:\n * ```tsx\n * <PersistentPagination\n *   isLoading={isLoadingVendors}\n *   currentPage={currentPage}\n *   totalPages={totalPages}\n * >\n *   <Pagination currentPage={currentPage} totalPages={totalPages} />\n * </PersistentPagination>\n * ```\n */\nexport function PersistentPagination({\n  isLoading,\n  children,\n  currentPage,\n  totalPages,\n  className,\n  disabledOpacity = 0.5,\n  transitionDuration = 300,\n}: PersistentPaginationProps) {\n  // ALWAYS show pagination for predictable layout - just gray it out when not needed\n  // Removed condition that hides pagination completely\n\n  return (\n    <div\n      className={cn(\n        'relative transition-all ease-in-out',\n        'flex items-center justify-center',\n        isLoading && 'pointer-events-none',\n        className,\n      )}\n      style={{\n        opacity: isLoading ? disabledOpacity : 1,\n        transitionDuration: `${transitionDuration}ms`,\n      }}\n      role=\"navigation\"\n      aria-label=\"Pagination\"\n      aria-busy={isLoading}\n      data-loading={isLoading}\n    >\n      {/* Loading state announcement for screen readers */}\n      {isLoading && (\n        <div className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n          Pagination temporarily disabled while loading page {currentPage} of {totalPages}\n        </div>\n      )}\n\n      {/* Pagination controls with disabled state */}\n      <div\n        className={cn('relative transition-all ease-in-out', isLoading && 'cursor-not-allowed')}\n        style={{\n          transitionDuration: `${transitionDuration}ms`,\n        }}\n        aria-hidden={isLoading}\n      >\n        {children}\n      </div>\n\n      {/* REMOVED: Loading overlay - only card skeletons should show during loading */}\n    </div>\n  );\n}\n\n/**\n * Hook for managing pagination loading states\n */\nexport function usePaginationLoading(isLoading: boolean, currentPage: number, totalPages: number) {\n  const shouldShowPagination = totalPages > 1 || isLoading;\n\n  const paginationProps = {\n    'aria-busy': isLoading,\n    'data-loading': isLoading,\n    'data-current-page': currentPage,\n    'data-total-pages': totalPages,\n  };\n\n  const getLoadingMessage = () => {\n    if (isLoading) {\n      return `Loading page ${currentPage} of ${totalPages}`;\n    }\n    return `Page ${currentPage} of ${totalPages}`;\n  };\n\n  return {\n    shouldShowPagination,\n    paginationProps,\n    getLoadingMessage,\n  };\n}\n\n/**\n * Enhanced pagination component that includes loading states\n */\ninterface PersistentPaginationWrapperProps {\n  isLoading: boolean;\n  currentPage: number;\n  totalPages: number;\n  onPageChange?: (page: number) => void;\n  className?: string;\n  variant?: 'vendor' | 'blog';\n}\n\nexport function PersistentPaginationWrapper({\n  isLoading,\n  currentPage,\n  totalPages,\n  onPageChange,\n  className,\n}: PersistentPaginationWrapperProps) {\n  // ALWAYS show pagination for predictable layout\n  // For no results (totalPages = 0), show grayed out pagination\n  const hasResults = totalPages > 0;\n  const displayTotalPages = hasResults ? totalPages : 1;\n  const displayCurrentPage = hasResults ? currentPage : 1;\n  // Only disable during loading, but still show when no results (just grayed out)\n  const isPaginationDisabled = isLoading;\n  const hasNoResults = !hasResults && !isLoading;\n\n  return (\n    <div\n      className={cn(\n        'relative flex items-center justify-center transition-all ease-in-out',\n        (isPaginationDisabled || hasNoResults) && 'pointer-events-none',\n        className,\n      )}\n      style={{\n        opacity: isPaginationDisabled ? 0.3 : hasNoResults ? 0.5 : 1,\n        transitionDuration: '300ms',\n      }}\n      role=\"navigation\"\n      aria-label=\"Pagination\"\n      aria-busy={isLoading}\n      data-loading={isLoading}\n      data-has-results={hasResults}\n    >\n      {/* Loading/no results state announcement for screen readers */}\n      {(isLoading || !hasResults) && (\n        <div className=\"sr-only\" role=\"status\" aria-live=\"polite\">\n          {isLoading\n            ? `Pagination temporarily disabled while loading page ${displayCurrentPage} of ${displayTotalPages}`\n            : `No results available - pagination disabled`}\n        </div>\n      )}\n\n      {/* Pagination controls with disabled state */}\n      <div\n        className={cn('relative transition-all ease-in-out', isPaginationDisabled && 'cursor-not-allowed')}\n        style={{\n          transitionDuration: '300ms',\n        }}\n        aria-hidden={isPaginationDisabled}\n      >\n        {/* UnifiedPagination directly — Pagination and BlogPagination in\n            multi-platform-hub are both thin wrappers around it, so the wrapper\n            never has to be handed down from the consuming app. */}\n        <UnifiedPagination\n          currentPage={displayCurrentPage}\n          totalPages={displayTotalPages}\n          onPageChange={hasResults ? onPageChange : () => {}} // Provide empty function instead of undefined\n        />\n      </div>\n\n      {/* REMOVED: Loading overlays - only card skeletons should show during loading */}\n    </div>\n  );\n}\n"]}