@discourser/design-system 0.24.0 → 0.25.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/dist/{chunk-KIJKNZ73.cjs → chunk-QNCZYFUJ.cjs} +46 -11
- package/dist/chunk-QNCZYFUJ.cjs.map +1 -0
- package/dist/{chunk-VOH2QELR.cjs → chunk-TBLDQATQ.cjs} +377 -12
- package/dist/chunk-TBLDQATQ.cjs.map +1 -0
- package/dist/{chunk-VN2QX6S7.js → chunk-UHSL4N44.js} +378 -14
- package/dist/chunk-UHSL4N44.js.map +1 -0
- package/dist/{chunk-HN2IHIMR.js → chunk-ZPECW4N2.js} +46 -11
- package/dist/chunk-ZPECW4N2.js.map +1 -0
- package/dist/components/Badge.figma.d.ts +2 -0
- package/dist/components/Badge.figma.d.ts.map +1 -0
- package/dist/components/Button.figma.d.ts +2 -0
- package/dist/components/Button.figma.d.ts.map +1 -0
- package/dist/components/Card.figma.d.ts +2 -0
- package/dist/components/Card.figma.d.ts.map +1 -0
- package/dist/components/Icons/AudienceIcon.d.ts.map +1 -1
- package/dist/components/Input.figma.d.ts +2 -0
- package/dist/components/Input.figma.d.ts.map +1 -0
- package/dist/components/RadioGroup.figma.d.ts +2 -0
- package/dist/components/RadioGroup.figma.d.ts.map +1 -0
- package/dist/components/SettingsPopover/SettingsPopover.figma.d.ts +2 -0
- package/dist/components/SettingsPopover/SettingsPopover.figma.d.ts.map +1 -0
- package/dist/components/Slider.figma.d.ts +2 -0
- package/dist/components/Slider.figma.d.ts.map +1 -0
- package/dist/components/Stepper/Stepper.figma.d.ts +2 -0
- package/dist/components/Stepper/Stepper.figma.d.ts.map +1 -0
- package/dist/components/StudioControls/StudioControls.d.ts +3 -0
- package/dist/components/StudioControls/StudioControls.d.ts.map +1 -0
- package/dist/components/StudioControls/StudioControls.figma.d.ts +2 -0
- package/dist/components/StudioControls/StudioControls.figma.d.ts.map +1 -0
- package/dist/components/StudioControls/index.d.ts +3 -0
- package/dist/components/StudioControls/index.d.ts.map +1 -0
- package/dist/components/StudioControls/types.d.ts +17 -0
- package/dist/components/StudioControls/types.d.ts.map +1 -0
- package/dist/components/Switch.figma.d.ts +2 -0
- package/dist/components/Switch.figma.d.ts.map +1 -0
- package/dist/components/index.cjs +78 -74
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/figma-codex/parser.d.ts +2 -0
- package/dist/figma-codex/parser.d.ts.map +1 -1
- package/dist/figma-codex/resolver.d.ts.map +1 -1
- package/dist/figma-codex/schema.d.ts +7 -0
- package/dist/figma-codex/schema.d.ts.map +1 -1
- package/dist/figma-codex.json +420 -2
- package/dist/index.cjs +82 -78
- package/dist/index.js +2 -2
- package/dist/preset/index.cjs +2 -2
- package/dist/preset/index.js +1 -1
- package/dist/preset/recipes/badge.d.ts.map +1 -1
- package/dist/preset/recipes/index.d.ts +1 -0
- package/dist/preset/recipes/index.d.ts.map +1 -1
- package/dist/preset/recipes/studio-controls.d.ts +2 -0
- package/dist/preset/recipes/studio-controls.d.ts.map +1 -0
- package/dist/preset/recipes/switch.d.ts.map +1 -1
- package/docs/figma-mcp-return/card-audit.json +31 -0
- package/docs/figma-mcp-return/conversation-prelaunch-audit.json +51 -0
- package/docs/figma-mcp-return/conversation_lobby-design-context.md +359 -0
- package/docs/figma-mcp-return/conversation_lobby-metadata.xml +1 -0
- package/docs/figma-mcp-return/discourser-accordion-audit.json +264 -0
- package/docs/figma-mcp-return/discourser-accordion-design-context-v2.tsx +350 -0
- package/docs/figma-mcp-return/discourser-accordion-design-context.tsx +130 -0
- package/docs/figma-mcp-return/discourser-accordion-metadata-v2.xml +1 -0
- package/docs/figma-mcp-return/discourser-accordion-metadata.xml +1 -0
- package/docs/figma-mcp-return/kai-resolution-simulation.md +181 -0
- package/docs/figma-mcp-return/prelaunch-comparison-analysis.md +126 -0
- package/docs/figma-mcp-return/prelaunch-get-design-context.md +982 -0
- package/docs/figma-mcp-return/prelaunch-get-metadata.md +7 -0
- package/docs/figma-mcp-return/prelaunch-get-metadata.xml +3 -0
- package/docs/figma-mcp-return/prelaunch-post-component-update.md +791 -0
- package/docs/figma-mcp-return/prelaunch-post-rebind-design-context.md +969 -0
- package/docs/figma-mcp-return/radio-group-audit.json +23 -0
- package/docs/figma-mcp-return/switch-audit.json +38 -0
- package/docs/session-summary-2026-03-29.md +98 -0
- package/package.json +2 -1
- package/src/components/Badge.figma.tsx +39 -0
- package/src/components/Button.figma.tsx +18 -0
- package/src/components/Card.figma.tsx +33 -0
- package/src/components/Icons/AudienceIcon.tsx +3 -1
- package/src/components/Icons/AudioSpeakerIcon.tsx +1 -1
- package/src/components/Icons/MicrophoneIcon.tsx +3 -3
- package/src/components/Icons/RecordIcon.tsx +4 -4
- package/src/components/Icons/TimerIcon.tsx +1 -1
- package/src/components/Input.figma.tsx +17 -0
- package/src/components/RadioGroup.figma.tsx +61 -0
- package/src/components/SettingsPopover/SettingsPopover.figma.tsx +17 -0
- package/src/components/Slider.figma.tsx +66 -0
- package/src/components/Stepper/Stepper.figma.tsx +19 -0
- package/src/components/StudioControls/StudioControls.figma.tsx +25 -0
- package/src/components/StudioControls/StudioControls.tsx +381 -0
- package/src/components/StudioControls/index.ts +2 -0
- package/src/components/StudioControls/types.ts +17 -0
- package/src/components/Switch.figma.tsx +49 -0
- package/src/components/index.ts +5 -0
- package/src/figma-codex/parser.ts +55 -0
- package/src/figma-codex/resolver.ts +1 -0
- package/src/figma-codex/schema.ts +9 -0
- package/src/preset/recipes/badge.ts +41 -7
- package/src/preset/recipes/index.ts +1 -0
- package/src/preset/recipes/studio-controls.ts +252 -0
- package/src/preset/recipes/switch.ts +5 -4
- package/dist/chunk-HN2IHIMR.js.map +0 -1
- package/dist/chunk-KIJKNZ73.cjs.map +0 -1
- package/dist/chunk-VN2QX6S7.js.map +0 -1
- package/dist/chunk-VOH2QELR.cjs.map +0 -1
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Kai Resolution Simulation — Conversation Prelaunch (66:2739)
|
|
2
|
+
## Post-Rebind Analysis: What Kai Can and Cannot Resolve
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 1. Component Resolution (via figma-codex.json)
|
|
7
|
+
|
|
8
|
+
Kai cross-references `data-name` attributes against figma-codex component names.
|
|
9
|
+
|
|
10
|
+
### ✅ RESOLVES to DDS component
|
|
11
|
+
| data-name in MCP output | figma-codex match | DDS import |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `DiscourserLogo` | DiscourserLogo (node 491:4933) | `import { DiscourserLogo } from '@discourser/design-system/Icons/DiscourserLogo'` |
|
|
14
|
+
| `Navigation Menu` | NavigationMenu (node 38:8485) | `import * as NavigationMenu from '@discourser/design-system/NavigationMenu'` |
|
|
15
|
+
| `StudioControlsMenu` | StudioControls (node 38:8232) | `import { StudioControls } from '@discourser/design-system/StudioControls'` |
|
|
16
|
+
| `Breadcrumb` | Breadcrumb (node 38:7978) | `import * as Breadcrumb from '@discourser/design-system/Breadcrumb'` |
|
|
17
|
+
| `Discourser Button` | Button (node 38:7993) | `import { Button } from '@discourser/design-system/Button'` |
|
|
18
|
+
| `Badge` | Badge (node 0:0 placeholder) | `import { Badge } from '@discourser/design-system/Badge'` |
|
|
19
|
+
| `Slider` / `.Slider Item` | Slider (node 38:7988) | `import * as Slider from '@discourser/design-system/Slider'` |
|
|
20
|
+
| `Radio Group` / `.Radio Group Item` | RadioGroup (node 38:8757) | `import * as RadioGroup from '@discourser/design-system/RadioGroup'` |
|
|
21
|
+
| `Discourser AI Switch Toggle` / `Switch` | Switch (node 38:8121) | `import * as Switch from '@discourser/design-system/Switch'` |
|
|
22
|
+
|
|
23
|
+
### ⚠️ PARTIAL — Recognized but needs interpretation
|
|
24
|
+
| data-name | What Kai sees | Gap |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| `SettingsPopover` (via `PopOver` component) | SettingsPopover exists in codex (node 810:5398) | MCP splits it into PopOver + Logout sub-components — Kai needs to reassemble |
|
|
27
|
+
| `Discourse Accordion Item (Info Panel)` etc. | Accordion exists in codex (node 38:8232) | These are domain-specific panels, not generic Accordion — Kai uses StudioControls instead |
|
|
28
|
+
| `LoggedInAvatar` | Not in codex | Kai would need to fall back to Storybook MCP for Avatar component |
|
|
29
|
+
|
|
30
|
+
### ❌ NOT in codex — falls back to Storybook MCP or raw code
|
|
31
|
+
| data-name | What it is | Resolution path |
|
|
32
|
+
|---|---|---|
|
|
33
|
+
| `ListItem` / `Expandable List Item` | NavigationMenu internal parts | Covered by NavigationMenu composite — not separate |
|
|
34
|
+
| `icon-Front` / `icon-Back` / Lucide Icons | Icon components | DDS has icon .figma.tsx files but these are Figma's Lucide instances |
|
|
35
|
+
| `Heading 2` | Georgia Bold 24px header | Raw text styling — no DDS heading component for this |
|
|
36
|
+
| `Clock` | Custom timer display | App-specific, not a DDS component |
|
|
37
|
+
| `Instructions Container` | Content card | Could use Card component — Kai needs to infer |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. Color Token Resolution
|
|
42
|
+
|
|
43
|
+
### ✅ Variables that resolve directly via figma-token-resolution.md
|
|
44
|
+
|
|
45
|
+
| var() in MCP output | Token resolution path | DDS Panda CSS |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| `var(--neutral/99,#fdfcf5)` | Primitive → neutral/99 | `bg="neutral.99"` or `token('colors.surface')` |
|
|
48
|
+
| `var(--neutral/90,#e3e3db)` | Primitive → neutral/90 | `token('colors.surface.container.high')` |
|
|
49
|
+
| `var(--neutral/30,#464742)` | Primitive → neutral/30 | `token('colors.onSurface.variant')` |
|
|
50
|
+
| `var(--neutral/20,#30312c)` | Primitive → neutral/20 | `token('colors.onSurface')` approx |
|
|
51
|
+
| `var(--neutral/40,#5e5f59)` | Primitive → neutral/40 | Muted text |
|
|
52
|
+
| `var(--neutral/80,#c7c7c0)` | Primitive → outline/variant border | `token('colors.outline.variant')` |
|
|
53
|
+
| `var(--neutral/0,black)` | Primitive → black | Stage background |
|
|
54
|
+
| `var(--secondary/50,#6c7d56)` | Primitive → secondary | `token('colors.secondary')` |
|
|
55
|
+
| `var(--secondary/80,#bbcda1)` | Primitive → secondary/container | `token('colors.secondary.container')` |
|
|
56
|
+
| `var(--primary/80,#97d945)` | Primitive → inverse/primary | `token('colors.inverse.primary')` |
|
|
57
|
+
| `var(--primary/99,#f9ffe9)` | Primitive → near-white tint | `token('colors.primary.palette.99')` |
|
|
58
|
+
| `var(--primary/10,#102000)` | Primitive → dark green | Clock background |
|
|
59
|
+
| `var(--primary/60,#64a104)` | Primitive → accent | RadioGroup selected border |
|
|
60
|
+
| `var(--neutralvariant/95,#eff2e3)` | Primitive → light tint | `token('colors.surface.container.low')` |
|
|
61
|
+
| `var(--neutralvariant/10,#191d14)` | Primitive → dark text | Section header text |
|
|
62
|
+
| `var(--neutralvariant/80,#c5c8ba)` | Primitive → outline/variant | SettingsPopover border |
|
|
63
|
+
| `var(--surface,#f9faef)` | **Semantic** → surface | `token('colors.surface')` ✨ |
|
|
64
|
+
| `var(--surface/container,#eeefe3)` | **Semantic** → surface/container | `token('colors.surface.container')` ✨ |
|
|
65
|
+
| `var(--surface/container/high,#e8e9de)` | **Semantic** → surface/container/high | `token('colors.surface.container.high')` ✨ |
|
|
66
|
+
| `var(--shadow,black)` | **Semantic** → shadow | `token('colors.shadow')` ✨ |
|
|
67
|
+
|
|
68
|
+
The ✨ items are the ones we **fixed this session** — previously these were shadcn-named (`foreground`, `border`, etc.) or old-library (`surfacecontainerhigh`).
|
|
69
|
+
|
|
70
|
+
### ✅ Spacing/Shape variables that resolve
|
|
71
|
+
| var() in MCP output | DDS token |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `var(--spacing/xl,32px)` | `p="xl"` |
|
|
74
|
+
| `var(--spacing/xxl,48px)` | `p="xxl"` |
|
|
75
|
+
| `var(--spacing/md,16px)` | `p="md"` |
|
|
76
|
+
| `var(--radii/small,8px)` | `borderRadius="small"` |
|
|
77
|
+
| `var(--radii/medium,12px)` | `borderRadius="medium"` |
|
|
78
|
+
| `var(--radii/large,16px)` | `borderRadius="large"` |
|
|
79
|
+
| `var(--border/thin,1px)` | `borderWidth="thin"` |
|
|
80
|
+
|
|
81
|
+
### ⚠️ Hardcoded hex that Kai CAN resolve via hex lookup
|
|
82
|
+
| Hex | figma-token-resolution.md match | DDS token |
|
|
83
|
+
|---|---|---|
|
|
84
|
+
| `#1b1c18` | onSurface | `token('colors.onSurface')` |
|
|
85
|
+
| `#30312c` | neutral/20 → onSurface approx | `token('colors.onSurface')` |
|
|
86
|
+
| `#363636` | Black/Neutral/30%/600 style | **NOT in DDS** — closest `onSurface` |
|
|
87
|
+
| `#2e2e2e` | Black/Neutral/30%/700 style | **NOT in DDS** — closest `onSurface` |
|
|
88
|
+
| `#464742` | neutral/30 | `token('colors.onSurface.variant')` |
|
|
89
|
+
| `#6c7d56` | secondary/50 | `token('colors.secondary')` |
|
|
90
|
+
| `#97d945` | primary/80 | `token('colors.inverse.primary')` |
|
|
91
|
+
| `#e3e3db` | neutral/90 | `token('colors.surface.container.high')` |
|
|
92
|
+
| `#eeefe3` | surfacecontainer | `token('colors.surface.container')` |
|
|
93
|
+
| `#e8e9de` | surfacecontainerhigh | `token('colors.surface.container.high')` |
|
|
94
|
+
| `#fdfcf5` | neutral/99 | near-white surface |
|
|
95
|
+
| `#f9faef` | surface | `token('colors.surface')` |
|
|
96
|
+
| `#f2f1e9` | neutral/95 | `token('colors.surface.container.low')` |
|
|
97
|
+
| `#eff2e3` | neutralvariant/95 | `token('colors.surface.container.low')` |
|
|
98
|
+
| `#f9ffe9` | primary/99 | near-white primary tint |
|
|
99
|
+
| `#bbcda1` | secondary/80 | `token('colors.secondary.container')` |
|
|
100
|
+
| `#abaca5` | neutral/70 | border color |
|
|
101
|
+
|
|
102
|
+
### ❌ Hardcoded hex Kai CANNOT resolve — NOT in token resolution tables
|
|
103
|
+
| Hex | Where used | Problem |
|
|
104
|
+
|---|---|---|
|
|
105
|
+
| `#363636` | Text throughout (accordion triggers, nav) | Local style "Black/Neutral/30%/600" — not a DDS variable |
|
|
106
|
+
| `#2e2e2e` | Bullet text | Local style "Black/Neutral/30%/700" — not a DDS variable |
|
|
107
|
+
| `#4a5565` | Scenario Settings subtext | Unknown — possibly from old design |
|
|
108
|
+
| `#c5d24d` | Primary/500 — Switch on, Badge bg accent | Local Figma style, NOT variable-bound |
|
|
109
|
+
| `rgba(192,209,92,0.4)` | Primary/Beginner/40% — Badge, Switch off | Local style with opacity |
|
|
110
|
+
| `#b8a9c9` | Accent/500 — Slider thumb | Local Figma style |
|
|
111
|
+
| `#cfc4db` | Accent/400 — Slider thumb border | Local Figma style |
|
|
112
|
+
| `#6b7a1f` | Primary/700 — Slider range fill | Local Figma style |
|
|
113
|
+
| `#e0dcd5` | Gray/Neutral/30%/500 — Slider track | Local Figma style |
|
|
114
|
+
| `#f5f1eb` | Stone/60%/500 — Accordion borders | Local Figma style |
|
|
115
|
+
| `#faf8f5` | Stone/60%/400 — Stage bg | Local Figma style |
|
|
116
|
+
| `#fffdfa` | Info Panel bg | Unknown |
|
|
117
|
+
| `#e5e7eb` | RightControlPanel border | Likely Tailwind gray-200 default — from old library |
|
|
118
|
+
| `#91918b` | neutral/60 text | In var() but not in hex table |
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 3. Typography Resolution
|
|
123
|
+
|
|
124
|
+
| Figma style detected | Font | Size/Weight | Kai resolution |
|
|
125
|
+
|---|---|---|---|
|
|
126
|
+
| `headlineMedium` | Fraunces 28px/400 | ✅ `textStyle="headlineMedium"` |
|
|
127
|
+
| `bodyLarge` / `bodyLargeReg` / `bodyLargeSemiBold` | Poppins 18px/400-600 | ✅ `textStyle="bodyLarge"` |
|
|
128
|
+
| `bodyMedium` | Poppins 14px/400 | ✅ `textStyle="bodyMedium"` |
|
|
129
|
+
| Georgia Bold 24px | `Dsktp/Georgia/H4/SemiB/24` | ❌ Not in DDS typography scale — "Studio Controls" header |
|
|
130
|
+
| Inter Regular 18px | Nav labels | ❌ Inter not in DDS typography — Figma uses Inter, DDS uses Poppins |
|
|
131
|
+
| Inter Medium 20px | Accordion triggers | ❌ Inter not in DDS typography |
|
|
132
|
+
| Inter Medium 16px | Nav sub-items | ❌ Inter not in DDS typography |
|
|
133
|
+
|
|
134
|
+
**Key gap:** The nav and accordion use Inter font, but DDS typography is Poppins for body/UI. This is a design-code mismatch Kai would flag.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 4. Summary: Kai's Fidelity Estimate
|
|
139
|
+
|
|
140
|
+
### What resolves cleanly: ~70%
|
|
141
|
+
- Page structure (3-column layout) — fully understood
|
|
142
|
+
- 9 DDS components identified via codex
|
|
143
|
+
- 20+ color variables resolve through Primitive/Semantic tables
|
|
144
|
+
- Spacing, radius, border tokens all resolve
|
|
145
|
+
- Core typography (headlineMedium, bodyLarge, bodyMedium) resolves
|
|
146
|
+
|
|
147
|
+
### What requires inference or workaround: ~15%
|
|
148
|
+
- 14 hardcoded hex values need hex lookup table (most DO match)
|
|
149
|
+
- Typography font mismatch (Inter in Figma vs Poppins in DDS)
|
|
150
|
+
- SettingsPopover needs reassembly from sub-components
|
|
151
|
+
- Instructions Container should map to Card but isn't explicitly named
|
|
152
|
+
|
|
153
|
+
### What Kai can't resolve: ~15%
|
|
154
|
+
- `#363636` / `#2e2e2e` text colors — not in any DDS token table
|
|
155
|
+
- `#c5d24d` Primary/500 and Accent palette — local Figma styles, no variables
|
|
156
|
+
- `#e5e7eb` border — leftover Tailwind default
|
|
157
|
+
- `#4a5565` subtext — unknown origin
|
|
158
|
+
- Georgia Bold 24px — not in DDS type scale
|
|
159
|
+
- `#fffdfa` panel bg — not in any table
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 5. Recommended Next Actions (priority order)
|
|
164
|
+
|
|
165
|
+
### HIGH — Would move fidelity from ~70% to ~85%
|
|
166
|
+
1. **Create Figma variables for the Accent palette** (`#b8a9c9`, `#cfc4db`, `#6b5a7d`, `#8d7ea3`) and Primary/500 (`#c5d24d`). These are used on sliders, switches, and badges but have no variable bindings.
|
|
167
|
+
|
|
168
|
+
2. **Replace `#363636` and `#2e2e2e` with `onSurface` or `onSurface/variant`** on text nodes. These are local styles that should be variable-bound.
|
|
169
|
+
|
|
170
|
+
3. **Add `#363636`, `#2e2e2e`, and `#4a5565` to Kai's hex lookup table** as interim measure while Figma bindings are fixed.
|
|
171
|
+
|
|
172
|
+
### MEDIUM — Would move to ~90%
|
|
173
|
+
4. **Resolve the Inter vs Poppins typography mismatch** — decide whether nav/accordion should use Poppins (DDS standard) or if Inter is intentional for these contexts.
|
|
174
|
+
|
|
175
|
+
5. **Replace `#e5e7eb` border** on RightControlPanel with `outline/variant` variable.
|
|
176
|
+
|
|
177
|
+
6. **Create `#fffdfa` → near-white token** or map to existing `neutral/99`.
|
|
178
|
+
|
|
179
|
+
### LOW — Polish
|
|
180
|
+
7. Update Figma component descriptions to point to DDS Storybook instead of shadcn docs.
|
|
181
|
+
8. Explore `add_code_connect_map` to get MCP to return DDS imports directly.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Design Context Comparison: Node 66:2739 (Conversation Prelaunch)
|
|
2
|
+
|
|
3
|
+
**Before:** `conversation_lobby-design-context.md` (remote MCP, ~March 27)
|
|
4
|
+
**After:** `prelaunch-get-design-context.md` (desktop MCP, March 29, post-codex update)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Key Difference: Desktop MCP Returns Much Richer Data
|
|
9
|
+
|
|
10
|
+
The desktop MCP (localhost:3845) returns significantly more detail than the remote MCP:
|
|
11
|
+
|
|
12
|
+
### Variable References — MAJOR IMPROVEMENT
|
|
13
|
+
|
|
14
|
+
The desktop MCP output uses CSS custom property syntax with fallback values, revealing
|
|
15
|
+
the actual Figma variable bindings. Examples from the after pull:
|
|
16
|
+
|
|
17
|
+
- `var(--surfacecontainerhigh,#e8e9de)` — variable bound with hex fallback
|
|
18
|
+
- `var(--neutral\/90,#e3e3db)` — Primitive collection
|
|
19
|
+
- `var(--neutral\/99,#fdfcf5)` — Primitive collection
|
|
20
|
+
- `var(--neutral\/0,black)` — Primitive collection
|
|
21
|
+
- `var(--secondary\/50,#6c7d56)` — Primitive collection
|
|
22
|
+
- `var(--secondary\/80,#bbcda1)` — Primitive collection
|
|
23
|
+
- `var(--primary\/80,#97d945)` — Primitive collection
|
|
24
|
+
- `var(--primary\/99,#f9ffe9)` — Primitive collection
|
|
25
|
+
- `var(--primary\/10,#102000)` — Primitive collection
|
|
26
|
+
- `var(--primary\/60,#64a104)` — Primitive collection (RadioGroup border)
|
|
27
|
+
- `var(--neutral\/20,#30312c)` — Primitive collection
|
|
28
|
+
- `var(--neutral\/40,#5e5f59)` — Primitive collection
|
|
29
|
+
- `var(--neutral\/95,#f2f1e9)` — Primitive collection
|
|
30
|
+
- `var(--neutral\/70,#abaca5)` — Primitive collection
|
|
31
|
+
- `var(--neutral\/80,#c7c7c0)` — Primitive collection
|
|
32
|
+
- `var(--neutral\/30,#464742)` — Primitive collection
|
|
33
|
+
- `var(--neutralvariant\/95,#eff2e3)` — Primitive collection
|
|
34
|
+
- `var(--neutralvariant\/10,#191d14)` — Primitive collection
|
|
35
|
+
- `var(--surfacecontainer,#eeefe3)` — Semantic collection
|
|
36
|
+
- `var(--surface,#f9faef)` — Semantic collection
|
|
37
|
+
|
|
38
|
+
**Spacing & Shape variables also visible:**
|
|
39
|
+
- `var(--spacing\/xl,32px)` → px padding
|
|
40
|
+
- `var(--spacing\/xxl,48px)` → py padding
|
|
41
|
+
- `var(--spacing\/md,16px)` → Clock padding
|
|
42
|
+
- `var(--p-0,0px)`, `var(--p-1,4px)`, `var(--p-2,8px)`, `var(--p-4,16px)`
|
|
43
|
+
- `var(--radii\/small,8px)`, `var(--radii\/medium,12px)`, `var(--radii\/large,16px)`
|
|
44
|
+
- `var(--radius\/rounded-full,9999px)`
|
|
45
|
+
- `var(--border\/thin,1px)`
|
|
46
|
+
|
|
47
|
+
**Typography variables:**
|
|
48
|
+
- `var(--typography\/family\/body,'Poppins:SemiBold',sans-serif)`
|
|
49
|
+
- `var(--typography\/size\/xl,18px)`
|
|
50
|
+
- `var(--font\/family\/font-sans,'Inter:Medium',sans-serif)`
|
|
51
|
+
- `var(--font\/weight\/font-medium,500)`
|
|
52
|
+
|
|
53
|
+
**Shadow variables:**
|
|
54
|
+
- `var(--shadow\/2xs,rgba(26,26,26,0.05))`
|
|
55
|
+
- `var(--shadow\/md,rgba(26,26,26,0.05))` with multi-layer structure
|
|
56
|
+
|
|
57
|
+
The before pull (remote MCP) showed only hex values — no variable references at all.
|
|
58
|
+
|
|
59
|
+
### Hardcoded Hex Values (Still Dirty)
|
|
60
|
+
|
|
61
|
+
These appear as raw hex without variable bindings:
|
|
62
|
+
- `#c5d24d` — Primary/500 (Switch on state, Badge bg)
|
|
63
|
+
- `rgba(192,209,92,0.4)` — Primary/Beginner/40% (Badge bg, Switch off state)
|
|
64
|
+
- `#b8a9c9` — Accent/500 (Slider thumb)
|
|
65
|
+
- `#cfc4db` — Accent/400 (Slider thumb border)
|
|
66
|
+
- `#6b7a1f` — Primary/700 (Slider range fill)
|
|
67
|
+
- `#e0dcd5` — Gray/Neutral/30%/500 (Slider track)
|
|
68
|
+
- `#f5f1eb` — Stone/60%/500 (Accordion borders)
|
|
69
|
+
- `#fffdfa` — Info Panel bg
|
|
70
|
+
- `#363636` — Black/Neutral/30%/600 (text)
|
|
71
|
+
- `#2e2e2e` — Black/Neutral/30%/700 (text)
|
|
72
|
+
- `#4a5565` — (Scenario Settings subtext)
|
|
73
|
+
- `#e5e7eb` — (RightControlPanel border — likely from old external library)
|
|
74
|
+
- `#faf8f5` — Stone/60%/400 (Stage bg)
|
|
75
|
+
|
|
76
|
+
### Node IDs and Data Attributes — NEW
|
|
77
|
+
|
|
78
|
+
The desktop MCP includes `data-node-id` and `data-name` attributes on every element.
|
|
79
|
+
This is gold for Kai — it can trace any element back to its Figma source node.
|
|
80
|
+
|
|
81
|
+
### Component Structure Identified
|
|
82
|
+
|
|
83
|
+
Components detected with their Figma variant info:
|
|
84
|
+
- `SettingsPopover` — property1: "Default" | "Open-Popover"
|
|
85
|
+
- `DiscourserAiSwitchToggle` — state: "Default" | "Disabled" | "Focus", toggled: boolean
|
|
86
|
+
- `PopOver` — standalone
|
|
87
|
+
- `Logout` — standalone
|
|
88
|
+
|
|
89
|
+
### Code Connect — Still Not Active
|
|
90
|
+
|
|
91
|
+
No `<CodeConnectSnippet>` wrappers in output. The desktop MCP doesn't read
|
|
92
|
+
figma-codex.json either. Components are identified by name but code is generated
|
|
93
|
+
from scratch rather than using DDS imports.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## What This Means for Kai
|
|
98
|
+
|
|
99
|
+
The desktop MCP data is dramatically better than the remote MCP for Kai's pipeline:
|
|
100
|
+
|
|
101
|
+
1. **Variable names are visible** — Kai can now map `var(--secondary/50)` directly
|
|
102
|
+
to DDS tokens using figma-token-resolution.md
|
|
103
|
+
|
|
104
|
+
2. **Spacing/radius/border tokens are exposed** — These weren't available before.
|
|
105
|
+
Kai can now use `spacing.xl`, `radii.large` etc.
|
|
106
|
+
|
|
107
|
+
3. **Node IDs on every element** — Kai can cross-reference against figma-codex.json
|
|
108
|
+
to identify which elements are DDS components
|
|
109
|
+
|
|
110
|
+
4. **Component variant props are typed** — SettingsPopover and Switch show their
|
|
111
|
+
Figma variant properties, which map to DDS component props
|
|
112
|
+
|
|
113
|
+
## Remaining Gaps
|
|
114
|
+
|
|
115
|
+
1. **Swap Library still needed** — `#e5e7eb` borders and other hex values suggest
|
|
116
|
+
old external library bindings are still present in nested instances
|
|
117
|
+
|
|
118
|
+
2. **No Code Connect** — Would need `add_code_connect_map` or Code Connect UI
|
|
119
|
+
to get the MCP to return DDS imports directly
|
|
120
|
+
|
|
121
|
+
3. **Accent colors hardcoded** — `#b8a9c9` (slider thumb), `#cfc4db` (slider border)
|
|
122
|
+
are not variable-bound in Figma
|
|
123
|
+
|
|
124
|
+
4. **Badge uses inline hex** — `rgba(192,209,92,0.4)` instead of a variable binding
|
|
125
|
+
|
|
126
|
+
5. **Component doc links still point to shadcn** — Not DDS Storybook
|