Senior QA
alirezarezvani/claude-skills
Generates unit tests, integration tests, and E2E tests for React/Next.js applications.
Server rendering and testing for react-horizontal-scrolling-menu: the library is client-only ('use client' required in React Server Components, else "createContext is not a function"), SSR first…
$ npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install asmyshlyaev177/react-horizontal-scrolling-menu menu-testing-ssr --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/menu-testing-ssr .claude/skills/menu-testing-ssr && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "menu-testing-ssr" agent skill from https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/tree/master/skills/menu-testing-ssr into .claude/skills/menu-testing-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "menu-testing-ssr", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/tree/master/skills/menu-testing-ssrType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install asmyshlyaev177/react-horizontal-scrolling-menu menu-testing-ssr --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/menu-testing-ssr .agents/skills/menu-testing-ssr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "menu-testing-ssr" agent skill from https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/tree/master/skills/menu-testing-ssr into .agents/skills/menu-testing-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "menu-testing-ssr", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install asmyshlyaev177/react-horizontal-scrolling-menu menu-testing-ssr --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/menu-testing-ssr .cursor/skills/menu-testing-ssr && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "menu-testing-ssr" agent skill from https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/tree/master/skills/menu-testing-ssr into .cursor/skills/menu-testing-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "menu-testing-ssr", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu.git --path skills/menu-testing-ssr--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install asmyshlyaev177/react-horizontal-scrolling-menu menu-testing-ssr --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/menu-testing-ssr .gemini/skills/menu-testing-ssr && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "menu-testing-ssr" agent skill from https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/tree/master/skills/menu-testing-ssr into .gemini/skills/menu-testing-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "menu-testing-ssr", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install asmyshlyaev177/react-horizontal-scrolling-menu menu-testing-ssrInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/menu-testing-ssr .github/skills/menu-testing-ssr && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "menu-testing-ssr" agent skill from https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/tree/master/skills/menu-testing-ssr into .github/skills/menu-testing-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "menu-testing-ssr", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install asmyshlyaev177/react-horizontal-scrolling-menu menu-testing-ssr --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/menu-testing-ssr .opencode/skills/menu-testing-ssr && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "menu-testing-ssr" agent skill from https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/tree/master/skills/menu-testing-ssr into .opencode/skills/menu-testing-ssr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "menu-testing-ssr", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
menu-testing-ssrServer rendering and testing for react-horizontal-scrolling-menu: the library is client-only ('use client' required in React Server Components, else "createContext is not a function"), SSR first…
Menu Testing Ssr is an agent skill from asmyshlyaev177/react-horizontal-scrolling-menu. Server rendering and testing for react-horizontal-scrolling-menu: the library is client-only ('use client' required in React Server Components, else "createContext is not a function"), SSR first paint is controlled by the useIsVisible defaultValue argument (canonical ('first', true) / ('last', false)), transpilePackages for older Next.js, Jest moduleNameMapper to dist/index.cjs for "Cannot use import statement outside a module" plus an IntersectionObserver class mock for jsdom (ReferenceError on mount without…
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Unit testing and Browser testing. It works with React, Next.js, Jest and Playwright. The repository describes itself as: Horizontal scrolling menu component for React with per-item visibility tracking. Supports mouse and touch devices, SSR-safe. The licence is MIT.
Read from SKILL.md and the folder at commit 42c99aa. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript and javascript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Menu Testing Ssr loads about 3.5k tokens when it runs. Until then it costs about 176 tokens; SKILL.md has 754 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from asmyshlyaev177/react-horizontal-scrolling-menu at commit 42c99aa, republished under its MIT licence (© asmyshlyaev177). 754 words, ~3,534 tokens.
.claude/skills/menu-testing-ssr/SKILL.md (or your agent's skills folder).The library is SSR-safe but client-only: the first render emits plain
markup and IntersectionObserver attaches client-side. What the server
paints is whatever useIsVisible's defaultValue argument says; real
visibility exists only after the observer fires in the browser. Every
integration and testing decision below follows from that.
An SSR-safe menu page for Next.js App Router. The data-cy /
data-visible attributes double as the test contract used by the
Playwright patterns below.
// app/menu/page.tsx
'use client';
import React from 'react';
import {
ScrollMenu,
VisibilityContext,
type publicApiType,
} from 'react-horizontal-scrolling-menu';
import 'react-horizontal-scrolling-menu/dist/styles.css';
const items = Array.from({ length: 10 }, (_, i) => `item-${i}`);
function LeftArrow() {
const api = React.useContext<publicApiType>(VisibilityContext);
// Bakes useIsVisible('first', true): the server paints a DISABLED left
// arrow — correct for a row scrolled to its start.
const disabled = api.useLeftArrowVisible();
return (
<button disabled={disabled} onClick={() => api.scrollPrev()}>
Left
</button>
);
}
function RightArrow() {
const api = React.useContext<publicApiType>(VisibilityContext);
// Bakes useIsVisible('last', false): the server paints an ENABLED right arrow.
const disabled = api.useRightArrowVisible();
return (
<button disabled={disabled} onClick={() => api.scrollNext()}>
Right
</button>
);
}
function Card({ itemId }: { itemId: string }) {
const api = React.useContext<publicApiType>(VisibilityContext);
const visible = api.useIsVisible(itemId, false);
return (
<div data-cy={itemId} data-visible={visible} style={{ width: '160px' }}>
{itemId}
</div>
);
}
export default function Page() {
return (
<ScrollMenu LeftArrow={LeftArrow} RightArrow={RightArrow}>
{items.map((id) => (
<Card itemId={id} key={id} />
))}
</ScrollMenu>
);
}TanStack Start needs no directive — it has no React Server Component
boundary, so the identical component body server-renders as-is (the repo's
example-tanstack route is a 1:1 port of the Next.js page without
'use client', server-rendered in workerd on every request).
The signature is useIsVisible(itemId: ItemId | 'first' | 'last', defaultValue = false)
(src/createApi.ts:31). defaultValue is the state on the server AND on the
first client frame — visibility only becomes real when IntersectionObserver
fires. The canonical arrow values model a row at its start:
const isFirstVisible = api.useIsVisible('first', true); // left arrow disabled on SSR
const isLastVisible = api.useIsVisible('last', false); // right arrow enabled on SSRPrefer api.useLeftArrowVisible() / api.useRightArrowVisible(): they use
exactly these defaults internally and additionally latch updates behind
menuVisible so arrows do not flicker when the page scrolls the menu out
of the viewport (src/createApi.ts:65-89).
The package is ESM-first (type: module); the require condition of its
exports map points at ./dist/index.cjs. Jest in jsdom needs both a
moduleNameMapper and an IntersectionObserver mock — the library constructs
new IntersectionObserver(...) with no feature detection
(src/hooks/useIntersectionObserver.ts:42), so mounting ScrollMenu
without the mock throws ReferenceError: IntersectionObserver is not defined.
// jest.config.cjs
module.exports = {
testEnvironment: 'jsdom',
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
moduleNameMapper: {
'^react-horizontal-scrolling-menu$':
'react-horizontal-scrolling-menu/dist/index.cjs',
'\\.css$': '<rootDir>/test/styleMock.cjs',
},
};// test/styleMock.cjs — stub for the mandatory styles.css import
module.exports = {};// jest.setup.ts
import '@testing-library/jest-dom'; // registers toBeInTheDocument/toBeDisabled
class IntersectionObserverMock {
readonly root: Element | null = null;
readonly rootMargin = '0px';
readonly thresholds: ReadonlyArray<number> = [0];
constructor(
public callback: IntersectionObserverCallback,
public options?: IntersectionObserverInit,
) {}
observe(): void {}
unobserve(): void {}
disconnect(): void {}
takeRecords(): IntersectionObserverEntry[] {
return [];
}
}
Object.defineProperty(globalThis, 'IntersectionObserver', {
writable: true,
configurable: true,
value: IntersectionObserverMock,
});Scope of this setup: the no-op mock never delivers entries, so every
useIsVisible stays at its defaultValue forever. jsdom tests can assert
mounting and markup only — scrolling and visibility behavior belongs in a
real browser (next pattern). That is the maintainer's stance, not a
workaround.
// menu.test.tsx — structure assertions only under jsdom
import { render, screen } from '@testing-library/react';
import Page from '../app/menu/page';
test('renders all items and both arrows', () => {
render(<Page />);
expect(screen.getByText('item-0')).toBeInTheDocument();
expect(screen.getByText('item-9')).toBeInTheDocument();
expect(screen.getByRole('button', { name: 'Left' })).toBeDisabled();
expect(screen.getByRole('button', { name: 'Right' })).toBeEnabled();
});Scrolling is animated (500ms default) and visibility is
IntersectionObserver-driven — nothing about the menu is true the moment a
click returns. Assertions must poll (expect.poll / auto-retrying
locators), never sleep-then-read. This is the contract the repo's own
suite follows (e2e/scrolling-menu.spec.ts, stories/test.tsx).
// e2e/menu.spec.ts
import { expect, test } from '@playwright/test';
// 650px viewport: exactly three 160px cards (plus margins) fit, so one
// arrow click advances the visible window by three ids.
test.use({ viewport: { width: 650, height: 768 } });
test('server-renders the menu into the HTML payload', async ({ request }) => {
// Fetch WITHOUT a browser: catches SSR regressions (window/document access
// during render) that browser tests miss — hydration would repaint the
// page before the first assertion looks at it.
const response = await request.get('/menu');
expect(response.ok()).toBe(true);
const html = await response.text();
for (let i = 0; i < 10; i++) {
expect(html).toContain(`data-cy="item-${i}"`);
}
});
test('arrow click advances the visible window', async ({ page }) => {
await page.goto('/menu');
await expect(page.locator('[data-cy="item-0"]')).toBeVisible();
await page.getByRole('button', { name: 'Right', exact: true }).click();
await expect
.poll(() =>
page
.locator('[data-visible="true"]')
.evaluateAll((cards) => cards.map((c) => c.getAttribute('data-cy'))),
)
.toEqual(['item-3', 'item-4', 'item-5']);
});Negative assertions ("state must NOT change") have no signal to poll for — give the observer one window to fire before asserting:
test('arrows do not update while the menu is off screen', async ({ page }) => {
const OBSERVER_MS = 300;
await page.goto('/menu');
const left = page.getByRole('button', { name: 'Left', exact: true });
await expect(left).toBeDisabled();
await page.evaluate(() => window.scrollTo(0, 400));
await page.waitForTimeout(OBSERVER_MS);
await expect(left).toBeDisabled();
});Wrong:
// app/page.tsx (server component, no directive)
import { ScrollMenu } from 'react-horizontal-scrolling-menu';
import 'react-horizontal-scrolling-menu/dist/styles.css';Correct:
// app/page.tsx
'use client';
import { ScrollMenu } from 'react-horizontal-scrolling-menu';
import 'react-horizontal-scrolling-menu/dist/styles.css';The library calls React.createContext at module scope and ships no
'use client' banner of its own, so evaluating it in a Server Component
throws "createContext is not a function" — the directive must come from
your file.
Source: src/context.ts:5; example-nextjs/app/page.tsx:3; https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/issues/280
Wrong:
const disabled = api.useIsVisible('first'); // defaultValue omitted -> falseCorrect:
const disabled = api.useIsVisible('first', true);
// or, better: const disabled = api.useLeftArrowVisible();defaultValue defaults to false (src/createApi.ts:31) and is what both
the server and the first client frame render; omitting it paints an
enabled left arrow that flips to disabled once the observer fires — a
visible flash on every SSR page load. The canonical pair is
('first', true) / ('last', false), matching a row at its start.
Source: README.md SSR section; src/createApi.ts:31,66,79; maintainer interview
Wrong:
// jest.config.cjs — no mapping; Jest loads the ESM entry and chokes
module.exports = { testEnvironment: 'jsdom' };Correct:
module.exports = {
testEnvironment: 'jsdom',
moduleNameMapper: {
'^react-horizontal-scrolling-menu$':
'react-horizontal-scrolling-menu/dist/index.cjs',
},
};The package is ESM-first since v5; Jest without ESM support cannot parse
dist/index.mjs, but the package ships a CJS build the mapper can point
at directly.
Source: https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/issues/240; package.json exports map
Wrong:
// jest.setup.ts missing — first render throws
// ReferenceError: IntersectionObserver is not definedCorrect:
// jest.setup.ts (registered via setupFilesAfterEnv)
class IntersectionObserverMock {
readonly root: Element | null = null;
readonly rootMargin = '0px';
readonly thresholds: ReadonlyArray<number> = [0];
constructor(public callback: IntersectionObserverCallback) {}
observe(): void {}
unobserve(): void {}
disconnect(): void {}
takeRecords(): IntersectionObserverEntry[] {
return [];
}
}
Object.defineProperty(globalThis, 'IntersectionObserver', {
writable: true,
configurable: true,
value: IntersectionObserverMock,
});The library constructs the observer unconditionally — no feature detection — so jsdom (which lacks IntersectionObserver) crashes the mount rather than degrading.
Source: src/hooks/useIntersectionObserver.ts:42; https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/issues/240
Wrong:
fireEvent.click(nextArrow);
expect(screen.getByTestId('card-3')).toBeVisible(); // IO has not fired yetCorrect:
await user.click(nextArrow);
await waitFor(() =>
expect(getVisibleIds()).toEqual(['item-3', 'item-4', 'item-5']),
);Scrolling is animated and visibility is reported asynchronously by the
observer, so the DOM is not settled when the click handler returns —
assertions must re-run until they hold (waitFor, expect.poll), and the
maintainer's recommendation is to test behavior in a real browser
(Playwright) rather than against Jest mocks.
Source: stories/test.tsx:8-16; e2e/scrolling-menu.spec.ts:146-154; issue #240 discussion
Wrong:
// next.config.js on an older Next.js — build fails with
// "Cannot use import statement outside a module"
module.exports = {};Correct:
module.exports = {
transpilePackages: ['react-horizontal-scrolling-menu'],
};Older Next.js setups (notably pages router) do not consume ESM
dependencies untransformed; listing the package in transpilePackages
makes Next compile it.
Source: README.md Next.js note; https://github.com/asmyshlyaev177/react-horizontal-scrolling-menu/issues/240
The server paints defaultValue guesses; real visibility exists only
after IntersectionObserver fires client-side — until then nothing about
the menu is true. Reading visibility at mount is wrong on both the server
and the first client frame, and test assertions that do not poll race the
observer. The reactive visibility model (hooks, items.getVisible(),
menuVisible gating) is covered in menu-visibility.
useIsVisible defaultValue, and test assertions must
respect the async visibility model this skill's patterns are built on.© asmyshlyaev177, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/menu-testing-ssr of asmyshlyaev177/react-horizontal-scrolling-menu.
Open the folder on GitHubat commit 42c99aa
Menu Testing Ssr next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Menu Testing Ssr this skillasmyshlyaev177/react-horizontal-scrolling-menu | 790 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Senior QAalirezarezvani/claude-skills | 28k | 1 repos | ~2.1k | Automated safety check: Pass | MIT | |
| Senior QAborghei/Claude-Skills | 886 | — | ~1.6k | Automated safety check: Pass | MIT | |
| React Testingaffaan-m/ECC | 276k | 1 repos | ~3.3k | Automated safety check: Pass | MIT | |
| Playwright Coretestdino-hq/playwright-skill | 390 | 1 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Playwright Testingchongdashu/vibejam-starter-pack | 149 | — | ~2.1k | Automated safety check: Pass | None |
alirezarezvani/claude-skills
Generates unit tests, integration tests, and E2E tests for React/Next.js applications.
borghei/Claude-Skills
Testing for React/Next.js with Jest, React Testing Library, and Playwright.
affaan-m/ECC
React component testing with React Testing Library, Vitest/Jest, MSW for network mocking, accessibility assertions with axe, and the decision boundary between component tests and Playwright/Cypress…
testdino-hq/playwright-skill
Battle-tested Playwright patterns for writing and debugging reliable E2E, API, component, visual, accessibility, and security tests.
chongdashu/vibejam-starter-pack
Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.
chongdashu/vibejam-starter-pack
Plan, implement, and debug frontend tests: unit/integration/E2E/visual/a11y.
asmyshlyaev177/react-horizontal-scrolling-menu
Recipes composed on the react-horizontal-scrolling-menu public API — NOT props: autoplay (setInterval + scrollNext gated on menuVisible), infinite loop/carousel (clone head/tail + scrollLeft…
asmyshlyaev177/react-horizontal-scrolling-menu
Imperative scrolling for react-horizontal-scrolling-menu: scrollToItem(getItemById(id), behavior, inline, block), scrollNext/scrollPrev, apiRef for controlling the menu from outside (fire methods…
asmyshlyaev177/react-horizontal-scrolling-menu
Wire mouse, wheel and touch input for react-horizontal-scrolling-menu: onWheel/onScroll are plain (api, event) = void callbacks, while ALL mouse/touch props (onMouseDown, onMouseUp, onMouseMove…
asmyshlyaev177/react-horizontal-scrolling-menu
Detect and upgrade pre-v8 react-horizontal-scrolling-menu patterns that agents trained on older data still generate: destructured visibleElements/isFirstItemVisible/isLastItemVisible/initComplete…
asmyshlyaev177/react-horizontal-scrolling-menu
Build a working react-horizontal-scrolling-menu: install, the mandatory 'react-horizontal-scrolling-menu/dist/styles.css' import, ScrollMenu with a unique itemId per child, arrow components via…
asmyshlyaev177/react-horizontal-scrolling-menu
Animate react-horizontal-scrolling-menu scrolling and build right-to-left menus: noPolyfill defaults to true since v8, so transitionDuration (default 500), a custom-easing-function…
Works with
Categories
Server rendering and testing for react-horizontal-scrolling-menu: the library is client-only ('use client' required in React Server Components, else "createContext is not a function"), SSR first…. Menu Testing Ssr is an agent skill from asmyshlyaev177/react-horizontal-scrolling-menu.
Menu Testing Ssr fits situations like: tasks that involve Unit testing; tasks that involve Browser testing.
Run `npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a claude-code`. Or copy the skill folder (skills/menu-testing-ssr in asmyshlyaev177/react-horizontal-scrolling-menu) into .claude/skills/menu-testing-ssr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a codex`. Or copy the skill folder (skills/menu-testing-ssr in asmyshlyaev177/react-horizontal-scrolling-menu) into .agents/skills/menu-testing-ssr in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add asmyshlyaev177/react-horizontal-scrolling-menu --skill menu-testing-ssr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/menu-testing-ssr, .gemini/skills/menu-testing-ssr, .github/skills/menu-testing-ssr and .opencode/skills/menu-testing-ssr in your project.
SKILL.md names no scripts, command-line tools or credentials: Menu Testing Ssr is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Menu Testing Ssr is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Menu Testing Ssr: Senior QA (alirezarezvani/claude-skills, 28k stars), Senior QA (borghei/Claude-Skills, 886 stars), React Testing (affaan-m/ECC, 276k stars) and Playwright Core (testdino-hq/playwright-skill, 390 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
asmyshlyaev177 (a GitHub user) maintains it in asmyshlyaev177/react-horizontal-scrolling-menu, which has 790 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 1, 2026.
Source: asmyshlyaev177/react-horizontal-scrolling-menu on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.