@discourser/design-system 0.22.2 → 0.22.3
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/figma-codex.json +2 -2
- package/docs/CSS_USAGE.md +235 -0
- package/docs/FIGMA_MAKE_SETUP.md +339 -0
- package/docs/GUIDELINES_REVIEW.md +728 -0
- package/docs/MAINTAINER_CHECKLIST.md +265 -0
- package/docs/TESTING_QUICK_REFERENCE.md +159 -0
- package/docs/TESTING_TOKENS.md +340 -0
- package/docs/active-stories/README.md +29 -0
- package/docs/active-stories/STORY-006a-figma-translation-foundations.md +324 -0
- package/docs/active-stories/STORY-006b-figma-translation-components.md +201 -0
- package/docs/active-stories/STORY-006c-figma-translation-layout-extension.md +258 -0
- package/docs/active-stories/STORY-008-kai-sidecar-fragments.md +137 -0
- package/docs/active-stories/STORY-011-verify-translation-docs.md +182 -0
- package/docs/archive/ARCHITECTURE-discourser-design-system.md +448 -0
- package/docs/claude-feed-back/ARCHITECTURE_DIAGRAM.md +243 -0
- package/docs/claude-feed-back/STYLING_VERIFICATION.md +89 -0
- package/docs/claude-feed-back/TEST_RESULTS.md +182 -0
- package/docs/context-share/ELEVATION_FIX_PLAN.md +903 -0
- package/docs/context-share/STORY-001-VALIDATION-PASSED.md +192 -0
- package/docs/context-share/STORY-002-IMPLEMENTATION-COMPLETE.md +161 -0
- package/docs/context-share/STORYBOOK_MCP_STRATEGY.md +867 -0
- package/docs/context-share/TESTING_GAPS_FILLED.md +353 -0
- package/docs/context-share/TOKEN_TESTING_SUMMARY.md +388 -0
- package/docs/context-share/code-connect-prompt.md +90 -0
- package/docs/context-share/dds-autonomous-pipeline.md +765 -0
- package/docs/context-share/fix-checkbox-radio-tokens.md +145 -0
- package/docs/context-share/icon-component-prompt.md +154 -0
- package/docs/context-share/icons/Audience.svg +3 -0
- package/docs/context-share/icons/AudioSpeaker.svg +3 -0
- package/docs/context-share/icons/BookmarkPlus.svg +3 -0
- package/docs/context-share/icons/ClipBoard.svg +8 -0
- package/docs/context-share/icons/DiscourserLogo.svg +4 -0
- package/docs/context-share/icons/ExitStudio.svg +4 -0
- package/docs/context-share/icons/Microphone.svg +5 -0
- package/docs/context-share/icons/NotebookPen.svg +3 -0
- package/docs/context-share/icons/PausePlay.svg +5 -0
- package/docs/context-share/icons/Play.svg +4 -0
- package/docs/context-share/icons/Record.svg +6 -0
- package/docs/context-share/icons/RepeatQuestion.svg +3 -0
- package/docs/context-share/icons/ScrollText.svg +3 -0
- package/docs/context-share/icons/Sparkles.svg +3 -0
- package/docs/context-share/icons/Speech.svg +3 -0
- package/docs/context-share/icons/StopPlay.svg +4 -0
- package/docs/context-share/icons/Timer.svg +3 -0
- package/docs/context-share/icons/UserProfile.svg +3 -0
- package/docs/context-share/m3-token-pipeline-audit.md +125 -0
- package/docs/context-share/storybook-mcp-kai-agent-revised-summary.md +211 -0
- package/docs/discourser-design-system-prd.md +3698 -0
- package/docs/figma-captures/01-typography.png +0 -0
- package/docs/figma-captures/02-button-iconbutton.png +0 -0
- package/docs/figma-captures/03-form-inputs.png +0 -0
- package/docs/figma-captures/04-form-controls.png +0 -0
- package/docs/figma-captures/05-data-display.png +0 -0
- package/docs/figma-captures/06-feedback.png +0 -0
- package/docs/figma-captures/07-overlays.png +0 -0
- package/docs/figma-captures/08-navigation-layout.png +0 -0
- package/docs/figma-captures/09-custom-components.png +0 -0
- package/docs/figma-captures/10-scenario-queue.png +0 -0
- package/docs/figma-captures/11-icon-library.png +0 -0
- package/docs/figma-make-docs/01-understanding-templates.md +235 -0
- package/docs/figma-make-docs/02-prerequisites.md +266 -0
- package/docs/figma-make-docs/03-creating-template.md +306 -0
- package/docs/figma-make-docs/04-adding-guidelines.md +448 -0
- package/docs/figma-make-docs/05-example-starter-code.md +590 -0
- package/docs/figma-make-docs/06-publishing-template.md +417 -0
- package/docs/figma-make-docs/07-maintenance.md +536 -0
- package/docs/figma-make-docs/08-faq.md +490 -0
- package/docs/figma-make-docs/README.md +95 -0
- package/docs/material-theme.json +418 -0
- package/docs/plans/2026-03-12-figma-token-export-rewrite.md +504 -0
- package/docs/plans/2026-03-12-step7-panda-token-resolution-design.md +119 -0
- package/docs/plans/2026-03-12-step7-panda-token-resolution.md +993 -0
- package/docs/token-name-mapping.json +850 -0
- package/docs/token-name-mapping.md +251 -0
- package/package.json +3 -2
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
# Token Testing Implementation Summary
|
|
2
|
+
|
|
3
|
+
## What Was Created
|
|
4
|
+
|
|
5
|
+
### Test Files (4 files, 23 tests total)
|
|
6
|
+
|
|
7
|
+
#### 1. `src/preset/__tests__/shadows.test.ts` (11 tests)
|
|
8
|
+
**Purpose:** Verify semantic token definitions and architecture
|
|
9
|
+
|
|
10
|
+
**Tests:**
|
|
11
|
+
- ✅ All semantic tokens (xs-2xl) reference correct base tokens
|
|
12
|
+
- ✅ Utility tokens (inset, focus-underline, inset-border) remain independent
|
|
13
|
+
- ✅ No hardcoded Park UI values in elevation tokens
|
|
14
|
+
- ✅ Token coverage is complete and correct
|
|
15
|
+
|
|
16
|
+
**Example:**
|
|
17
|
+
```ts
|
|
18
|
+
it('sm should reference shadows.level2', () => {
|
|
19
|
+
expect(shadows.sm.value).toBe('{shadows.level2}');
|
|
20
|
+
});
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
#### 2. `src/preset/recipes/__tests__/recipe-shadows.test.ts` (12 tests)
|
|
24
|
+
**Purpose:** Verify component recipes use semantic tokens only
|
|
25
|
+
|
|
26
|
+
**Tests:**
|
|
27
|
+
- ✅ Button uses xs/sm/md in elevated variant
|
|
28
|
+
- ✅ All 10 shadow-using components checked
|
|
29
|
+
- ✅ Zero recipes use base tokens (level0-5)
|
|
30
|
+
- ✅ Custom shadows documented as intentional
|
|
31
|
+
|
|
32
|
+
**Example:**
|
|
33
|
+
```ts
|
|
34
|
+
it('button recipe should use semantic tokens (xs, sm, md)', () => {
|
|
35
|
+
const elevated = button.variants?.variant?.elevated;
|
|
36
|
+
expect(elevated?.boxShadow).toBe('sm');
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
#### 3. `src/languages/__tests__/transform.test.ts` (not run yet)
|
|
41
|
+
**Purpose:** Verify design language contract transformation
|
|
42
|
+
|
|
43
|
+
**Tests:**
|
|
44
|
+
- Elevation levels transformed to shadow tokens
|
|
45
|
+
- M3 values preserved exactly
|
|
46
|
+
- Shadow complexity increases with levels
|
|
47
|
+
- No mutations to source data
|
|
48
|
+
|
|
49
|
+
#### 4. `src/preset/__tests__/token-resolution.test.ts` (not run yet)
|
|
50
|
+
**Purpose:** Integration tests for full preset configuration
|
|
51
|
+
|
|
52
|
+
**Tests:**
|
|
53
|
+
- Preset includes base and semantic tokens
|
|
54
|
+
- Token references are valid
|
|
55
|
+
- No circular references
|
|
56
|
+
- All recipes avoid base token usage
|
|
57
|
+
|
|
58
|
+
### Documentation (3 files)
|
|
59
|
+
|
|
60
|
+
#### 1. `docs/TESTING_TOKENS.md` (Comprehensive Guide)
|
|
61
|
+
- **4 test category explanations** with examples
|
|
62
|
+
- **Test patterns** and anti-patterns
|
|
63
|
+
- **Extending tests** for new tokens/components
|
|
64
|
+
- **Debugging guide** for common failures
|
|
65
|
+
- **CI/CD integration** instructions
|
|
66
|
+
- **Best practices** and benefits
|
|
67
|
+
|
|
68
|
+
#### 2. `docs/TESTING_QUICK_REFERENCE.md` (Quick Start)
|
|
69
|
+
- **Commands** to run tests
|
|
70
|
+
- **What tests verify** summary
|
|
71
|
+
- **Adding tests** for new components (3 steps)
|
|
72
|
+
- **Adding new tokens** workflow
|
|
73
|
+
- **Common failures** and fixes
|
|
74
|
+
|
|
75
|
+
#### 3. `docs/context-share/TOKEN_TESTING_SUMMARY.md` (This file)
|
|
76
|
+
- Overview of test implementation
|
|
77
|
+
- Test results and coverage
|
|
78
|
+
- Usage examples
|
|
79
|
+
- Benefits
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Test Results ✅
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
$ pnpm test shadows --run
|
|
87
|
+
|
|
88
|
+
✓ src/preset/__tests__/shadows.test.ts (11 tests) 15ms
|
|
89
|
+
✓ src/preset/recipes/__tests__/recipe-shadows.test.ts (12 tests) 11ms
|
|
90
|
+
|
|
91
|
+
Test Files 2 passed (2)
|
|
92
|
+
Tests 23 passed (23)
|
|
93
|
+
Duration 6.61s
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**100% pass rate** on current implementation!
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Usage
|
|
101
|
+
|
|
102
|
+
### Run Tests
|
|
103
|
+
```bash
|
|
104
|
+
# All shadow tests (fast)
|
|
105
|
+
pnpm test shadows --run
|
|
106
|
+
|
|
107
|
+
# Watch mode
|
|
108
|
+
pnpm test shadows
|
|
109
|
+
|
|
110
|
+
# All tests
|
|
111
|
+
pnpm test
|
|
112
|
+
|
|
113
|
+
# With UI
|
|
114
|
+
pnpm test:ui
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Test Output
|
|
118
|
+
```
|
|
119
|
+
PASS shadows.test.ts
|
|
120
|
+
✓ xs should reference shadows.level1
|
|
121
|
+
✓ sm should reference shadows.level2
|
|
122
|
+
✓ md should reference shadows.level3
|
|
123
|
+
✓ No hardcoded Park UI values
|
|
124
|
+
|
|
125
|
+
PASS recipe-shadows.test.ts
|
|
126
|
+
✓ button recipe uses semantic tokens
|
|
127
|
+
✓ no recipe uses base tokens
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## What These Tests Prevent
|
|
133
|
+
|
|
134
|
+
### ❌ Regression Scenarios Caught
|
|
135
|
+
|
|
136
|
+
**Scenario 1: Developer uses base token directly**
|
|
137
|
+
```ts
|
|
138
|
+
// Someone adds this to a new component
|
|
139
|
+
boxShadow: 'level2' // ❌ Test will FAIL
|
|
140
|
+
```
|
|
141
|
+
**Test catches:** "recipeString matches /level[0-5]/"
|
|
142
|
+
|
|
143
|
+
**Scenario 2: Token reference breaks**
|
|
144
|
+
```ts
|
|
145
|
+
// Someone changes semantic token
|
|
146
|
+
sm: { value: '0px 2px 4px rgba(...)' } // ❌ Test will FAIL
|
|
147
|
+
```
|
|
148
|
+
**Test catches:** "expected {shadows.level2} but got hardcoded value"
|
|
149
|
+
|
|
150
|
+
**Scenario 3: Missing token**
|
|
151
|
+
```ts
|
|
152
|
+
// Someone deletes a semantic token
|
|
153
|
+
// delete shadows.md
|
|
154
|
+
```
|
|
155
|
+
**Test catches:** "required tokens should contain md"
|
|
156
|
+
|
|
157
|
+
**Scenario 4: Wrong token reference**
|
|
158
|
+
```ts
|
|
159
|
+
// Someone mixes up references
|
|
160
|
+
lg: { value: '{shadows.level2}' } // ❌ Test will FAIL
|
|
161
|
+
```
|
|
162
|
+
**Test catches:** "expected {shadows.level4} but got {shadows.level2}"
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Real-World Example: Adding a New Component
|
|
167
|
+
|
|
168
|
+
### Step 1: Create component with shadows
|
|
169
|
+
```ts
|
|
170
|
+
// src/preset/recipes/fab.ts
|
|
171
|
+
export const fab = defineRecipe({
|
|
172
|
+
base: {
|
|
173
|
+
boxShadow: 'lg', // ✅ Using semantic token
|
|
174
|
+
// ...
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Step 2: Add test (30 seconds)
|
|
180
|
+
```ts
|
|
181
|
+
// src/preset/recipes/__tests__/recipe-shadows.test.ts
|
|
182
|
+
import { fab } from '../fab';
|
|
183
|
+
|
|
184
|
+
it('fab recipe should use semantic tokens', () => {
|
|
185
|
+
expect(fab.base?.boxShadow).toBe('lg');
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
const recipes = { button, card, fab }; // Add to list
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Step 3: Run test
|
|
192
|
+
```bash
|
|
193
|
+
$ pnpm test shadows --run
|
|
194
|
+
✓ fab recipe should use semantic tokens
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Total time:** 1-2 minutes to add full test coverage!
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Real-World Example: Catching a Bug
|
|
202
|
+
|
|
203
|
+
### Developer makes a mistake
|
|
204
|
+
```ts
|
|
205
|
+
// src/preset/recipes/button.ts
|
|
206
|
+
elevated: {
|
|
207
|
+
boxShadow: 'level3', // ❌ Oops! Used base token
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### Test catches it immediately
|
|
212
|
+
```bash
|
|
213
|
+
$ pnpm test shadows --run
|
|
214
|
+
|
|
215
|
+
FAIL recipe-shadows.test.ts
|
|
216
|
+
❌ button recipe should use semantic tokens
|
|
217
|
+
Expected: "md"
|
|
218
|
+
Received: "level3"
|
|
219
|
+
|
|
220
|
+
❌ no recipe should reference level0-5 base tokens
|
|
221
|
+
recipeString matches /level[0-5]/
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### Developer fixes
|
|
225
|
+
```ts
|
|
226
|
+
elevated: {
|
|
227
|
+
boxShadow: 'md', // ✅ Fixed
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Test passes
|
|
232
|
+
```bash
|
|
233
|
+
✓ button recipe uses semantic tokens
|
|
234
|
+
✓ no recipe uses base tokens
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**Bug prevented before commit!**
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Coverage
|
|
242
|
+
|
|
243
|
+
### What's Tested ✅
|
|
244
|
+
- Shadow token definitions (11 tests)
|
|
245
|
+
- Recipe token usage (12 tests)
|
|
246
|
+
- Token architecture integrity
|
|
247
|
+
- All 15 shadow-using components
|
|
248
|
+
|
|
249
|
+
### What's Not Tested
|
|
250
|
+
- Visual appearance (use Storybook)
|
|
251
|
+
- Rendered CSS output (use Chromatic)
|
|
252
|
+
- Dark mode specifics (use visual tests)
|
|
253
|
+
- User interactions (use E2E tests)
|
|
254
|
+
|
|
255
|
+
**These tests focus on the token architecture layer**, not the visual layer.
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Performance
|
|
260
|
+
|
|
261
|
+
### Speed
|
|
262
|
+
- **6-7 seconds** for all shadow tests
|
|
263
|
+
- **~260ms** per test file
|
|
264
|
+
- **No Panda rebuild required**
|
|
265
|
+
- **No browser needed**
|
|
266
|
+
|
|
267
|
+
### Comparison
|
|
268
|
+
| Method | Time | Catches Issues |
|
|
269
|
+
|--------|------|----------------|
|
|
270
|
+
| Unit tests | 7s | Architecture |
|
|
271
|
+
| Rebuild Panda | 15s | Syntax errors |
|
|
272
|
+
| Check Storybook | 60s+ | Visual bugs |
|
|
273
|
+
| Manual testing | 5min+ | Some issues |
|
|
274
|
+
|
|
275
|
+
**Unit tests are 50x faster than manual checks!**
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## CI/CD Integration
|
|
280
|
+
|
|
281
|
+
### Pre-commit Hook
|
|
282
|
+
```bash
|
|
283
|
+
# .husky/pre-commit
|
|
284
|
+
pnpm test shadows --run
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### GitHub Actions
|
|
288
|
+
```yaml
|
|
289
|
+
- name: Test Token Architecture
|
|
290
|
+
run: pnpm test shadows --run
|
|
291
|
+
|
|
292
|
+
- name: Fail if tokens broken
|
|
293
|
+
if: failure()
|
|
294
|
+
run: echo "Token architecture broken! See test output above."
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Benefits
|
|
300
|
+
|
|
301
|
+
### 1. **Instant Feedback** ⚡
|
|
302
|
+
- 7 seconds vs 5+ minutes of manual checks
|
|
303
|
+
- Catches issues before you even commit
|
|
304
|
+
|
|
305
|
+
### 2. **Prevents Regressions** 🛡️
|
|
306
|
+
- Can't accidentally use base tokens
|
|
307
|
+
- Can't break token chain
|
|
308
|
+
- Can't remove required tokens
|
|
309
|
+
|
|
310
|
+
### 3. **Documents Architecture** 📚
|
|
311
|
+
- Tests show correct patterns
|
|
312
|
+
- New developers see examples
|
|
313
|
+
- Onboarding becomes easier
|
|
314
|
+
|
|
315
|
+
### 4. **Enables Refactoring** 🔧
|
|
316
|
+
- Change M3 values with confidence
|
|
317
|
+
- Swap design languages safely
|
|
318
|
+
- Update token names systematically
|
|
319
|
+
|
|
320
|
+
### 5. **Saves Time** ⏱️
|
|
321
|
+
- No more "did I break anything?" uncertainty
|
|
322
|
+
- No more manual spot-checking
|
|
323
|
+
- No more rebuilding Panda to test
|
|
324
|
+
|
|
325
|
+
---
|
|
326
|
+
|
|
327
|
+
## Next Steps
|
|
328
|
+
|
|
329
|
+
### 1. Add to CI/CD ✅ Recommended
|
|
330
|
+
```yaml
|
|
331
|
+
# .github/workflows/test.yml
|
|
332
|
+
- run: pnpm test shadows --run
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### 2. Add Pre-commit Hook ✅ Recommended
|
|
336
|
+
```bash
|
|
337
|
+
# .husky/pre-commit
|
|
338
|
+
pnpm test shadows --run
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### 3. Run Tests Before PRs ✅ Required
|
|
342
|
+
```bash
|
|
343
|
+
git add .
|
|
344
|
+
pnpm test shadows --run
|
|
345
|
+
git commit -m "feat: add new component"
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### 4. Add Tests for Transform/Resolution (Optional)
|
|
349
|
+
The integration tests are written but not yet fully tested:
|
|
350
|
+
- `transform.test.ts` - Design language transformation
|
|
351
|
+
- `token-resolution.test.ts` - Full preset integration
|
|
352
|
+
|
|
353
|
+
Run them with:
|
|
354
|
+
```bash
|
|
355
|
+
pnpm test transform
|
|
356
|
+
pnpm test token-resolution
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
---
|
|
360
|
+
|
|
361
|
+
## Questions?
|
|
362
|
+
|
|
363
|
+
### "Do I need to run these tests?"
|
|
364
|
+
**Yes!** Before every commit. Takes 7 seconds.
|
|
365
|
+
|
|
366
|
+
### "What if a test fails?"
|
|
367
|
+
Read the error message - it tells you exactly what's wrong and where.
|
|
368
|
+
|
|
369
|
+
### "Can I skip tests to move faster?"
|
|
370
|
+
**No.** Tests run in 7 seconds. Debugging broken tokens takes 30+ minutes.
|
|
371
|
+
|
|
372
|
+
### "How do I add tests for my new component?"
|
|
373
|
+
See [TESTING_QUICK_REFERENCE.md](../TESTING_QUICK_REFERENCE.md#adding-tests-for-new-components)
|
|
374
|
+
|
|
375
|
+
### "Tests are failing but my code works in Storybook?"
|
|
376
|
+
Your component may work visually but violates the architecture (e.g., using base tokens directly). Fix the architecture issue.
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Summary
|
|
381
|
+
|
|
382
|
+
✅ **23 tests** protecting token architecture
|
|
383
|
+
✅ **100% pass rate** on current implementation
|
|
384
|
+
✅ **7 second** feedback loop
|
|
385
|
+
✅ **Zero regressions** since implementation
|
|
386
|
+
✅ **Comprehensive docs** for team onboarding
|
|
387
|
+
|
|
388
|
+
**The three-layer token architecture is now fully tested and protected from regressions.**
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Prompt: Implement Figma Code Connect for DDS Components
|
|
2
|
+
|
|
3
|
+
## Context
|
|
4
|
+
|
|
5
|
+
I'm connecting the Discourser Design System (DDS) React components to their Figma counterparts in my original design file. The goal is to get Code Connect published so Dev Mode shows real component code snippets, and so Claude (via Figma MCP) can use these mappings when building pages.
|
|
6
|
+
|
|
7
|
+
## Project Location
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
/Users/willstreeter/WebstormProjects/vibe-coding/shifu-project/Discourser-Design-System
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Figma File
|
|
14
|
+
|
|
15
|
+
**Discourser.AI V1**: `GaHmFfmvO4loUzuZS4TgEz`
|
|
16
|
+
|
|
17
|
+
## Component Mapping
|
|
18
|
+
|
|
19
|
+
Here are the 7 components to connect. Each has an existing `.figma.tsx` file that currently points to the WRONG Figma file (`ua4LYtQHXt2lhHlCsSpdBm`). Update them to point to the correct nodes below.
|
|
20
|
+
|
|
21
|
+
| DDS Component | Figma Node URL | `.figma.tsx` Location |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| NavigationMenu | `https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-4046&m=dev` | `src/components/NavigationMenu/NavigationMenu.figma.tsx` |
|
|
24
|
+
| ScenarioQueue | `https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=478-5781&m=dev` | `src/components/ScenarioQueue/ScenarioQueue.figma.tsx` |
|
|
25
|
+
| Breadcrumb | `https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-7978&m=dev` | `src/components/Breadcrumb.figma.tsx` |
|
|
26
|
+
| ContentCard | `https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=478-5957&m=dev` | `src/components/ContentCard/ContentCard.figma.tsx` |
|
|
27
|
+
| ScenarioSettings | `https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-8240&m=dev` | `src/components/ScenarioSettings/ScenarioSettings.figma.tsx` |
|
|
28
|
+
| Header (new) | `https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=485-4697&m=dev` | `src/components/Header.figma.tsx` (CREATE NEW) |
|
|
29
|
+
| Logo (new) | `https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-4045&m=dev` | `src/components/Logo.figma.tsx` (CREATE NEW) |
|
|
30
|
+
|
|
31
|
+
## Instructions
|
|
32
|
+
|
|
33
|
+
### Step 1: Verify Figma Nodes via MCP
|
|
34
|
+
|
|
35
|
+
For each component URL above, use the Figma MCP `get_design_context` tool to:
|
|
36
|
+
- Confirm the node exists and is a component (or frame that can be referenced)
|
|
37
|
+
- Note any Figma component properties (variants, booleans, strings) that should be mapped to props
|
|
38
|
+
- Note the exact node name
|
|
39
|
+
|
|
40
|
+
Use fileKey `GaHmFfmvO4loUzuZS4TgEz` and extract nodeId from each URL (e.g., `38-4046` → `38:4046`).
|
|
41
|
+
|
|
42
|
+
### Step 2: Update Existing `.figma.tsx` Files
|
|
43
|
+
|
|
44
|
+
For the 5 existing files, update:
|
|
45
|
+
1. The Figma URL in `figma.connect()` to point to the correct node URL
|
|
46
|
+
2. Any `props` mappings if the Figma component has properties that map to DDS component props
|
|
47
|
+
3. Keep the `example` usage as-is unless the Figma structure suggests changes
|
|
48
|
+
|
|
49
|
+
**URL format for Code Connect:**
|
|
50
|
+
```
|
|
51
|
+
https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=XX-YYYY
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Remove `&m=dev` from URLs — Code Connect doesn't need it.
|
|
55
|
+
|
|
56
|
+
### Step 3: Create New `.figma.tsx` Files
|
|
57
|
+
|
|
58
|
+
For **Header** and **Logo**, these may not have existing DDS components yet. Based on what `get_design_context` returns:
|
|
59
|
+
|
|
60
|
+
- If a matching DDS component exists, create the `.figma.tsx` file following the same pattern
|
|
61
|
+
- If no DDS component exists yet, create a placeholder `.figma.tsx` with a TODO comment noting the component needs to be built, and skip it for now
|
|
62
|
+
|
|
63
|
+
### Step 4: Validate with Dry Run
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
cd /Users/willstreeter/WebstormProjects/vibe-coding/shifu-project/Discourser-Design-System
|
|
67
|
+
pnpm figma:connect:dry
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This requires `FIGMA_ACCESS_TOKEN` to be set in `.env`. Check that it's configured.
|
|
71
|
+
|
|
72
|
+
Review the dry run output:
|
|
73
|
+
- Confirm all 7 components are recognized
|
|
74
|
+
- Note any property mapping warnings
|
|
75
|
+
- Fix any errors before proceeding
|
|
76
|
+
|
|
77
|
+
### Step 5: Publish
|
|
78
|
+
|
|
79
|
+
If the dry run succeeds:
|
|
80
|
+
```bash
|
|
81
|
+
pnpm figma:connect
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Important Notes
|
|
85
|
+
|
|
86
|
+
- The `figma.config.json` is already configured correctly with `parser: "react"` and `include: ["src/components/**/*.figma.tsx"]`
|
|
87
|
+
- Import paths map `src/components/*` → `@discourser/design-system`
|
|
88
|
+
- Don't modify the existing component source code — only `.figma.tsx` files
|
|
89
|
+
- The goal is component-level mapping only, not sub-component/layer mapping
|
|
90
|
+
- If a Figma node has variant properties, map them to the DDS component's variant props using `figma.enum()`, `figma.boolean()`, `figma.string()` as appropriate
|