Files
bracket/docs/components/Features.tsx
Copilot 3606868b98 frontend: replace Prettier stack with oxfmt (#1750)
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>
2026-07-28 18:38:17 +00:00

72 lines
2.2 KiB
TypeScript

import { Card, CardDescription, CardHeader, CardTitle } from "./ui/card";
import builder from "../content/img/builder_preview.png";
import Image from "next/image";
import { ReactElement } from "react";
import { MdDashboard } from "react-icons/md";
import { IoBuildOutline } from "react-icons/io5";
import { RiDragDropLine } from "react-icons/ri";
interface ServiceProps {
title: string;
description: string;
icon: ReactElement;
}
const serviceList: ServiceProps[] = [
{
title: "Public Dashboard",
description: "Show the schedule and rankings to the public.",
icon: <MdDashboard size={48} />,
},
{
title: "Flexible Tournament Builder",
description:
"Add multiple swiss, single elimination and round-robin elements to the tournament.",
icon: <IoBuildOutline size={48} />,
},
{
title: "Drag & Drop Interface",
description:
"Drag-and-drop matches to different courts or reschedule them to another start time.",
icon: <RiDragDropLine size={48} />,
},
];
export const Features = () => {
return (
<section className="container py-16">
<div className="grid lg:grid-cols-[1fr_1fr] gap-8 place-items-center">
<div>
<h2 className="text-3xl md:text-4xl font-bold">Features</h2>
<p className="text-muted-foreground text-xl mt-4 mb-8 ">
Bracket is flexible, yet feature-rich.
</p>
<div className="flex flex-col gap-8">
{serviceList.map(({ icon, title, description }: ServiceProps) => (
<Card key={title}>
<CardHeader className="space-y-1 flex md:flex-row justify-start items-start gap-4">
<div className="mt-1 bg-primary/50 p-1 rounded-2xl">{icon}</div>
<div>
<CardTitle>{title}</CardTitle>
<CardDescription className="text-md mt-2">{description}</CardDescription>
</div>
</CardHeader>
</Card>
))}
</div>
</div>
<Image
width={200}
height={200}
src={builder.src}
className="w-[500px] md:w-[600px] lg:w-[700px] pt-15 lg:pt-25 object-contain"
alt="About services"
/>
</div>
</section>
);
};