mirror of
https://github.com/evroon/bracket.git
synced 2026-07-31 02:10:50 -04:00
This PR migrates formatting in `frontend/` from Prettier to `oxfmt`,
including script wiring and dependency cleanup. It removes the Prettier
plugin/config path so formatting is handled by a single tool.
- **Script migration**
- Renamed/rewired formatting scripts in `frontend/package.json`:
- `prettier:check` → `format:check` (`oxfmt --check .`)
- `prettier:write` → `format:write` (`oxfmt .`)
- Updated dependent scripts:
- `test` now runs `pnpm run format:write`
- `openapi-ts` now runs `pnpm run format:write` after generation
- **Dependency cleanup**
- Removed `prettier-plugin-organize-imports` from `dependencies`
- Removed `prettier` from `devDependencies`
- Added `oxfmt` (latest stable at update time)
- **Config removal**
- Deleted `frontend/.prettierrc.js` (no longer used after migration)
- **Lockfile alignment**
- Updated `frontend/pnpm-lock.yaml` to reflect the dependency and script
ecosystem change
```json
{
"scripts": {
"format:check": "oxfmt --check .",
"format:write": "oxfmt .",
"openapi-ts": "openapi-ts && pnpm run format:write",
"test": "tsc && pnpm run format:write"
}
}
```
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Erik Vroon <11857441+evroon@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
91 lines
2.5 KiB
TypeScript
91 lines
2.5 KiB
TypeScript
import { Badge } from "./ui/badge";
|
|
import Image from "next/image";
|
|
import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "components/ui/card";
|
|
import image from "../content/img/assets/growth.png";
|
|
import image3 from "../content/img/assets/reflecting.png";
|
|
import image4 from "../content/img/assets/looking-ahead.png";
|
|
|
|
interface FeatureProps {
|
|
title: string;
|
|
description: string;
|
|
image: string;
|
|
}
|
|
|
|
const features: FeatureProps[] = [
|
|
{
|
|
title: "Responsive Design",
|
|
description:
|
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.",
|
|
image: image.src,
|
|
},
|
|
{
|
|
title: "Intuitive user interface",
|
|
description:
|
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.",
|
|
image: image3.src,
|
|
},
|
|
{
|
|
title: "AI-Powered insights",
|
|
description:
|
|
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Nisi nesciunt est nostrum omnis ab sapiente.",
|
|
image: image4.src,
|
|
},
|
|
];
|
|
|
|
const featureList: string[] = [
|
|
"Dark/Light theme",
|
|
"Reviews",
|
|
"Features",
|
|
"Pricing",
|
|
"Contact form",
|
|
"Our team",
|
|
"Responsive design",
|
|
"Newsletter",
|
|
"Minimalist",
|
|
];
|
|
|
|
export const AdvancedFeatures = () => {
|
|
return (
|
|
<section id="features" className="container py-16 space-y-8">
|
|
<h2 className="text-3xl lg:text-4xl font-bold md:text-center">
|
|
<span className="bg-linear-to-b from-primary/70 to-primary text-transparent bg-clip-text">
|
|
Advanced
|
|
</span>{" "}
|
|
Features
|
|
</h2>
|
|
|
|
<div className="flex flex-wrap md:justify-center gap-4">
|
|
{featureList.map((feature: string) => (
|
|
<div key={feature}>
|
|
<Badge variant="secondary" className="text-sm">
|
|
{feature}
|
|
</Badge>
|
|
</div>
|
|
))}
|
|
</div>
|
|
|
|
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
|
|
{features.map(({ title, description, image }: FeatureProps) => (
|
|
<Card key={title}>
|
|
<CardHeader>
|
|
<CardTitle>{title}</CardTitle>
|
|
</CardHeader>
|
|
|
|
<CardContent>{description}</CardContent>
|
|
|
|
<CardFooter>
|
|
<Image
|
|
width={200}
|
|
height={200}
|
|
src={image}
|
|
alt="About feature"
|
|
className="w-[200px] lg:w-[300px] mx-auto"
|
|
/>
|
|
</CardFooter>
|
|
</Card>
|
|
))}
|
|
</div>
|
|
</section>
|
|
);
|
|
};
|