Boneyard
0xGF/boneyard
Use boneyard-js to add, configure, debug, or rebuild skeleton screens.
Generate Lit Component from Angular Implementation. An agent skill from swimlane/ngx-ui.
$ npx skills add swimlane/ngx-ui --skill generate-swim-from-angular -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install swimlane/ngx-ui generate-swim-from-angular --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/swimlane/ngx-ui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/generate-swim-from-angular .claude/skills/generate-swim-from-angular && 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 "generate-swim-from-angular" agent skill from https://github.com/swimlane/ngx-ui/tree/master/.cursor/skills/generate-swim-from-angular into .claude/skills/generate-swim-from-angular/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-swim-from-angular", 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/swimlane/ngx-ui/tree/master/.cursor/skills/generate-swim-from-angularType 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 swimlane/ngx-ui --skill generate-swim-from-angular -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install swimlane/ngx-ui generate-swim-from-angular --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swimlane/ngx-ui.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.cursor/skills/generate-swim-from-angular .agents/skills/generate-swim-from-angular && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "generate-swim-from-angular" agent skill from https://github.com/swimlane/ngx-ui/tree/master/.cursor/skills/generate-swim-from-angular into .agents/skills/generate-swim-from-angular/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-swim-from-angular", 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 swimlane/ngx-ui --skill generate-swim-from-angular -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install swimlane/ngx-ui generate-swim-from-angular --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swimlane/ngx-ui.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.cursor/skills/generate-swim-from-angular .cursor/skills/generate-swim-from-angular && 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 "generate-swim-from-angular" agent skill from https://github.com/swimlane/ngx-ui/tree/master/.cursor/skills/generate-swim-from-angular into .cursor/skills/generate-swim-from-angular/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-swim-from-angular", 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/swimlane/ngx-ui.git --path .cursor/skills/generate-swim-from-angular--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 swimlane/ngx-ui --skill generate-swim-from-angular -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install swimlane/ngx-ui generate-swim-from-angular --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swimlane/ngx-ui.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.cursor/skills/generate-swim-from-angular .gemini/skills/generate-swim-from-angular && 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 "generate-swim-from-angular" agent skill from https://github.com/swimlane/ngx-ui/tree/master/.cursor/skills/generate-swim-from-angular into .gemini/skills/generate-swim-from-angular/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-swim-from-angular", 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 swimlane/ngx-ui generate-swim-from-angularInstalls 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 swimlane/ngx-ui --skill generate-swim-from-angular -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/swimlane/ngx-ui.git skills-src && mkdir -p .github/skills && cp -r skills-src/.cursor/skills/generate-swim-from-angular .github/skills/generate-swim-from-angular && 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 "generate-swim-from-angular" agent skill from https://github.com/swimlane/ngx-ui/tree/master/.cursor/skills/generate-swim-from-angular into .github/skills/generate-swim-from-angular/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-swim-from-angular", 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 swimlane/ngx-ui --skill generate-swim-from-angular -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install swimlane/ngx-ui generate-swim-from-angular --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swimlane/ngx-ui.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.cursor/skills/generate-swim-from-angular .opencode/skills/generate-swim-from-angular && 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 "generate-swim-from-angular" agent skill from https://github.com/swimlane/ngx-ui/tree/master/.cursor/skills/generate-swim-from-angular into .opencode/skills/generate-swim-from-angular/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-swim-from-angular", 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.
generate-swim-from-angularGenerate Lit Component from Angular Implementation. An agent skill from swimlane/ngx-ui.
Generate Swim From Angular is an agent skill from swimlane/ngx-ui. Generate Lit Component from Angular Implementation
Its SKILL.md is about 4.2k 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. It works with Angular. The repository describes itself as: 🚀 Style and Component Library for Angular. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit c98542d. 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.
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.
Generate Swim From Angular loads about 4.2k tokens when it runs. Until then it costs about 19 tokens; SKILL.md has 2,006 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 swimlane/ngx-ui at commit c98542d, republished under its MIT licence (© swimlane). 2,006 words, ~4,162 tokens.
.claude/skills/generate-swim-from-angular/SKILL.md (or your agent's skills folder).Generate a Lit web component in @swimlane/swim-ui that mirrors the design and behavior of an Angular component from @swimlane/ngx-ui. The output must match existing Lit patterns and design system parity.
/generate-swim-from-angular checkbox), use that as the target..component.ts), template (.html), and styles (.scss) when converting.projects/swimlane/swim-ui/src/components/<name>/.<name>.component.ts – main Lit class<name>.styles.ts – component styles (Lit css template)index.ts – re-exports for the component and any enums/interfaces*.enum.ts, *.interface.ts when the Angular component defines enums or shared typesprojects/swimlane/swim-ui/src/index.ts to export the new component (add export * from './components/<name>';).Follow these existing Lit components for structure, patterns, and style:
projects/swimlane/swim-ui/src/components/button/ – props, state, promise handling, stylesprojects/swimlane/swim-ui/src/components/input/ – form-associated, validation, slots, ElementInternalsprojects/swimlane/swim-ui/src/components/select/ – options, dropdown, filter, form associationRead their .component.ts, .styles.ts, and index.ts to match style and API documentation.
Apply these mappings consistently:
| Angular | Lit |
|---|---|
@Input() | @property() with correct type, reflect: true where needed, attribute for kebab-case |
@Output() x = new EventEmitter<T>() | In handlers: this.dispatchEvent(new CustomEvent('x', { detail: value, bubbles: true })) and document with JSDoc @fires x |
<ng-content> / <ng-content select="..."> | <slot></slot> / <slot name="..."></slot> |
@ContentChild / @ViewChild | @query('selector') for DOM refs; use slots for content projection |
Template (.html) | render() returning html template literal |
Styles (.scss) | Separate *.styles.ts with css tagged template; compose baseStyles and component styles in static styles = [baseStyles, componentStyles]. Use BEM for class names (see CSS section below). |
Host classes (e.g. [class.in-progress]) | :host([state='in-progress']) in styles and/or reflected attributes on the host |
ngOnInit / ngOnChanges | connectedCallback(), updated(), firstUpdated() as appropriate |
Angular coercion (@angular/cdk/coercion, etc.) | Use projects/swimlane/swim-ui/src/utils/coerce.ts: coerceBooleanProperty, coerceNumberProperty |
Enums (e.g. in button-state.enum.ts) | Keep as *.enum.ts in the component folder and export from index.ts |
projects/swimlane/swim-ui/src/styles/base.ts (and tokens) and mirror ngx-ui (e.g. var(--blue-500), var(--grey-600), var(--red-500), var(--radius-4), var(--font-size-m)). Refer to ngx-ui's SCSS variables/tokens to pick the correct variable names.#..., rgb(...), or rgba(...) for design tokens; use var(--...) so theming and consistency are preserved.swim-button → class like swim-button or a short block name).block__element (e.g. swim-button__content, swim-button__icon).block__element--modifier or block--modifier (e.g. swim-button--primary, swim-button__icon--spinning).render() template and style them in *.styles.ts so selectors are clear and predictable.baseStyles from projects/swimlane/swim-ui/src/styles/ (and styles/base.ts). Rely on CSS variables (see above); do not introduce new hardcoded colors or spacing that contradict ngx-ui.ngx-<name> to swim-<name> (e.g. ngx-button → swim-button). Use @customElement('swim-<name>').@slot, @fires, and @csspart where applicable.static formAssociated = true and use ElementInternals for value and validation (see input and select).Components must meet WCAG 2.1 expectations so they are usable by keyboard, screen readers, and assistive tech. Apply these consistently:
role="button" only when not a <button>, role="tablist" / role="tab" / role="tabpanel", role="combobox", role="listbox").aria-label, aria-labelledby, aria-describedby, aria-expanded, aria-selected, aria-controls, aria-disabled, aria-invalid, aria-required, aria-hidden where they convey state or relationships. Keep id / aria-controls / aria-labelledby links valid and stable.:focus-visible with outline) and no outline: none without a visible replacement. When opening overlays or changing active item, move focus as needed (e.g. to first focusable or selected item).aria-label, or aria-labelledby). Use <label> + id or ElementInternals for form-associated controls.aria-selected, aria-checked, aria-expanded, aria-disabled) and keep it in sync with the component.Keep components efficient and avoid unnecessary work:
@property() for public API and @state() for internal UI state. Avoid reflecting internal state as attributes unless needed for styling or accessibility.requestUpdate() or change properties when data actually changes. In setters, guard with if (this._x !== next) before assigning and dispatching.slot.assignedElements() / slot.assignedNodes() in firstUpdated() or in response to slotchange; avoid querying on every render() or in tight loops.firstUpdated() or connectedCallback(); always remove in disconnectedCallback() (e.g. slotchange, document/window click-outside, resize, drag). Use bound handler references (e.g. this._slotChangeBound = () => this._onSlotChange();) so the same reference can be passed to removeEventListener. Prefer one delegated listener over many per-item listeners where practical.requestAnimationFrame, setTimeout(..., 0)) so initial render stays fast. Avoid synchronous layout thrash (e.g. reading then writing layout properties repeatedly).static styles as shared css template literals; avoid defining new style objects per instance. Reuse baseStyles and component-level css blocks.updated(changedProperties) to run logic only when specific properties change; avoid side effects in render().To avoid leaks when components are removed from the DOM (e.g. navigation, conditional rendering), every component must clean up in disconnectedCallback():
Event listeners
addEventListener and removeEventListener.slotchange, handle drag/dblclick, panel mouseenter/mouseleave.firstUpdated() to a slot or element from @query, store the element and the bound handler so you can remove in disconnectedCallback().Timers
setTimeout or setInterval (and requestAnimationFrame if recurring): call clearTimeout / clearInterval and set the stored id to undefined.Pattern
private _slotChangeBound = () => this._onSlotChange();) so the same reference is used for add and remove.disconnectedCallback(), remove listeners and clear timers before calling super.disconnectedCallback().Components that add listeners on other elements
firstUpdated() (e.g. overlay panel), keep a reference to that element and the bound handlers, and remove them in disconnectedCallback() (and optionally when the overlay closes, to avoid duplicate listeners on re-open).Before writing the Lit demo, read the corresponding Angular demo page under the repo root src/app/ so the Lit demo is very close to how the Angular demo is designed.
<ngx-tabs> with "Examples" and "API"; Lit uses <swim-section section-title="..."> for each logical block. Use the same section titles where applicable (e.g. "Demo", "Disabled", "Events and FormGroup", "Usage").Finding the Angular demo (do this dynamically):
Do not rely on a fixed list of component paths. For the component you are converting (e.g. button, checkbox, tooltip):
src/app/ for directories named *-page (e.g. src/app/forms/, src/app/components/, src/app/dialogs/, src/app/elements/ contain such folders).checkbox → checkbox-page, button → buttons-page, button-group → button-group-page, tooltip → tooltip-page), orngx-<name> (e.g. ngx-checkbox, ngx-button) in *.component.html files under src/app/ and opening the file that contains it.*-page.component.html) as the single source for section structure, titles, and example content.This way every component's demo is found the same way and the command stays valid as new Angular demo pages are added.
projects/swimlane/swim-ui/src/components/<name>/.index.ts exports and update projects/swimlane/swim-ui/src/index.ts.declare global { interface HTMLElementTagNameMap { 'swim-<name>': ComponentClass; } } block for TypeScript.index.html (e.g. .section-divider, .page-title, .section-desc, .demo-row--column, .demo-label--after, .demo-pre).<swim-section section-title="..."> with the same titles as the Angular demo's <ngx-section sectionTitle="..."> blocks. Wrap each <section class="section"> content in <swim-section section-title="...">. Use section-collapsible="false" only when the Angular demo does. Ensure section component is imported in demo/src/main.ts if used.projects/swimlane/swim-ui/demo/public/sections/<name>.html. Start the file with <hr class="section-divider"> then <h1 id="component-id" class="page-title">...</h1> and <p class="subtitle">...</p> so the nav link (e.g. href="#checkbox") works. Add <name> to the SECTION_FILES array in demo/src/main.ts. Add a nav link in demo/index.html (e.g. <a class="sub-nav-item" href="#component-id">Label</a> under the appropriate group). Structure of the section file:<section class="section"> with <swim-section section-title="..."> matching Angular section titles, showing: basic usage, all variants/sizes, states (e.g. disabled), interactive example, then Usage with <pre class="demo-pre"><code>...</code></pre> (import + minimal HTML).<name> to SECTION_FILES if using section files; add any DOMContentLoaded setup (e.g. event listeners, option data) so every interactive demo works.Produce a complete, usable Lit component that mirrors the Angular implementation with best quality. Components must be accessible (WCAG 2.1) and efficient in performance; the demo must match the Angular demo design and all demo functionality must work after validation.
After generating the component and demo:
projects/swimlane/swim-ui/demo). If you have a way to open or inspect a browser tab (e.g. Cursor's browser tools or user opening the page), use it.demo/src/main.ts (e.g. buttons that set promise, select options, event handlers) is wired correctly and runs without errors in the console.getElementById), event names, property names, or component API usage so the demo behaves as in the Angular version.© swimlane, 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 .cursor/skills/generate-swim-from-angular of swimlane/ngx-ui.
Open the folder on GitHubat commit c98542d
Generate Swim From Angular 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 |
|---|---|---|---|---|---|---|
| Generate Swim From Angular this skillswimlane/ngx-ui | 735 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Boneyard0xGF/boneyard | 7.5k | — | ~2.2k | Automated safety check: Notes | MIT | |
| Abp Angularabpframework/abp | 14k | — | ~1.2k | Automated safety check: Pass | LGPL-3.0 | |
| Spartan UI Angular Componentsspartan-ng/spartan | 2.9k | — | ~2.4k | Automated safety check: Pass | MIT | |
| Angular Developermxtommy/Kip | 127 | 4 repos | ~2.4k | Automated safety check: Pass | MIT | |
| Feature SyncNG-ZORRO/ng-zorro-antd | 9.2k | — | ~840 | Automated safety check: Pass | MIT |
0xGF/boneyard
Use boneyard-js to add, configure, debug, or rebuild skeleton screens.
abpframework/abp
ABP Angular UI patterns - generate-proxy, ListService, PermissionGuard, abpLocalization pipe, ConfirmationService, ToasterService, ConfigStateService.
spartan-ng/spartan
Helps add, compose, debug and style spartan/ui components in Angular projects, using its Brain headless primitives and Helm styled layer through the @spartan-ng/cli generators.
mxtommy/Kip
Generates Angular code and provides architectural guidance. An agent skill from mxtommy/Kip.
NG-ZORRO/ng-zorro-antd
Sync an Ant Design React component or feature into NG-ZORRO.
Simon-He95/markstream-vue
Install and wire markstream-vue, markstream-react, markstream-vue2, markstream-angular, or markstream-svelte into an existing repository.
swimlane/ngx-ui
Use Swimlane swim-ui (swim- custom elements) when building custom solutions, record widgets, or report widgets for Turbine.
swimlane/ngx-ui
Generate Swimlane Lit Element Solution (CDN). An agent skill from swimlane/ngx-ui.
Works with
Categories
Generate Lit Component from Angular Implementation. An agent skill from swimlane/ngx-ui. Generate Swim From Angular is an agent skill from swimlane/ngx-ui.
Generate Swim From Angular fits situations like: frontend & Design work in your project.
Run `npx skills add swimlane/ngx-ui --skill generate-swim-from-angular -a claude-code`. Or copy the skill folder (.cursor/skills/generate-swim-from-angular in swimlane/ngx-ui) into .claude/skills/generate-swim-from-angular in your project. Claude Code loads it when a task matches its description.
Run `npx skills add swimlane/ngx-ui --skill generate-swim-from-angular -a codex`. Or copy the skill folder (.cursor/skills/generate-swim-from-angular in swimlane/ngx-ui) into .agents/skills/generate-swim-from-angular 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 swimlane/ngx-ui --skill generate-swim-from-angular -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/generate-swim-from-angular, .gemini/skills/generate-swim-from-angular, .github/skills/generate-swim-from-angular and .opencode/skills/generate-swim-from-angular in your project.
SKILL.md names no scripts, command-line tools or credentials: Generate Swim From Angular 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.
Generate Swim From Angular is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k 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 Generate Swim From Angular: Boneyard (0xGF/boneyard, 7.5k stars), Abp Angular (abpframework/abp, 14k stars), Spartan UI Angular Components (spartan-ng/spartan, 2.9k stars) and Angular Developer (mxtommy/Kip, 127 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
swimlane (a GitHub organization) maintains it in swimlane/ngx-ui, which has 735 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 9, 2026.
Source: swimlane/ngx-ui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.