make quick preset hidden on mobile

This commit is contained in:
Aman Varshney
2025-05-13 06:59:31 +05:30
parent 8b14dc4509
commit b38a33115a

View File

@@ -19,11 +19,8 @@ import { stackParsers, stackQueryStatesOptions } from "@/lib/stack-url-state";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { import {
Check, Check,
Circle,
CircleCheck,
ClipboardCopy, ClipboardCopy,
Github, Github,
HelpCircle,
InfoIcon, InfoIcon,
RefreshCw, RefreshCw,
Settings, Settings,
@@ -855,12 +852,7 @@ const StackBuilder = () => {
const [projectNameError, setProjectNameError] = useState<string | undefined>( const [projectNameError, setProjectNameError] = useState<string | undefined>(
undefined, undefined,
); );
const [showPresets, setShowPresets] = useState(false);
const [showHelp, setShowHelp] = useState(false);
const [lastSavedStack, setLastSavedStack] = useState<StackState | null>(null); const [lastSavedStack, setLastSavedStack] = useState<StackState | null>(null);
// const [activeCategory, setActiveCategory] = useState<string | null>(
// CATEGORY_ORDER[0],
// );
const [, setLastChanges] = useState< const [, setLastChanges] = useState<
Array<{ category: string; message: string }> Array<{ category: string; message: string }>
>([]); >([]);
@@ -913,8 +905,6 @@ const StackBuilder = () => {
} }
} }
setStack(randomStack as StackState); setStack(randomStack as StackState);
setShowHelp(false);
setShowPresets(false);
contentRef.current?.scrollTo(0, 0); contentRef.current?.scrollTo(0, 0);
toast.success("Random stack generated!"); toast.success("Random stack generated!");
}; };
@@ -1477,8 +1467,6 @@ const StackBuilder = () => {
const resetStack = () => { const resetStack = () => {
setStack(DEFAULT_STACK); setStack(DEFAULT_STACK);
setShowHelp(false);
setShowPresets(false);
contentRef.current?.scrollTo(0, 0); contentRef.current?.scrollTo(0, 0);
}; };
@@ -1491,8 +1479,6 @@ const StackBuilder = () => {
const loadSavedStack = () => { const loadSavedStack = () => {
if (lastSavedStack) { if (lastSavedStack) {
setStack(lastSavedStack); setStack(lastSavedStack);
setShowHelp(false);
setShowPresets(false);
contentRef.current?.scrollTo(0, 0); contentRef.current?.scrollTo(0, 0);
toast.success("Saved configuration loaded"); toast.success("Saved configuration loaded");
} }
@@ -1504,8 +1490,6 @@ const StackBuilder = () => {
); );
if (preset) { if (preset) {
setStack(preset.stack); setStack(preset.stack);
setShowPresets(false);
setShowHelp(false);
contentRef.current?.scrollTo(0, 0); contentRef.current?.scrollTo(0, 0);
toast.success(`Applied preset: ${preset.name}`); toast.success(`Applied preset: ${preset.name}`);
} }
@@ -1532,26 +1516,6 @@ const StackBuilder = () => {
Create Better T Stack Create Better T Stack
</div> </div>
<div className="ml-auto flex space-x-2"> <div className="ml-auto flex space-x-2">
<button
type="button"
onClick={() => setShowHelp((prev) => !prev)}
className={cn(
"text-muted-foreground transition-colors hover:text-foreground",
)}
title="Help"
>
<HelpCircle className="h-4 w-4" />
</button>
<button
type="button"
onClick={() => setShowPresets((prev) => !prev)}
className={cn(
"text-muted-foreground transition-colors hover:text-foreground",
)}
title="Presets"
>
<Star className="h-4 w-4" />
</button>
<Link <Link
href={"https://github.com/AmanVarshney01/create-better-t-stack"} href={"https://github.com/AmanVarshney01/create-better-t-stack"}
target="_blank" target="_blank"
@@ -1567,68 +1531,6 @@ const StackBuilder = () => {
</div> </div>
</div> </div>
{showHelp && (
<div className="flex-shrink-0 border-border border-b bg-background p-3 text-foreground sm:p-4">
<h3 className="mb-2 font-medium text-sm">
How to Use Stack Architect
</h3>
<ul className="list-disc space-y-1 pl-5 text-xs">
<li>
Use the sidebar to navigate between configuration sections.
</li>
<li>Select your preferred technologies in the main area.</li>
<li>
Some selections may disable or automatically change other
options based on compatibility (check notes{" "}
<InfoIcon className="inline h-3 w-3" /> within each section!).
</li>
<li>
The command below updates automatically based on your
selections.
</li>
<li>
Click the copy button (
<ClipboardCopy className="inline h-3 w-3" />) next to the
command to copy it.
</li>
<li>
Use presets (<Star className="inline h-3 w-3" />) for quick
setup or reset (<RefreshCw className="inline h-3 w-3" />) to
defaults.
</li>
<li>
Save (<Star className="inline h-3 w-3" />) your preferences to
load (<Settings className="inline h-3 w-3" />) them later.
</li>
</ul>
</div>
)}
{showPresets && (
<div className="flex-shrink-0 border-border border-b bg-background p-3 sm:p-4">
<h3 className="mb-2 font-medium text-foreground text-sm">
Quick Start Presets
</h3>
<div className="grid grid-cols-1 gap-2 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4">
{PRESET_TEMPLATES.map((preset) => (
<button
type="button"
key={preset.id}
onClick={() => applyPreset(preset.id)}
className="rounded border border-border bg-background p-2 text-left transition-colors hover:bg-muted"
>
<div className="font-medium text-foreground text-sm">
{preset.name}
</div>
<div className="text-muted-foreground text-xs">
{preset.description}
</div>
</button>
))}
</div>
</div>
)}
<div className="grid grid-cols-1 overflow-hidden sm:grid-cols-[auto_1fr]"> <div className="grid grid-cols-1 overflow-hidden sm:grid-cols-[auto_1fr]">
<div className="flex h-full max-w-full flex-col justify-between border-border border-r p-4 sm:max-w-3xs md:max-w-xs lg:max-w-sm"> <div className="flex h-full max-w-full flex-col justify-between border-border border-r p-4 sm:max-w-3xs md:max-w-xs lg:max-w-sm">
<div className="flex flex-col space-y-4"> <div className="flex flex-col space-y-4">
@@ -1747,7 +1649,7 @@ const StackBuilder = () => {
<div className="flex flex-wrap gap-1.5">{selectedBadges}</div> <div className="flex flex-wrap gap-1.5">{selectedBadges}</div>
</div> </div>
</div> </div>
<div className="mt-auto border-border border-t pt-4"> <div className="mt-auto hidden border-border border-t pt-4 md:flex md:flex-col">
<h3 className="mb-2 font-medium text-foreground text-sm"> <h3 className="mb-2 font-medium text-foreground text-sm">
Quick Presets Quick Presets
</h3> </h3>
@@ -1847,7 +1749,7 @@ const StackBuilder = () => {
<TooltipTrigger asChild> <TooltipTrigger asChild>
<motion.div <motion.div
className={cn( className={cn(
"relative rounded border p-3 transition-all", "relative rounded border p-2 transition-all",
isDisabled && !isSelected isDisabled && !isSelected
? "cursor-not-allowed opacity-60" ? "cursor-not-allowed opacity-60"
: "cursor-pointer", : "cursor-pointer",
@@ -1874,20 +1776,13 @@ const StackBuilder = () => {
} }
> >
<div className="flex items-start"> <div className="flex items-start">
<div className="mt-1 mr-3 flex-shrink-0">
{isSelected ? (
<CircleCheck className="h-5 w-5 text-primary" />
) : (
<Circle className="h-5 w-5 text-muted-foreground" />
)}
</div>
<div className="flex-grow"> <div className="flex-grow">
<div className="flex items-center justify-between"> <div className="flex items-center justify-between">
<div className="flex items-center"> <div className="flex items-center">
<TechIcon <TechIcon
icon={tech.icon} icon={tech.icon}
name={tech.name} name={tech.name}
className="mr-2 h-5 w-5" className="mr-1.5 h-4 w-4"
/> />
<span <span
className={cn( className={cn(
@@ -1904,7 +1799,7 @@ const StackBuilder = () => {
<InfoIcon className="ml-2 h-4 w-4 flex-shrink-0 text-muted-foreground" /> <InfoIcon className="ml-2 h-4 w-4 flex-shrink-0 text-muted-foreground" />
)} )}
</div> </div>
<p className="mt-1 text-muted-foreground text-xs"> <p className="mt-0.5 text-muted-foreground text-xs">
{tech.description} {tech.description}
</p> </p>
</div> </div>