trdr-ds-install 1.2.4 → 1.3.0
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/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: trdr-ds
|
|
3
|
-
description: Applies the TRDR Design System to any project. Runs a two-phase workflow - first analyzes the project and presents a migration plan for approval, then executes the full implementation (tokens, components, CLAUDE.md, violation fixes). Trigger when developer mentions "apply design system", "implement TRDR DS", "add TRDR tokens", "design system setup", "migrar design system", "aplicar design system", or invokes /trdr-ds.
|
|
3
|
+
description: Applies the TRDR Design System to any project. Runs a two-phase workflow - first analyzes the project and presents a migration plan for approval, then executes the full implementation (tokens, components, CLAUDE.md, violation fixes). For large projects (50+ violations), execution is batched by folder with progress saved to DS_PROGRESS.md and resumable at any time. Trigger when developer mentions "apply design system", "implement TRDR DS", "add TRDR tokens", "design system setup", "migrar design system", "aplicar design system", or invokes /trdr-ds.
|
|
4
4
|
user-invocable: true
|
|
5
|
-
argument-hint: "[analyze|apply|sync]"
|
|
5
|
+
argument-hint: "[analyze|apply|resume|status|sync|batch N]"
|
|
6
6
|
allowed-tools: [Read, Glob, Grep, Edit, Write, Bash, WebFetch]
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -25,6 +25,9 @@ Execute in two clearly separated phases: **PHASE 1: ANALYZE → PHASE 2: EXECUTE
|
|
|
25
25
|
|-----|-----------|
|
|
26
26
|
| `analyze` *(default when none given)* | Run Phase 1 only — produce a migration plan, do not modify any project file |
|
|
27
27
|
| `apply` | Run Phase 1 + Phase 2 |
|
|
28
|
+
| `resume` | Read `DS_PROGRESS.md` from the project root and continue from the last checkpoint (Phase 2 batching only) |
|
|
29
|
+
| `status` | Read `DS_PROGRESS.md` and display a progress summary table — no files modified |
|
|
30
|
+
| `batch [N]` | Override default batch size for Phase 2 (default: 25 files/batch) |
|
|
28
31
|
| `sync` | Re-fetch `https://trdr.mrocontent.com.br/components.json` and `https://trdr.mrocontent.com.br/tokens.css`, overwrite `data/components.json` and `references/tokens.css` in the skill directory, report the diff. No project changes. |
|
|
29
32
|
| `--latest` *(modifier on `analyze` or `apply`)* | Same as `sync` first, then continue normally |
|
|
30
33
|
|
|
@@ -34,6 +37,26 @@ Execute in two clearly separated phases: **PHASE 1: ANALYZE → PHASE 2: EXECUTE
|
|
|
34
37
|
|
|
35
38
|
Scan the project and produce a structured migration plan. Do NOT modify any project files yet.
|
|
36
39
|
|
|
40
|
+
### Step 0 — Detect previous progress
|
|
41
|
+
|
|
42
|
+
Before any analysis, check if `DS_PROGRESS.md` exists at the project root.
|
|
43
|
+
|
|
44
|
+
**If found AND `Status:` line is NOT `COMPLETE`:**
|
|
45
|
+
```
|
|
46
|
+
⚠️ Previous TRDR DS migration found (status: [IN_PROGRESS/PAUSED]).
|
|
47
|
+
|
|
48
|
+
Reply with:
|
|
49
|
+
- `"resume"` — continue from last checkpoint (Batch [N])
|
|
50
|
+
- `"restart"` — discard progress and run a fresh analysis
|
|
51
|
+
- `"status"` — see a progress summary without modifying anything
|
|
52
|
+
```
|
|
53
|
+
**STOP HERE. Wait for the developer's reply.**
|
|
54
|
+
|
|
55
|
+
**If found AND `Status: COMPLETE`:**
|
|
56
|
+
Inform the dev that a previous migration was already completed (show date). Offer to re-run analysis to detect new files added since then. Continue only if the dev explicitly says so.
|
|
57
|
+
|
|
58
|
+
**If not found:** Continue normally to Step 1.
|
|
59
|
+
|
|
37
60
|
### Step 1 — Detect framework
|
|
38
61
|
|
|
39
62
|
Read `package.json` at the project root. Identify:
|
|
@@ -89,6 +112,11 @@ Flag any gradient that doesn't reference a TRDR gradient token (`var(--gradient-
|
|
|
89
112
|
**H — Hardcoded font-size in px** (should use .trdr-h* / .trdr-body-* text style classes):
|
|
90
113
|
Search: `font-size:\s*\d+px` in CSS/SCSS files (skip tokens.css itself)
|
|
91
114
|
|
|
115
|
+
Track:
|
|
116
|
+
- `total_violations` = sum of all A–H occurrences
|
|
117
|
+
- `total_files_with_violations` = count of unique files with ≥ 1 violation
|
|
118
|
+
- `violations_by_folder` = map of `{ folder: string, files: string[], count: number }[]` grouped by first-level folder inside `src/` (or project root if no `src/`)
|
|
119
|
+
|
|
92
120
|
### Step 3.5 — Detect component replacement candidates
|
|
93
121
|
|
|
94
122
|
Scan the project for UI patterns that indicate elements replaceable by TRDR implemented components.
|
|
@@ -176,7 +204,11 @@ Use the loaded data throughout the rest of the workflow. Track:
|
|
|
176
204
|
|
|
177
205
|
### Step 5 — Present the migration plan and STOP
|
|
178
206
|
|
|
179
|
-
Output the following report and **do not proceed** until the developer explicitly approves
|
|
207
|
+
Output the following report and **do not proceed** until the developer explicitly approves.
|
|
208
|
+
|
|
209
|
+
Determine execution mode based on thresholds:
|
|
210
|
+
- **Small project** (`total_violations <= 50` AND `total_files_with_violations <= 30`): standard monolithic execution — no batching, no DS_PROGRESS.md
|
|
211
|
+
- **Large project** (`total_violations > 50` OR `total_files_with_violations > 30`): batched execution — include the large project warning below
|
|
180
212
|
|
|
181
213
|
```markdown
|
|
182
214
|
## TRDR Design System — Migration Plan
|
|
@@ -230,11 +262,21 @@ Output the following report and **do not proceed** until the developer explicitl
|
|
|
230
262
|
|
|
231
263
|
> **Implementados:** o CSS já estará em `components.css` após a Fase 2 — o dev só precisa trocar as classes.
|
|
232
264
|
> **Stubs:** receberão banner comment com tokens recomendados + entrada em `MISSING_COMPONENTS.md`.
|
|
233
|
-
> **Não listados aqui:** componentes específicos da TRDR (boleta, janela) — verificar manualmente se o projeto os usa.
|
|
234
265
|
|
|
235
266
|
### SCOPE ESTIMATE: [Small / Medium / Large]
|
|
236
267
|
Small = <10 violations | Medium = 10–50 | Large = 50+
|
|
237
268
|
|
|
269
|
+
[ONLY for large projects — include this block:]
|
|
270
|
+
### ⚠️ LARGE PROJECT DETECTED
|
|
271
|
+
[total_violations] violations across [total_files_with_violations] files.
|
|
272
|
+
Phase 2 will run in **BATCHES BY FOLDER** to prevent context overflow and allow resuming.
|
|
273
|
+
|
|
274
|
+
Default batch: 25 files/batch → ~[ceil(total_files_with_violations/25)] batches estimated
|
|
275
|
+
Progress saved to `DS_PROGRESS.md` — resumable anytime with `/trdr-ds resume`.
|
|
276
|
+
|
|
277
|
+
To change batch size: reply with `"Apply, batch 15"` or `"Apply, batch 40"`.
|
|
278
|
+
[END large project block]
|
|
279
|
+
|
|
238
280
|
### WHAT WILL NOT BE TOUCHED:
|
|
239
281
|
- Images, SVGs, fonts files
|
|
240
282
|
- node_modules/, .next/, dist/, build/, out/
|
|
@@ -245,6 +287,7 @@ Small = <10 violations | Medium = 10–50 | Large = 50+
|
|
|
245
287
|
|
|
246
288
|
**Reply with one of:**
|
|
247
289
|
- `"Apply"` or `"Executar"` — proceed with everything above
|
|
290
|
+
- `"Apply, batch [N]"` — proceed with custom batch size (large projects only)
|
|
248
291
|
- `"Apply, skip [file or directory]"` — proceed but exclude specific paths
|
|
249
292
|
- `"Only tokens"` — only create tokens.css, components.css, and CLAUDE.md (no violation fixes)
|
|
250
293
|
- `"Change [detail]"` — adjust a specific part of the plan before executing
|
|
@@ -257,7 +300,55 @@ Small = <10 violations | Medium = 10–50 | Large = 50+
|
|
|
257
300
|
|
|
258
301
|
## PHASE 2: EXECUTION (only after explicit approval)
|
|
259
302
|
|
|
260
|
-
|
|
303
|
+
Parse the developer's reply:
|
|
304
|
+
- Extract batch size override from `"Apply, batch N"` → use N; otherwise default to 25.
|
|
305
|
+
- Extract skip paths from `"Apply, skip [path]"` → exclude those from violation processing.
|
|
306
|
+
- `"Only tokens"` → skip Steps 5 and 6 (no violation fixes, no component banners).
|
|
307
|
+
|
|
308
|
+
Report progress after each major step.
|
|
309
|
+
|
|
310
|
+
### Step 0 — Initialize checkpoint
|
|
311
|
+
|
|
312
|
+
**Determine execution mode:**
|
|
313
|
+
```
|
|
314
|
+
if total_violations <= 50 AND total_files_with_violations <= 30:
|
|
315
|
+
mode = MONOLITHIC (no DS_PROGRESS.md created — skip to Step 1)
|
|
316
|
+
else:
|
|
317
|
+
mode = BATCHED (create DS_PROGRESS.md, execute in batches)
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
**For BATCHED mode — create `DS_PROGRESS.md` at the project root:**
|
|
321
|
+
|
|
322
|
+
```markdown
|
|
323
|
+
# TRDR DS Migration — Progress
|
|
324
|
+
Started: [ISO datetime]
|
|
325
|
+
Project: [project name from package.json]
|
|
326
|
+
Batch size: [N]
|
|
327
|
+
Status: IN_PROGRESS
|
|
328
|
+
|
|
329
|
+
## Foundation
|
|
330
|
+
- [ ] tokens.css
|
|
331
|
+
- [ ] components.css
|
|
332
|
+
- [ ] CLAUDE.md
|
|
333
|
+
- [ ] @import no CSS global
|
|
334
|
+
|
|
335
|
+
## Lotes de Violações
|
|
336
|
+
Total de arquivos com violações: [total_files_with_violations]
|
|
337
|
+
Total de violações: [total_violations]
|
|
338
|
+
Total de lotes: [N]
|
|
339
|
+
|
|
340
|
+
[For each folder in violations_by_folder, sorted alphabetically.
|
|
341
|
+
If a folder has more files than batch_size, split into sub-batches labeled "1a", "1b", etc.
|
|
342
|
+
Files at the project root (not inside src/) go in a final "raiz" batch.]
|
|
343
|
+
|
|
344
|
+
### Lote 1 — [folder/] ([N] arquivos) — PENDING
|
|
345
|
+
### Lote 2 — [folder/] ([N] arquivos) — PENDING
|
|
346
|
+
...
|
|
347
|
+
### Lote [n] — raiz ([N] arquivos) — PENDING
|
|
348
|
+
|
|
349
|
+
## Padrões Sem Token (revisão manual)
|
|
350
|
+
[empty — filled during execution]
|
|
351
|
+
```
|
|
261
352
|
|
|
262
353
|
### Step 1 — Create tokens.css
|
|
263
354
|
|
|
@@ -274,6 +365,11 @@ If `references/tokens.css` is missing in the skill directory:
|
|
|
274
365
|
1. Try `WebFetch: https://trdr.mrocontent.com.br/tokens.css`, save it to the skill dir, then proceed.
|
|
275
366
|
2. If the Hub is also unreachable → STOP with error message asking the maintainer to run `npm run sync`.
|
|
276
367
|
|
|
368
|
+
**For BATCHED mode:** After writing tokens.css, update `DS_PROGRESS.md`:
|
|
369
|
+
```
|
|
370
|
+
- [x] tokens.css — [path]/tokens.css
|
|
371
|
+
```
|
|
372
|
+
|
|
277
373
|
### Step 2 — Create components.css
|
|
278
374
|
|
|
279
375
|
Build `components.css` by concatenating the `.code.css` block of every implemented component plus the typography utility classes.
|
|
@@ -312,6 +408,11 @@ After all component CSS blocks, append the text style utility classes:
|
|
|
312
408
|
.trdr-label-l3 { font-family: var(--font-secondary); font-size: 14px; font-weight: 600; line-height: 1.4; }
|
|
313
409
|
```
|
|
314
410
|
|
|
411
|
+
**For BATCHED mode:** Update `DS_PROGRESS.md`:
|
|
412
|
+
```
|
|
413
|
+
- [x] components.css — [path]/components.css
|
|
414
|
+
```
|
|
415
|
+
|
|
315
416
|
### Step 3 — Update global CSS
|
|
316
417
|
|
|
317
418
|
Find the main global CSS file (globals.css, main.css, index.css, app.css) and add at the very top:
|
|
@@ -325,6 +426,11 @@ Adjust the relative path if tokens.css is in a subdirectory.
|
|
|
325
426
|
|
|
326
427
|
If the project already imports a different design system's variables and there are naming conflicts, warn the developer before proceeding.
|
|
327
428
|
|
|
429
|
+
**For BATCHED mode:** Update `DS_PROGRESS.md`:
|
|
430
|
+
```
|
|
431
|
+
- [x] @import — [global-css-file]
|
|
432
|
+
```
|
|
433
|
+
|
|
328
434
|
### Step 4 — Create CLAUDE.md
|
|
329
435
|
|
|
330
436
|
Create `CLAUDE.md` at the project root, populated dynamically from the catalog:
|
|
@@ -383,9 +489,62 @@ bg.primary (base) → bg.secondary/tertiary (content areas) → surface.* (cards
|
|
|
383
489
|
→ interactive components → overlays/modals/tooltips
|
|
384
490
|
```
|
|
385
491
|
|
|
492
|
+
**For BATCHED mode:** Update `DS_PROGRESS.md`:
|
|
493
|
+
```
|
|
494
|
+
- [x] CLAUDE.md — CLAUDE.md
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
Then output:
|
|
498
|
+
```
|
|
499
|
+
✅ Foundation complete — tokens.css, components.css, CLAUDE.md, @import all done.
|
|
500
|
+
Starting violation processing in [N] batches of up to [batch_size] files each.
|
|
501
|
+
```
|
|
502
|
+
|
|
386
503
|
### Step 5 — Migrate violations
|
|
387
504
|
|
|
388
|
-
|
|
505
|
+
**MONOLITHIC mode:** Process all files with violations in one pass. Apply all replacements below. Continue to Step 6.
|
|
506
|
+
|
|
507
|
+
**BATCHED mode:** Process one batch at a time, with a STOP between batches.
|
|
508
|
+
|
|
509
|
+
For each batch listed as PENDING in `DS_PROGRESS.md`:
|
|
510
|
+
|
|
511
|
+
1. Update `DS_PROGRESS.md` — change batch status to `IN_PROGRESS`
|
|
512
|
+
2. For each file in the batch:
|
|
513
|
+
- Apply all applicable violation fixes (see mapping tables below)
|
|
514
|
+
- Count violations fixed
|
|
515
|
+
3. Update `DS_PROGRESS.md` — change batch status to `COMPLETED`:
|
|
516
|
+
```
|
|
517
|
+
### Lote [N] — [folder/] ([N] arquivos) — COMPLETED
|
|
518
|
+
Violações corrigidas: [N] | Arquivos: [N]/[N]
|
|
519
|
+
```
|
|
520
|
+
Add any unfixable patterns to the "Padrões Sem Token" section of `DS_PROGRESS.md`.
|
|
521
|
+
4. Output batch summary:
|
|
522
|
+
```
|
|
523
|
+
✅ Lote [N] concluído — [folder/] ([N] arquivos, [N] violações corrigidas)
|
|
524
|
+
Progresso geral: [done]/[total] lotes | [total_fixed] violações corrigidas
|
|
525
|
+
```
|
|
526
|
+
5. If more batches are PENDING:
|
|
527
|
+
|
|
528
|
+
**STOP HERE.** Output:
|
|
529
|
+
```
|
|
530
|
+
Próximo: **Lote [N+1] — [folder/]** ([N] arquivos)
|
|
531
|
+
Responda:
|
|
532
|
+
- "continuar" / "continue" — processar próximo lote
|
|
533
|
+
- "pular [pasta]" — skip this folder and go to the next batch
|
|
534
|
+
- "parar" / "stop" — save progress and stop here (resume later with `/trdr-ds resume`)
|
|
535
|
+
- "tudo" / "all" — process all remaining batches without pausing
|
|
536
|
+
```
|
|
537
|
+
**Wait for developer reply.**
|
|
538
|
+
|
|
539
|
+
If reply is `"tudo"` / `"all"`: process all remaining batches without pausing (update DS_PROGRESS.md after each).
|
|
540
|
+
If reply is `"pular [pasta]"`: mark that batch as SKIPPED in DS_PROGRESS.md and move to the next.
|
|
541
|
+
If reply is `"parar"`: set `Status: PAUSED` in DS_PROGRESS.md. STOP. Do not proceed to Step 6 or 7.
|
|
542
|
+
|
|
543
|
+
6. After ALL batches are COMPLETED (or skipped): continue to Step 6.
|
|
544
|
+
|
|
545
|
+
---
|
|
546
|
+
|
|
547
|
+
**Violation mapping tables (used in Steps 5 for both modes):**
|
|
389
548
|
|
|
390
549
|
**Color mapping (hardcoded → semantic):**
|
|
391
550
|
| Hardcoded value | Context | Replace with |
|
|
@@ -430,17 +589,17 @@ For each violation found in Phase 1, apply the semantic token replacement.
|
|
|
430
589
|
**rgba() mapping:**
|
|
431
590
|
| Hardcoded pattern | Context | Replace with |
|
|
432
591
|
|-------------------|---------|-------------|
|
|
433
|
-
| `rgba(0,0,0,*)` | box-shadow | No TRDR shadow token exists → flag in DS_MIGRATION.md as "Missing shadow token" |
|
|
592
|
+
| `rgba(0,0,0,*)` | box-shadow | No TRDR shadow token exists → flag in DS_PROGRESS.md / DS_MIGRATION.md as "Missing shadow token" |
|
|
434
593
|
| `rgba(255,255,255,.29)` approx | overlay/backdrop | `var(--bg-overlay)` |
|
|
435
|
-
| `rgba(255,255,255,*)` other | overlay | flag
|
|
594
|
+
| `rgba(255,255,255,*)` other | overlay | flag |
|
|
436
595
|
| Any other `rgba(N,N,N,*)` | various | Map to nearest semantic alpha token (--surface-brand, --surface-info, --action-*-alpha, etc.) or flag |
|
|
437
596
|
|
|
438
597
|
**Gradient mapping:**
|
|
439
598
|
| Pattern | Replace with |
|
|
440
599
|
|---------|-------------|
|
|
441
600
|
| `linear-gradient(...)` using only TRDR brand colors | `var(--gradient-text-brand)`, `var(--gradient-bg-hero)`, or `var(--gradient-bg-fade)` as appropriate |
|
|
442
|
-
| `linear-gradient(...)` using any non-DS colors | Flag
|
|
443
|
-
| Gradient inside SVG data URI embedded in CSS | Flag
|
|
601
|
+
| `linear-gradient(...)` using any non-DS colors | Flag — developer must decide: remove, replace with TRDR gradient token, or add new token to Hub |
|
|
602
|
+
| Gradient inside SVG data URI embedded in CSS | Flag |
|
|
444
603
|
|
|
445
604
|
**Font-size mapping:**
|
|
446
605
|
| Hardcoded value | Replace with |
|
|
@@ -457,14 +616,14 @@ For each violation found in Phase 1, apply the semantic token replacement.
|
|
|
457
616
|
| `font-size: 14px` | `.trdr-body-b3` or `.trdr-label-l3` (check weight context) |
|
|
458
617
|
| `font-size: 12px` | `.trdr-body-b4` or `.trdr-body-aux` (check letter-spacing) |
|
|
459
618
|
| `font-size: 10px` | `.trdr-body-b5` class |
|
|
460
|
-
| `font-size: [other px]` | Nearest text style class — flag
|
|
619
|
+
| `font-size: [other px]` | Nearest text style class — flag if no match |
|
|
461
620
|
|
|
462
621
|
**Do NOT replace:**
|
|
463
622
|
- Hex values inside binary image files (PNG, JPG, GIF)
|
|
464
|
-
- SVG external files — flag them
|
|
623
|
+
- SVG external files — flag them but do not auto-edit
|
|
465
624
|
- Values in commented-out code
|
|
466
625
|
|
|
467
|
-
**All other values MUST be replaced or flagged.**
|
|
626
|
+
**All other values MUST be replaced or flagged.** No exceptions for "decorative" gradients, shadows, or overlays.
|
|
468
627
|
|
|
469
628
|
### Step 6 — Apply component code (smart fallback)
|
|
470
629
|
|
|
@@ -490,7 +649,7 @@ Use the `replacementCandidates[]` list built in Phase 1 Step 3.5. For each entry
|
|
|
490
649
|
- Status: ⚠️ stub — code blocks pending
|
|
491
650
|
```
|
|
492
651
|
4. **If no slug matches** the detected pattern:
|
|
493
|
-
- Flag the pattern in `MISSING_COMPONENTS.md` under "Unmapped patterns" with the file location and a one-line description of the UI need.
|
|
652
|
+
- Flag the pattern in `MISSING_COMPONENTS.md` under "Unmapped patterns" with the file location and a one-line description of the UI need.
|
|
494
653
|
|
|
495
654
|
### Step 7 — Generate DS_MIGRATION.md
|
|
496
655
|
|
|
@@ -509,6 +668,7 @@ Hub: https://trdr.mrocontent.com.br
|
|
|
509
668
|
- ✅ [N] violations fixed in [M] files
|
|
510
669
|
- ✅ [global-css] updated with @import
|
|
511
670
|
- ⚠️ [S] stub components flagged in MISSING_COMPONENTS.md (if any)
|
|
671
|
+
[If batched: - ✅ Migrated in [N] batches — see DS_PROGRESS.md for batch-level detail]
|
|
512
672
|
|
|
513
673
|
## Files modified
|
|
514
674
|
[List each file and what changed]
|
|
@@ -522,11 +682,10 @@ Hub: https://trdr.mrocontent.com.br
|
|
|
522
682
|
- Others: add Google Fonts `<link>` in HTML head
|
|
523
683
|
- [ ] **Dark/light mode**: tokens.css uses [data-theme="light"] for overrides — add `data-theme="light"` to `<html>` to activate light mode
|
|
524
684
|
- [ ] **Trading UI**: If this project has price/position displays, verify context.trading.* tokens are applied (see Hub: /tokens/semanticos)
|
|
525
|
-
- [ ] **Stubs**: Review MISSING_COMPONENTS.md and decide whether to wait for canonical implementation in the Hub or hand-roll
|
|
685
|
+
- [ ] **Stubs**: Review MISSING_COMPONENTS.md and decide whether to wait for canonical implementation in the Hub or hand-roll using the listed tokens
|
|
526
686
|
- [ ] **Skipped files**: [list any files excluded from migration]
|
|
527
687
|
|
|
528
688
|
## Missing DS tokens (flagged — no semantic token available)
|
|
529
|
-
[List patterns found in the project that have no TRDR token yet — request these in the Hub]
|
|
530
689
|
| Pattern | File | Suggestion |
|
|
531
690
|
|---------|------|-----------|
|
|
532
691
|
| `box-shadow: rgba(0,0,0,*)` | [file:line] | Request shadow token in Hub |
|
|
@@ -543,6 +702,12 @@ Hub: https://trdr.mrocontent.com.br
|
|
|
543
702
|
- Rules: https://trdr.mrocontent.com.br/para-ia
|
|
544
703
|
```
|
|
545
704
|
|
|
705
|
+
**For BATCHED mode:** After writing DS_MIGRATION.md, update `DS_PROGRESS.md`:
|
|
706
|
+
```
|
|
707
|
+
Status: COMPLETE
|
|
708
|
+
Completed: [ISO datetime]
|
|
709
|
+
```
|
|
710
|
+
|
|
546
711
|
---
|
|
547
712
|
|
|
548
713
|
## EXECUTION SUMMARY
|
|
@@ -558,6 +723,7 @@ Created:
|
|
|
558
723
|
• CLAUDE.md (design system context for Claude Code)
|
|
559
724
|
• DS_MIGRATION.md (migration log + manual checklist)
|
|
560
725
|
• MISSING_COMPONENTS.md ([S] stubs flagged) — only if applicable
|
|
726
|
+
[If batched: • DS_PROGRESS.md (migration log — status: COMPLETE)]
|
|
561
727
|
|
|
562
728
|
Modified:
|
|
563
729
|
• [global-css] — @import added
|
|
@@ -571,6 +737,63 @@ Hub: https://trdr.mrocontent.com.br
|
|
|
571
737
|
|
|
572
738
|
---
|
|
573
739
|
|
|
740
|
+
## RESUME MODE (when invoked with `resume` argument)
|
|
741
|
+
|
|
742
|
+
1. Look for `DS_PROGRESS.md` at the project root.
|
|
743
|
+
- If not found: output `❌ No previous migration found. Run /trdr-ds to start a new one.`
|
|
744
|
+
- If `Status: COMPLETE`: output `✅ Migration already complete (finished [date]). Run /trdr-ds to check for new violations.`
|
|
745
|
+
|
|
746
|
+
2. Read `DS_PROGRESS.md`. Find the first batch with status `IN_PROGRESS` or `PENDING`.
|
|
747
|
+
|
|
748
|
+
3. Output a resume summary:
|
|
749
|
+
```
|
|
750
|
+
Resuming TRDR DS migration — [project name]
|
|
751
|
+
Foundation: ✅ complete
|
|
752
|
+
Batches completed: [done]/[total] | Violations fixed so far: [N]
|
|
753
|
+
Resuming at: **Lote [N] — [folder/]** ([N] files)
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
4. Continue Phase 2 Step 5 from that batch. Follow the same STOP-between-batches flow.
|
|
757
|
+
|
|
758
|
+
5. After all batches finish: run Steps 6 and 7 (component banners + DS_MIGRATION.md).
|
|
759
|
+
|
|
760
|
+
---
|
|
761
|
+
|
|
762
|
+
## STATUS MODE (when invoked with `status` argument)
|
|
763
|
+
|
|
764
|
+
1. Look for `DS_PROGRESS.md` at the project root.
|
|
765
|
+
- If not found: output `No migration in progress. Run /trdr-ds to start.`
|
|
766
|
+
|
|
767
|
+
2. Read `DS_PROGRESS.md` and output a progress table — do NOT modify any files:
|
|
768
|
+
|
|
769
|
+
```
|
|
770
|
+
## TRDR DS — Migration Status
|
|
771
|
+
|
|
772
|
+
Project: [name] | Started: [date] | Status: [IN_PROGRESS/PAUSED/COMPLETE]
|
|
773
|
+
|
|
774
|
+
### Foundation
|
|
775
|
+
| Step | File | Status |
|
|
776
|
+
|------|------|--------|
|
|
777
|
+
| tokens.css | [path] | ✅ / ⏳ |
|
|
778
|
+
| components.css | [path] | ✅ / ⏳ |
|
|
779
|
+
| CLAUDE.md | CLAUDE.md | ✅ / ⏳ |
|
|
780
|
+
| @import | [global-css] | ✅ / ⏳ |
|
|
781
|
+
|
|
782
|
+
### Violation Batches
|
|
783
|
+
| Lote | Pasta | Arquivos | Violações | Status |
|
|
784
|
+
|------|-------|----------|-----------|--------|
|
|
785
|
+
| 1 | src/components/ | 12 | 34 | ✅ COMPLETED |
|
|
786
|
+
| 2 | src/pages/ | 8 | 12 | 🔄 IN_PROGRESS |
|
|
787
|
+
| 3 | src/app/ | 15 | — | ⏳ PENDING |
|
|
788
|
+
| 4 | src/styles/ | 6 | — | ⏳ PENDING |
|
|
789
|
+
|
|
790
|
+
Progress: [N]% ([done]/[total] batches — [violations_fixed]/[total_violations] violations fixed)
|
|
791
|
+
|
|
792
|
+
To continue: `/trdr-ds resume`
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
---
|
|
796
|
+
|
|
574
797
|
## SYNC MODE (when invoked as `/trdr-ds sync`)
|
|
575
798
|
|
|
576
799
|
1. WebFetch `https://trdr.mrocontent.com.br/components.json` → save as `<skill-dir>/data/components.json`
|
|
@@ -581,7 +804,7 @@ Hub: https://trdr.mrocontent.com.br
|
|
|
581
804
|
- Removed: [list slugs no longer in catalog]
|
|
582
805
|
4. No project files are touched.
|
|
583
806
|
|
|
584
|
-
If either fetch fails, report which one and exit
|
|
807
|
+
If either fetch fails, report which one and exit. Do NOT touch the snapshot if the response is malformed (e.g., missing `components` array).
|
|
585
808
|
|
|
586
809
|
---
|
|
587
810
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0",
|
|
3
|
-
"generatedAt": "2026-05-
|
|
4
|
-
"total":
|
|
5
|
-
"implemented":
|
|
3
|
+
"generatedAt": "2026-05-12T15:34:28.515Z",
|
|
4
|
+
"total": 17,
|
|
5
|
+
"implemented": 17,
|
|
6
6
|
"categories": {
|
|
7
7
|
"formulario": "Formulário / Controles",
|
|
8
8
|
"modal": "Modais / Overlays",
|
|
@@ -1112,6 +1112,172 @@
|
|
|
1112
1112
|
"prompt": "Implemente o componente Boleta do Design System TRDR — painel lateral de negociações de 283px de largura.\n\nESTRUTURA (3 seções com border-left: 1px solid --border-subtle):\n\n1. ABAS (height: 45px, padding: 8px, border-bottom sutil)\n - Segmented control pill (border-radius: 9999px, bg: --surface-secondary #222)\n - 2 segments: \"Avançado\" (ativo) e \"Simples\" (inativo)\n - Segment ativo: bg --action-secondary-default #4A4A4A, radius 16px, padding 8px 12px\n - Segment inativo: bg transparente, text --content-tertiary\n\n2. CONTAINER — campos do formulário (padding: 8px, gap: 16px, border-bottom sutil)\n - Linha \"Estratégia\": label (tertiary 12px/500) + valor \"Manejo\" + chevron (primary)\n - Linha \"Disp.\": label + valor \"258.010.200,00 USDT\" (primary)\n - Grupo \"Quantidade\": label 12px + input 32px (bg --surface-primary, radius 8px, padding 8px) + 3 quick buttons (border --border-default, radius 8px, padding 8px 12px, font 14px/600 secondary, gap 4px)\n - Grupo \"Preço da Ordem\": label 12px + input 32px\n - Linha \"TP/SL\": checkbox 16x16 (border default, radius 5px, bg --surface-tertiary) + label primary\n\n3. BOTÕES (padding: 8px, gap: 8px)\n - 4 rows de ação (gap 8px cada):\n • Long (flex:1, bg --context-trading-long-default, text --context-trading-long-text #4FE290, radius 8px, padding 8px, font 14px/600)\n • Short (flex:1, bg --context-trading-short-default, text --context-trading-short-text #F34F45, radius 8px, padding 8px 12px, font 14px/600)\n - \"Zerar (5)\": width 100%, height 32px, border 1px sólido --color-orange-500 (#FF6400), text --color-orange-500, radius 8px\n - \"Cancelar ordens (2) + Zerar (5)\": width 100%, border --border-default, text --content-secondary, radius 8px\n - Row \"Cancelar Ordem\" (shrink-0) + \"Inverter\" (flex:1 min-width:100px): ambos border --border-default\n - Resumo Posição: \"Posição\" (14px tertiary) / \"Zerado\" (16px --content-success #4FE290), + 2 linhas meta 12px tertiary\n\nHover states: long-hover rgba(79,226,144,0.12), short-hover rgba(243,79,69,0.12), zerar-hover --context-trading-stop-alpha.\nResultado pixel-perfect com exatamente 283px de largura."
|
|
1113
1113
|
}
|
|
1114
1114
|
},
|
|
1115
|
+
{
|
|
1116
|
+
"slug": "tabela-cotacoes",
|
|
1117
|
+
"name": "Tabela de Cotações",
|
|
1118
|
+
"figmaId": "77:3681",
|
|
1119
|
+
"category": "trading",
|
|
1120
|
+
"implemented": true,
|
|
1121
|
+
"description": "Tabela de cotações em tempo real. Exibe ativo, último preço, variação % com código de cor (verde/vermelho), tendência (seta), quantidade e dados de oferta/demanda.",
|
|
1122
|
+
"props": [
|
|
1123
|
+
{
|
|
1124
|
+
"name": "rows",
|
|
1125
|
+
"type": "CotacaoRow[]",
|
|
1126
|
+
"values": [
|
|
1127
|
+
"array de dados de cotação"
|
|
1128
|
+
]
|
|
1129
|
+
}
|
|
1130
|
+
],
|
|
1131
|
+
"dimensions": [
|
|
1132
|
+
{
|
|
1133
|
+
"label": "Largura total",
|
|
1134
|
+
"width": "800px",
|
|
1135
|
+
"height": "—"
|
|
1136
|
+
},
|
|
1137
|
+
{
|
|
1138
|
+
"label": "Altura do header",
|
|
1139
|
+
"width": "—",
|
|
1140
|
+
"height": "32px"
|
|
1141
|
+
},
|
|
1142
|
+
{
|
|
1143
|
+
"label": "Altura da linha",
|
|
1144
|
+
"width": "—",
|
|
1145
|
+
"height": "32px"
|
|
1146
|
+
},
|
|
1147
|
+
{
|
|
1148
|
+
"label": "Célula Último",
|
|
1149
|
+
"width": "80px",
|
|
1150
|
+
"height": "32px"
|
|
1151
|
+
}
|
|
1152
|
+
],
|
|
1153
|
+
"tokens": [
|
|
1154
|
+
{
|
|
1155
|
+
"property": "Var% positivo",
|
|
1156
|
+
"token": "context.trading.up",
|
|
1157
|
+
"value": "#4FE290"
|
|
1158
|
+
},
|
|
1159
|
+
{
|
|
1160
|
+
"property": "Var% negativo",
|
|
1161
|
+
"token": "context.trading.down",
|
|
1162
|
+
"value": "#F34F45"
|
|
1163
|
+
},
|
|
1164
|
+
{
|
|
1165
|
+
"property": "Cell Último bg",
|
|
1166
|
+
"token": "surface.primary",
|
|
1167
|
+
"value": "#4A4A4A"
|
|
1168
|
+
},
|
|
1169
|
+
{
|
|
1170
|
+
"property": "Row alternada",
|
|
1171
|
+
"token": "—",
|
|
1172
|
+
"value": "rgba(255,255,255,0.08)"
|
|
1173
|
+
},
|
|
1174
|
+
{
|
|
1175
|
+
"property": "Row hover",
|
|
1176
|
+
"token": "surface.secondary",
|
|
1177
|
+
"value": "#222222"
|
|
1178
|
+
},
|
|
1179
|
+
{
|
|
1180
|
+
"property": "Header border",
|
|
1181
|
+
"token": "border.default",
|
|
1182
|
+
"value": "#4A4A4A"
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"property": "Header text",
|
|
1186
|
+
"token": "content.tertiary",
|
|
1187
|
+
"value": "#A4A4A4"
|
|
1188
|
+
},
|
|
1189
|
+
{
|
|
1190
|
+
"property": "Cell text",
|
|
1191
|
+
"token": "content.primary",
|
|
1192
|
+
"value": "#FFFFFF"
|
|
1193
|
+
}
|
|
1194
|
+
],
|
|
1195
|
+
"anatomy": "Tabela (table-layout: fixed, border-collapse: collapse):\n [thead > tr (32px, border-bottom 1px --border-default)]\n [th: 14px/400 --content-tertiary | padding: 4px 8px]\n Colunas: Ativo(65) Último(80) Q Últ(65) Var%(65) Tend(65) Dif(65) Stat(65) QOfc(65) Ofc(65) Ofv(65) QOfv(65) Teórico(65)\n [tbody > tr (32px, cursor pointer)]\n [tr:nth-child(even): bg rgba(255,255,255,0.08)]\n [tr:hover: bg --surface-secondary]\n [tr.selected: bg --bg-secondary]\n [td: 14px/400 --content-primary | padding: 4px 8px]\n [td.col-ultimo: bg --surface-primary #4A4A4A]\n [td.col-var-up: color --context-trading-up #4FE290]\n [td.col-var-down: color --context-trading-down #F34F45]\n [td.col-tend: ícone Material Symbols arrow_drop_up/down]",
|
|
1196
|
+
"code": {
|
|
1197
|
+
"html": "<!-- Tabela de Cotações TRDR (Figma: 77:3681) -->\n<div style=\"width:100%;overflow-x:auto;background:var(--bg-primary)\">\n <table class=\"trdr-tabela-cotacoes\">\n <colgroup>\n <col style=\"width:65px\"> <col style=\"width:80px\"> <col style=\"width:65px\">\n <col style=\"width:65px\"> <col style=\"width:65px\"> <col style=\"width:65px\">\n <col style=\"width:65px\"> <col style=\"width:65px\"> <col style=\"width:65px\">\n <col style=\"width:65px\"> <col style=\"width:65px\"> <col style=\"width:65px\">\n </colgroup>\n <thead>\n <tr>\n <th>Ativo</th><th>Último</th><th>Q Últ</th><th>Var %</th>\n <th>Tend</th><th>Dif</th><th>Stat...</th><th>QOfc</th>\n <th>Ofc</th><th>Ofv</th><th>QOfv</th><th>Teórico</th>\n </tr>\n </thead>\n <tbody>\n <tr class=\"trdr-tabela-cotacoes-row-selected\">\n <td>ITUB4</td>\n <td class=\"col-ultimo\">50.47</td>\n <td>100</td>\n <td class=\"col-var-down\">-0.72%</td>\n <td><span class=\"col-tend-icon col-tend-down\">arrow_drop_down</span></td>\n <td>0.36</td><td>.</td><td>1.000</td>\n <td>50.47</td><td>50.49</td><td>1.300</td><td>.</td>\n </tr>\n <tr>\n <td>VALE3</td>\n <td class=\"col-ultimo\">92,00</td>\n <td>200</td>\n <td class=\"col-var-up\">+1.20%</td>\n <td><span class=\"col-tend-icon col-tend-up\">arrow_drop_up</span></td>\n <td>0.50</td><td>.</td><td>2.700</td>\n <td>92,00</td><td>92,10</td><td>4.000</td><td>.</td>\n </tr>\n </tbody>\n </table>\n</div>",
|
|
1198
|
+
"css": "/* Tabela de Cotações — TRDR Design System */\n/* Tokens: --context-trading-up (#4FE290), --context-trading-down (#F34F45) */\n/* Tokens: --surface-primary (#4A4A4A), --surface-secondary (#222222) */\n/* Tokens: --border-default (#4A4A4A), --content-tertiary (#A4A4A4) */\n\n.trdr-tabela-cotacoes {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n font-family: var(--font-secondary); /* Inter */\n font-size: 14px;\n font-weight: 400;\n color: var(--content-primary); /* #FFFFFF */\n}\n\n.trdr-tabela-cotacoes thead tr {\n height: 32px;\n border-bottom: 1px solid var(--border-default); /* #4A4A4A */\n}\n\n.trdr-tabela-cotacoes th {\n padding: 4px 8px;\n text-align: left;\n color: var(--content-tertiary); /* #A4A4A4 */\n font-weight: 400;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: middle;\n}\n\n.trdr-tabela-cotacoes tbody tr {\n height: 32px;\n cursor: pointer;\n transition: background-color 0.1s ease;\n}\n\n.trdr-tabela-cotacoes tbody tr:nth-child(even) {\n background: rgba(255, 255, 255, 0.08);\n}\n\n.trdr-tabela-cotacoes tbody tr:hover {\n background: var(--surface-secondary); /* #222222 */\n}\n\n.trdr-tabela-cotacoes tbody tr.trdr-tabela-cotacoes-row-selected {\n background: var(--bg-secondary); /* #141519 */\n}\n\n.trdr-tabela-cotacoes td {\n padding: 4px 8px;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: middle;\n}\n\n.trdr-tabela-cotacoes td.col-ultimo {\n background: var(--surface-primary); /* #4A4A4A */\n}\n\n.trdr-tabela-cotacoes .col-var-up { color: var(--context-trading-up); } /* #4FE290 */\n.trdr-tabela-cotacoes .col-var-down { color: var(--context-trading-down); } /* #F34F45 */\n\n.trdr-tabela-cotacoes .col-tend-icon {\n font-family: 'Material Symbols Outlined';\n font-size: 20px;\n font-variation-settings: 'FILL' 1, 'GRAD' 0, 'wght' 400;\n vertical-align: middle;\n}\n.trdr-tabela-cotacoes .col-tend-up { color: var(--context-trading-up); }\n.trdr-tabela-cotacoes .col-tend-down { color: var(--context-trading-down); }",
|
|
1199
|
+
"react": "import TabelaCotacoes, { CotacaoRow } from '@/components/ui/TabelaCotacoes'\n\nconst rows: CotacaoRow[] = [\n {\n ativo: 'ITUB4',\n ultimo: '50.47',\n qUlt: 100,\n varPct: -0.72,\n tend: 'down',\n dif: '0.36',\n qOfc: '1.000',\n ofc: '50.47',\n ofv: '50.49',\n qOfv: '1.300',\n selected: true,\n },\n {\n ativo: 'VALE3',\n ultimo: '92,00',\n qUlt: 200,\n varPct: 1.20,\n tend: 'up',\n dif: '0.50',\n },\n]\n\nexport default function Example() {\n return <TabelaCotacoes rows={rows} />\n}",
|
|
1200
|
+
"prompt": "Crie um componente React 'TabelaCotacoes' pixel-perfect baseado no Figma TRDR (node 77:3681).\n\nESTRUTURA:\n- Elemento <table> com table-layout: fixed e border-collapse: collapse\n- Wrapper <div> com overflow-x: auto e background: var(--bg-primary)\n\nHEADER (thead > tr):\n- height: 32px\n- border-bottom: 1px solid var(--border-default) /* #4A4A4A */\n- th: padding 4px 8px, font 14px/400, color var(--content-tertiary) /* #A4A4A4 */\n\nCOLUNAS (colgroup):\nAtivo=65px, Último=80px, Q Últ=65px, Var%=65px, Tend=65px, Dif=65px,\nStat=65px, QOfc=65px, Ofc=65px, Ofv=65px, QOfv=65px, Teórico=65px\n\nDATA ROWS (tbody > tr):\n- height: 32px, cursor: pointer\n- tr:nth-child(even): background rgba(255,255,255,0.08)\n- tr:hover: background var(--surface-secondary) /* #222222 */\n- tr.selected: background var(--bg-secondary) /* #141519 */\n- td: padding 4px 8px, font 14px/400, color var(--content-primary) /* #FFFFFF */\n- td.col-ultimo: background var(--surface-primary) /* #4A4A4A */\n- td variação positiva: color var(--context-trading-up) /* #4FE290 */\n- td variação negativa: color var(--context-trading-down) /* #F34F45 */\n- td tendência: ícone Material Symbols Outlined 'arrow_drop_up'/'arrow_drop_down', 20px, FILL 1\n\nINTERFACE TypeScript:\ninterface CotacaoRow {\n ativo: string; ultimo: string|number; qUlt?: string|number\n varPct: number; tend?: 'up'|'down'|null; dif?: string|number\n status?: string; qOfc?: string|number; ofc?: string|number\n ofv?: string|number; qOfv?: string|number; teorico?: string|number\n selected?: boolean\n}\n\nUsar APENAS tokens semânticos TRDR. NUNCA hex direto. NUNCA --scale-spacing-*."
|
|
1201
|
+
}
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
"slug": "tabela-ordens",
|
|
1205
|
+
"name": "Tabela de Ordens",
|
|
1206
|
+
"figmaId": "336:3114",
|
|
1207
|
+
"category": "trading",
|
|
1208
|
+
"implemented": true,
|
|
1209
|
+
"description": "Tabela de histórico de ordens. Exibe horário, ativo, tipo C/V (colorido), preço, quantidade, status (Aberta/Executada/Cancelada) e origem. Linhas canceladas recebem fundo vermelho translúcido.",
|
|
1210
|
+
"props": [
|
|
1211
|
+
{
|
|
1212
|
+
"name": "rows",
|
|
1213
|
+
"type": "OrdemRow[]",
|
|
1214
|
+
"values": [
|
|
1215
|
+
"array de dados de ordens"
|
|
1216
|
+
]
|
|
1217
|
+
}
|
|
1218
|
+
],
|
|
1219
|
+
"dimensions": [
|
|
1220
|
+
{
|
|
1221
|
+
"label": "Largura total",
|
|
1222
|
+
"width": "896px",
|
|
1223
|
+
"height": "—"
|
|
1224
|
+
},
|
|
1225
|
+
{
|
|
1226
|
+
"label": "Altura do header",
|
|
1227
|
+
"width": "—",
|
|
1228
|
+
"height": "32px"
|
|
1229
|
+
},
|
|
1230
|
+
{
|
|
1231
|
+
"label": "Altura da linha",
|
|
1232
|
+
"width": "—",
|
|
1233
|
+
"height": "32px"
|
|
1234
|
+
}
|
|
1235
|
+
],
|
|
1236
|
+
"tokens": [
|
|
1237
|
+
{
|
|
1238
|
+
"property": "C (Compra) text",
|
|
1239
|
+
"token": "context.trading.long.text",
|
|
1240
|
+
"value": "#6DE7A2"
|
|
1241
|
+
},
|
|
1242
|
+
{
|
|
1243
|
+
"property": "V (Venda) text",
|
|
1244
|
+
"token": "context.trading.short.text",
|
|
1245
|
+
"value": "#F56D64"
|
|
1246
|
+
},
|
|
1247
|
+
{
|
|
1248
|
+
"property": "Row cancelada bg",
|
|
1249
|
+
"token": "context.trading.short.default",
|
|
1250
|
+
"value": "rgba(241,49,38,0.08)"
|
|
1251
|
+
},
|
|
1252
|
+
{
|
|
1253
|
+
"property": "Row hover",
|
|
1254
|
+
"token": "surface.secondary",
|
|
1255
|
+
"value": "#222222"
|
|
1256
|
+
},
|
|
1257
|
+
{
|
|
1258
|
+
"property": "Header border",
|
|
1259
|
+
"token": "border.default",
|
|
1260
|
+
"value": "#4A4A4A"
|
|
1261
|
+
},
|
|
1262
|
+
{
|
|
1263
|
+
"property": "Header text",
|
|
1264
|
+
"token": "content.tertiary",
|
|
1265
|
+
"value": "#A4A4A4"
|
|
1266
|
+
},
|
|
1267
|
+
{
|
|
1268
|
+
"property": "Cell text",
|
|
1269
|
+
"token": "content.primary",
|
|
1270
|
+
"value": "#FFFFFF"
|
|
1271
|
+
}
|
|
1272
|
+
],
|
|
1273
|
+
"anatomy": "Tabela (table-layout: fixed, border-collapse: collapse):\n [thead > tr (32px, border-bottom 1px --border-default)]\n [th: 14px/400 --content-tertiary | padding: 4px 8px]\n Colunas: Horário(81) Ativo(80) C/V(65) Preço(104) Médio(79)\n Qtde(65) Disp(65) Aberta(65) Exec(65) Status(86) Validade(79) Origem(65)\n [tbody > tr (32px, cursor pointer)]\n [tr:nth-child(even): bg rgba(255,255,255,0.05)]\n [tr:hover: bg --surface-secondary]\n [tr.cancelada: bg --context-trading-short-default]\n [td: 14px/400 --content-primary | padding: 4px 8px | text-overflow: ellipsis]\n [td.col-cv-c: color --context-trading-long-text #6DE7A2, font-weight 600]\n [td.col-cv-v: color --context-trading-short-text #F56D64, font-weight 600]",
|
|
1274
|
+
"code": {
|
|
1275
|
+
"html": "<!-- Tabela de Ordens TRDR (Figma: 336:3114) -->\n<div style=\"width:100%;overflow-x:auto;background:var(--bg-primary)\">\n <table class=\"trdr-tabela-ordens\">\n <colgroup>\n <col style=\"width:81px\"> <col style=\"width:80px\"> <col style=\"width:65px\">\n <col style=\"width:104px\"><col style=\"width:79px\"> <col style=\"width:65px\">\n <col style=\"width:65px\"> <col style=\"width:65px\"> <col style=\"width:65px\">\n <col style=\"width:86px\"> <col style=\"width:79px\"> <col style=\"width:65px\">\n </colgroup>\n <thead>\n <tr>\n <th>Horário</th><th>Ativo</th><th>C/V</th><th>Preço</th>\n <th>Médio</th><th>Qtde</th><th>Disp</th><th>Aberta</th>\n <th>Exec</th><th>Status</th><th>Validade</th><th>Origem</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>11:32:56</td><td>WDOK18</td>\n <td class=\"col-cv-c\">C</td>\n <td>3.425.600</td><td>3.425.600</td>\n <td>20</td><td>.</td><td>.</td><td>20</td>\n <td>Aberta</td><td>.</td><td>Loss</td>\n </tr>\n <tr>\n <td>11:35:24</td><td>WDOK18</td>\n <td class=\"col-cv-v\">V</td>\n <td>3.425.600</td><td>3.425.600</td>\n <td>19</td><td>.</td><td>.</td><td>19</td>\n <td>Aberta</td><td>.</td><td>Criptor</td>\n </tr>\n <tr class=\"trdr-tabela-ordens-row-cancelada\">\n <td>11:36:03</td><td>WDOK18</td>\n <td class=\"col-cv-c\">C</td>\n <td>3.425.600</td><td>3.425.600</td>\n <td>16</td><td>.</td><td>.</td><td>16</td>\n <td>Cancelada</td><td>.</td><td>Criptor</td>\n </tr>\n </tbody>\n </table>\n</div>",
|
|
1276
|
+
"css": "/* Tabela de Ordens — TRDR Design System */\n/* Tokens: --context-trading-long-text (#6DE7A2) — C (Compra) */\n/* Tokens: --context-trading-short-text (#F56D64) — V (Venda) */\n/* Tokens: --context-trading-short-default — fundo linha cancelada */\n/* Tokens: --border-default (#4A4A4A), --content-tertiary (#A4A4A4) */\n\n.trdr-tabela-ordens {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n font-family: var(--font-secondary); /* Inter */\n font-size: 14px;\n font-weight: 400;\n color: var(--content-primary); /* #FFFFFF */\n}\n\n.trdr-tabela-ordens thead tr {\n height: 32px;\n border-bottom: 1px solid var(--border-default); /* #4A4A4A */\n}\n\n.trdr-tabela-ordens th {\n padding: 4px 8px;\n text-align: left;\n color: var(--content-tertiary); /* #A4A4A4 */\n font-weight: 400;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: middle;\n}\n\n.trdr-tabela-ordens tbody tr {\n height: 32px;\n cursor: pointer;\n transition: background-color 0.1s ease;\n}\n\n.trdr-tabela-ordens tbody tr:nth-child(even) {\n background: rgba(255, 255, 255, 0.05);\n}\n\n.trdr-tabela-ordens tbody tr:hover {\n background: var(--surface-secondary); /* #222222 */\n}\n\n.trdr-tabela-ordens tbody tr.trdr-tabela-ordens-row-cancelada {\n background: var(--context-trading-short-default); /* rgba(241,49,38,0.08) */\n}\n\n.trdr-tabela-ordens td {\n padding: 4px 8px;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: middle;\n}\n\n.trdr-tabela-ordens .col-cv-c {\n color: var(--context-trading-long-text); /* #6DE7A2 */\n font-weight: 600;\n}\n\n.trdr-tabela-ordens .col-cv-v {\n color: var(--context-trading-short-text); /* #F56D64 */\n font-weight: 600;\n}",
|
|
1277
|
+
"react": "import TabelaOrdens, { OrdemRow } from '@/components/ui/TabelaOrdens'\n\nconst rows: OrdemRow[] = [\n {\n horario: '11:32:56',\n ativo: 'WDOK18',\n tipo: 'C',\n preco: '3.425.600',\n medio: '3.425.600',\n qtde: 20,\n exec: 20,\n status: 'aberta',\n origem: 'Loss',\n },\n {\n horario: '11:35:24',\n ativo: 'WDOK18',\n tipo: 'V',\n preco: '3.425.600',\n medio: '3.425.600',\n qtde: 19,\n exec: 19,\n status: 'aberta',\n origem: 'Criptor',\n },\n {\n horario: '11:36:03',\n ativo: 'WDOK18',\n tipo: 'C',\n preco: '3.425.600',\n medio: '3.425.600',\n qtde: 16,\n exec: 16,\n status: 'cancelada',\n origem: 'Criptor',\n },\n]\n\nexport default function Example() {\n return <TabelaOrdens rows={rows} />\n}",
|
|
1278
|
+
"prompt": "Crie um componente React 'TabelaOrdens' pixel-perfect baseado no Figma TRDR (node 336:3114).\n\nESTRUTURA:\n- Elemento <table> com table-layout: fixed e border-collapse: collapse\n- Wrapper <div> com overflow-x: auto e background: var(--bg-primary)\n\nHEADER (thead > tr):\n- height: 32px\n- border-bottom: 1px solid var(--border-default) /* #4A4A4A */\n- th: padding 4px 8px, font 14px/400, color var(--content-tertiary) /* #A4A4A4 */\n\nCOLUNAS (colgroup):\nHorário=81px, Ativo=80px, C/V=65px, Preço=104px, Médio=79px,\nQtde=65px, Disp=65px, Aberta=65px, Exec=65px, Status=86px, Validade=79px, Origem=65px\n\nDATA ROWS (tbody > tr):\n- height: 32px, cursor: pointer\n- tr:nth-child(even): background rgba(255,255,255,0.05)\n- tr:hover: background var(--surface-secondary) /* #222222 */\n- tr.cancelada: background var(--context-trading-short-default) /* rgba(241,49,38,0.08) */\n- td: padding 4px 8px, font 14px/400, color var(--content-primary), text-overflow ellipsis\n- td.col-cv-c (Compra): color var(--context-trading-long-text) /* #6DE7A2 */, font-weight 600\n- td.col-cv-v (Venda): color var(--context-trading-short-text) /* #F56D64 */, font-weight 600\n\nINTERFACE TypeScript:\ntype OrdemStatus = 'aberta' | 'executada' | 'cancelada' | 'parcial'\ninterface OrdemRow {\n horario: string; ativo: string; tipo: 'C'|'V'\n preco: string|number; medio?: string|number\n qtde: number; disp?: string|number; aberta?: string|number; exec?: string|number\n status: OrdemStatus; validade?: string; origem?: string\n}\n\nUsar APENAS tokens semânticos TRDR. NUNCA hex direto. NUNCA --scale-spacing-*."
|
|
1279
|
+
}
|
|
1280
|
+
},
|
|
1115
1281
|
{
|
|
1116
1282
|
"slug": "card",
|
|
1117
1283
|
"name": "Card",
|