React Frontend Development Guidelines
diet103/claude-code-infrastructure-showcase
Guidelines for React 18 and TypeScript apps covering Suspense data fetching, lazy loading, feature folders, MUI v7 styling, TanStack Router and performance.
Sets the file structure, typing and Data API pattern for writing a new Bootstrap-style JavaScript component class in Tabler's vendored port of Bootstrap's JS.
$ npx skills add tabler/tabler --skill bootstrap-component -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tabler/tabler bootstrap-component --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/tabler/tabler.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/bootstrap-component .claude/skills/bootstrap-component && 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 "bootstrap-component" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/bootstrap-component into .claude/skills/bootstrap-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bootstrap-component", 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/tabler/tabler/tree/dev/.agents/skills/bootstrap-componentType 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 tabler/tabler --skill bootstrap-component -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tabler/tabler bootstrap-component --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/bootstrap-component .agents/skills/bootstrap-component && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "bootstrap-component" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/bootstrap-component into .agents/skills/bootstrap-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bootstrap-component", 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 tabler/tabler --skill bootstrap-component -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tabler/tabler bootstrap-component --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/bootstrap-component .cursor/skills/bootstrap-component && 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 "bootstrap-component" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/bootstrap-component into .cursor/skills/bootstrap-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bootstrap-component", 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/tabler/tabler.git --path .agents/skills/bootstrap-component--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 tabler/tabler --skill bootstrap-component -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tabler/tabler bootstrap-component --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/bootstrap-component .gemini/skills/bootstrap-component && 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 "bootstrap-component" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/bootstrap-component into .gemini/skills/bootstrap-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bootstrap-component", 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 tabler/tabler bootstrap-componentInstalls 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 tabler/tabler --skill bootstrap-component -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/bootstrap-component .github/skills/bootstrap-component && 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 "bootstrap-component" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/bootstrap-component into .github/skills/bootstrap-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bootstrap-component", 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 tabler/tabler --skill bootstrap-component -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tabler/tabler bootstrap-component --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/bootstrap-component .opencode/skills/bootstrap-component && 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 "bootstrap-component" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/bootstrap-component into .opencode/skills/bootstrap-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "bootstrap-component", 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.
bootstrap-componentSets the file structure, typing and Data API pattern for writing a new Bootstrap-style JavaScript component class in Tabler's vendored port of Bootstrap's JS.
The skill lays out the fixed order a new component file in core/js/src/bootstrap/ must follow: a license header, imports such as BaseComponent and EventHandler, type and interface definitions, naming constants, a typed Default and DefaultType pair, the component class itself, an optional Data API section, and a default export. It expects the component to extend BaseComponent and to merge configuration the same way existing components do, through _getConfig and its internal merge chain.
Typing rules are strict: ComponentConfig and ComponentConfigInput types, declared private fields, explicit method signatures, and no use of any anywhere in core/js/src, since the project's tsconfig is strict. It prefers private class fields over the private keyword and shows how to type event handlers and cast delegate targets. The skill explicitly does not cover building, testing or the size budget, which belong to a separate core-js skill.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit dcacb65. 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:
pnpmFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
github.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
EVENT_KEYDATA_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Tabler Bootstrap Component Rules loads about 2.2k tokens when it runs. Until then it costs about 157 tokens; SKILL.md has 610 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 tabler/tabler at commit dcacb65, republished under its MIT licence (© tabler). 610 words, ~2,190 tokens.
.claude/skills/bootstrap-component/SKILL.md (or your agent's skills folder).You are a master of JavaScript and TypeScript.
The points below are the baseline for every new component class in core/js/src/bootstrap/. Read the core-js skill first for what that directory is (a vendored port of Bootstrap's JavaScript), how it is built, tested and size-budgeted.
In this order:
Bootstrap toggler.ts).BaseComponent, EventHandler, optionally Manipulator, SelectorEngine, helpers from ./util/*.ComponentConfig, ComponentConfigInput).NAME, DATA_KEY, EVENT_KEY, selectors, classes, event names.Default and DefaultType with TS types.Define type ComponentConfig and type ComponentConfigInput:
type ComponentConfig = {
attribute: string
value: string | number | boolean | null
}
type ComponentConfigInput = Partial<ComponentConfig> & Record<string, unknown>Type Default as ComponentConfig.
Type DefaultType as Record<keyof ComponentConfig, string>.
In the class, declare:
declare _element: HTMLElement (or a more specific element type).declare _config: ComponentConfig.declare _isTransitioning: boolean (when needed).Type method signatures explicitly (show(): void, hide(): void).
EventHandler.trigger(...) can return null — use ?.defaultPrevented.
Use Event for handlers, and cast when you need specifics (const keyboardEvent = event as KeyboardEvent). EventHandler.on is generic, so (event: KeyboardEvent) => … type-checks without a cast; for event.delegateTarget cast to DelegatedEvent from ./dom/event-handler.
core/tsconfig.json is strict and core/js/src has no any at all, so a missing null check or an implicit any fails pnpm run type-check. Reach for unknown plus a type guard, or a small named type, instead of any, [key: string]: any or as any.
Prefer modern syntax like #private class fields over the private keyword.
super(element, config as Record<string, unknown>).Manipulator.getDataAttributes(...) and merge with Default. BaseComponent._getConfig already does this through _mergeConfigObj → _configAfterMerge → _typeCheckConfig._getConfig (or _configAfterMerge).Use constants in the format EVENT_${NAME} and CLASS_NAME_*.
Build events with EVENT_KEY and DATA_KEY (as in alert.ts):
const NAME = 'toggler'
const DATA_KEY = 'bs.toggler'
const EVENT_KEY = `.${DATA_KEY}`
const EVENT_TOGGLE = `toggle${EVENT_KEY}`
const EVENT_TOGGLED = `toggled${EVENT_KEY}`
const CLASS_NAME_SHOW = 'show'Fire a cancellable before event, do the work, then fire the after event.
Use only EventHandler.on/off/one/trigger.
[data-bs-toggle="name"]. The attribute API stays data-bs-*; data-tblr-* is a 2.0 change (see core-js).A/AREA and event.preventDefault().SelectorEngine.getElementFromSelector.Name.getOrCreateInstance(target, config) for data attributes../util/component-functions instead of writing the handler by hand:eventActionOnPlugin(Component, 'click', SELECTOR_DATA_TOGGLE, 'toggle') for a data-bs-toggle — resolves the targets (data-bs-target / href, or the trigger itself), skips .disabled / :disabled, prevents the default on A/AREA, and calls the method on getOrCreateInstance of every target. An optional
fifth argument receives { targets, event, instances }.enableDismissTrigger(Component, 'close') for a data-bs-dismiss.EventHandler.on(document, ...) handler yourself only when the trigger needs config from data attributes or other custom logic.show, hide, toggle, dispose._queueCallback and _isAnimated.static get NAME, static get Default, static get DefaultType.core/js/src/bootstrap.ts (named export and the bootstrap namespace object), otherwise it never ships.// Getters / // Public / // Private section comments).EventHandler and SelectorEngine, unless the component requires otherwise./**
* --------------------------------------------------------------------------
* Bootstrap toggler.ts
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
import BaseComponent from './base-component'
import EventHandler from './dom/event-handler'
import { eventActionOnPlugin } from './util/component-functions'
type ComponentConfig = {
attribute: string
value: string | number | boolean | null
}
type ComponentConfigInput = Partial<ComponentConfig> & Record<string, unknown>
/**
* Constants
*/
const NAME = 'toggler'
const DATA_KEY = 'bs.toggler'
const EVENT_KEY = `.${DATA_KEY}`
const EVENT_TOGGLE = `toggle${EVENT_KEY}`
const EVENT_TOGGLED = `toggled${EVENT_KEY}`
const EVENT_CLICK = 'click'
const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="toggler"]'
const DefaultType: Record<keyof ComponentConfig, string> = {
attribute: 'string',
value: '(string|number|boolean)',
}
const Default: ComponentConfig = {
attribute: 'class',
value: null,
}
/**
* Class definition
*/
class Toggler extends BaseComponent {
declare _element: HTMLElement
declare _config: ComponentConfig
constructor(element?: Element | string | null, config?: ComponentConfigInput | null) {
super(element as string | HTMLElement, (config ?? undefined) as Record<string, unknown>)
}
// Getters
static get Default(): ComponentConfig {
return Default
}
static get DefaultType(): Record<keyof ComponentConfig, string> {
return DefaultType
}
static get NAME(): string {
return NAME
}
// Public
toggle(): void {
const toggleEvent = EventHandler.trigger(this._element, EVENT_TOGGLE)
if (toggleEvent?.defaultPrevented) {
return
}
this._execute()
EventHandler.trigger(this._element, EVENT_TOGGLED)
}
// Private
_execute(): void {
const { attribute, value } = this._config
if (attribute === 'class') {
if (value) {
this._element.classList.toggle(String(value))
}
return
}
// Compare as strings since getAttribute() always returns a string
if (this._element.getAttribute(attribute) === String(value)) {
this._element.removeAttribute(attribute)
return
}
this._element.setAttribute(attribute, String(value))
}
}
/**
* Data API implementation
*/
eventActionOnPlugin(Toggler, EVENT_CLICK, SELECTOR_DATA_TOGGLE, 'toggle')
export default TogglerComponentConfig / ComponentConfigInput defined; Default and DefaultType typeddeclare _element / declare _config in the class, explicit return typesEVENT_* and CLASS_NAME_* constants, ?.defaultPrevented on cancellable events[data-bs-toggle="name"] through eventActionOnPlugin (or a hand-written handler with the A/AREA guard and getOrCreateInstance)show / hide / toggle / disposecore/js/src/bootstrap.tsjs/tests/unit/, and the core-js checklist (type-check, prettier, bundlewatch)© tabler, 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 .agents/skills/bootstrap-component of tabler/tabler.
Open the folder on GitHubat commit dcacb65
Tabler Bootstrap Component Rules 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 |
|---|---|---|---|---|---|---|
| Tabler Bootstrap Component Rules this skilltabler/tabler | 42k | — | ~2.2k | Automated safety check: Pass | MIT | |
| React Frontend Development Guidelinesdiet103/claude-code-infrastructure-showcase | 10k | 2 repos | ~2.9k | Automated safety check: Pass | MIT | |
| Frontend UIoomol-lab/open-flow | 223 | — | ~857 | Automated safety check: Pass | Apache-2.0 | |
| Vue Expert (JavaScript)Jeffallan/claude-skills | 12k | — | ~1.6k | Automated safety check: Pass | MIT | |
| Typescript Rulesshinpr/claude-code-workflows | 690 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Creating Docs Code Exampleshandsontable/handsontable | 22k | — | ~2.2k | Automated safety check: Pass | Custom licence |
diet103/claude-code-infrastructure-showcase
Guidelines for React 18 and TypeScript apps covering Suspense data fetching, lazy loading, feature folders, MUI v7 styling, TanStack Router and performance.
oomol-lab/open-flow
Implement and review Open Flow frontend components, styling, layout, and interactions.
Jeffallan/claude-skills
Builds Vue 3 apps in plain JavaScript with JSDoc typing instead of TypeScript: script setup components, composables, Pinia and Vitest, with ESLint JSDoc coverage checks.
shinpr/claude-code-workflows
React/TypeScript frontend development rules including type safety, component design, state management, and error handling.
handsontable/handsontable
Sets the rules for writing Handsontable documentation examples in JavaScript, TypeScript, React, Angular and Vue, with the imports, registration and licence key each needs.
wevm/wagmi
Walks through adding a Wagmi feature across its layers: a Viem-based core action, TanStack Query options, and React and Vue bindings.
tabler/tabler
Starts the right Tabler dev server, keeps it from clashing with builds and verifies changes in the browser before a page or component is handed back.
tabler/tabler
Rules for adding or fixing client-side scripts in Tabler's Astro components so the copied preview HTML stays readable, self-contained and runs in the right order.
tabler/tabler
Writes or updates the classnames front matter that renders the class table at the end of a Tabler component docs page.
tabler/tabler
Guidance for changing the Tabler framework's own JavaScript in core/js: the tabler.js and tabler-theme.js bundles, the Bootstrap port and their tests.
tabler/tabler
Rules for adding or changing styles in Tabler's core/scss framework: file placement, custom properties, dark mode, RTL, tests and build gates.
tabler/tabler
Builds or updates a Tabler component preview page under preview/pages, covering the page skeleton, header, and card grid conventions.
Works with
Categories
Sets the file structure, typing and Data API pattern for writing a new Bootstrap-style JavaScript component class in Tabler's vendored port of Bootstrap's JS. The skill lays out the fixed order a new component file in core/js/src/bootstrap/ must follow: a license header, imports such as BaseComponent and EventHandler, type and interface definitions, naming constants, a typed Default and DefaultType pair, the component class itself, an optional Data API section, and a default export. It expects the component to extend BaseComponent and to merge configuration the same way existing components do, through _getConfig and its internal merge chain.
Tabler Bootstrap Component Rules fits situations like: adding a new Bootstrap-style component such as a toggler, dialog or stepper to Tabler; bringing an existing component class up to the current typing and Data API baseline; reviewing a new component file for the correct section order and types.
Run `npx skills add tabler/tabler --skill bootstrap-component -a claude-code`. Or copy the skill folder (.agents/skills/bootstrap-component in tabler/tabler) into .claude/skills/bootstrap-component in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tabler/tabler --skill bootstrap-component -a codex`. Or copy the skill folder (.agents/skills/bootstrap-component in tabler/tabler) into .agents/skills/bootstrap-component 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 tabler/tabler --skill bootstrap-component -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/bootstrap-component, .gemini/skills/bootstrap-component, .github/skills/bootstrap-component and .opencode/skills/bootstrap-component in your project.
Going by SKILL.md and its folder, Tabler Bootstrap Component Rules needs the command-line tools its instructions call (pnpm) and credentials named EVENT_KEY and DATA_KEY. Our summary lists: A TypeScript build with strict mode, as configured in core/tsconfig.json.
SKILL.md names 1 domain. In commands or code: github.com; the agent is likely to contact it when it follows the instructions. 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.
Tabler Bootstrap Component Rules is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.8k 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 Tabler Bootstrap Component Rules: React Frontend Development Guidelines (diet103/claude-code-infrastructure-showcase, 10k stars), Frontend UI (oomol-lab/open-flow, 223 stars), Vue Expert (JavaScript) (Jeffallan/claude-skills, 12k stars) and Typescript Rules (shinpr/claude-code-workflows, 690 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tabler (a GitHub organization) maintains it in tabler/tabler, which has 41,821 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 6, 2026.
Source: tabler/tabler on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.