con un clic
tonic-ui-patterns
Coding patterns extracted from tonic-ui repository
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
Coding patterns extracted from tonic-ui repository
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Generate PR descriptions and changeset entries. Use when the user mentions "PR", "pull request", "PR description", "changeset", provides a diff or describes code changes, or asks to draft a merge request. Also trigger for conventional commit message generation.
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.
Basado en la clasificación ocupacional SOC
| name | tonic-ui-patterns |
| description | Coding patterns extracted from tonic-ui repository |
| version | 1.0.0 |
| source | local-git-analysis |
| analyzed_commits | 200 |
This project uses conventional commits with scope:
| Type | Usage | Frequency |
|---|---|---|
chore | Releases, deps, tooling | ~36% |
feat | New features | ~23% |
docs | Documentation | ~18% |
ci | CI/CD workflows | ~12% |
fix | Bug fixes | ~7% |
test | Test additions | ~2% |
refactor | Code restructuring | ~1% |
Scope format: type(package/component) — e.g., feat(react/menu), fix(react/Checkbox), chore(deps-dev)
Common scopes:
react / react/<component> — Main component packagereact-hooks — Hooks packagereact-icons — Icons packagemcp — MCP server packagedeps / deps-dev — Dependency bumpsrelease — Version releaseschangesets — Changeset configPR references: Commit messages include (#<number>) at the end.
packages/
├── changelog-github/ # Custom changelog generator
├── codemod/ # Code migration tools
├── mcp/ # MCP server (TypeScript)
├── react/ # Main component library (JavaScript)
├── react-base/ # Base primitives (Box)
├── react-docs/ # Next.js documentation site
├── react-hooks/ # Shared hooks
├── react-icons/ # SVG icon components
├── styled-system/ # Styled System utilities
├── theme/ # Design tokens
└── utils/ # Shared utilities
Key: packages/react is the most frequently modified package (~38 commits in last 200).
Each component lives in packages/react/src/<component-name>/:
<component-name>/
├── ComponentName.js # Main component (forwardRef + Box base)
├── index.js # Barrel exports
├── styles.js # Style hooks (useComponentNameStyle)
├── context.js # React context (if compound component)
├── useComponentName.js # Context consumer hook
├── withComponentName.js # HOC for context injection (optional)
├── constants.js # Constants (variants, sizes)
└── __tests__/
├── ComponentName.test.js
└── __snapshots__/
└── ComponentName.test.js.snap
Components use forwardRef with useDefaultProps:
import React, { forwardRef } from 'react';
import { useDefaultProps } from '../default-props';
import { useComponentStyle } from './styles';
const Component = forwardRef((inProps, ref) => {
const {
prop1,
prop2,
...rest
} = useDefaultProps({ props: inProps, name: 'Component' });
const styleProps = useComponentStyle({ prop1 });
return (
<Box ref={ref} {...styleProps} {...rest} />
);
});
Component.displayName = 'Component';
export default Component;
For related component groups (Menu, FormControl, Accordion):
context.js) — createContext()useComponentName.js) — useContext(ComponentContext)withComponentName.js) — injects context props (optional)index.js) — named exports for all sub-componentsStyles use hooks that return style objects using Styled System tokens:
import { useColorStyle } from '../color-style';
const useComponentStyle = ({ variant }) => {
const [colorStyle] = useColorStyle();
return {
color: colorStyle.color.primary,
fontSize: 'sm',
px: '2x',
py: '1x',
};
};
Token formats: '1x', '2x', 'sm', 'md', 'lg' (Styled System spacing/sizing).
Based on recent features (Highlight, Mark, FormControl), the workflow is:
packages/react/src/<component-name>/
├── ComponentName.js
├── index.js
├── styles.js
└── __tests__/
└── ComponentName.test.js
Add to packages/react/src/index.js:
export { ComponentName } from './<component-name>';
Add to packages/react/__tests__/index.test.js to verify the export exists.
Add to packages/react-docs/pages/components/<component-name>/:
index.page.mdx — Main doc page.js) for each usage patternAdd route to packages/react-docs/config/sidebar-routes.js.
Add .changeset/<changeset-name>.md:
---
"@tonic-ui/react": minor
---
feat: Add `ComponentName` component
These files typically change together:
packages/react/src/index.js + packages/react/__tests__/index.test.js (new exports)packages/react-docs/config/sidebar-routes.js + packages/react-docs/pages/components/*/index.page.mdx (new docs)packages/react/package.json + packages/react/CHANGELOG.md + .changeset/*.md (releases)__tests__/ directories co-located with sourceComponentName.test.js__snapshots__/)@tonic-ui/react-base/test-utils/accessibility utilitiesyarn test@changesets/cli for versioningv2@tonic-ui/changelog-github generatorpublic (npm).changeset/ with descriptive names (e.g., tonic-ui-pr-1085.md).d.ts files for type definitionspx, py, color, bg), not CSS classescolorStyle.color.primary, colorStyle.color.secondary, colorStyle.color.errorexport { X } from './X' pattern