--- license: MIT name: igniteui-angular-figma-to-app description: "Builds Angular views from Figma designs with Ignite UI for Angular, supporting Indigo.Design kits, third-party kits, and plain frames. Uses Figma, Ignite UI CLI, theming, and Playwright MCP servers. WHEN TO USE: implementing a Figma design or artboard in an Ignite UI Angular project. WHEN NOT TO USE: screenshots or wireframes without a Figma file (use igniteui-angular-generate-from-image-design), single-component APIs (use igniteui-angular-components or igniteui-angular-grids), or theme-only changes (use igniteui-angular-theming)." user-invocable: true --- # Ignite UI for Angular — Figma to App Translate Figma app screens into production Angular applications built with Ignite UI for Angular. The skill accepts designs from three kinds of source. A single file often mixes them, so every component is classified individually (Phase 1f): | Tier | Source | How it maps to Ignite UI | | --- | --- | --- | | **A** | The Infragistics **Indigo.Design UI Kits** (Material, Fluent, Bootstrap, Indigo variants, light and dark) | Directly, by kit layer name. The kit variant *is* the Ignite UI design system. | | **B** | Any other component library: public kits such as Material 3, Fluent 2, Bootstrap, shadcn/ui, Untitled UI, or Ant, and in-house design systems | Variant properties are normalized to a canonical role, then mapped. The theme is fitted to a closest baseline design system. | | **C** | Plain frames, groups, and detached instances | The role is inferred from structure and visuals, with lower confidence, and the user confirms it. | Tier A gives the highest fidelity for the least effort. Tiers B and C reach high fidelity through token overrides, and record the remaining **anatomy deltas** (structural differences between the design's components and Ignite UI's) for the user to approve instead of hiding them. This skill orchestrates four MCP servers: **Figma** (design data), **Ignite UI CLI** (component docs), **Ignite UI Theming** (styles), and **Playwright** (visual validation). --- ## Required Workflow Complete all phases in order — do not skip phases or generate component code from memory. Every component selector, input name, and import path must come from `get_doc` results or, where no doc exists in the catalog, from the `igniteui-angular-components` / `igniteui-angular-grids` skill reference files — never guessed. Read [references/project-setup.md](references/project-setup.md) before Phase 0b. Read [references/figma-exploration.md](references/figma-exploration.md) before Phase 1. Read [references/design-provenance.md](references/design-provenance.md) before Phase 1f. Read [references/asset-extraction.md](references/asset-extraction.md) before Phase 1h. Read [references/figma-component-map.md](references/figma-component-map.md) before Phase 2. Read [references/theme-generation.md](references/theme-generation.md) before Phase 3. Read [references/design-token-bridge.md](references/design-token-bridge.md) before Phase 3. Read [references/validation-patterns.md](references/validation-patterns.md) before Phase 5. --- ## Phase 0 — Prerequisites > **Tool naming:** this skill writes MCP tool names as `_` (e.g. `figma_get_metadata`, `theming_create_theme`). The exact name depends on the client — Claude Code exposes them as `mcp____` (e.g. `mcp__figma__get_metadata`). Match by the tool's base name on whatever server is connected. ### 0a: Verify All Four MCP Servers Run these checks **silently** in parallel. Each verification call is a no-op if the server is not connected; do not surface raw errors to the user at this point. | Server | Verification call | Success signal | | --------------------- | ---------------------------------------------- | ----------------------------------- | | **Figma** | Inspect `figma_get_metadata` schema (no call) | Tool is listed. The configured server URL (or `fileKey` in the tool schema) tells remote from desktop | | **Ignite UI CLI** | `list_components` with `framework: "angular"` | Returns component list | | **Ignite UI Theming** | `theming_detect_platform` | Returns platform info | | **Playwright** | `playwright_browser_navigate` to `about:blank` | Navigates without error | If **any server fails**, fix setup **for that server only** before continuing. For `igniteui-cli` and `igniteui-theming`, configure them yourself — run `npx -y igniteui-cli ai-config` (or `ig ai-config`) from the project root, which configures both. Add a missing Playwright entry yourself as well. The Figma servers need the user's action — the desktop server is enabled in the Figma desktop app, and the remote server signs in through Figma OAuth — so guide the user through the Figma setup. Full setup instructions for all servers are in [references/mcp-setup.md](references/mcp-setup.md). Newly configured MCP servers require an editor/session reload before their tools appear — ask the user to reload, then stop. ### 0b: Detect or Scaffold Angular Project Check whether the working directory contains a `package.json` that lists `igniteui-angular` or `@infragistics/igniteui-angular`, and a `src/app/` directory. - **Project found:** note the package (open-source or licensed) and the Angular version, and confirm the MCP configuration has all four server entries. - **No project found:** offer to scaffold one with `npx -y igniteui-cli new`, or to use an existing project directory, and wait for the user's choice. Read [references/project-setup.md](references/project-setup.md) for the detection checklist, the exact messages to show the user, template selection, and the scaffolding steps. --- ## Phase 1 — Figma Design Exploration **Goal:** understand the full design structure and capture all data needed for implementation and validation before writing any code. Read [references/figma-exploration.md](references/figma-exploration.md) in full before the first Figma MCP call. It has the call budget, exact tool arguments, extraction checklists, and table templates for each step: | Step | What to do | | ---- | ---------- | | **1a** | Discover pages and artboards with `figma_get_metadata` | | **1b** | List the artboards and wait for the user to choose which to implement | | **1c** | Capture one reference screenshot per artboard — the ground truth for Phase 5 | | **1d** | Extract design context per artboard: layers and variant props, layout, typography, surfaces, input variants, chart colors, color census, control heights, action controls, provenance signals | | **1e** | Extract design tokens with `figma_get_variable_defs`, once per target page | | **1f** | Classify every component's provenance (Tier A Indigo.Design kit / B other library / C plain frames) and normalize it to a canonical role; check Code Connect mappings | | **1g** | Build Table A (Ignite UI components, with tier, confidence, and anatomy deltas) and Table B (layout surfaces), then present both for review — low-confidence mappings first | | **1h** | Extract every image asset to `src/assets/` — zero-placeholder policy | Key constraints: - **Rate limits:** limits depend on the Figma **seat**. A View/Collab seat allows about 6 calls a month, which may not cover one artboard. Compare the call estimate with the user's quota before starting, and discover structure with `figma_get_metadata` first. - **Two Figma MCP servers:** the **remote** server (`mcp.figma.com`) takes `fileKey` and `nodeId`, so you can move between artboards yourself. The **desktop** server (`127.0.0.1:3845`) works only on the file open in the Figma desktop app. Pass the node ID from a frame link and check the response, or ask the user to select each artboard and do not batch those calls. Detect the server before the first call (see `figma-exploration.md`). - **Any UI kit:** do not assume the Indigo.Design kits. Classify each component in 1f. A third-party kit's names, variables, and Code Connect mappings are evidence of the component's role. Never copy them into the code. - **React + Tailwind output:** `figma_get_design_context` returns React + Tailwind code. Read it for information only — never copy it into Angular files, and never use its localhost image URLs as final assets. --- ## Phase 2 — Component Discovery (Ignite UI CLI MCP) **Goal:** look up exact Angular selectors, inputs, outputs, and usage patterns for every component identified in Phase 1. Never generate component code from memory. ### 2a: Read the Component Map Read [references/figma-component-map.md](references/figma-component-map.md) in full. For each row of the Phase 1g Table A: - **Tier A:** find the Indigo.Design kit name in the kit tables. - **Tier B/C:** find the canonical role in the **Canonical Role Index**, then the row it points to in the named section. That row gives you: - The Ignite UI Angular selector - The `get_doc` key to call - Key inputs and variants to configure ### 2b: Fetch Component Docs Call `list_components({ framework: "angular" })` **once** to discover which component families have full docs — **the catalog covers only a subset of components**. Then: - For families **with** a doc: call `get_doc({ framework: "angular", name: "" })`, all in a single parallel batch — never sequentially. - For families **without** a doc: read the matching reference files from the [`igniteui-angular-components`](../igniteui-angular-components/SKILL.md) and [`igniteui-angular-grids`](../igniteui-angular-grids/SKILL.md) skills, and use `search_api` for member-level API lookups. Do **not** write any component code until you have read its doc or reference file. ### 2c: Search for Feature Docs Use `search_docs` for feature-level questions raised by the artboard, for example: ``` search_docs({ framework: "angular", query: "row editing" }) search_docs({ framework: "angular", query: "virtual scrolling" }) search_docs({ framework: "angular", query: "column pinning" }) ``` Feature docs are mandatory when the artboard shows grid editing, filtering, sorting, pinning, or other advanced feature states. ### 2d: Document the Final Component Plan After reading all docs, confirm or revise the decomposition table from Phase 1g with: - Exact selectors (e.g. ``, ``) - Exact import paths (never imported from the root barrel) - Required peer modules or provider functions **Anatomy delta ledger (Tier B and C).** For every mapped component whose anatomy differs from the design in a way that tokens or content projection **cannot** close, add a ledger entry: | Component | Design shows | Ignite UI renders | Options | Decision | | --- | --- | --- | --- | --- | | _e.g._ M3 segmented button | Check icon on the selected segment | `igx-buttongroup`, no check icon | Project an `igx-icon` into the selected button / accept | ask | | _e.g._ Breadcrumbs | Breadcrumb trail | No Angular breadcrumb component | Semantic `