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 - 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**:

View File

@@ -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

View File

@@ -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

View File

@@ -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",

View File

@@ -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
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");
});
});