igniteui-webcomponents 7.4.0 → 7.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +38 -0
- package/components/checkbox/checkbox-base.d.ts +2 -0
- package/components/checkbox/checkbox-base.js +4 -0
- package/components/checkbox/checkbox-base.js.map +1 -1
- package/components/checkbox/checkbox.js +3 -11
- package/components/checkbox/checkbox.js.map +1 -1
- package/components/checkbox/switch.js +1 -8
- package/components/checkbox/switch.js.map +1 -1
- package/components/color-picker/color-picker.js +3 -3
- package/components/color-picker/color-picker.js.map +1 -1
- package/components/combo/combo.d.ts +6 -4
- package/components/combo/combo.js +13 -24
- package/components/combo/combo.js.map +1 -1
- package/components/date-picker/date-picker.base.d.ts +3 -3
- package/components/date-picker/date-picker.base.js +2 -2
- package/components/date-picker/date-picker.base.js.map +1 -1
- package/components/date-picker/date-picker.d.ts +1 -1
- package/components/date-range-picker/date-range-picker.d.ts +1 -1
- package/components/date-time-input/date-time-input.base.d.ts +4 -4
- package/components/date-time-input/date-time-input.base.js +3 -5
- package/components/date-time-input/date-time-input.base.js.map +1 -1
- package/components/file-input/file-input.d.ts +5 -0
- package/components/file-input/file-input.js +4 -0
- package/components/file-input/file-input.js.map +1 -1
- package/components/input/input-base.d.ts +2 -2
- package/components/input/input-base.js +3 -5
- package/components/input/input-base.js.map +1 -1
- package/components/input/input.d.ts +1 -1
- package/components/radio/radio.d.ts +2 -0
- package/components/radio/radio.js +7 -11
- package/components/radio/radio.js.map +1 -1
- package/components/rating/rating.d.ts +3 -0
- package/components/rating/rating.js +17 -18
- package/components/rating/rating.js.map +1 -1
- package/components/select/select.js +1 -1
- package/components/select/select.js.map +1 -1
- package/components/slider/range-slider.d.ts +0 -1
- package/components/slider/range-slider.js +6 -11
- package/components/slider/range-slider.js.map +1 -1
- package/components/slider/slider-base.d.ts +4 -1
- package/components/slider/slider-base.js +20 -18
- package/components/slider/slider-base.js.map +1 -1
- package/components/slider/slider.d.ts +2 -0
- package/components/slider/slider.js +5 -1
- package/components/slider/slider.js.map +1 -1
- package/components/textarea/textarea.d.ts +1 -4
- package/components/textarea/textarea.js +3 -5
- package/components/textarea/textarea.js.map +1 -1
- package/components/validation-container/validation-container.js +2 -1
- package/components/validation-container/validation-container.js.map +1 -1
- package/components/virtualization/engine.d.ts +35 -4
- package/components/virtualization/engine.js +126 -61
- package/components/virtualization/engine.js.map +1 -1
- package/components/virtualization/recycle.d.ts +13 -0
- package/components/virtualization/recycle.js +152 -0
- package/components/virtualization/recycle.js.map +1 -0
- package/components/virtualization/virtualization.d.ts +32 -11
- package/components/virtualization/virtualization.js +14 -11
- package/components/virtualization/virtualization.js.map +1 -1
- package/custom-elements.json +2382 -79
- package/igniteui-webcomponents.html-data.json +1 -1
- package/index.d.ts +1 -1
- package/index.js.map +1 -1
- package/internals/controllers/aria-projection.d.ts +61 -23
- package/internals/controllers/aria-projection.js +77 -26
- package/internals/controllers/aria-projection.js.map +1 -1
- package/internals/mixins/forms/associated.js +34 -0
- package/internals/mixins/forms/associated.js.map +1 -1
- package/internals/mixins/forms/types.d.ts +5 -0
- package/internals/mixins/forms/types.js.map +1 -1
- package/internals/templates/toggle-shell.d.ts +15 -14
- package/internals/templates/toggle-shell.js +12 -8
- package/internals/templates/toggle-shell.js.map +1 -1
- package/internals/utils/dom.d.ts +2 -2
- package/internals/utils/dom.js +2 -2
- package/internals/utils/dom.js.map +1 -1
- package/package.json +1 -1
- package/skills/README.md +2 -4
- package/skills/igniteui-wc-choose-components/SKILL.md +2 -1
- package/skills/igniteui-wc-customize-component-theme/SKILL.md +2 -1
- package/skills/igniteui-wc-figma-to-app/SKILL.md +133 -712
- package/skills/igniteui-wc-figma-to-app/references/asset-extraction.md +42 -62
- package/skills/igniteui-wc-figma-to-app/references/design-provenance.md +199 -0
- package/skills/igniteui-wc-figma-to-app/references/design-token-bridge.md +189 -107
- package/skills/igniteui-wc-figma-to-app/references/figma-component-map.md +129 -84
- package/skills/igniteui-wc-figma-to-app/references/figma-exploration.md +222 -0
- package/skills/igniteui-wc-figma-to-app/references/mcp-setup.md +81 -127
- package/skills/igniteui-wc-figma-to-app/references/project-setup.md +105 -0
- package/skills/igniteui-wc-figma-to-app/references/theme-generation.md +180 -0
- package/skills/igniteui-wc-figma-to-app/references/validation-patterns.md +74 -80
- package/skills/igniteui-wc-generate-from-image-design/SKILL.md +2 -1
- package/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +3 -3
- package/skills/igniteui-wc-grids/SKILL.md +133 -0
- package/skills/igniteui-wc-integrate-with-framework/SKILL.md +2 -1
- package/skills/igniteui-wc-migrate-grid-lite-to-premium/SKILL.md +2 -1
- package/skills/igniteui-wc-optimize-bundle-size/SKILL.md +2 -1
- package/web-types.json +1 -1
|
@@ -2,19 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
> **Part of the [`igniteui-wc-figma-to-app`](../SKILL.md) skill.**
|
|
4
4
|
>
|
|
5
|
-
> Use this file in Phase 3 to translate Figma variable values (from
|
|
6
|
-
|
|
7
|
-
>
|
|
8
|
-
> rules, compound components — the source of truth is
|
|
9
|
-
> [`igniteui-wc-customize-component-theme`](../../igniteui-wc-customize-component-theme/SKILL.md).
|
|
5
|
+
> Use this file in Phase 3 to translate Figma variable values (from `figma_get_variable_defs`) into Ignite UI Theming MCP inputs. Read it in full before calling any theming tool. For the theming system itself — palette semantics, token rules, compound components — the source of truth is [`igniteui-wc-customize-component-theme`](../../igniteui-wc-customize-component-theme/SKILL.md).
|
|
6
|
+
|
|
7
|
+
> **Tool names:** like SKILL.md, this file refers to theming tools by their base name. Match by the tool's base name (`create_palette`, `create_theme`, `create_component_theme`, …) on the connected `igniteui-theming` server; your client may show them as `mcp__igniteui-theming__create_palette` or similar. The `licensed` parameter is for Angular only — do not pass it for Web Components.
|
|
10
8
|
|
|
11
9
|
---
|
|
12
10
|
|
|
13
|
-
##
|
|
11
|
+
## Two Paths
|
|
12
|
+
|
|
13
|
+
Which path you take depends on the provenance tiers recorded in Phase 1f ([design-provenance.md](design-provenance.md)):
|
|
14
|
+
|
|
15
|
+
| Path | When | What sets the look |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| **A — Indigo.Design UI Kit** | Most components are Tier A | The kit variant **is** an Ignite UI design system. Palette and font come from the kit variables. Component proportions are already calibrated, so leave size, spacing, and roundness at their defaults. |
|
|
18
|
+
| **B — Any other kit, or no kit** | Most components are Tier B or C | The design system is only the **closest baseline**. Fidelity comes from palette seeds inferred from usage, type-style overrides, per-component radius tokens, and a measured `--ig-size`. See [Path B](#path-b--any-other-kit-or-no-kit). |
|
|
19
|
+
|
|
20
|
+
**Mixed files.** Count only the Table A rows that map to an Ignite UI component. Decorative Tier C frames that stay plain HTML do not count. The larger group chooses the path for the global theme; on a tie, ask the user. Then style the other group through component themes scoped to **those instances only**:
|
|
21
|
+
|
|
22
|
+
- Put a class on the minority instances (for example `class="kit-b"`), and pass it as `selector` to `create_component_theme`. Do not scope by the tag alone: a Tier A and a Tier B button are both `igc-button`, so that would restyle both.
|
|
23
|
+
- Tier B/C instances in a Path A app get the Path B token work (B2, B5–B8) in those scoped component themes.
|
|
24
|
+
- Tier A instances in a Path B app get their **kit's** design system: pass that kit's `designSystem` to their scoped component themes. Do not give them Path B treatment.
|
|
25
|
+
|
|
26
|
+
---
|
|
14
27
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
kits come in four design-system variants, each with light and dark themes:
|
|
28
|
+
## Path A — How the Indigo.Design UI Kits Organize Variables
|
|
29
|
+
|
|
30
|
+
The **Indigo.Design UI Kits** are Figma component libraries published by Infragistics. Designers build their own app frames in Figma using these kits as shared libraries. The kits come in four design-system variants, each with light and dark themes:
|
|
18
31
|
|
|
19
32
|
| Kit variant | Figma library name pattern | `designSystem` value |
|
|
20
33
|
| ---------------------- | ----------------------------------------------- | -------------------- |
|
|
@@ -23,23 +36,18 @@ kits come in four design-system variants, each with light and dark themes:
|
|
|
23
36
|
| Bootstrap | `Indigo.Design UI Kit for Bootstrap` | `"bootstrap"` |
|
|
24
37
|
| Indigo | `Indigo.Design UI Kit` / `Indigo.Design System` | `"indigo"` |
|
|
25
38
|
|
|
26
|
-
**Identifying the active kit variant** is the first task in Phase 3 because it sets the
|
|
27
|
-
design system for the whole app. Use these signals in **strict precedence order** — stop
|
|
28
|
-
at the first clear match:
|
|
39
|
+
**Identifying the active kit variant** is the first task in Phase 3 because it sets the design system for the whole app. Use these signals in **strict precedence order** — stop at the first clear match:
|
|
29
40
|
|
|
30
|
-
1. **
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
3. **Elevation variable structure** — inspect `Elevations/*`:
|
|
41
|
+
1. **Explicit user request** — "make it Material", "use Fluent", etc.
|
|
42
|
+
2. **Library source name** — `figma_get_design_context` / `figma_get_metadata` may reference the source library file name.
|
|
43
|
+
3. **Variable collection name** — `figma_get_variable_defs` may return collection names that include the design system (e.g. `Material/color/primary`).
|
|
44
|
+
4. **Elevation variable structure** — inspect `Elevations/*`:
|
|
35
45
|
- **Three-layer DROP_SHADOW** (umbra + penumbra + ambient, `Elevations/Shadow 01-03`) → **Material**
|
|
36
46
|
- **Single-layer DROP_SHADOW** → Indigo, Fluent, or Bootstrap
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
5. **Visual heuristics** — see the [Design System Detection table](#design-system-detection-from-figma).
|
|
47
|
+
5. **Palette shade naming** — `primary/500`, `primary/100`–`primary/900` follows the Material 100–900 convention → likely **Material**.
|
|
48
|
+
6. **Visual heuristics** — see the [Design System Detection table](#design-system-detection-from-figma).
|
|
40
49
|
|
|
41
|
-
> **Never use font name as a primary signal.** "Titillium Web" is the default body font in
|
|
42
|
-
> the Indigo.Design UI Kit for Material — it is not exclusive to any kit variant.
|
|
50
|
+
> **Never use font name as a primary signal.** "Titillium Web" is the default body font in the Indigo.Design UI Kit for Material — it is not exclusive to any kit variant.
|
|
43
51
|
|
|
44
52
|
All four kit variants share the same variable naming conventions:
|
|
45
53
|
|
|
@@ -53,8 +61,7 @@ Component collection → per-component overrides (e.g. button/background = ali
|
|
|
53
61
|
|
|
54
62
|
## The Web Components Theming Contract
|
|
55
63
|
|
|
56
|
-
Before mapping any value, understand what actually drives a Web Components theme. This is
|
|
57
|
-
the single biggest difference from the Angular flow.
|
|
64
|
+
Before mapping any value, understand what actually drives a Web Components theme. This is the single biggest difference from the Angular flow.
|
|
58
65
|
|
|
59
66
|
| Layer | What it is | How it gets set |
|
|
60
67
|
| --- | --- | --- |
|
|
@@ -65,19 +72,132 @@ the single biggest difference from the Angular flow.
|
|
|
65
72
|
| **Layout** | `--ig-size`, `--ig-spacing`, `--ig-radius-factor` | `set_size` / `set_spacing` / `set_roundness` |
|
|
66
73
|
| **Per component** | component design tokens | `get_component_design_tokens` → `create_component_theme` |
|
|
67
74
|
|
|
68
|
-
Components read the design system **at runtime from CSS variables** and fall back to
|
|
69
|
-
|
|
70
|
-
|
|
75
|
+
Components read the design system **at runtime from CSS variables** and fall back to `bootstrap` / `light` when they are absent. A correct palette with a missing `--ig-theme` gives you the right colors on the wrong component anatomy.
|
|
76
|
+
|
|
77
|
+
**Every theming tool that generates code (`create_*`, `set_size`, `set_spacing`, `set_roundness`) accepts `output: "css" | "sass"`, defaulting to CSS.** Choose once in Phase 3 based on whether the project has Sass, and stay consistent. The Web Components Sass API is `@use 'igniteui-theming'` with individual `palette()`, `typography()`, `elevations()`, and `spacing()` mixins — the Angular `core()` / `theme()` mixins do not exist here.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Path B — Any Other Kit (or No Kit)
|
|
82
|
+
|
|
83
|
+
A third-party kit was not built for Ignite UI. Its variable names do not follow Ignite UI conventions, and its component proportions, radii, and type ramp differ from every Ignite UI design system. Treat theming as **fitting a baseline**: choose the closest design system, then override what the design measurably does differently.
|
|
84
|
+
|
|
85
|
+
### B1 — Choose the Baseline Design System by Anatomy
|
|
86
|
+
|
|
87
|
+
Use the first rule that gives a clear answer:
|
|
88
|
+
|
|
89
|
+
1. **Explicit user request.**
|
|
90
|
+
2. **Kit with a direct counterpart:** Material 3 / Material kits → `material`; Fluent 2 → `fluent`; Bootstrap kits → `bootstrap`.
|
|
91
|
+
3. **Otherwise, score the anatomy.** These are properties of the Ignite UI themes that you cannot fully override with tokens, so they decide the baseline:
|
|
92
|
+
|
|
93
|
+
| Observable in the design | `material` | `fluent` | `bootstrap` | `indigo` |
|
|
94
|
+
| --- | --- | --- | --- | --- |
|
|
95
|
+
| Text-field label | **Floating inside the field** (notched outline) | Above the field | Above the field | Above the field |
|
|
96
|
+
| Default button height | 36px | 32px | 38px | 28px |
|
|
97
|
+
| Default input height | 48px | 40px | 38px | 28px |
|
|
98
|
+
| Button label casing in the type preset | UPPERCASE | Capitalize | none | UPPERCASE |
|
|
99
|
+
|
|
100
|
+
The label position is the strongest signal. A design with labels above its fields (shadcn, Untitled UI, Ant, Tailwind-style kits, most in-house kits) should **not** use `material`, however "Material-like" its colors look. Among the label-above systems, choose the one whose default heights are closest to the measured controls. When heights are close to 36–40px buttons and 36–44px inputs, `bootstrap` or `fluent` is usually the better starting point. Casing is overridable (B4), so it only breaks ties.
|
|
101
|
+
|
|
102
|
+
These numbers come from the `igniteui-theming` component schemas and type presets at the default `--ig-size`. If a result looks off, confirm it with `get_component_design_tokens`.
|
|
103
|
+
|
|
104
|
+
### B2 — Infer Color Roles From Usage, Not Names
|
|
105
|
+
|
|
106
|
+
Third-party variable names do not tell you which Ignite UI palette slot they fill. Kits call the brand color `primary`, `brand/600`, `colorBrandBackground`, `md.sys.color.primary`, or nothing at all. Build a **color census** from the design context of the target artboards, and take each seed from where it is **used**:
|
|
107
|
+
|
|
108
|
+
| Ignite UI palette input | Take the color from |
|
|
109
|
+
| --- | --- |
|
|
110
|
+
| `primary` | The fill of high-emphasis buttons. If there are none, the active tab indicator, checked checkbox/switch, or focused-field accent. |
|
|
111
|
+
| `secondary` | A second accent actually used on components: tonal/secondary buttons, selected chips, FAB. If none exists, reuse `primary`. Do not invent one. |
|
|
112
|
+
| `surface` | The page / artboard background. Additional depths (cards, sidebars) → B6. |
|
|
113
|
+
| `gray` | Omit at first. Pass it only if the generated grays visibly diverge from the design's borders and secondary text. |
|
|
114
|
+
| `error` / `warn` / `success` / `info` | Destructive buttons, error-state fields, alert and status colors |
|
|
115
|
+
|
|
116
|
+
In the **CSS path** these all go to `create_palette`, which takes `gray` and the status colors. In the **Sass path**, `create_theme` takes only `primaryColor`, `secondaryColor`, and `surfaceColor`: to set `gray` or a status color, also call `create_palette` (or `create_custom_palette`) and place its output **after** the theme output, so its `:root` palette variables override the generated ones.
|
|
117
|
+
|
|
118
|
+
**Seed-shade rule.** Ignite UI components paint their main fills with the **500** shade of a palette color. Pass the color that is *visible on the component* as the seed, whatever the kit calls it. Examples: Untitled UI buttons use `Brand/600`, Tailwind-style kits use `blue-600`, and Material 3 uses the tone-40 `primary`. Passing the kit's own `…/500` variable when the buttons are painted with `…/600` makes every component one step too light.
|
|
119
|
+
|
|
120
|
+
**Material baseline trap.** In the Ignite UI `material` schema, **control accents use the `secondary` palette**: contained-button fill, flat-button text, checkbox fill, and switch thumb. The navbar and tab indicators use `primary`. `fluent`, `bootstrap`, and `indigo` use `primary` for those controls. Most third-party kits, Material 3 included, paint buttons and checkboxes with their primary color. On a `material` baseline, therefore, seed `secondary` with the brand color seen on the buttons as well. Seed `primary` with the color used on app bars and tab indicators, which is often the same color. Otherwise every button comes out in an unrelated accent. Check the resolved roles with `read_resource({ uri: "theming://guidance/colors/roles" })`.
|
|
121
|
+
|
|
122
|
+
When the variables are available, resolve their alias chains and use them to *name* and *confirm* what the census found. When the variables and the census disagree, the census wins: it describes what the designer actually drew.
|
|
123
|
+
|
|
124
|
+
**Full ramps.** If the design visibly uses several shades of one color (hover, pressed, tinted backgrounds), use `create_custom_palette` with `mode: "explicit"` for that color. The explicit mode needs **all 14 shades** (`50`–`900` plus `A100`, `A200`, `A400`, `A700`). Align the kit's stops by lightness, not by label (Tailwind and Untitled UI have `25` and `950` stops that Ignite UI does not). Derive the accent shades from the neighboring stops. Use `mode: "shades"` for every color whose ramp the design does not show.
|
|
125
|
+
|
|
126
|
+
**Dark variant.** Decide it from the page background, as in [Light vs Dark Mode Detection](#light-vs-dark-mode-detection). Material 3 tonal surfaces (`surface-container-low` … `-highest`) are multiple surface depths. Handle them with B6, not with a lighter `surface` seed.
|
|
71
127
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
128
|
+
### B3 — Typography
|
|
129
|
+
|
|
130
|
+
1. **Family:** take it from the text styles actually used (the design context `font-['…']` classes). Load it in the app. Kits often use Inter, Geist, Roboto Flex, or SF Pro. SF Pro is licensed for Apple platforms only, so substitute a web font and say so.
|
|
131
|
+
2. **Scale:** map the kit's ramp to Ignite UI type styles **by role and size ranking**, not by name. Override only the styles that differ (see [B4](#b4--button-casing-and-other-type-driven-anatomy) for how):
|
|
132
|
+
|
|
133
|
+
| Kit role (examples) | Ignite UI type style |
|
|
134
|
+
| --- | --- |
|
|
135
|
+
| Display / Hero / Heading XL | `h1`–`h3` (largest three) |
|
|
136
|
+
| Headline / Heading L–M / Title L | `h4`–`h6` |
|
|
137
|
+
| Title M–S / Subtitle / Label L (emphasized body) | `subtitle-1`, `subtitle-2` |
|
|
138
|
+
| Body L / Body M / Text md | `body-1`, `body-2` |
|
|
139
|
+
| Label M on buttons | `button` |
|
|
140
|
+
| Body S / Caption / Text xs | `caption` |
|
|
141
|
+
| Label S / Overline / Eyebrow | `overline` |
|
|
142
|
+
|
|
143
|
+
### B4 — Button Casing and Other Type-Driven Anatomy
|
|
144
|
+
|
|
145
|
+
The `material` and `indigo` type presets set `button` to `text-transform: uppercase`. `fluent` uses `capitalize`. Nearly every current third-party kit, Material 3 included, uses sentence case. Unless the design shows uppercase labels, set the button's text transform to `none`, together with its measured size and weight.
|
|
146
|
+
|
|
147
|
+
**How to override type styles.** The theme's typography writes every property of every type style to a CSS variable on `:root`, named `--ig-<style>-<property>`, and the components read those variables inside their shadow roots. Add a `:root` block **after** the theme import or theme output that sets only the values that differ:
|
|
148
|
+
|
|
149
|
+
```css
|
|
150
|
+
/* After the theme import in styles.css */
|
|
151
|
+
:root {
|
|
152
|
+
--ig-button-text-transform: none;
|
|
153
|
+
--ig-button-font-size: 0.875rem;
|
|
154
|
+
--ig-button-font-weight: 500;
|
|
155
|
+
--ig-h1-font-size: 2.25rem;
|
|
156
|
+
--ig-body-1-line-height: 1.5rem;
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Property names are `font-family`, `font-size`, `font-weight`, `font-style`, `line-height`, `letter-spacing`, `text-transform`, `margin-top`, and `margin-bottom`.
|
|
161
|
+
|
|
162
|
+
Ignite UI components read these variables inside their own shadow roots, so the overrides reach them. Inside a Lit view's shadow root, document CSS such as `.ig-typography h1` does not reach native headings. Apply the variables in the view's `static styles` yourself, for example `h1 { font-size: var(--ig-h1-font-size); font-weight: var(--ig-h1-font-weight); line-height: var(--ig-h1-line-height); }`.
|
|
163
|
+
|
|
164
|
+
> **Do not rely on `customScale`.** `create_typography` accepts a `customScale` argument, but `igniteui-theming` 29.0.0 drops it from the generated code (CSS and Sass) without a warning. Use the variable overrides above, and measure the result in Phase 5.
|
|
165
|
+
|
|
166
|
+
### B5 — Radius: Per-Component Tokens, Not a Global Factor
|
|
167
|
+
|
|
168
|
+
`set_roundness` sets a single `radiusFactor` (0–1) that interpolates each component between **its own** minimum and maximum radius, and those ranges differ. For example, the button range is 0–20px, the card 0–24px, the dialog 0–36px, and the chip 0–16px. One factor therefore cannot reproduce a kit's radius language, such as "everything is 8px" or "pill buttons, 12px cards".
|
|
169
|
+
|
|
170
|
+
Instead, set the radius tokens that `get_component_design_tokens` returns for each component (`border-radius`, or variants such as `box-border-radius` / `border-border-radius` on `input-group`) to the **measured px value**, in the same `create_component_theme` call as the component's colors. A pill shape is half the control height, or a large value such as `9999px`.
|
|
171
|
+
|
|
172
|
+
### B6 — Surfaces and Elevation
|
|
173
|
+
|
|
174
|
+
- **Depths:** kits built on borders instead of shadows (shadcn, Untitled UI, Fluent 2) use 2–4 surface tones. Express them with `create_custom_palette` surface shades or semantic variables (`--surface-1`, `--surface-2`), as in [Multiple Surface Depths](#multiple-surface-depths).
|
|
175
|
+
- **Shadows:** `create_elevations` only has the `material` and `indigo` presets. When the design is flat or border-first, keep the global elevations and set the components' shadow/elevation tokens to `none` or the measured `box-shadow` value. When the design uses shadows, pick the closer preset and verify the depth of cards, menus, and dialogs in Phase 5.
|
|
176
|
+
- **Borders:** a 1px neutral border on cards, inputs, and menus is part of the anatomy of most modern kits. Set it through the components' border tokens, bound to a gray or surface palette variable.
|
|
177
|
+
|
|
178
|
+
### B7 — Density
|
|
179
|
+
|
|
180
|
+
Choose `--ig-size` **per component family**. Compare the measured height of each family (buttons, inputs, list rows, …) with that family's size steps in the baseline. Each component has its **own default step**. For example, on `material` the button default is large (36px) while the input default is medium (48px). So a design with 36px buttons and 48px inputs already matches both defaults and needs no change. The steps (default in bold):
|
|
181
|
+
|
|
182
|
+
| Design system | Button small / medium / large | Input small / medium / large |
|
|
183
|
+
| --- | --- | --- |
|
|
184
|
+
| `material` | 24 / 30 / **36px** | 40 / **48** / 56px |
|
|
185
|
+
| `fluent` | 24 / **32** / 38px | 32 / **40** / 48px |
|
|
186
|
+
| `bootstrap` | 32 / **38** / 48px | 32 / **38** / 48px |
|
|
187
|
+
| `indigo` | 24 / **28** / 32px | 24 / **28** / 32px |
|
|
188
|
+
|
|
189
|
+
For other families, read the steps and the default from `get_component_design_tokens`. For each family whose nearest step differs from its default, call `set_size` with that `component`. Set `--ig-size` globally only when **every** family moves in the same direction. Close a remaining 2–4px mismatch with the component's padding or height tokens, if it has them. Otherwise leave it: Phase 5 rates a difference of 4px or less as Cosmetic. It is never an anatomy delta. The `set_spacing` rule is unchanged: never convert a Figma pixel value into a multiplier.
|
|
190
|
+
|
|
191
|
+
### B8 — States and Focus
|
|
192
|
+
|
|
193
|
+
Hover, pressed, disabled, and error variants in the kit are **token inputs**. Map their colors onto the matching state tokens (`hover-background`, `focus-*`, `disabled-*`, …) in the same component theme. Focus rings differ strongly between kits (a 2–3px offset ring in shadcn and Untitled UI, a bottom accent in Fluent). If the design specifies one, it belongs in the component tokens. Keep focus visible whatever the design shows: accessibility is not optional.
|
|
76
194
|
|
|
77
195
|
---
|
|
78
196
|
|
|
79
197
|
## Global Palette Mapping
|
|
80
198
|
|
|
199
|
+
> Path A name patterns. For Path B, use these tables only to *label* a variable after the color census (B2) has decided the role.
|
|
200
|
+
|
|
81
201
|
### Primary Color
|
|
82
202
|
|
|
83
203
|
| Figma Variable Pattern | Theming Input | Notes |
|
|
@@ -87,9 +207,7 @@ and `spacing()` mixins — the Angular `core()` / `theme()` mixins do not exist
|
|
|
87
207
|
| `Primary/Default` | `primary` | Alternative naming in some kit versions |
|
|
88
208
|
| `palette/primary/500` | `primary` | Prefixed naming pattern |
|
|
89
209
|
|
|
90
|
-
> **Parameter names differ between tools.** `create_palette` takes `primary`, `secondary`,
|
|
91
|
-
> `surface`, `gray`, `info`, `success`, `warn`, `error`. `create_theme` takes
|
|
92
|
-
> `primaryColor`, `secondaryColor`, `surfaceColor`. Do not mix them up.
|
|
210
|
+
> **Parameter names differ between tools.** `create_palette` takes `primary`, `secondary`, `surface`, `gray`, `info`, `success`, `warn`, `error`. `create_theme` takes `primaryColor`, `secondaryColor`, `surfaceColor`. Do not mix them up.
|
|
93
211
|
|
|
94
212
|
### Secondary / Accent Color
|
|
95
213
|
|
|
@@ -111,9 +229,7 @@ and `spacing()` mixins — the Angular `core()` / `theme()` mixins do not exist
|
|
|
111
229
|
|
|
112
230
|
### Gray / Neutral Palette
|
|
113
231
|
|
|
114
|
-
The gray scale is derived automatically from the surface color, and **gray is inverted
|
|
115
|
-
relative to surface** in dark themes. Do not pass gray unless the Figma grays clearly
|
|
116
|
-
diverge from the generated ones. Read `theming://guidance/colors/rules` before overriding.
|
|
232
|
+
The gray scale is derived automatically from the surface color, and **gray is inverted relative to surface** in dark themes. Do not pass gray unless the Figma grays clearly diverge from the generated ones. Read `theming://guidance/colors/rules` before overriding.
|
|
117
233
|
|
|
118
234
|
### Semantic Status Colors
|
|
119
235
|
|
|
@@ -126,20 +242,16 @@ diverge from the generated ones. Read `theming://guidance/colors/rules` before o
|
|
|
126
242
|
|
|
127
243
|
### Multiple Surface Depths
|
|
128
244
|
|
|
129
|
-
Designs frequently use two or three surface depths (page, panel, card) that a single
|
|
130
|
-
generated `surface` cannot express. When that happens:
|
|
245
|
+
Designs frequently use two or three surface depths (page, panel, card) that a single generated `surface` cannot express. When that happens:
|
|
131
246
|
|
|
132
247
|
- use `create_custom_palette` for explicit per-shade control, or
|
|
133
|
-
- define semantic variables (`--surface-1`, `--surface-2`) alongside the palette and use
|
|
134
|
-
them in view CSS.
|
|
248
|
+
- define semantic variables (`--surface-1`, `--surface-2`) alongside the palette and use them in view CSS.
|
|
135
249
|
|
|
136
250
|
Never satisfy a second depth with a raw hex value in component styles.
|
|
137
251
|
|
|
138
252
|
### Resolving Colors Back Out
|
|
139
253
|
|
|
140
|
-
Use `get_color({ color, variant, contrast, opacity })` to turn a color intent into the
|
|
141
|
-
correct `var(--ig-<family>-<shade>)` reference — including contrast colors and
|
|
142
|
-
transparency — instead of hand-writing variable names.
|
|
254
|
+
Use `get_color({ color, variant, contrast, opacity })` to turn a color intent into the correct `var(--ig-<family>-<shade>)` reference — including contrast colors and transparency — instead of hand-writing variable names.
|
|
143
255
|
|
|
144
256
|
---
|
|
145
257
|
|
|
@@ -152,43 +264,31 @@ transparency — instead of hand-writing variable names.
|
|
|
152
264
|
| `typography/heading/font-family` | `fontFamily` | Use if the heading font differs |
|
|
153
265
|
| `font/primary` | `fontFamily` | Alternative naming |
|
|
154
266
|
|
|
155
|
-
`create_typography` also accepts `designSystem` (which type scale to start from) and
|
|
156
|
-
`customScale` (per-style overrides of `fontSize`, `fontWeight`, `lineHeight`,
|
|
157
|
-
`letterSpacing`, `textTransform`, margins) — use `customScale` only when the design's type
|
|
158
|
-
ramp genuinely differs from the design system's.
|
|
267
|
+
`create_typography` also accepts `designSystem` (which type scale to start from). Its `customScale` argument is currently ignored by the generators; override individual type styles with the `--ig-<style>-<property>` variables instead (see [B4](#b4--button-casing-and-other-type-driven-anatomy)).
|
|
159
268
|
|
|
160
|
-
In a CSS-only project, apply typography as plain CSS `font-family` / `font-size` /
|
|
161
|
-
`font-weight` rules, or the CSS output of `create_typography`. **Do not emit Sass
|
|
162
|
-
typography mixins into an app that has no Sass.**
|
|
269
|
+
In a CSS-only project, apply typography as plain CSS `font-family` / `font-size` / `font-weight` rules, or the CSS output of `create_typography`. **Do not emit Sass typography mixins into an app that has no Sass.**
|
|
163
270
|
|
|
164
|
-
Web fonts must be loaded by the app (a `<link>` to the font provider or a local `@font-face`);
|
|
165
|
-
setting a font family the browser cannot resolve silently falls back and fails Phase 5.
|
|
271
|
+
Web fonts must be loaded by the app (a `<link>` to the font provider or a local `@font-face`); setting a font family the browser cannot resolve silently falls back and fails Phase 5.
|
|
166
272
|
|
|
167
273
|
---
|
|
168
274
|
|
|
169
275
|
## Spacing, Sizing, and Roundness — Do Not Map Directly
|
|
170
276
|
|
|
171
|
-
> **These tools are NOT equivalent to Figma spacing values.** Do not create a mapping
|
|
172
|
-
> between Figma pixel values and these tools.
|
|
277
|
+
> **These tools are NOT equivalent to Figma spacing values.** Do not create a mapping between Figma pixel values and these tools.
|
|
173
278
|
|
|
174
|
-
`set_spacing` takes a **multiplier** (`1.0` = default, plus optional `inline` / `block`
|
|
175
|
-
multipliers). `set_roundness` takes a `radiusFactor` between **0 and 1**. `set_size` takes
|
|
176
|
-
a **density** (`small` / `medium` / `large`, or `1`–`3`). Passing a Figma `spacing/md = 16`
|
|
177
|
-
as `set_spacing({ spacing: 16 })` would produce a 1600% increase.
|
|
279
|
+
`set_spacing` takes a **multiplier** (`1.0` = default, plus optional `inline` / `block` multipliers). `set_roundness` takes a `radiusFactor` between **0 and 1**. `set_size` takes a **density** (`small` / `medium` / `large`, or `1`–`3`). Passing a Figma `spacing/md = 16` as `set_spacing({ spacing: 16 })` would produce a 1600% increase.
|
|
178
280
|
|
|
179
281
|
### When to touch these tools (sparingly)
|
|
180
282
|
|
|
181
283
|
| Tool | Use only when | Never because |
|
|
182
284
|
| ---------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
|
|
183
|
-
| `set_size` |
|
|
285
|
+
| `set_size` | Path A: the design consistently uses a noticeably tighter or looser density than the design system default. Path B: per family, as in B7 | A Figma spacing variable happens to be named "compact" |
|
|
184
286
|
| `set_spacing` | Explicitly requested, or required to match a specific density contract; start at the default | A Figma `spacing/*` pixel value looks like the multiplier number |
|
|
185
|
-
| `set_roundness` | The
|
|
287
|
+
| `set_roundness` | The user explicitly asks for it. For Path B, use per-component radius tokens instead (B5) | A Figma `border-radius/md = 8` maps numerically to a multiplier |
|
|
186
288
|
|
|
187
289
|
### The correct adjustment path
|
|
188
290
|
|
|
189
|
-
Scope `--ig-size` and `--ig-spacing` to the component that needs it — both tools take a
|
|
190
|
-
`component` parameter (and `scope` for a sub-component or container selector) that generates
|
|
191
|
-
exactly this:
|
|
291
|
+
Scope `--ig-size` and `--ig-spacing` to the component that needs it — both tools take a `component` parameter (and `scope` for a sub-component or container selector) that generates exactly this:
|
|
192
292
|
|
|
193
293
|
```
|
|
194
294
|
set_size({ component: "calendar", size: "small", platform: "webcomponents" })
|
|
@@ -209,8 +309,9 @@ igc-calendar {
|
|
|
209
309
|
}
|
|
210
310
|
```
|
|
211
311
|
|
|
212
|
-
The Indigo.Design kit's component proportions are already calibrated per design system —
|
|
213
|
-
|
|
312
|
+
The Indigo.Design kit's component proportions are already calibrated per design system — start from the defaults and adjust only when there is a clear visual reason.
|
|
313
|
+
|
|
314
|
+
**Path B differs.** A third-party kit's proportions are *not* calibrated to Ignite UI, so the defaults are not a safe resting point. The prohibition still holds: never convert a px value into a multiplier. But do make the **categorical** choices from measurements: pick `--ig-size` from the nearest height step (B7), and set each component's radius token to the measured px value (B5). These are not multiplier conversions. They use each tool the way it was designed.
|
|
214
315
|
|
|
215
316
|
---
|
|
216
317
|
|
|
@@ -220,27 +321,27 @@ start from the defaults and adjust only when there is a clear visual reason.
|
|
|
220
321
|
| -------------------------------------------------------- | ------------------------------------------------------------------------ |
|
|
221
322
|
| Dark artboard background (`#121212`, `#1a1a1a`, similar) | `variant: "dark"` + the dark theme CSS (`themes/dark/<ds>.css`) |
|
|
222
323
|
| Light artboard background (`#fff`, `#f5f5f5`, similar) | `variant: "light"` + the light theme CSS |
|
|
223
|
-
| Multiple artboards — one light, one dark | Generate
|
|
324
|
+
| Multiple artboards — one light, one dark | Ask the user which variant is primary. Generate it as the global theme and run Phase 5 against it. Then add the other variant (the other pre-built theme or a second theme output) under a class or `prefers-color-scheme`, and call `configureTheme` with the same design system and variant when switching at runtime (see `theme-generation.md § 3c`). Validate it against its own artboard |
|
|
224
325
|
| `color/mode` variable present | Its value (`light` or `dark`) is the authoritative signal |
|
|
225
326
|
|
|
226
|
-
Surface color must match the variant: a light surface with `variant: "dark"` produces
|
|
227
|
-
unreadable components and a luminance warning from the palette tools. Read the warnings.
|
|
327
|
+
Surface color must match the variant: a light surface with `variant: "dark"` produces unreadable components and a luminance warning from the palette tools. Read the warnings.
|
|
228
328
|
|
|
229
329
|
---
|
|
230
330
|
|
|
231
331
|
## Design System Detection from Figma
|
|
232
332
|
|
|
333
|
+
> Path A (Indigo.Design kits) only. For any other kit, choose the baseline with the anatomy rubric in [B1](#b1--choose-the-baseline-design-system-by-anatomy).
|
|
334
|
+
|
|
233
335
|
| Figma Visual Signal | Likely Design System | `designSystem` Value |
|
|
234
336
|
| ------------------------------------------------------------------ | -------------------------- | -------------------- |
|
|
235
337
|
| Three-layer `DROP_SHADOW` on elevation variables (`Shadow 01-03`) | Material Design | `"material"` |
|
|
236
|
-
| Prominent
|
|
338
|
+
| Prominent layered shadows, rounded cards, ripple effects | Material Design | `"material"` |
|
|
237
339
|
| Flat surfaces, sharp corners, Segoe/Inter font | Microsoft Fluent | `"fluent"` |
|
|
238
340
|
| Component borders, Bootstrap-like grid | Bootstrap | `"bootstrap"` |
|
|
239
341
|
| Purple/indigo accents, rounded corners, single shadow | Infragistics Indigo | `"indigo"` |
|
|
240
342
|
| `primary/500`, `primary/900` palette shade naming | Material (100–900 palette) | `"material"` |
|
|
241
343
|
|
|
242
|
-
`create_elevations` accepts only `"material"` or `"indigo"` as its `designSystem` — for a
|
|
243
|
-
Fluent or Bootstrap design, pick the closer of the two (usually `material`).
|
|
344
|
+
`create_elevations` accepts only `"material"` or `"indigo"` as its `designSystem` — for a Fluent or Bootstrap design, pick the closer of the two (usually `material`).
|
|
244
345
|
|
|
245
346
|
---
|
|
246
347
|
|
|
@@ -248,12 +349,11 @@ Fluent or Bootstrap design, pick the closer of the two (usually `material`).
|
|
|
248
349
|
|
|
249
350
|
### Step 1: Use the right theme key
|
|
250
351
|
|
|
251
|
-
Theme keys are **not** tag names. Pass the key to `get_component_design_tokens` and
|
|
252
|
-
`create_component_theme`:
|
|
352
|
+
Theme keys are **not** tag names. Pass the key to `get_component_design_tokens` and `create_component_theme`:
|
|
253
353
|
|
|
254
354
|
| Component in the design | Theme key | Selector it generates for |
|
|
255
355
|
| ----------------------- | ------------------- | --------------------------------- |
|
|
256
|
-
| Text input
|
|
356
|
+
| Text input | `input-group` | `igc-input` (other fields get it through their related themes; `igc-textarea` uses `textarea`) |
|
|
257
357
|
| Navigation drawer | `navdrawer` | `igc-nav-drawer` |
|
|
258
358
|
| Linear progress bar | `progress-linear` | `igc-linear-progress` |
|
|
259
359
|
| Circular progress | `progress-circular` | `igc-circular-progress` |
|
|
@@ -265,18 +365,9 @@ Theme keys are **not** tag names. Pass the key to `get_component_design_tokens`
|
|
|
265
365
|
| Dropdown menu | `drop-down` | `igc-dropdown` |
|
|
266
366
|
| App scrollbars | `scrollbar` | `.ig-scrollbar` |
|
|
267
367
|
|
|
268
|
-
Most other components use their obvious key (`card`, `list`, `navbar`, `chip`, `avatar`,
|
|
269
|
-
`badge`, `calendar`, `date-picker`, `select`, `combo`, `tabs`, `stepper`, `tree`, `dialog`,
|
|
270
|
-
`toast`, `snackbar`, `banner`, `tooltip`, `divider`, `rating`, `slider`, `switch`,
|
|
271
|
-
`checkbox`, `radio`, `carousel`, `chat`, `expansion-panel`, `accordion`, `splitter`,
|
|
272
|
-
`file-input`, `date-time-input`, `textarea`, `icon`, `ripple`, `highlight`).
|
|
368
|
+
Most other components use their obvious key (`card`, `list`, `navbar`, `chip`, `avatar`, `badge`, `calendar`, `date-picker`, `select`, `combo`, `tabs`, `stepper`, `tree`, `dialog`, `toast`, `snackbar`, `banner`, `tooltip`, `divider`, `rating`, `slider`, `switch`, `checkbox`, `radio`, `carousel`, `chat`, `expansion-panel`, `accordion`, `splitter`, `file-input`, `date-time-input`, `textarea`, `icon`, `ripple`, `highlight`).
|
|
273
369
|
|
|
274
|
-
**Keys with no Web Components
|
|
275
|
-
`action-strip`, `bottom-nav`, `column-actions`, `overlay`, `query-builder`, `time-picker`,
|
|
276
|
-
`date-range-start`, `date-range-end`. Sub-part keys (`card-header`, `list-item`, `step`,
|
|
277
|
-
`tab-item`, `accordion-header`, `expansion-panel-header`, `drop-down-item`,
|
|
278
|
-
`nav-drawer-item`) have no standalone selector either — style them through the parent's
|
|
279
|
-
tokens, their documented `::part(...)`, or slotted content.
|
|
370
|
+
**Keys with no standalone Web Components selector in the theming tool** — do not call the theming tools for these: `action-strip`, `bottom-nav`, `column-actions`, `overlay`, `query-builder`, `time-picker`, `date-range-start`, `date-range-end`. (`action-strip` and `column-actions` are themed through the `grid` theme, which derives them.) Sub-part keys (`card-header`, `list-item`, `step`, `tab-item`, `accordion-header`, `expansion-panel-header`, `drop-down-item`, `nav-drawer-item`) have no standalone selector either — style them through the parent's tokens, their documented `::part(...)`, or slotted content.
|
|
280
371
|
|
|
281
372
|
### Step 2: Discover the tokens
|
|
282
373
|
|
|
@@ -284,11 +375,12 @@ tokens, their documented `::part(...)`, or slotted content.
|
|
|
284
375
|
get_component_design_tokens({ component: "<theme key>" })
|
|
285
376
|
```
|
|
286
377
|
|
|
287
|
-
The result lists every token with name, type, and description — and, for compound
|
|
288
|
-
components, the **related themes** you must also theme.
|
|
378
|
+
The result lists every token with name, type, and description — and, for compound components, the **related themes** you must also theme.
|
|
289
379
|
|
|
290
380
|
### Step 3: Match Figma variables to token names
|
|
291
381
|
|
|
382
|
+
> **Path B:** third-party kits rarely have component variables in this form, and Tier C files usually have none. Take the component's colors, radius, borders, and state colors from the Phase 1d color census and measurements (B2, B5–B8). Use variables, when they exist, only to confirm them.
|
|
383
|
+
|
|
292
384
|
Kit component variables follow `<component>/<role>/<state>`:
|
|
293
385
|
|
|
294
386
|
- `button/background` → token `background`
|
|
@@ -297,8 +389,7 @@ Kit component variables follow `<component>/<role>/<state>`:
|
|
|
297
389
|
- `grid/header-background` → token `header-background`
|
|
298
390
|
- `navbar/background` → token `background`
|
|
299
391
|
|
|
300
|
-
Lookup process: strip the component prefix, match the remainder against the token list, and
|
|
301
|
-
when there is no exact match pick the token whose description names the same visual role.
|
|
392
|
+
Lookup process: strip the component prefix, match the remainder against the token list, and when there is no exact match pick the token whose description names the same visual role.
|
|
302
393
|
|
|
303
394
|
| Component | Figma Variable | Likely Token Name | Notes |
|
|
304
395
|
| --------- | -------------------------- | ----------------------- | ----------------------- |
|
|
@@ -320,8 +411,7 @@ when there is no exact match pick the token whose description names the same vis
|
|
|
320
411
|
|
|
321
412
|
### Step 4: Generate the component theme
|
|
322
413
|
|
|
323
|
-
Pass **only tokens that differ from the global theme**, and express values as palette
|
|
324
|
-
references — never raw hex:
|
|
414
|
+
Pass **only tokens that differ from the global theme**, and express values as palette references — never raw hex:
|
|
325
415
|
|
|
326
416
|
```
|
|
327
417
|
create_component_theme({
|
|
@@ -329,7 +419,6 @@ create_component_theme({
|
|
|
329
419
|
platform: "webcomponents",
|
|
330
420
|
designSystem: "<resolved>",
|
|
331
421
|
variant: "<light|dark>",
|
|
332
|
-
licensed: <true if @infragistics>,
|
|
333
422
|
tokens: {
|
|
334
423
|
"background": "var(--ig-surface-100)",
|
|
335
424
|
"foreground-color": "var(--ig-gray-900)"
|
|
@@ -339,22 +428,17 @@ create_component_theme({
|
|
|
339
428
|
})
|
|
340
429
|
```
|
|
341
430
|
|
|
342
|
-
Apply the generated block exactly as returned. Use `selector` to scope an override to one
|
|
343
|
-
region instead of every instance in the app.
|
|
431
|
+
Apply the generated block exactly as returned. Use `selector` to scope an override to one region instead of every instance in the app.
|
|
344
432
|
|
|
345
433
|
### Step 5: Compound components
|
|
346
434
|
|
|
347
|
-
`combo`, `select`, `
|
|
348
|
-
children with their own themes. Theme each related theme returned in Step 1 using the
|
|
349
|
-
parent's selector as the wrapper. Styling only the parent leaves dropdown surfaces,
|
|
350
|
-
calendars, and action buttons off-theme — a guaranteed Phase 5 failure.
|
|
435
|
+
Compound components — any component whose `get_component_design_tokens` result lists related themes (for example `combo`, `select`, the date pickers, `card`, `navbar`, `dialog`, `banner`, and the grids) — render internal children with their own themes. Theme each related theme returned in Step 1 using the parent's selector as the wrapper. Styling only the parent leaves dropdown surfaces, calendars, and action buttons off-theme — a guaranteed Phase 5 failure.
|
|
351
436
|
|
|
352
437
|
---
|
|
353
438
|
|
|
354
439
|
## Chart Colors
|
|
355
440
|
|
|
356
|
-
Charts have no design tokens. Take the series colors from the Figma design context and run
|
|
357
|
-
them through the theming MCP before use:
|
|
441
|
+
Charts have no design tokens. Take the series colors from the Figma design context and run them through the theming MCP before use:
|
|
358
442
|
|
|
359
443
|
```
|
|
360
444
|
get_chart_series_colors({ chartType: "category-chart" }) // which properties accept a brush list
|
|
@@ -362,9 +446,7 @@ get_chart_series_colors({ customBrushes: ["#9DE772", "#6DB1FF"] }) // validate t
|
|
|
362
446
|
get_chart_series_colors({ mode: "color-blind" }) // accessible alternative palette
|
|
363
447
|
```
|
|
364
448
|
|
|
365
|
-
Assign the result to the chart's `brushes` / `outlines`
|
|
366
|
-
attributes). Without an explicit assignment the chart uses its own default palette and will
|
|
367
|
-
not match the design.
|
|
449
|
+
Assign the result to the chart's brush **properties**: `brushes` / `outlines` on most charts, `brush` on `igc-sparkline`, `fillBrushes` on `igc-treemap`, and `brushes` / `outlines` on each `igc-ring-series` of a doughnut chart. Without an explicit assignment the chart uses its own default palette and will not match the design.
|
|
368
450
|
|
|
369
451
|
---
|
|
370
452
|
|
|
@@ -383,12 +465,12 @@ When multiple Figma variables could map to the same theming input:
|
|
|
383
465
|
|
|
384
466
|
Do **not** call theming tools for:
|
|
385
467
|
|
|
386
|
-
- Chart, gauge, and map components → configure via properties; series colors via
|
|
387
|
-
`get_chart_series_colors`
|
|
388
|
-
- Dock Manager → it exposes its own CSS custom properties
|
|
468
|
+
- Chart, gauge, and map components → configure via properties; series colors via `get_chart_series_colors`
|
|
389
469
|
- Pure layout CSS (margins, grid columns, flex gaps) → write it directly in the view's styles
|
|
390
470
|
- Icon colors → set `color` on the `igc-icon` host or its parent
|
|
391
471
|
|
|
472
|
+
Dock Manager **is** themed with the tools: use the theme key `dock-manager` (selector `igc-dockmanager`) like any other component. It also exposes its own CSS custom properties.
|
|
473
|
+
|
|
392
474
|
---
|
|
393
475
|
|
|
394
476
|
## Loading Reference Data
|