Jake Shore 96e52666c5 MCPEngine full sync — studio scaffold, factory v2, server updates, state.json — 2026-02-12
=== NEW ===
- studio/ — MCPEngine Studio scaffold (Next.js monorepo, build plan)
- docs/FACTORY-V2.md — Factory v2 architecture doc
- docs/CALENDLY_MCP_BUILD_SUMMARY.md — Calendly MCP build report

=== UPDATED SERVERS ===
- fieldedge: Added jobs-tools, UI build script, main entry update
- lightspeed: Updated main + server entry points
- squarespace: Added collection-browser + page-manager apps
- toast: Added main + server entry points

=== INFRA ===
- infra/command-center/state.json — Updated pipeline state
- infra/command-center/FACTORY-V2.md — Factory v2 operator playbook
2026-02-12 17:58:33 -05:00

44 lines
902 B
TypeScript

import React from 'react';
import { clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';
export interface SkeletonProps {
width?: string | number;
height?: string | number;
className?: string;
rounded?: 'sm' | 'md' | 'lg' | 'full';
}
const roundedMap: Record<string, string> = {
sm: 'rounded-sm',
md: 'rounded-md',
lg: 'rounded-lg',
full: 'rounded-full',
};
export const Skeleton: React.FC<SkeletonProps> = ({
width,
height,
className,
rounded = 'lg',
}) => {
return (
<div
className={twMerge(
clsx(
'animate-pulse bg-gray-700/50',
roundedMap[rounded],
),
className,
)}
style={{
width: typeof width === 'number' ? `${width}px` : width,
height: typeof height === 'number' ? `${height}px` : height,
}}
aria-hidden="true"
/>
);
};
Skeleton.displayName = 'Skeleton';