sl-design-system/components/implement-design-angular
Claude Code and agent skill by sl-design-system/components
- community
Checking that the SKILL.md file is still in the repository.
Angular implementation conventions for the /implement-design pipeline. Loaded on demand by component-implementer (and component-author) when the chosen framework is Angular.
Install
npx vskill@latest install sl-design-system/components/implement-design-angularSKILL.md
Implementing an SLDS-consuming component in Angular
This is the framework skill for Angular in the /implement-design pipeline. It maps the pipeline's design principles onto Angular idioms. The SLDS components themselves are Lit web components published as @sl-design-system/*; an Angular component consumes them (via the @sl-design-system/angular wrappers, or the raw custom elements). You are authoring an Angular component that reproduces the Figma design.
Apply the shared design principles
These principles from ../implement-design/component-conventions.md (relative to this skill's folder; the orchestrator also passes its absolute path) are framework-agnostic — follow them (ignore that file's Lit-specific mechanics: the .css + { type: 'css' } import / no-build-step, ScopedElementsMixin, Icon.register, @lit/localize, register.ts, the @event/EventEmitter decorator):
- Reproduce the design's content via data ownership — the root/page component owns the data (a service /
HttpClientfetch; a typed mock in an example with a comment) and passes subsets to presentational child components. Children don't fetch; the story/host doesn't fill in fixed design content. - Pass a cohesive "model" object, not many scalar props — a child that renders several related fields takes one typed object `@Input()` (with an exported interface), the way a real app hands a child its slice of the domain model; split into separate inputs only for genuinely independent values. Use the Shared Types / Contracts from the decomposition verbatim. The model holds data + stable keys only — no translated strings (localize in the template/component keyed off the key), no structural config (column/tab/option sets are constants in the component).
- Lists: be conservative — a repeated row is usually a
<ul>/<li>(or semantic list) + CSS with@for, not a component per row; build a row component only for genuine internal complexity. - Design tokens only — no
var()fallbacks; light-mode semantic tokens even for a dark design (theme switching handles dark); logical properties; prefer styling a component's::part()over wrapper<div>s. - No `<main>` (host app owns it); one `<sl-form>` wrapping all controls + the action buttons, colocated in the same component as the controls (not a parent wrapping a child); tabs use
<sl-tab-group>+<sl-tab>only (no<sl-tab-panel>), rendering the active tab's content on demand. - A basic Storybook story is authored during implementation (before visual validation), and Stage 5 scope follows the output location — full test/docs/changeset set only for a published package; an example gets just the component + an enriched story.
Angular component conventions
- Standalone components (
standalone: true), one component per folder, kebab-case selector (app-prefixed, e.g.app-course-settings-page). Files:<name>.component.ts,<name>.component.html,<name>.component.scss. - The SLDS elements are custom elements, so add
schemas: [CUSTOM_ELEMENTS_SCHEMA]to the component, or import the matching wrapper components from@sl-design-system/angular(seepackages/angular— wrappers re-emit events and proxy inputs viaCePassthrough). Prefer the@sl-design-system/angularwrappers when one exists for the element; fall back to the raw custom element +CUSTOM_ELEMENTS_SCHEMAotherwise. - Inputs/Outputs: presentational data in via
@Input()(orinput()signals on Angular ≥17); user actions out via@Output() ... = new EventEmitter<…>(). The root page emits the form-level events (save/cancel). - Templates: bind SLDS element attributes/properties with Angular binding (
[heading]="…",[value]="…",(sl-change)="…"). Component-owned children compose in the template; there is no scoped-registry concern (custom elements register globally via theirregister.jsimport — import@sl-design-system/<x>/register.jsinmain.ts/the component, or rely on the Angular wrapper's import). - Forms: for a page of controls + actions, wrap them in a single
<sl-form>and read its value / callreportValidity()via a@ViewChild('form')ref, or use Angular reactive forms bound to the SLDS controls — match the established pattern inpackages/angular/stories/forms.stories.ts. - Styles:
<name>.component.scss,ViewEncapsulationdefault; SLDS design tokens as above. Angular intentionally keeps `.scss` (its compiler handles it) — the Lit.css+{ type: 'css' }import-attribute approach is a Vite/Lit-only mechanism and does not apply here. No build step beyond Angular's own.
Icons
- Register FontAwesome icons the same way the app does (
Icon.register(faX)from@sl-design-system/icon+@fortawesome/pro-*-svg-icons), typically once in app setup or in the component that renders<sl-icon name="...">.
i18n (when enabled)
- Use Angular's built-in i18n:
i18nattributes in templates (or$localizetagged strings in TS) with stable@@ids (e.g.@@courseSettings.tabOverview). Source localeen; a non-English design's strings become English sources with the original as a translation. Localize in the displaying component, keyed off the model's data/keys — don't pass translated text through@Input()models. Per-record free text (names/titles) is rendered directly.
Build / verify
- Type-check / build with the Angular toolchain (
ng build/ the project's tsconfig). Run the Angular Storybook (packages/angularusesng run angular:storybook) or the app's dev server for Stage 4 visual validation. - Mirror existing patterns in
packages/angular/(standalone components,CePassthroughwrappers, stories) — open a neighbour there before writing.
This is the starting Angular convention set. Ifpackages/angularreveals a more specific established pattern for a given concern, follow that and note any deviation in your report.
Security
- Security scanPassed, 91 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingtools/implement-design-plugin/skills/implement-design-angular/SKILL.md
Popularity
- Repository stars
- 67
- Repository forks
- 8
- 7-day trend score
- 21
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/sl-design-system/components/implement-design-angular)