React Render Types Composition
HorusGoul/eslint-plugin-react-render-types
Composition patterns for building React components with @renders type annotations from eslint-plugin-react-render-types.
A skill your agent uses when adding JSDoc type definitions to React components in Tonic UI.
$ npx skills add trendmicro-frontend/tonic-ui --skill tonic-ui-types -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install trendmicro-frontend/tonic-ui tonic-ui-types --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/trendmicro-frontend/tonic-ui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/tonic-ui-types .claude/skills/tonic-ui-types && 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 "tonic-ui-types" agent skill from https://github.com/trendmicro-frontend/tonic-ui/tree/main/.claude/skills/tonic-ui-types into .claude/skills/tonic-ui-types/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tonic-ui-types", 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/trendmicro-frontend/tonic-ui/tree/main/.claude/skills/tonic-ui-typesType 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 trendmicro-frontend/tonic-ui --skill tonic-ui-types -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install trendmicro-frontend/tonic-ui tonic-ui-types --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trendmicro-frontend/tonic-ui.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/tonic-ui-types .agents/skills/tonic-ui-types && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tonic-ui-types" agent skill from https://github.com/trendmicro-frontend/tonic-ui/tree/main/.claude/skills/tonic-ui-types into .agents/skills/tonic-ui-types/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tonic-ui-types", 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 trendmicro-frontend/tonic-ui --skill tonic-ui-types -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install trendmicro-frontend/tonic-ui tonic-ui-types --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trendmicro-frontend/tonic-ui.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/tonic-ui-types .cursor/skills/tonic-ui-types && 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 "tonic-ui-types" agent skill from https://github.com/trendmicro-frontend/tonic-ui/tree/main/.claude/skills/tonic-ui-types into .cursor/skills/tonic-ui-types/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tonic-ui-types", 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/trendmicro-frontend/tonic-ui.git --path .claude/skills/tonic-ui-types--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 trendmicro-frontend/tonic-ui --skill tonic-ui-types -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install trendmicro-frontend/tonic-ui tonic-ui-types --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trendmicro-frontend/tonic-ui.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/tonic-ui-types .gemini/skills/tonic-ui-types && 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 "tonic-ui-types" agent skill from https://github.com/trendmicro-frontend/tonic-ui/tree/main/.claude/skills/tonic-ui-types into .gemini/skills/tonic-ui-types/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tonic-ui-types", 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 trendmicro-frontend/tonic-ui tonic-ui-typesInstalls 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 trendmicro-frontend/tonic-ui --skill tonic-ui-types -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/trendmicro-frontend/tonic-ui.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/tonic-ui-types .github/skills/tonic-ui-types && 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 "tonic-ui-types" agent skill from https://github.com/trendmicro-frontend/tonic-ui/tree/main/.claude/skills/tonic-ui-types into .github/skills/tonic-ui-types/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tonic-ui-types", 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 trendmicro-frontend/tonic-ui --skill tonic-ui-types -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install trendmicro-frontend/tonic-ui tonic-ui-types --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/trendmicro-frontend/tonic-ui.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/tonic-ui-types .opencode/skills/tonic-ui-types && 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 "tonic-ui-types" agent skill from https://github.com/trendmicro-frontend/tonic-ui/tree/main/.claude/skills/tonic-ui-types into .opencode/skills/tonic-ui-types/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tonic-ui-types", 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.
tonic-ui-typesA skill your agent uses when adding JSDoc type definitions to React components in Tonic UI.
Tonic UI Types is an agent skill from trendmicro-frontend/tonic-ui. Use this skill when adding JSDoc type definitions to React components in Tonic UI. Triggers include "add type definitions", "add JSDoc types", "document component props", or when creating new components that need type annotations.
Its SKILL.md is about 1.8k 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 Frontend & Design, covering React components and Technical documentation. It works with React. The repository describes itself as: Tonic UI is a UI component library for React, built with Emotion and Styled System. It is designed to be easy to use and easy to customize. The licence is MIT.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit b9a797e. 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.
Shell commands in SKILL.md call:
yarnFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use yarn, which can reach the network depending on how they are called.
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.
Tonic UI Types loads about 1.8k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 592 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 trendmicro-frontend/tonic-ui at commit b9a797e, republished under its MIT licence (© trendmicro-frontend). 592 words, ~1,814 tokens.
.claude/skills/tonic-ui-types/SKILL.md (or your agent's skills folder).This skill provides guidelines for adding JSDoc type definitions to React components in the Tonic UI design system.
Tonic UI uses JSDoc annotations (@typedef and @type) with global utility types to provide type information for React components. This enables better IDE support, documentation generation, and type checking.
Before adding type definitions:
forwardRef((inProps, ref) => ...) or plain (inProps) => ....<Box as="button" {...rest} />) — if so, identify which HTML element type it renders (e.g. 'div', 'button'). This determines the first type parameter of ForwardRefComponent.packages/react-docs/pages/components/[component-name]/index.page.mdx## Props sectionTwo global utility types are defined in packages/react/global.d.ts. Always use these instead of writing verbose inline types.
| Utility Type | Use When | Example |
|---|---|---|
ForwardRefComponent<E, P, R?> | forwardRef component | ForwardRefComponent<'button', ButtonProps> |
StyledFC<P> | Functional component (no ref forwarding) with StyleProps | StyledFC<TooltipProps> |
E — Intrinsic element type string (e.g. 'div', 'button', 'svg').P — Custom component props typedef.R — Ref element type. Defaults to HTMLElement. Only specify when different (e.g. SVGSVGElement).Is it a forwardRef component?
├─ Yes → ForwardRefComponent<'element', Props>
└─ No → Does it accept StyleProps?
├─ Yes → StyledFC<Props>
└─ No → React.FC<Props> (plain React type, no utility needed)@typedef BlockAdd a JSDoc @typedef block before the component declaration. Include all custom props with their types and descriptions.
/**
* @typedef {Object} ComponentNameProps
* @property {type} [propName] - Description of the property.
* @property {type} [propName=default] - Description with default value.
*/Property type reference:
{React.ReactNode} - React children or renderable content{boolean} - Boolean flags{string} - String values{number} - Numeric values{(event: React.MouseEvent<HTMLButtonElement>) => void} - Callback with typed signature{'option1' | 'option2'} - String enums{'sm' | 'md' | 'lg'} - Size variants{React.ReactNode | React.ReactNode[]} - Single or array{React.RefObject<HTMLElement>} - Ref objectsForbidden types — never use these; always spell out the full shape:
{any}, {unknown}, {function}, {Object}, {object}{Record<string, unknown>}, {{ [key: string]: unknown }}@type AnnotationAdd a @type annotation immediately before the component declaration using the appropriate utility type.
ForwardRefComponent — forwardRef + rest props spread onto a native element. The element type ('button' below) determines which native HTML props the user can pass:
/**
* @type {ForwardRefComponent<'button', ButtonProps>}
*/
const Button = forwardRef((inProps, ref) => {
const { disabled, selected, size, variant, ...rest } = useDefaultProps({ props: inProps, name: 'Button' });
// ...
return (
<ButtonBase
ref={ref}
as="button" // ← renders a <button> → element type is 'button'
{...rest} // ← rest props spread onto native element → ForwardRefComponent
/>
);
});StyledFC — no forwardRef, no ref parameter:
/**
* @type {StyledFC<TooltipProps>}
*/
const Tooltip = (inProps) => { // ← plain function, no ref → StyledFC
const { children, label, placement, ...rest } = useDefaultProps({ props: inProps, name: 'Tooltip' });
// ...
return (
<TooltipContext.Provider value={context}>
<TooltipTrigger>{children}</TooltipTrigger>
<TooltipContent {...rest}>{label}</TooltipContent>
</TooltipContext.Provider>
);
};If neither utility type fits (e.g. generic type parameters), define the type inline. See src/tabs/Tabs.js for an example.
Create packages/react/__type-tests__/components/{component-name}.test-d.tsx:
import React, { createRef } from "react";
import { ComponentName } from "@tonic-ui/react";
// Basic usage
<ComponentName>content</ComponentName>;
// With custom props
<ComponentName propName="value" />;
// With ref
const ref = createRef<HTMLElement>();
<ComponentName ref={ref} />;
// With style props
<ComponentName mt={2} px="4x" />;The type tests are compiled with tsconfig.json in the __type-tests__/ directory using strict: true and noEmit: true — they only need to compile without errors.
Type test rules:
createRef<T>() — ref type parameters are needed to test ref assignability.@ts-expect-error for negative tests — verify invalid values produce type errors.[propName] indicates optional.[propName=default] syntax.useDefaultProps — verify defaults match.{React.ChangeEventHandler<HTMLInputElement>}, never {function}.@typedef for the return shape.After modifying JSDoc type definitions:
yarn build (generates .d.ts from JSDoc)yarn test:types (validates against .test-d.tsx files)Well-typed components to use as reference:
src/link/Link.js — ForwardRefComponent<'a', LinkProps>src/button/Button.js — ForwardRefComponent<'button', ButtonProps>src/checkbox/Checkbox.js — ForwardRefComponent<'label', CheckboxProps> (has prop conflicts, handled automatically)src/accordion/AccordionBody.js — ForwardRefComponent<'div', AccordionBodyProps> (wrapper component)src/tooltip/Tooltip.js — StyledFC<TooltipProps> (no ref forwarding)src/icon/Icon.js — ForwardRefComponent<'svg', IconProps, SVGSVGElement> (custom ref type)src/tabs/Tabs.js — Generic component (inline type, not using utility)© trendmicro-frontend, 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 .claude/skills/tonic-ui-types of trendmicro-frontend/tonic-ui.
Open the folder on GitHubat commit b9a797e
Tonic UI Types 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 |
|---|---|---|---|---|---|---|
| Tonic UI Types this skilltrendmicro-frontend/tonic-ui | 133 | — | ~1.8k | Automated safety check: Pass | MIT | |
| React Render Types CompositionHorusGoul/eslint-plugin-react-render-types | 111 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Figma Implement Componentbitovi/ai-enablement-prompts | 121 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Figma Implement Componentbitovi/ai-enablement-prompts | 121 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Web Artifacts Builderanthropics/skills | 180k | 41 repos | ~769 | Automated safety check: Pass | Apache-2.0 | |
| React Router Developmentremix-run/react-router | 57k | 1 repos | ~1.5k | Automated safety check: Pass | MIT |
HorusGoul/eslint-plugin-react-render-types
Composition patterns for building React components with @renders type annotations from eslint-plugin-react-render-types.
bitovi/ai-enablement-prompts
Implement React components from Figma designs. An agent skill from bitovi/ai-enablement-prompts.
bitovi/ai-enablement-prompts
Implement React components from Figma designs. An agent skill from bitovi/ai-enablement-prompts.
anthropics/skills
Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.
remix-run/react-router
Guides work on React Router apps by first identifying whether the app uses Framework, Data or Declarative mode, then loading the matching reference and the installed package docs.
ChrisWiles/claude-code-showcase
Sets patterns for React interfaces: when to show loading spinners or skeletons, how to surface errors, how to disable buttons during async work and how to handle empty lists.
trendmicro-frontend/tonic-ui
Generate PR descriptions and changeset entries. An agent skill from trendmicro-frontend/tonic-ui.
trendmicro-frontend/tonic-ui
Author and migrate the slots / slotProps API (the useSlot hook) in this design system's React components — the architecture where slots.x replaces an internal part and slotProps.x merges props into…
trendmicro-frontend/tonic-ui
Coding patterns extracted from tonic-ui repository. An agent skill from trendmicro-frontend/tonic-ui.
Works with
Categories
A skill your agent uses when adding JSDoc type definitions to React components in Tonic UI. Tonic UI Types is an agent skill from trendmicro-frontend/tonic-ui. Use this skill when adding JSDoc type definitions to React components in Tonic UI.
Tonic UI Types fits situations like: adding JSDoc type definitions to React components in Tonic UI; include add type definitions; add JSDoc types; document component props.
Run `npx skills add trendmicro-frontend/tonic-ui --skill tonic-ui-types -a claude-code`. Or copy the skill folder (.claude/skills/tonic-ui-types in trendmicro-frontend/tonic-ui) into .claude/skills/tonic-ui-types in your project. Claude Code loads it when a task matches its description.
Run `npx skills add trendmicro-frontend/tonic-ui --skill tonic-ui-types -a codex`. Or copy the skill folder (.claude/skills/tonic-ui-types in trendmicro-frontend/tonic-ui) into .agents/skills/tonic-ui-types 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 trendmicro-frontend/tonic-ui --skill tonic-ui-types -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tonic-ui-types, .gemini/skills/tonic-ui-types, .github/skills/tonic-ui-types and .opencode/skills/tonic-ui-types in your project.
Going by SKILL.md and its folder, Tonic UI Types needs the command-line tools its instructions call (yarn).
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.
Tonic UI Types is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.3k 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 Tonic UI Types: React Render Types Composition (HorusGoul/eslint-plugin-react-render-types, 111 stars), Figma Implement Component (bitovi/ai-enablement-prompts, 121 stars), Figma Implement Component (bitovi/ai-enablement-prompts, 121 stars) and Web Artifacts Builder (anthropics/skills, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
trendmicro-frontend (a GitHub organization) maintains it in trendmicro-frontend/tonic-ui, which has 133 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 7, 2026.
Source: trendmicro-frontend/tonic-ui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.