Compare commits
2 Commits
92f60d3a9a
...
aef22f704f
| Author | SHA1 | Date | |
|---|---|---|---|
| aef22f704f | |||
| e4953ee42e |
@@ -14,8 +14,8 @@ When the user runs this command, execute the following workflow:
|
|||||||
- If user provides $ARGUMENTS (a simple message), skip to step 3
|
- If user provides $ARGUMENTS (a simple message), skip to step 3
|
||||||
|
|
||||||
2. **Run pre-commit validation**:
|
2. **Run pre-commit validation**:
|
||||||
- Execute `pnpm lint` and report any issues
|
- Execute `bun run lint` and report any issues
|
||||||
- Execute `pnpm build` and ensure it succeeds
|
- Execute `bun run type:check && bun run lint` (or `bun run build` if none available) and ensure it succeeds
|
||||||
- If either fails, ask user if they want to proceed anyway or fix issues first
|
- If either fails, ask user if they want to proceed anyway or fix issues first
|
||||||
|
|
||||||
3. **Analyze git status**:
|
3. **Analyze git status**:
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ This command runs the complete testing pipeline for the project.
|
|||||||
|
|
||||||
To run the complete testing pipeline, just type:
|
To run the complete testing pipeline, just type:
|
||||||
|
|
||||||
1. Run pnpm type:check
|
1. Run bun run type:check
|
||||||
2. Run pnpm lint
|
2. Run bun run lint
|
||||||
3. Run pnpm test
|
3. Run bun test
|
||||||
4. Report any failures
|
4. Report any failures
|
||||||
5. Fix any failures
|
5. Fix any failures
|
||||||
6. Repeat until all tests pass
|
6. Repeat until all tests pass
|
||||||
@@ -20,7 +20,7 @@ To run the complete testing pipeline, just type:
|
|||||||
|
|
||||||
## What This Command Does
|
## What This Command Does
|
||||||
|
|
||||||
1. Runs `pnpm type:check` to check for type errors
|
1. Runs `bun run type:check` to check for type errors
|
||||||
2. Runs `pnpm lint` to check for linting errors
|
2. Runs `bun run lint` to check for linting errors
|
||||||
3. Runs `pnpm test` to run the tests
|
3. Runs `bun test` to run the tests
|
||||||
4. Reports any failures
|
4. Reports any failures
|
||||||
|
|||||||
@@ -11,10 +11,10 @@
|
|||||||
|
|
||||||
**Primary Language:** TypeScript
|
**Primary Language:** TypeScript
|
||||||
**Runtime:** Node.js/Bun
|
**Runtime:** Node.js/Bun
|
||||||
**Package Manager:** npm/pnpm/yarn
|
**Package Manager:** npm/pnpm/yarn/bun
|
||||||
**Build Tools:** TypeScript Compiler (tsc)
|
**Build Tools:** TypeScript Compiler (tsc)
|
||||||
**Testing:** Jest/Vitest (if configured)
|
**Testing:** Jest/Vitest/Bun (if configured)
|
||||||
**Linting:** ESLint (if configured)
|
**Linting:** ESLint/Biome/Oxlint (if configured)
|
||||||
|
|
||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
@@ -101,4 +101,4 @@ Execute [task] now.
|
|||||||
- Code review completed
|
- Code review completed
|
||||||
- Build process succeeds
|
- Build process succeeds
|
||||||
- Tests pass (if available)
|
- Tests pass (if available)
|
||||||
- Documentation updated
|
- Documentation updated
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
"build": "next build",
|
"build": "next build",
|
||||||
"start": "next start",
|
"start": "next start",
|
||||||
"lint": "next lint && biome check --write --files-max-size=50000000 --vcs-enabled=true src",
|
"lint": "next lint && biome check --write --files-max-size=50000000 --vcs-enabled=true src",
|
||||||
"typecheck": "tsgo"
|
"type:check": "tsgo"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openrouter/sdk": "^0.11.2",
|
"@openrouter/sdk": "^0.11.2",
|
||||||
|
|||||||
@@ -124,7 +124,8 @@ export const EventCard = ({ event, onEdit, onDelete }: EventCardProps) => {
|
|||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="icon"
|
size="icon"
|
||||||
className="h-7 w-7 shrink-0 opacity-0 group-hover:opacity-100 transition-opacity duration-150"
|
className="h-7 w-7 shrink-0 text-muted-foreground/70 hover:text-foreground"
|
||||||
|
aria-label="Event actions"
|
||||||
>
|
>
|
||||||
<MoreHorizontal className="h-3.5 w-3.5" />
|
<MoreHorizontal className="h-3.5 w-3.5" />
|
||||||
<span className="sr-only">Event actions</span>
|
<span className="sr-only">Event actions</span>
|
||||||
|
|||||||
31
tests/event-card.test.ts
Normal file
31
tests/event-card.test.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { describe, expect, test } from "bun:test";
|
||||||
|
import { renderToStaticMarkup } from "react-dom/server";
|
||||||
|
import { EventCard } from "@/components/event-card";
|
||||||
|
import type { CalendarEvent } from "@/lib/types";
|
||||||
|
|
||||||
|
const sampleEvent: CalendarEvent = {
|
||||||
|
id: "evt_1",
|
||||||
|
title: "Design Review",
|
||||||
|
start: "2026-04-09T10:00:00+00:00",
|
||||||
|
end: "2026-04-09T11:00:00+00:00",
|
||||||
|
description: "Review the updated event list UI.",
|
||||||
|
location: "Studio A",
|
||||||
|
url: "https://example.com/event",
|
||||||
|
allDay: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
describe("EventCard actions trigger", () => {
|
||||||
|
test("shows the triple-dots trigger without requiring hover and exposes an aria-label for the icon-only button", () => {
|
||||||
|
const markup = renderToStaticMarkup(
|
||||||
|
EventCard({
|
||||||
|
event: sampleEvent,
|
||||||
|
onEdit: () => {},
|
||||||
|
onDelete: () => {},
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(markup).toContain('aria-label="Event actions"');
|
||||||
|
expect(markup).not.toContain("opacity-0");
|
||||||
|
expect(markup).not.toContain("group-hover:opacity-100");
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user