import { Component, type CSSProperties, type ReactNode } from 'react'; import type { FreeAppStore } from '../index.js'; export interface SpinnerProps { size?: number; color?: string; } export declare function Spinner({ size, color }: SpinnerProps): import("react/jsx-runtime").JSX.Element; export interface BadgeProps { children: ReactNode; variant?: 'default' | 'accent' | 'success' | 'warning' | 'danger'; style?: CSSProperties; } export declare function Badge({ children, variant, style: extraStyle }: BadgeProps): import("react/jsx-runtime").JSX.Element; export interface CardProps { children: ReactNode; onClick?: () => void; padding?: string; style?: CSSProperties; } export declare function Card({ children, onClick, padding, style: extraStyle }: CardProps): import("react/jsx-runtime").JSX.Element; export interface TabsProps { tabs: Array<{ key: string; label: string; }>; active: string; onChange: (key: string) => void; style?: CSSProperties; } export declare function Tabs({ tabs, active, onChange, style: extraStyle }: TabsProps): import("react/jsx-runtime").JSX.Element; export interface ModalProps { open: boolean; onClose: () => void; children: ReactNode; title?: string; maxWidth?: number; } export declare function Modal({ open, onClose, children, title, maxWidth }: ModalProps): import("react/jsx-runtime").JSX.Element | null; export interface ConfirmDialogProps { open: boolean; onConfirm: () => void; onCancel: () => void; title: string; message: string; confirmLabel?: string; variant?: 'danger' | 'default'; } export declare function ConfirmDialog({ open, onConfirm, onCancel, title, message, confirmLabel, variant, }: ConfirmDialogProps): import("react/jsx-runtime").JSX.Element; export interface EmptyStateProps { icon?: ReactNode; title?: string; message: string; action?: ReactNode; } export declare function EmptyState({ icon, title, message, action }: EmptyStateProps): import("react/jsx-runtime").JSX.Element; export interface ProgressBarProps { value: number; max?: number; color?: string; height?: number; label?: string; } export declare function ProgressBar({ value, max, color, height, label, }: ProgressBarProps): import("react/jsx-runtime").JSX.Element; export interface SearchInputProps { value: string; onChange: (value: string) => void; placeholder?: string; style?: CSSProperties; } export declare function SearchInput({ value, onChange, placeholder, style: extraStyle, }: SearchInputProps): import("react/jsx-runtime").JSX.Element; export interface ListRowProps { icon?: ReactNode; title: string; subtitle?: string; trailing?: ReactNode; onClick?: () => void; } export declare function ListRow({ icon, title, subtitle, trailing, onClick }: ListRowProps): import("react/jsx-runtime").JSX.Element; export interface ErrorBoundaryProps { children: ReactNode; fallback?: ReactNode; } interface ErrorBoundaryState { error: Error | null; } export declare class ErrorBoundary extends Component { state: ErrorBoundaryState; static getDerivedStateFromError(error: Error): ErrorBoundaryState; render(): string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable | Promise> | Iterable | null | undefined> | null | undefined; } export interface KeyPromptProps { app: FreeAppStore; provider: string; providerName?: string; message?: string; } export interface BuildInfoProps { version?: string; commit?: string; buildDate?: string; extra?: Record; } /** * Tiny debug badge showing build version, commit SHA, and build date. * Hidden by default, revealed by tapping 5 times (mobile) or clicking * while holding Alt/Option (desktop). Sticks to the bottom-right corner. * * Reads from Vite env vars automatically if no props are passed: * VITE_APP_VERSION, VITE_COMMIT_SHA, VITE_BUILD_DATE * * Add to deploy.yml: * env: * VITE_APP_VERSION: ${{ github.event.repository.name }}@${{ github.run_number }} * VITE_COMMIT_SHA: ${{ github.sha }} * VITE_BUILD_DATE: ${{ github.event.head_commit.timestamp }} */ export declare function BuildInfo({ version, commit, buildDate, extra }: BuildInfoProps): import("react/jsx-runtime").JSX.Element | null; export interface FooterProps { /** Override the default "Part of FreeAppStore" text. */ text?: string; } /** * Fixed bottom footer for PWA standalone mode. Shows "Part of FreeAppStore" * branding and creates safe-area padding so app content doesn't sit in the * iPhone home indicator / Siri zone. * * **Only renders when installed to home screen** (standalone display mode). * Hidden in regular browser tabs where the browser already provides its own * bottom chrome. This prevents accidental Siri activations on iPhones when * users tap near the bottom of the screen. * * The Shell component includes this automatically. Use Footer directly only * if you're building a custom layout without Shell. */ export declare function Footer({ text }: FooterProps): import("react/jsx-runtime").JSX.Element | null; /** * Returns true when the app is running in PWA standalone mode (installed * to home screen). Use this to add bottom padding to your content area * so it doesn't sit behind the Footer. */ export declare function useStandalone(): boolean; export declare function KeyPrompt({ app, provider, providerName, message }: KeyPromptProps): import("react/jsx-runtime").JSX.Element; export {}; //# sourceMappingURL=components.d.ts.map