diff --git a/AGENTS.md b/AGENTS.md index da707b6033..4beab5d678 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,137 +12,139 @@ Use these skills for detailed patterns on-demand: ### Generic Skills (Any Project) -| Skill | Description | URL | -|-------|-------------|-----| -| `typescript` | Const types, flat interfaces, utility types | [SKILL.md](skills/typescript/SKILL.md) | -| `react-19` | No useMemo/useCallback, React Compiler | [SKILL.md](skills/react-19/SKILL.md) | -| `nextjs-16` | App Router, Server Actions, proxy.ts, streaming | [SKILL.md](skills/nextjs-16/SKILL.md) | -| `tailwind-4` | cn() utility, no var() in className | [SKILL.md](skills/tailwind-4/SKILL.md) | -| `playwright` | Page Object Model, MCP workflow, selectors | [SKILL.md](skills/playwright/SKILL.md) | -| `pytest` | Fixtures, mocking, markers, parametrize | [SKILL.md](skills/pytest/SKILL.md) | -| `django-drf` | ViewSets, Serializers, Filters | [SKILL.md](skills/django-drf/SKILL.md) | -| `jsonapi` | Strict JSON:API v1.1 spec compliance | [SKILL.md](skills/jsonapi/SKILL.md) | -| `zod-4` | New API (z.email(), z.uuid()) | [SKILL.md](skills/zod-4/SKILL.md) | -| `zustand-5` | Persist, selectors, slices | [SKILL.md](skills/zustand-5/SKILL.md) | -| `ai-sdk-5` | UIMessage, streaming, LangChain | [SKILL.md](skills/ai-sdk-5/SKILL.md) | -| `vitest` | Unit testing, React Testing Library | [SKILL.md](skills/vitest/SKILL.md) | -| `tdd` | Test-Driven Development workflow | [SKILL.md](skills/tdd/SKILL.md) | +| Skill | Description | URL | +| ------------ | ----------------------------------------------- | -------------------------------------- | +| `typescript` | Const types, flat interfaces, utility types | [SKILL.md](skills/typescript/SKILL.md) | +| `react-19` | No useMemo/useCallback, React Compiler | [SKILL.md](skills/react-19/SKILL.md) | +| `nextjs-16` | App Router, Server Actions, proxy.ts, streaming | [SKILL.md](skills/nextjs-16/SKILL.md) | +| `tailwind-4` | cn() utility, no var() in className | [SKILL.md](skills/tailwind-4/SKILL.md) | +| `playwright` | Page Object Model, MCP workflow, selectors | [SKILL.md](skills/playwright/SKILL.md) | +| `pytest` | Fixtures, mocking, markers, parametrize | [SKILL.md](skills/pytest/SKILL.md) | +| `django-drf` | ViewSets, Serializers, Filters | [SKILL.md](skills/django-drf/SKILL.md) | +| `jsonapi` | Strict JSON:API v1.1 spec compliance | [SKILL.md](skills/jsonapi/SKILL.md) | +| `zod-4` | New API (z.email(), z.uuid()) | [SKILL.md](skills/zod-4/SKILL.md) | +| `zustand-5` | Persist, selectors, slices | [SKILL.md](skills/zustand-5/SKILL.md) | +| `ai-sdk-5` | UIMessage, streaming, LangChain | [SKILL.md](skills/ai-sdk-5/SKILL.md) | +| `vitest` | Unit testing, React Testing Library | [SKILL.md](skills/vitest/SKILL.md) | +| `tdd` | Test-Driven Development workflow | [SKILL.md](skills/tdd/SKILL.md) | ### Prowler-Specific Skills -| Skill | Description | URL | -|-------|-------------|-----| -| `prowler` | Project overview, component navigation | [SKILL.md](skills/prowler/SKILL.md) | -| `prowler-api` | Django + RLS + JSON:API patterns | [SKILL.md](skills/prowler-api/SKILL.md) | -| `prowler-ui` | Next.js + shadcn conventions | [SKILL.md](skills/prowler-ui/SKILL.md) | -| `prowler-ui-skeletons` | shadcn skeleton loading and content reveal conventions | [SKILL.md](skills/prowler-ui-skeletons/SKILL.md) | -| `prowler-sdk-check` | Create new security checks | [SKILL.md](skills/prowler-sdk-check/SKILL.md) | -| `prowler-mcp` | MCP server tools and models | [SKILL.md](skills/prowler-mcp/SKILL.md) | -| `prowler-test-sdk` | SDK testing (pytest + moto) | [SKILL.md](skills/prowler-test-sdk/SKILL.md) | -| `prowler-test-api` | API testing (pytest-django + RLS) | [SKILL.md](skills/prowler-test-api/SKILL.md) | -| `prowler-test-ui` | E2E testing (Playwright) | [SKILL.md](skills/prowler-test-ui/SKILL.md) | -| `prowler-compliance` | Compliance framework structure | [SKILL.md](skills/prowler-compliance/SKILL.md) | -| `prowler-compliance-review` | Review compliance framework PRs | [SKILL.md](skills/prowler-compliance-review/SKILL.md) | -| `prowler-provider` | Add new cloud providers | [SKILL.md](skills/prowler-provider/SKILL.md) | -| `prowler-changelog` | Changelog entries (keepachangelog.com) | [SKILL.md](skills/prowler-changelog/SKILL.md) | -| `prowler-ci` | CI checks and PR gates (GitHub Actions) | [SKILL.md](skills/prowler-ci/SKILL.md) | -| `prowler-commit` | Professional commits (conventional-commits) | [SKILL.md](skills/prowler-commit/SKILL.md) | -| `prowler-pr` | Pull request conventions | [SKILL.md](skills/prowler-pr/SKILL.md) | -| `prowler-docs` | Documentation style guide | [SKILL.md](skills/prowler-docs/SKILL.md) | -| `django-migration-psql` | Django migration best practices for PostgreSQL | [SKILL.md](skills/django-migration-psql/SKILL.md) | -| `postgresql-indexing` | PostgreSQL indexing, EXPLAIN, monitoring, maintenance | [SKILL.md](skills/postgresql-indexing/SKILL.md) | -| `prowler-attack-paths-query` | Create Attack Paths openCypher queries | [SKILL.md](skills/prowler-attack-paths-query/SKILL.md) | -| `gh-aw` | GitHub Agentic Workflows (gh-aw) | [SKILL.md](skills/gh-aw/SKILL.md) | -| `skill-creator` | Create new AI agent skills | [SKILL.md](skills/skill-creator/SKILL.md) | +| Skill | Description | URL | +| ---------------------------- | ------------------------------------------------------ | ------------------------------------------------------ | +| `prowler` | Project overview, component navigation | [SKILL.md](skills/prowler/SKILL.md) | +| `prowler-api` | Django + RLS + JSON:API patterns | [SKILL.md](skills/prowler-api/SKILL.md) | +| `prowler-ui` | Next.js + shadcn conventions | [SKILL.md](skills/prowler-ui/SKILL.md) | +| `prowler-ui-motion` | shadcn/Radix visible microinteraction conventions | [SKILL.md](skills/prowler-ui-motion/SKILL.md) | +| `prowler-ui-skeletons` | shadcn skeleton loading and content reveal conventions | [SKILL.md](skills/prowler-ui-skeletons/SKILL.md) | +| `prowler-sdk-check` | Create new security checks | [SKILL.md](skills/prowler-sdk-check/SKILL.md) | +| `prowler-mcp` | MCP server tools and models | [SKILL.md](skills/prowler-mcp/SKILL.md) | +| `prowler-test-sdk` | SDK testing (pytest + moto) | [SKILL.md](skills/prowler-test-sdk/SKILL.md) | +| `prowler-test-api` | API testing (pytest-django + RLS) | [SKILL.md](skills/prowler-test-api/SKILL.md) | +| `prowler-test-ui` | E2E testing (Playwright) | [SKILL.md](skills/prowler-test-ui/SKILL.md) | +| `prowler-compliance` | Compliance framework structure | [SKILL.md](skills/prowler-compliance/SKILL.md) | +| `prowler-compliance-review` | Review compliance framework PRs | [SKILL.md](skills/prowler-compliance-review/SKILL.md) | +| `prowler-provider` | Add new cloud providers | [SKILL.md](skills/prowler-provider/SKILL.md) | +| `prowler-changelog` | Changelog entries (keepachangelog.com) | [SKILL.md](skills/prowler-changelog/SKILL.md) | +| `prowler-ci` | CI checks and PR gates (GitHub Actions) | [SKILL.md](skills/prowler-ci/SKILL.md) | +| `prowler-commit` | Professional commits (conventional-commits) | [SKILL.md](skills/prowler-commit/SKILL.md) | +| `prowler-pr` | Pull request conventions | [SKILL.md](skills/prowler-pr/SKILL.md) | +| `prowler-docs` | Documentation style guide | [SKILL.md](skills/prowler-docs/SKILL.md) | +| `django-migration-psql` | Django migration best practices for PostgreSQL | [SKILL.md](skills/django-migration-psql/SKILL.md) | +| `postgresql-indexing` | PostgreSQL indexing, EXPLAIN, monitoring, maintenance | [SKILL.md](skills/postgresql-indexing/SKILL.md) | +| `prowler-attack-paths-query` | Create Attack Paths openCypher queries | [SKILL.md](skills/prowler-attack-paths-query/SKILL.md) | +| `gh-aw` | GitHub Agentic Workflows (gh-aw) | [SKILL.md](skills/gh-aw/SKILL.md) | +| `skill-creator` | Create new AI agent skills | [SKILL.md](skills/skill-creator/SKILL.md) | ### Auto-invoke Skills When performing these actions, ALWAYS invoke the corresponding skill FIRST: -| Action | Skill | -|--------|-------| -| Add changelog entry for a PR or feature | `prowler-changelog` | -| Adding DRF pagination or permissions | `django-drf` | -| Adding a compliance output formatter (per-provider class + table dispatcher) | `prowler-compliance` | -| Adding indexes or constraints to database tables | `django-migration-psql` | -| Adding new providers | `prowler-provider` | -| Adding privilege escalation detection queries | `prowler-attack-paths-query` | -| Adding services to existing providers | `prowler-provider` | -| After creating/modifying a skill | `skill-sync` | -| App Router / Server Actions | `nextjs-16` | -| Auditing check-to-requirement mappings as a cloud auditor | `prowler-compliance` | -| Building AI chat features | `ai-sdk-5` | -| Committing changes | `prowler-commit` | -| Configuring MCP servers in agentic workflows | `gh-aw` | -| Create PR that requires changelog entry | `prowler-changelog` | -| Create a PR with gh pr create | `prowler-pr` | -| Creating API endpoints | `jsonapi` | -| Creating Attack Paths queries | `prowler-attack-paths-query` | -| Creating GitHub Agentic Workflows | `gh-aw` | -| Creating ViewSets, serializers, or filters in api/ | `django-drf` | -| Creating Zod schemas | `zod-4` | -| Creating a git commit | `prowler-commit` | -| Creating new checks | `prowler-sdk-check` | -| Creating new skills | `skill-creator` | -| Creating or reviewing Django migrations | `django-migration-psql` | -| Creating/modifying Prowler UI components | `prowler-ui` | -| Creating/modifying skeletons, loading states, or Suspense fallbacks | `prowler-ui-skeletons` | -| Creating/modifying models, views, serializers | `prowler-api` | -| Creating/updating compliance frameworks | `prowler-compliance` | -| Debug why a GitHub Actions job is failing | `prowler-ci` | -| Debugging gh-aw compilation errors | `gh-aw` | -| Fill .github/pull_request_template.md (Context/Description/Steps to review/Checklist) | `prowler-pr` | -| Fixing bug | `tdd` | -| Fixing compliance JSON bugs (duplicate IDs, empty Section, stale refs) | `prowler-compliance` | -| General Prowler development questions | `prowler` | -| Implementing JSON:API endpoints | `django-drf` | -| Implementing feature | `tdd` | -| Importing Copilot Custom Agents into workflows | `gh-aw` | -| Inspect PR CI checks and gates (.github/workflows/*) | `prowler-ci` | -| Inspect PR CI workflows (.github/workflows/*): conventional-commit, pr-check-changelog, pr-conflict-checker, labeler | `prowler-pr` | -| Mapping checks to compliance controls | `prowler-compliance` | -| Mocking AWS with moto in tests | `prowler-test-sdk` | -| Modifying API responses | `jsonapi` | -| Modifying component | `tdd` | -| Modifying gh-aw workflow frontmatter or safe-outputs | `gh-aw` | -| Refactoring code | `tdd` | -| Regenerate AGENTS.md Auto-invoke tables (sync.sh) | `skill-sync` | -| Review PR requirements: template, title conventions, changelog gate | `prowler-pr` | -| Review changelog format and conventions | `prowler-changelog` | -| Reviewing JSON:API compliance | `jsonapi` | -| Reviewing compliance framework PRs | `prowler-compliance-review` | -| Running makemigrations or pgmakemigrations | `django-migration-psql` | -| Syncing compliance framework with upstream catalog | `prowler-compliance` | -| Testing RLS tenant isolation | `prowler-test-api` | -| Testing hooks or utilities | `vitest` | -| Troubleshoot why a skill is missing from AGENTS.md auto-invoke | `skill-sync` | -| Understand CODEOWNERS/labeler-based automation | `prowler-ci` | -| Understand PR title conventional-commit validation | `prowler-ci` | -| Understand changelog gate and no-changelog label behavior | `prowler-ci` | -| Understand review ownership with CODEOWNERS | `prowler-pr` | -| Update CHANGELOG.md in any component | `prowler-changelog` | -| Updating README.md provider statistics table | `prowler-readme-table` | -| Updating checks, services, compliance, or categories count in README.md | `prowler-readme-table` | -| Updating existing Attack Paths queries | `prowler-attack-paths-query` | -| Updating existing checks and metadata | `prowler-sdk-check` | -| Using Zustand stores | `zustand-5` | -| Working on MCP server tools | `prowler-mcp` | -| Working on Prowler UI structure (actions/adapters/types/hooks) | `prowler-ui` | -| Working on task | `tdd` | -| Working with Prowler UI test helpers/pages | `prowler-test-ui` | -| Working with Tailwind classes | `tailwind-4` | -| Writing Playwright E2E tests | `playwright` | -| Writing Prowler API tests | `prowler-test-api` | -| Writing Prowler SDK tests | `prowler-test-sdk` | -| Writing Prowler UI E2E tests | `prowler-test-ui` | -| Writing Python tests with pytest | `pytest` | -| Writing React component tests | `vitest` | -| Writing React components | `react-19` | -| Writing TypeScript types/interfaces | `typescript` | -| Writing Vitest tests | `vitest` | -| Writing data backfill or data migration | `django-migration-psql` | -| Writing documentation | `prowler-docs` | -| Writing unit tests for UI | `vitest` | +| Action | Skill | +| --------------------------------------------------------------------------------------------------------------------- | ---------------------------- | +| Add changelog entry for a PR or feature | `prowler-changelog` | +| Adding DRF pagination or permissions | `django-drf` | +| Adding a compliance output formatter (per-provider class + table dispatcher) | `prowler-compliance` | +| Adding indexes or constraints to database tables | `django-migration-psql` | +| Adding new providers | `prowler-provider` | +| Adding privilege escalation detection queries | `prowler-attack-paths-query` | +| Adding services to existing providers | `prowler-provider` | +| After creating/modifying a skill | `skill-sync` | +| App Router / Server Actions | `nextjs-16` | +| Auditing check-to-requirement mappings as a cloud auditor | `prowler-compliance` | +| Building AI chat features | `ai-sdk-5` | +| Committing changes | `prowler-commit` | +| Configuring MCP servers in agentic workflows | `gh-aw` | +| Create PR that requires changelog entry | `prowler-changelog` | +| Create a PR with gh pr create | `prowler-pr` | +| Creating API endpoints | `jsonapi` | +| Creating Attack Paths queries | `prowler-attack-paths-query` | +| Creating GitHub Agentic Workflows | `gh-aw` | +| Creating ViewSets, serializers, or filters in api/ | `django-drf` | +| Creating Zod schemas | `zod-4` | +| Creating a git commit | `prowler-commit` | +| Creating new checks | `prowler-sdk-check` | +| Creating new skills | `skill-creator` | +| Creating or reviewing Django migrations | `django-migration-psql` | +| Creating/modifying Prowler UI components | `prowler-ui` | +| Creating/modifying UI motion, transitions, or microinteractions | `prowler-ui-motion` | +| Creating/modifying skeletons, loading states, or Suspense fallbacks | `prowler-ui-skeletons` | +| Creating/modifying models, views, serializers | `prowler-api` | +| Creating/updating compliance frameworks | `prowler-compliance` | +| Debug why a GitHub Actions job is failing | `prowler-ci` | +| Debugging gh-aw compilation errors | `gh-aw` | +| Fill .github/pull_request_template.md (Context/Description/Steps to review/Checklist) | `prowler-pr` | +| Fixing bug | `tdd` | +| Fixing compliance JSON bugs (duplicate IDs, empty Section, stale refs) | `prowler-compliance` | +| General Prowler development questions | `prowler` | +| Implementing JSON:API endpoints | `django-drf` | +| Implementing feature | `tdd` | +| Importing Copilot Custom Agents into workflows | `gh-aw` | +| Inspect PR CI checks and gates (.github/workflows/\*) | `prowler-ci` | +| Inspect PR CI workflows (.github/workflows/\*): conventional-commit, pr-check-changelog, pr-conflict-checker, labeler | `prowler-pr` | +| Mapping checks to compliance controls | `prowler-compliance` | +| Mocking AWS with moto in tests | `prowler-test-sdk` | +| Modifying API responses | `jsonapi` | +| Modifying component | `tdd` | +| Modifying gh-aw workflow frontmatter or safe-outputs | `gh-aw` | +| Refactoring code | `tdd` | +| Regenerate AGENTS.md Auto-invoke tables (sync.sh) | `skill-sync` | +| Review PR requirements: template, title conventions, changelog gate | `prowler-pr` | +| Review changelog format and conventions | `prowler-changelog` | +| Reviewing JSON:API compliance | `jsonapi` | +| Reviewing compliance framework PRs | `prowler-compliance-review` | +| Running makemigrations or pgmakemigrations | `django-migration-psql` | +| Syncing compliance framework with upstream catalog | `prowler-compliance` | +| Testing RLS tenant isolation | `prowler-test-api` | +| Testing hooks or utilities | `vitest` | +| Troubleshoot why a skill is missing from AGENTS.md auto-invoke | `skill-sync` | +| Understand CODEOWNERS/labeler-based automation | `prowler-ci` | +| Understand PR title conventional-commit validation | `prowler-ci` | +| Understand changelog gate and no-changelog label behavior | `prowler-ci` | +| Understand review ownership with CODEOWNERS | `prowler-pr` | +| Update CHANGELOG.md in any component | `prowler-changelog` | +| Updating README.md provider statistics table | `prowler-readme-table` | +| Updating checks, services, compliance, or categories count in README.md | `prowler-readme-table` | +| Updating existing Attack Paths queries | `prowler-attack-paths-query` | +| Updating existing checks and metadata | `prowler-sdk-check` | +| Using Zustand stores | `zustand-5` | +| Working on MCP server tools | `prowler-mcp` | +| Working on Prowler UI structure (actions/adapters/types/hooks) | `prowler-ui` | +| Working on task | `tdd` | +| Working with Prowler UI test helpers/pages | `prowler-test-ui` | +| Working with Tailwind classes | `tailwind-4` | +| Writing Playwright E2E tests | `playwright` | +| Writing Prowler API tests | `prowler-test-api` | +| Writing Prowler SDK tests | `prowler-test-sdk` | +| Writing Prowler UI E2E tests | `prowler-test-ui` | +| Writing Python tests with pytest | `pytest` | +| Writing React component tests | `vitest` | +| Writing React components | `react-19` | +| Writing TypeScript types/interfaces | `typescript` | +| Writing Vitest tests | `vitest` | +| Writing data backfill or data migration | `django-migration-psql` | +| Writing documentation | `prowler-docs` | +| Writing unit tests for UI | `vitest` | --- @@ -150,13 +152,13 @@ When performing these actions, ALWAYS invoke the corresponding skill FIRST: Prowler is an open-source cloud security assessment tool supporting AWS, Azure, GCP, Kubernetes, GitHub, M365, and more. -| Component | Location | Tech Stack | -|-----------|----------|------------| -| SDK | `prowler/` | Python 3.10+, uv | -| API | `api/` | Django 5.1, DRF, Celery | -| UI | `ui/` | Next.js 16, React 19, Tailwind 4 | -| MCP Server | `mcp_server/` | FastMCP, Python 3.12+ | -| Dashboard | `dashboard/` | Dash, Plotly | +| Component | Location | Tech Stack | +| ---------- | ------------- | -------------------------------- | +| SDK | `prowler/` | Python 3.10+, uv | +| API | `api/` | Django 5.1, DRF, Celery | +| UI | `ui/` | Next.js 16, React 19, Tailwind 4 | +| MCP Server | `mcp_server/` | FastMCP, Python 3.12+ | +| Dashboard | `dashboard/` | Dash, Plotly | --- @@ -182,6 +184,7 @@ Follow conventional-commit style: `[scope]: ` **Types:** `feat`, `fix`, `docs`, `chore`, `perf`, `refactor`, `style`, `test` Before creating a PR: + 1. Complete checklist in `.github/pull_request_template.md` 2. Run all relevant tests and linters 3. Link screenshots for UI changes diff --git a/skills/prowler-ui-motion/SKILL.md b/skills/prowler-ui-motion/SKILL.md new file mode 100644 index 0000000000..960200bf7c --- /dev/null +++ b/skills/prowler-ui-motion/SKILL.md @@ -0,0 +1,63 @@ +--- +name: prowler-ui-motion +description: > + Prowler UI visible microinteraction rules for shadcn primitives, forms, tabs, expandable rows, status states, and motion QA. + Trigger: Creating/modifying UI motion, transitions, animations, microinteractions, Radix/shadcn primitives, or interactive table rows. +license: Apache-2.0 +metadata: + author: prowler-cloud + version: "1.0" + scope: [root, ui] + auto_invoke: + - "Creating/modifying UI motion" + - "Creating/modifying microinteractions" + - "Creating/modifying shadcn primitives" + - "Creating/modifying expandable rows" +--- + +## When to Use + +Use this skill before adding or changing visible UI motion in Prowler: shadcn/Radix primitives, form controls, overlays, tabs, expandable rows, table affordances, status badges, progress, spinners, skeleton handoffs, and icon-only actions. + +## Critical Patterns + +- Prefer shadcn/Tailwind motion; do not add new HeroUI motion surfaces. +- Motion must be visible, not theoretical: use durations humans can perceive (`200ms–700ms` depending on scope). +- Preserve Radix state semantics; animate via classes, force-mounted indicators, `data-state`, or `asChild` wrappers without breaking accessibility. +- Always include `motion-reduce` behavior for transform/animation-heavy changes. +- Opening and closing must both animate when the component supports unmount/exit behavior. +- Keep row/background transitions separate from control/checkmark transitions; do not couple table selection backgrounds to checkbox internals. +- Avoid feature-local motion copies when a shared primitive owns the interaction. +- For skeleton/loading handoffs, load `prowler-ui-skeletons` and follow its boundary/reveal rules. + +## Decision Gates + +| Surface | Required motion contract | +| --------------------------------------------------- | ---------------------------------------------------------------------------------- | +| Dialog, Drawer, Popover, Dropdown, Select, Combobox | Enter and exit motion; preserve focus/portal behavior. | +| Tabs | Content switch should fade/slide; inactive panels must not flash. | +| Checkbox, Radio, pills, badges | Background/icon/content state changes should transition together. | +| Input, SearchInput, Textarea, Dropzone | Focus border, clear button, placeholder/selection affordances need visible timing. | +| Collapsible, Tree, expandable table row | Expand and collapse must both animate height/opacity/chevron. | +| StatusBadge, Progress, Spinner | State/color/value changes should feel smooth and respect reduced motion. | +| Data table affordances | Row hover/selection may animate, but do not break table layout semantics. | + +## Execution Steps + +1. Identify whether the interaction belongs to a shared primitive or a feature-local surface. +2. Add the smallest shared motion primitive that covers the behavior. +3. Verify enter and exit paths, including closed/unmounted states. +4. Add focused unit tests for shared primitives or reusable motion contracts. +5. Provide at least one real UI route/flow where the user can visually test the motion. + +## Commands + +```bash +cd ui && pnpm run typecheck +cd ui && pnpm test:unit +``` + +## Resources + +- `skills/prowler-ui-skeletons/SKILL.md` — skeleton scanner and content reveal rules. +- `skills/prowler-ui/SKILL.md` — component placement and shadcn vs HeroUI rules. diff --git a/ui/AGENTS.md b/ui/AGENTS.md index 03b6897701..502d3c1cac 100644 --- a/ui/AGENTS.md +++ b/ui/AGENTS.md @@ -3,6 +3,7 @@ > **Skills Reference**: For detailed patterns, use these skills: > > - [`prowler-ui`](../skills/prowler-ui/SKILL.md) - Prowler-specific UI patterns +> - [`prowler-ui-motion`](../skills/prowler-ui-motion/SKILL.md) - shadcn/Radix visible microinteraction conventions > - [`prowler-ui-skeletons`](../skills/prowler-ui-skeletons/SKILL.md) - shadcn skeleton loading and content reveal conventions > - [`prowler-test-ui`](../skills/prowler-test-ui/SKILL.md) - Playwright E2E testing (comprehensive) > - [`typescript`](../skills/typescript/SKILL.md) - Const types, flat interfaces