Compare commits

...

2 Commits

Author SHA1 Message Date
aef22f704f ️ feat: keep event actions menu visible 2026-04-09 01:10:37 -04:00
e4953ee42e chore: update skills
Signed-off-by: Dmytro Stanchiev <git@dmytros.dev>
2026-04-09 01:04:00 -04:00
6 changed files with 47 additions and 15 deletions

View File

@@ -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
2. **Run pre-commit validation**:
- Execute `pnpm lint` and report any issues
- Execute `pnpm build` and ensure it succeeds
- Execute `bun run lint` and report any issues
- 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
3. **Analyze git status**:

View File

@@ -10,9 +10,9 @@ This command runs the complete testing pipeline for the project.
To run the complete testing pipeline, just type:
1. Run pnpm type:check
2. Run pnpm lint
3. Run pnpm test
1. Run bun run type:check
2. Run bun run lint
3. Run bun test
4. Report any failures
5. Fix any failures
6. Repeat until all tests pass
@@ -20,7 +20,7 @@ To run the complete testing pipeline, just type:
## What This Command Does
1. Runs `pnpm type:check` to check for type errors
2. Runs `pnpm lint` to check for linting errors
3. Runs `pnpm test` to run the tests
4. Reports any failures
1. Runs `bun run type:check` to check for type errors
2. Runs `bun run lint` to check for linting errors
3. Runs `bun test` to run the tests
4. Reports any failures

View File

@@ -11,10 +11,10 @@
**Primary Language:** TypeScript
**Runtime:** Node.js/Bun
**Package Manager:** npm/pnpm/yarn
**Package Manager:** npm/pnpm/yarn/bun
**Build Tools:** TypeScript Compiler (tsc)
**Testing:** Jest/Vitest (if configured)
**Linting:** ESLint (if configured)
**Testing:** Jest/Vitest/Bun (if configured)
**Linting:** ESLint/Biome/Oxlint (if configured)
## Project Structure
@@ -101,4 +101,4 @@ Execute [task] now.
- Code review completed
- Build process succeeds
- Tests pass (if available)
- Documentation updated
- Documentation updated

View File

@@ -7,7 +7,7 @@
"build": "next build",
"start": "next start",
"lint": "next lint && biome check --write --files-max-size=50000000 --vcs-enabled=true src",
"typecheck": "tsgo"
"type:check": "tsgo"
},
"dependencies": {
"@openrouter/sdk": "^0.11.2",

View File

@@ -124,7 +124,8 @@ export const EventCard = ({ event, onEdit, onDelete }: EventCardProps) => {
<Button
variant="ghost"
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" />
<span className="sr-only">Event actions</span>

31
tests/event-card.test.ts Normal file
View 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");
});
});