/* Copyright (C) 2023-2026 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ import { Skeleton } from '@/components/ui/skeleton' import { DEFAULT_VIEW_MODE, VIEW_MODES, type ViewMode } from '../constants' const CARD_SKELETONS = [ 'card-1', 'card-2', 'card-3', 'card-4', 'card-5', 'card-6', 'card-7', 'card-8', 'card-9', ] const PRICE_COLUMNS = ['input', 'cached', 'output', 'groups'] const TABLE_ROWS = [ 'row-1', 'row-2', 'row-3', 'row-4', 'row-5', 'row-6', 'row-7', 'row-8', 'row-9', 'row-10', ] const PAGINATION_ITEMS = ['previous', 'page-1', 'page-2', 'next'] export interface LoadingSkeletonProps { viewMode?: ViewMode } export function LoadingSkeleton(props: LoadingSkeletonProps) { const viewMode = props.viewMode ?? DEFAULT_VIEW_MODE return (
{viewMode === VIEW_MODES.TABLE ? ( ) : ( )}
) } function CardContentSkeleton() { return (
{CARD_SKELETONS.map((key) => (
))}
) } function FilterBarSkeleton() { return (
) } function TableContentSkeleton() { return (
{PRICE_COLUMNS.map((column) => ( ))}
{TABLE_ROWS.map((row) => (
{PRICE_COLUMNS.map((column) => ( ))}
))}
{PAGINATION_ITEMS.map((item) => ( ))}
) }