import json
import os
file_path = os.path.expanduser('~/projects/web-dev-swarm/datasets/frontend/raw/frontend_gold_standard.jsonl')
data = [
{
"instruction": "Create a reusable Button component in React using Tailwind CSS. It should support different variants: 'primary', 'secondary', and 'outline', as well as different sizes: 'sm', 'md', and 'lg'.",
"input": "",
"output": "```tsx\nimport React from 'react';\n\ntype ButtonVariant = 'primary' | 'secondary' | 'outline';\ntype ButtonSize = 'sm' | 'md' | 'lg';\n\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n}\n\nconst Button: React.FC<ButtonProps> = ({ \n variant = 'primary', \n size = 'md', \n className = '', \n ...props \n}) => {\n const baseStyles = 'inline-flex items-center justify-center rounded-md font-medium transition-colors focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:pointer-events-none';\n \n const variants = {\n primary: 'bg-blue-600 text-white hover:bg-blue-700 focus:ring-blue-500',\n secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300 focus:ring-gray-500',\n outline: 'border-2 border-blue-600 text-blue-600 hover:bg-blue-50 focus:ring-blue-500',\n };\n\n const sizes = {\n sm: 'px-3 py-1.5 text-sm',\n md: 'px-4 py-2 text-base',\n lg: 'px-6 py-3 text-lg',\n };\n\n const variantClass = variants[variant];\n const sizeClass = sizes[size];\n\n return (\n <button \n className={`${baseStyles} ${variantClass} ${sizeClass} ${className}`} \n {...props} \n />\n );\n};\n\nexport default Button;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "low"}
},
{
"instruction": "Create a controlled Input component in React with Tailwind CSS. It should include a label, an optional error message, and support for different input types (text, email, password).",
"input": "",
"output": "```tsx\nimport React from 'react';\n\ninterface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label: string;\n error?: string;\n}\n\nconst Input: React.FC<InputProps> = ({ label, error, className = '', ...props }) => {\n return (\n <div className=\"flex flex-col gap-1.5 w-full\">\n <label className=\"text-sm font-medium text-gray-700\">\n {label}\n </label>\n <input\n className={`px-3 py-2 border rounded-md shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 sm:text-sm ${error ? 'border-red-500 focus:ring-red-500' : 'border-gray-300 focus:border-blue-500'} ${className}`}\n {...props}\n />\n {error && <p className=\"text-xs text-red-500\">{error}</p>}\n </div>\n );\n};\n\nexport default Input;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "low"}
},
{
"instruction": "Create a Card component in React using Tailwind CSS. The card should display an image, a title, a description, and a 'Read More' button.",
"input": "",
"output": "```tsx\nimport React from 'react';\n\ninterface CardProps {\n image: string;\n title: string;\n description: string;\n onReadMore?: () => void;\n}\n\nconst Card: React.FC<CardProps> = ({ image, title, description, onReadMore }) => {\n return (\n <div className=\"max-w-sm rounded overflow-hidden shadow-lg bg-white\">\n <img className=\"w-full h-48 object-cover\" src={image} alt={title} />\n <div className=\"px-6 py-4\">\n <div className=\"font-bold text-xl mb-2 text-gray-800\">{title}</div>\n <p className=\"text-gray-700 text-base\">\n {description}\n </p>\n </div>\n <div className=\"px-6 pt-4 pb-6\">\n <button \n onClick={onReadMore}\n className=\"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded\"\n >\n Read More\n </button>\n </div>\n </div>\n );\n};\n\nexport default Card;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "medium"}
},
{
"instruction": "Create a Badge component in React with Tailwind CSS that can accept different colors (success, warning, error, info) via props.",
"input": "",
"output": "```tsx\nimport React from 'react';\n\ntype BadgeColor = 'success' | 'warning' | 'error' | 'info';\n\ninterface BadgeProps {\n color: BadgeColor;\n children: React.ReactNode;\n}\n\nconst Badge: React.FC<BadgeProps> = ({ color, children }) => {\n const colors = {\n success: 'bg-green-100 text-green-800',\n warning: 'bg-yellow-100 text-yellow-800',\n error: 'bg-red-100 text-red-800',\n info: 'bg-blue-100 text-blue-800',\n };\n\n return (\n <span className={`px-2.5 py-0.5 rounded-full text-xs font-medium ${colors[color]}`}>\n {children}\n </span>\n );\n};\n\nexport default Badge;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "low"}
},
{
"instruction": "Create a Modal component in React using Tailwind CSS. It should include a backdrop, a close button, and support for custom content.",
"input": "",
"output": "```tsx\nimport React, { useEffect } from 'react';\n\ninterface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title: string;\n children: React.ReactNode;\n}\n\nconst Modal: React.FC<ModalProps> = ({ isOpen, onClose, title, children }) => {\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'unset';\n }\n return () => { document.body.style.overflow = 'unset'; };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center p-4\">\n <div \n className=\"fixed inset-0 bg-black bg-opacity-50 transition-opacity\" \n onClick={onClose} \n />\n <div className=\"relative bg-white rounded-lg shadow-xl max-w-lg w-full p-6 z-10\">\n <div className=\"flex justify-between items-center mb-4\">\n <h3 className=\"text-lg font-semibold text-gray-900\">{title}</h3>\n <button \n onClick={onClose} \n className=\"text-gray-400 hover:text-gray-600 transition-colors\"\n >\n <svg className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <div className=\"mt-2\">\n {children}\n </div>\n </div>\n </div>\n );\n};\n\nexport default Modal;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "high"}
},
{
"instruction": "Create an Avatar component in React with Tailwind CSS. It should display an image if provided, otherwise fallback to the user's initials.",
"input": "",
"output": "```tsx\nimport React from 'react';\n\ninterface AvatarProps {\n src?: string;\n name: string;\n size?: 'sm' | 'md' | 'lg';\n}\n\nconst Avatar: React.FC<AvatarProps> = ({ src, name, size = 'md' }) => {\n const sizeClasses = {\n sm: 'w-8 h-8 text-xs',\n md: 'w-12 h-12 text-base',\n lg: 'w-16 h-16 text-xl',\n };\n\n const getInitials = (name: string) => {\n return name.split(' ').map(n => n[0]).join('').toUpperCase().slice(0, 2);\n };\n\n return (\n <div className={`${sizeClasses[size]} rounded-full overflow-hidden bg-gray-200 flex items-center justify-center text-gray-600 font-medium`}>\n {src ? (\n <img src={src} alt={name} className=\"w-full h-full object-cover\" />\n ) : (\n <span>{getInitials(name)}</span>\n )}\n </div>\n );\n};\n\nexport default Avatar;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "medium"}
},
{
"instruction": "Create a custom Checkbox component in React using Tailwind CSS. It should be accessible and support a checked state.",
"input": "",
"output": "```tsx\nimport React from 'react';\n\ninterface CheckboxProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label: string;\n}\n\nconst Checkbox: React.FC<CheckboxProps> = ({ label, className = '', ...props }) => {\n return (\n <label className=\"flex items-center gap-2 cursor-pointer select-none group\">\n <div className=\"relative flex items-center\">\n <input\n type=\"checkbox\"\n className=\"sr-only\"\n {...props}\n />\n <div className={`w-5 h-5 border-2 rounded transition-colors flex items-center justify-center ${props.checked ? 'bg-blue-600 border-blue-600' : 'border-gray-300 group-hover:border-blue-400'}`}>\n {props.checked && (\n <svg className=\"w-3.5 h-3.5 text-white\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={3} d=\"M5 13l4 4L19 7\" />\n </svg>\n )}\n </div>\n </div>\n <span className=\"text-sm text-gray-700\">{label}</span>\n </label>\n );\n};\n\nexport default Checkbox;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "low"}
},
{
"instruction": "Create an Accordion component in React using Tailwind CSS. It should allow multiple items to be expanded or only one at a time (controlled).",
"input": "",
"output": "```tsx\nimport React, { useState } from 'react';\n\ninterface AccordionItem {\n title: string;\n content: React.ReactNode;\n}\n\ninterface AccordionProps {\n items: AccordionItem[];\n allowMultiple?: boolean;\n}\n\nconst Accordion: React.FC<AccordionProps> = ({ items, allowMultiple = false }) => {\n const [expandedIndices, setExpandedIndices] = useState<number[]>([]);\n\n const toggleItem = (index: number) => {\n if (allowMultiple) {\n setExpandedIndices(prev => \n prev.includes(index) ? prev.filter(i => i !== index) : [...prev, index]\n );\n } else {\n setExpandedIndices(prev => (prev.includes(index) ? [] : [index]));\n }\n };\n\n return (\n <div className=\"border border-gray-200 rounded-lg divide-y divide-gray-200\">\n {items.map((item, index) => (\n <div key={index}>\n <button\n className=\"w-full flex justify-between items-center px-4 py-3 text-left font-medium text-gray-700 hover:bg-gray-50 transition-colors\"\n onClick={() => toggleItem(index)}\n >\n {item.title}\n <svg \n className={`w-5 h-5 transition-transform ${expandedIndices.includes(index) ? 'rotate-180' : ''}`}\n fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n {expandedIndices.includes(index) && (\n <div className=\"px-4 py-3 text-gray-600 bg-gray-50\">\n {item.content}\n </div>\n )}\n </div>\n ))}\n </div>\n );\n};\n\nexport default Accordion;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "medium"}
},
{
"instruction": "Create a Multi-select dropdown component in React using Tailwind CSS. It should allow users to select multiple options from a list.",
"input": "",
"output": "```tsx\nimport React, { useState, useRef, useEffect } from 'react';\n\ninterface Option {\n value: string;\n label: string;\n}\n\ninterface MultiSelectProps {\n options: Option[];\n selected: string[];\n onChange: (selected: string[]) => void;\n placeholder?: string;\n}\n\nconst MultiSelect: React.FC<MultiSelectProps> = ({ options, selected, onChange, placeholder = 'Select options...' }) => {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n const toggleOption = (value: string) => {\n const newSelected = selected.includes(value)\n ? selected.filter(v => v !== value)\n : [...selected, value];\n onChange(newSelected);\n };\n\n return (\n <div className=\"relative w-full\" ref={containerRef}>\n <div \n className=\"min-h-[42px] p-1 flex flex-wrap gap-1 border rounded-md bg-white cursor-pointer items-center\"\n onClick={() => setIsOpen(!isOpen)}\n >\n {selected.length === 0 && <span className=\"text-gray-400 px-2\">{placeholder}</span>}\n {selected.map(val => {\n const option = options.find(o => o.value === val);\n return (\n <span key={val} className=\"flex items-center gap-1 bg-blue-100 text-blue-700 px-2 py-0.5 rounded text-sm\">\n {option?.label}\n <button \n onClick={(e) => { e.stopPropagation(); toggleOption(val); }}\n className=\"hover:text-blue-900\"\n >\n ×\n </button>\n </span\n );\n })}\n </div>\n {isOpen && (\n <div className=\"absolute z-10 w-full mt-1 bg-white border rounded-md shadow-lg max-h-60 overflow-auto\">\n {options.map(option => (\n <div\n key={option.value}\n className=\"px-4 py-2 hover:bg-blue-50 cursor-pointer flex items-center justify-between\"\n onClick={() => toggleOption(option.value)}\n >\n <span className={selected.includes(option.value) ? 'font-bold text-blue-600' : ''}>\n {option.label}\n </span>\n {selected.includes(option.value) && (\n <svg className=\"w-4 h-4 text-blue-600\" fill=\"currentColor\" viewBox=\"0 0 20 20\">\n <path fillRule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clipRule=\"evenodd\" />\n </svg>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default MultiSelect;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "high"}
},
{
"instruction": "Create a Progress Bar component in React using Tailwind CSS. It should accept a percentage value and show a label.",
"input": "",
"output": "```tsx\nimport React from 'react';\n\ninterface ProgressBarProps {\n progress: number;\n label?: string;\n color?: string;\n}\n\nconst ProgressBar: React.FC<ProgressBarProps> = ({ progress, label, color = 'bg-blue-600' }) => {\n const clampedProgress = Math.min(Math.max(progress, 0), 100);\n\n return (\n <div className=\"w-full\">\n {label && <div className=\"flex justify-between mb-1 text-sm font-medium text-gray-700\">\n <span>{label}</span>\n <span>{clampedProgress}%</span>\n </div>}\n <div className=\"w-full bg-gray-200 rounded-full h-2.5\">\n <div \n className={`${color} h-2.5 rounded-full transition-all duration-300 ease-out`} \n style={{ width: `${clampedProgress}%` }}\n />\n </div>\n </div>\n );\n};\n\nexport default ProgressBar;\n```",
"metadata": {"category": "component_gen", "framework": "react", "complexity": "medium"}
}
]
with open(file_path, 'a') as f:\n for entry in data:\n f.write(json.dumps(entry) + '\\n')\n