trdr-ds-install 1.9.0 → 2.0.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 +1 -1
- package/plugins/trdr-design-system/skills/trdr-ds/SKILL.md +168 -2914
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/abas.json +36 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/badge.json +139 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/boleta.json +121 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/button.json +166 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/card.json +55 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/checkbox.json +82 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/combo-input.json +79 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/copy-button.json +88 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/dropdown.json +94 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/floating-menu.json +151 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/header.json +141 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/janela.json +245 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/news-card.json +124 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/radio-button.json +97 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/search-input.json +69 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/segmented-control.json +60 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/sidebar.json +109 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/stat-card.json +90 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/sub-menu-item.json +45 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/switch.json +89 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/tabela-cotacoes.json +91 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/tabela-ordens.json +81 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/table.json +119 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/text-input.json +159 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/components/tooltip.json +88 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/index.json +262 -0
- package/plugins/trdr-design-system/skills/trdr-ds/data/mappings.json +183 -0
- package/plugins/trdr-design-system/skills/trdr-ds/modes/report.md +139 -0
- package/plugins/trdr-design-system/skills/trdr-ds/modes/resume.md +46 -0
- package/plugins/trdr-design-system/skills/trdr-ds/modes/rollback.md +55 -0
- package/plugins/trdr-design-system/skills/trdr-ds/modes/status.md +37 -0
- package/plugins/trdr-design-system/skills/trdr-ds/modes/sync.md +48 -0
- package/plugins/trdr-design-system/skills/trdr-ds/phases/analyze.md +305 -0
- package/plugins/trdr-design-system/skills/trdr-ds/phases/components.md +204 -0
- package/plugins/trdr-design-system/skills/trdr-ds/phases/final.md +209 -0
- package/plugins/trdr-design-system/skills/trdr-ds/phases/foundation.md +195 -0
- package/plugins/trdr-design-system/skills/trdr-ds/phases/violations.md +183 -0
- package/plugins/trdr-design-system/skills/trdr-ds/templates/claude-md.md +88 -0
- package/plugins/trdr-design-system/skills/trdr-ds/templates/ds-analysis.md +88 -0
- package/plugins/trdr-design-system/skills/trdr-ds/templates/ds-migration.md +59 -0
- package/plugins/trdr-design-system/skills/trdr-ds/templates/ds-progress.md +57 -0
- package/plugins/trdr-design-system/skills/trdr-ds/templates/sprint-plan.md +68 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0",
|
|
3
|
+
"generatedAt": "2026-05-13T18:53:51.673Z",
|
|
4
|
+
"total": 25,
|
|
5
|
+
"implemented": 25,
|
|
6
|
+
"categories": {
|
|
7
|
+
"formulario": "Formulário / Controles",
|
|
8
|
+
"modal": "Modais / Overlays",
|
|
9
|
+
"navegacao": "Navegação",
|
|
10
|
+
"floating-menu": "Floating Menus",
|
|
11
|
+
"trading": "Trading",
|
|
12
|
+
"configuracao": "Configuração",
|
|
13
|
+
"ia": "Inteligência Artificial",
|
|
14
|
+
"outros": "Outros"
|
|
15
|
+
},
|
|
16
|
+
"components": [
|
|
17
|
+
{
|
|
18
|
+
"slug": "button",
|
|
19
|
+
"name": "Button",
|
|
20
|
+
"figmaId": "1318:749",
|
|
21
|
+
"category": "formulario",
|
|
22
|
+
"description": "Botão principal do sistema com 10 variantes visuais, 2 tamanhos e 4 estados.",
|
|
23
|
+
"implemented": true,
|
|
24
|
+
"dependencies": []
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"slug": "text-input",
|
|
28
|
+
"name": "Text Input",
|
|
29
|
+
"figmaId": "1327:17000",
|
|
30
|
+
"category": "formulario",
|
|
31
|
+
"description": "Campo de texto com 3 variantes (Single Line, Multi Line, Quick Action), estados de validação e 2 tamanhos.",
|
|
32
|
+
"implemented": true,
|
|
33
|
+
"dependencies": []
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"slug": "dropdown",
|
|
37
|
+
"name": "Dropdown",
|
|
38
|
+
"figmaId": "1462:16743",
|
|
39
|
+
"category": "formulario",
|
|
40
|
+
"description": "Seletor com chevron, 2 tamanhos (Default 24px / Large 32px) e 3 estados. Suporta stroke, sem stroke e icon lead. Abre um floating menu com opções.",
|
|
41
|
+
"implemented": true,
|
|
42
|
+
"dependencies": []
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"slug": "combo-input",
|
|
46
|
+
"name": "Combo Input",
|
|
47
|
+
"figmaId": "1551:11643",
|
|
48
|
+
"category": "formulario",
|
|
49
|
+
"description": "Input numérico split: área de valor (flex-1) + botão chevron (24×24px) separados por 1px gap. Altura 24px.",
|
|
50
|
+
"implemented": true,
|
|
51
|
+
"dependencies": []
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"slug": "checkbox",
|
|
55
|
+
"name": "Checkbox",
|
|
56
|
+
"figmaId": "1462:18059",
|
|
57
|
+
"category": "formulario",
|
|
58
|
+
"description": "Caixa de seleção com 3 estados: Checked, Unchecked e Mixed (indeterminado). 16×16px, border-radius 5px.",
|
|
59
|
+
"implemented": true,
|
|
60
|
+
"dependencies": []
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"slug": "radio-button",
|
|
64
|
+
"name": "Radio Button",
|
|
65
|
+
"figmaId": "1916:46361",
|
|
66
|
+
"category": "formulario",
|
|
67
|
+
"description": "Seleção única com 2 variantes: Input (círculo 16×16px) e Button (pill 24px). Estados: Default, Active, Focused, Disabled.",
|
|
68
|
+
"implemented": true,
|
|
69
|
+
"dependencies": []
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"slug": "switch",
|
|
73
|
+
"name": "Switch",
|
|
74
|
+
"figmaId": "1359:1740",
|
|
75
|
+
"category": "formulario",
|
|
76
|
+
"description": "Toggle on/off/mixed. Track de 32×16px com knob de 14px. Suporta estado indeterminado (mixed) com ícone de traço.",
|
|
77
|
+
"implemented": true,
|
|
78
|
+
"dependencies": []
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"slug": "segmented-control",
|
|
82
|
+
"name": "Segmented Control",
|
|
83
|
+
"figmaId": "1655:25490",
|
|
84
|
+
"category": "formulario",
|
|
85
|
+
"description": "Controle de abas compacto. De 2 a 6 tabs. Container arredondado com radius 64px.",
|
|
86
|
+
"implemented": true,
|
|
87
|
+
"dependencies": []
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"slug": "tooltip",
|
|
91
|
+
"name": "Tooltip",
|
|
92
|
+
"figmaId": "1618:23706",
|
|
93
|
+
"category": "formulario",
|
|
94
|
+
"description": "Balão de ajuda contextual com seta direcional. 8 direções. Padding 12×8px, bg-primary, max-width 200px.",
|
|
95
|
+
"implemented": true,
|
|
96
|
+
"dependencies": []
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"slug": "abas",
|
|
100
|
+
"name": "Abas",
|
|
101
|
+
"figmaId": "253:2861",
|
|
102
|
+
"category": "navegacao",
|
|
103
|
+
"description": "Barra de abas horizontal. Aba ativa com fundo surface.secondary.",
|
|
104
|
+
"implemented": true,
|
|
105
|
+
"dependencies": []
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"slug": "sub-menu-item",
|
|
109
|
+
"name": "Sub-menu Item",
|
|
110
|
+
"figmaId": "1886:20967",
|
|
111
|
+
"category": "navegacao",
|
|
112
|
+
"description": "Item de sub-menu com estados Default, Hover e Pressed.",
|
|
113
|
+
"implemented": true,
|
|
114
|
+
"dependencies": []
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"slug": "boleta",
|
|
118
|
+
"name": "Painel de Negociações (Boleta)",
|
|
119
|
+
"figmaId": "903:1853",
|
|
120
|
+
"category": "trading",
|
|
121
|
+
"description": "Painel lateral de entrada de ordens. Inclui segmented control Avançado/Simples, campos de estratégia, quantidade e preço, botões de compra/venda por tipo de ordem, ação Zerar e resumo de posição.",
|
|
122
|
+
"implemented": true,
|
|
123
|
+
"dependencies": [
|
|
124
|
+
"segmented-control",
|
|
125
|
+
"text-input",
|
|
126
|
+
"checkbox",
|
|
127
|
+
"button",
|
|
128
|
+
"dropdown"
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"slug": "tabela-cotacoes",
|
|
133
|
+
"name": "Tabela de Cotações",
|
|
134
|
+
"figmaId": "77:3681",
|
|
135
|
+
"category": "trading",
|
|
136
|
+
"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.",
|
|
137
|
+
"implemented": true,
|
|
138
|
+
"dependencies": [
|
|
139
|
+
"badge"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"slug": "tabela-ordens",
|
|
144
|
+
"name": "Tabela de Ordens",
|
|
145
|
+
"figmaId": "336:3114",
|
|
146
|
+
"category": "trading",
|
|
147
|
+
"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.",
|
|
148
|
+
"implemented": true,
|
|
149
|
+
"dependencies": [
|
|
150
|
+
"badge"
|
|
151
|
+
]
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"slug": "card",
|
|
155
|
+
"name": "Card",
|
|
156
|
+
"figmaId": "—",
|
|
157
|
+
"category": "outros",
|
|
158
|
+
"description": "Card de conteúdo — container com borda, padding e hover. Usado como base para cards de navegação e informação no Design Hub.",
|
|
159
|
+
"implemented": true,
|
|
160
|
+
"dependencies": []
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
"slug": "floating-menu",
|
|
164
|
+
"name": "Floating Menu",
|
|
165
|
+
"figmaId": "1921:55380",
|
|
166
|
+
"category": "floating-menu",
|
|
167
|
+
"description": "Menu flutuante genérico do TRDR — compound component com Item, Title e Divider. Cobre desde listas simples de ações até menus seccionados com ícones Material Symbols. Usado em Janela, seletor de ativo, configurações, indicadores e notificações.",
|
|
168
|
+
"implemented": true,
|
|
169
|
+
"dependencies": []
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"slug": "janela",
|
|
173
|
+
"name": "Janela",
|
|
174
|
+
"figmaId": "1909:41600",
|
|
175
|
+
"category": "trading",
|
|
176
|
+
"description": "Janela de ferramenta de trading — componente composto com header (badge AI, abas de ferramentas com underline, dropdown Multi e ações), linha de abas em pill (filtros) e Container central com slot swappable que recebe qualquer conteúdo via children. Inclui floating menu opcional de ações (Fechar, Minimizar, Maximizar, Fixar, Renomear) e scrollbars laterais/inferior visuais.",
|
|
177
|
+
"implemented": true,
|
|
178
|
+
"dependencies": [
|
|
179
|
+
"floating-menu",
|
|
180
|
+
"abas"
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"slug": "news-card",
|
|
185
|
+
"name": "News Card",
|
|
186
|
+
"figmaId": "66:2373",
|
|
187
|
+
"category": "trading",
|
|
188
|
+
"description": "Card de notícia financeira — exibe título, fonte, tempo e indicador de sentimento (alta/baixa/neutro). Usado em feeds de notícias dentro do contexto de trading.",
|
|
189
|
+
"implemented": true,
|
|
190
|
+
"dependencies": [
|
|
191
|
+
"badge"
|
|
192
|
+
]
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"slug": "header",
|
|
196
|
+
"name": "Header Desktop",
|
|
197
|
+
"figmaId": "1921:55292",
|
|
198
|
+
"category": "navegacao",
|
|
199
|
+
"description": "Barra de navegação superior da plataforma TRDR — 56px de altura, logo, nav principal, busca de ativos, cotações em tempo real, botões de ação, status de conexões e controles de janela.",
|
|
200
|
+
"implemented": true,
|
|
201
|
+
"dependencies": [
|
|
202
|
+
"badge"
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"slug": "badge",
|
|
207
|
+
"name": "Badge",
|
|
208
|
+
"figmaId": "2316:8953",
|
|
209
|
+
"category": "outros",
|
|
210
|
+
"description": "Badge de status com dot opcional. 5 variantes (Neutral, Brand, Success, Warning, Archived) e 2 tamanhos (default 12px/16px, large 14px/25px). Border-radius 5px.",
|
|
211
|
+
"implemented": true,
|
|
212
|
+
"dependencies": []
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
"slug": "table",
|
|
216
|
+
"name": "Table",
|
|
217
|
+
"figmaId": "—",
|
|
218
|
+
"category": "outros",
|
|
219
|
+
"description": "Tabela genérica do Design System TRDR. Header 11px uppercase, cells 13px, hover row, border-bottom subtle. Variantes: bordered (wrapper com borda + radius), compact (padding reduzido), striped (linhas alternadas).",
|
|
220
|
+
"implemented": true,
|
|
221
|
+
"dependencies": []
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
"slug": "copy-button",
|
|
225
|
+
"name": "CopyButton",
|
|
226
|
+
"figmaId": "—",
|
|
227
|
+
"category": "outros",
|
|
228
|
+
"description": "Botão de copiar para clipboard com feedback visual. Ícone copy → check ao clicar, com transição de cor. 2 tamanhos (default 28px, sm 20px).",
|
|
229
|
+
"implemented": true,
|
|
230
|
+
"dependencies": []
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
"slug": "search-input",
|
|
234
|
+
"name": "SearchInput",
|
|
235
|
+
"figmaId": "—",
|
|
236
|
+
"category": "formulario",
|
|
237
|
+
"description": "Input de busca com ícone lupa à esquerda. Baseado no TextInput (.trdr-input) com wrapper posicional para o ícone. Modo controlado (value/onChange) ou URL-sync (paramName).",
|
|
238
|
+
"implemented": true,
|
|
239
|
+
"dependencies": [
|
|
240
|
+
"text-input"
|
|
241
|
+
]
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"slug": "stat-card",
|
|
245
|
+
"name": "StatCard",
|
|
246
|
+
"figmaId": "—",
|
|
247
|
+
"category": "outros",
|
|
248
|
+
"description": "Card de estatística com valor destaque (36px bold), label e descrição opcional. Variante accent com gradient brand e cor de valor em brand.",
|
|
249
|
+
"implemented": true,
|
|
250
|
+
"dependencies": []
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
"slug": "sidebar",
|
|
254
|
+
"name": "Sidebar",
|
|
255
|
+
"figmaId": "—",
|
|
256
|
+
"category": "navegacao",
|
|
257
|
+
"description": "Navegação lateral genérica com grupos de itens, ícones Material Symbols, header com logo e footer com versão. Width 240px, sticky top 0, height 100vh.",
|
|
258
|
+
"implemented": true,
|
|
259
|
+
"dependencies": []
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0.0",
|
|
3
|
+
"description": "Violation mapping tables for TRDR DS migration. Load only during Sub-fase B (violations).",
|
|
4
|
+
|
|
5
|
+
"colors": {
|
|
6
|
+
"description": "Hardcoded hex → semantic token. Use property context to decide: background→bg/surface, color→content, border→border, accent→action.",
|
|
7
|
+
"mappings": [
|
|
8
|
+
{ "hex": "#0E0E0E", "contexts": { "background": "var(--bg-primary)" } },
|
|
9
|
+
{ "hex": "#141519", "contexts": { "background": "var(--bg-secondary)" } },
|
|
10
|
+
{ "hex": "#1A1A1A", "contexts": { "background": "var(--bg-tertiary)", "surface": "var(--surface-tertiary)" } },
|
|
11
|
+
{ "hex": "#222222", "contexts": { "surface": "var(--surface-secondary)", "border": "var(--border-subtle)" } },
|
|
12
|
+
{ "hex": "#4A4A4A", "contexts": { "surface": "var(--surface-primary)", "border": "var(--border-default)" } },
|
|
13
|
+
{ "hex": "#FFFFFF", "contexts": { "color": "var(--content-primary)", "background": "var(--bg-inverse)" } },
|
|
14
|
+
{ "hex": "#E8E8E8", "contexts": { "color": "var(--content-secondary)" } },
|
|
15
|
+
{ "hex": "#A4A4A4", "contexts": { "color": "var(--content-tertiary)" } },
|
|
16
|
+
{ "hex": "#777777", "contexts": { "color": "var(--content-disabled)", "border": "var(--border-disabled)" } },
|
|
17
|
+
{ "hex": "#00D4FF", "contexts": { "border": "var(--border-focus)", "color": "var(--content-brand)", "background": "var(--bg-brand)" } },
|
|
18
|
+
{ "hex": "#00A8CC", "contexts": { "color": "var(--content-brand)", "action": "var(--action-brand-default)" } },
|
|
19
|
+
{ "hex": "#007D99", "contexts": { "action": "var(--action-brand-active)" } },
|
|
20
|
+
{ "hex": "#005266", "contexts": { "background": "var(--action-brand-inverse-default)" } },
|
|
21
|
+
{ "hex": "#002933", "contexts": { "background": "var(--action-brand-inverse-active)" } },
|
|
22
|
+
{ "hex": "#F34F45", "contexts": { "color": "var(--content-error)", "trading": "var(--context-trading-down)" } },
|
|
23
|
+
{ "hex": "#4FE290", "contexts": { "color": "var(--content-success)", "trading": "var(--context-trading-up)" } },
|
|
24
|
+
{ "hex": "#FFCC40", "contexts": { "color": "var(--content-warning)", "background": "var(--bg-warning)" } },
|
|
25
|
+
{ "hex": "#F57C00", "contexts": { "action": "var(--action-destructive-default)" } },
|
|
26
|
+
{ "hex": "#EA580C", "contexts": { "action": "var(--action-destructive-default)" } },
|
|
27
|
+
{ "hex": "#6350B3", "contexts": { "action": "var(--action-tertiary-default)", "background": "var(--bg-brand2)" } },
|
|
28
|
+
{ "hex": "#50418E", "contexts": { "action": "var(--action-tertiary-default)" } },
|
|
29
|
+
{ "hex": "#31DD7E", "contexts": { "color": "var(--content-success)", "background": "var(--bg-success)" } },
|
|
30
|
+
{ "hex": "#CCFDFF", "contexts": { "color": "var(--content-info)" } },
|
|
31
|
+
{ "hex": "#FF6400", "contexts": { "color": "var(--content-warning)" } }
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
"fonts": {
|
|
36
|
+
"description": "Hardcoded font-family → DS token. System fallbacks are removed (token defines the full stack).",
|
|
37
|
+
"mappings": [
|
|
38
|
+
{ "pattern": "Inter", "token": "var(--font-secondary)" },
|
|
39
|
+
{ "pattern": "JetBrains Mono", "token": "var(--font-primary)" },
|
|
40
|
+
{ "pattern": "Space Grotesk", "token": "var(--font-primary)" },
|
|
41
|
+
{ "pattern": "Roboto Mono", "token": "var(--font-mono)" }
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
"spacing": {
|
|
46
|
+
"description": "Hardcoded px → DS spacing token. Values not listed: keep as-is and flag in DS_MIGRATION.md. Do NOT invent tokens.",
|
|
47
|
+
"mappings": [
|
|
48
|
+
{ "px": "0", "token": "0", "note": "No token needed" },
|
|
49
|
+
{ "px": "4px", "token": "var(--spacing-xs)" },
|
|
50
|
+
{ "px": "8px", "token": "var(--spacing-sm)" },
|
|
51
|
+
{ "px": "12px", "token": "var(--spacing-md)" },
|
|
52
|
+
{ "px": "16px", "token": "var(--spacing-lg)" },
|
|
53
|
+
{ "px": "20px", "token": "var(--spacing-xl)" },
|
|
54
|
+
{ "px": "24px", "token": "var(--spacing-2xl)" },
|
|
55
|
+
{ "px": "32px", "token": "var(--spacing-3xl)" }
|
|
56
|
+
],
|
|
57
|
+
"muiScale": {
|
|
58
|
+
"description": "MUI sx numeric scale → DS token. Prefer keeping MUI numeric scale when consistent. Use var() string only for hardcoded px string values.",
|
|
59
|
+
"mappings": [
|
|
60
|
+
{ "mui": 0.5, "px": "4px", "token": "'var(--spacing-xs)'" },
|
|
61
|
+
{ "mui": 1, "px": "8px", "token": "'var(--spacing-sm)'" },
|
|
62
|
+
{ "mui": 1.5, "px": "12px", "token": "'var(--spacing-md)'" },
|
|
63
|
+
{ "mui": 2, "px": "16px", "token": "'var(--spacing-lg)'" },
|
|
64
|
+
{ "mui": 2.5, "px": "20px", "token": "'var(--spacing-xl)'" },
|
|
65
|
+
{ "mui": 3, "px": "24px", "token": "'var(--spacing-2xl)'" },
|
|
66
|
+
{ "mui": 4, "px": "32px", "token": "'var(--spacing-3xl)'" }
|
|
67
|
+
]
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
"radius": {
|
|
72
|
+
"description": "Hardcoded border-radius → DS radius token.",
|
|
73
|
+
"mappings": [
|
|
74
|
+
{ "px": "0", "token": "var(--radius-none)", "muiNumeric": 0 },
|
|
75
|
+
{ "px": "2px", "token": "var(--radius-xs)", "muiNumeric": 2 },
|
|
76
|
+
{ "px": "4px", "token": "var(--radius-sm)", "muiNumeric": 4 },
|
|
77
|
+
{ "px": "8px", "token": "var(--radius-md)", "muiNumeric": 8 },
|
|
78
|
+
{ "px": "16px", "token": "var(--radius-lg)", "muiNumeric": 16 },
|
|
79
|
+
{ "px": "20px", "token": "var(--radius-xl)", "muiNumeric": 20 },
|
|
80
|
+
{ "px": "9999px", "token": "var(--radius-full)", "muiNumeric": 9999 }
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
"rgba": {
|
|
85
|
+
"description": "Hardcoded rgba() → DS token or flag.",
|
|
86
|
+
"mappings": [
|
|
87
|
+
{ "pattern": "rgba(0,0,0,*)", "context": "box-shadow", "action": "flag", "note": "No DS shadow token — flag in DS_MIGRATION.md" },
|
|
88
|
+
{ "pattern": "rgba(255,255,255,0.03-0.08)", "context": "border/divider", "token": "var(--border-subtle)", "fallback": "flag" },
|
|
89
|
+
{ "pattern": "rgba(255,255,255,0.10-0.20)", "context": "hover/overlay", "token": "var(--surface-hover)", "fallback": "flag" },
|
|
90
|
+
{ "pattern": "rgba(255,255,255,.29)", "context": "overlay/backdrop", "token": "var(--bg-overlay)" },
|
|
91
|
+
{ "pattern": "rgba(0,212,255,*)", "context": "focus glow", "action": "flag", "note": "No alpha token for --border-focus" },
|
|
92
|
+
{ "pattern": "rgba(0,168,204,*)", "context": "brand alpha", "token": "var(--surface-brand)", "fallback": "flag" },
|
|
93
|
+
{ "pattern": "rgba(79,226,144,*)", "context": "success alpha", "token": "var(--surface-success)", "fallback": "flag" },
|
|
94
|
+
{ "pattern": "rgba(243,79,69,*)", "context": "error alpha", "token": "var(--surface-error)", "fallback": "flag" },
|
|
95
|
+
{ "pattern": "rgba(255,204,64,*)", "context": "warning alpha", "token": "var(--surface-warning)", "fallback": "flag" }
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
|
|
99
|
+
"gradients": {
|
|
100
|
+
"description": "Known TRDR gradient tokens. Match project gradients against these. Non-matching: flag.",
|
|
101
|
+
"tokens": [
|
|
102
|
+
{ "token": "--gradient-text-brand", "value": "linear-gradient(90deg, var(--content-brand), var(--border-focus))", "description": "cyan→bright-cyan horizontal" },
|
|
103
|
+
{ "token": "--gradient-bg-hero", "value": "linear-gradient(180deg, var(--bg-secondary), var(--bg-primary))", "description": "dark vertical fade" },
|
|
104
|
+
{ "token": "--gradient-bg-fade", "value": "linear-gradient(180deg, var(--bg-tertiary) 0%, transparent 100%)", "description": "surface to transparent" }
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
"fontSizes": {
|
|
109
|
+
"description": "Hardcoded font-size → DS text style class. Two-part fix: remove from CSS + add class to HTML/JSX. Exception: body/html/:root selectors → remove font-size entirely.",
|
|
110
|
+
"mappings": [
|
|
111
|
+
{ "px": "80px", "class": ".trdr-h1", "font": "JetBrains Mono", "weight": 500 },
|
|
112
|
+
{ "px": "56px", "class": ".trdr-h2", "font": "JetBrains Mono", "weight": 500 },
|
|
113
|
+
{ "px": "46px", "class": ".trdr-h3", "font": "JetBrains Mono", "weight": 700 },
|
|
114
|
+
{ "px": "38px", "class": ".trdr-h4", "font": "JetBrains Mono", "weight": 500 },
|
|
115
|
+
{ "px": "32px", "class": ".trdr-h5", "font": "JetBrains Mono", "weight": 500 },
|
|
116
|
+
{ "px": "26px", "class": ".trdr-h6", "font": "JetBrains Mono", "weight": 500 },
|
|
117
|
+
{ "px": "22px", "class": ".trdr-h7", "font": "Inter", "weight": 600 },
|
|
118
|
+
{ "px": "18px", "class": ".trdr-body-b1", "font": "Inter", "weight": 400 },
|
|
119
|
+
{ "px": "16px", "class": ".trdr-body-b2", "altClass": ".trdr-label-l2", "note": "weight 400→b2, 600→l2" },
|
|
120
|
+
{ "px": "14px", "class": ".trdr-body-b3", "altClass": ".trdr-label-l3", "note": "weight 400→b3, 600→l3" },
|
|
121
|
+
{ "px": "12px", "class": ".trdr-body-b4", "altClass": ".trdr-body-aux", "note": "letter-spacing 0.2px→b4, 0.24px→aux" },
|
|
122
|
+
{ "px": "10px", "class": ".trdr-body-b5", "font": "Inter", "weight": 400 }
|
|
123
|
+
],
|
|
124
|
+
"monoRule": "If font-family uses var(--font-mono), use .trdr-mono regardless of font-size.",
|
|
125
|
+
"otherRule": "For sizes not listed: use nearest DS class BELOW the value and flag in DS_MIGRATION.md.",
|
|
126
|
+
"globalSelectorRule": "If font-size is inside body/html/:root/* selector: REMOVE entirely. Do NOT add DS class to body/html."
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
"muiPalette": {
|
|
130
|
+
"description": "MUI palette role → DS token mapping. For Sub-fase A (theme generation).",
|
|
131
|
+
"mappings": [
|
|
132
|
+
{ "key": "palette.primary.main", "token": "var(--action-brand-default)", "hex": "#00D4FF" },
|
|
133
|
+
{ "key": "palette.primary.dark", "token": "var(--action-brand-active)", "hex": "#007D99" },
|
|
134
|
+
{ "key": "palette.primary.contrastText", "token": "var(--content-inverse)", "hex": "#1A1A1A" },
|
|
135
|
+
{ "key": "palette.secondary.main", "token": "var(--action-secondary-default)", "hex": "#4A4A4A" },
|
|
136
|
+
{ "key": "palette.secondary.dark", "token": "var(--action-secondary-active)", "hex": "#A4A4A4" },
|
|
137
|
+
{ "key": "palette.error.main", "token": "var(--content-error)", "hex": "#F34F45" },
|
|
138
|
+
{ "key": "palette.warning.main", "token": "var(--content-warning)", "hex": "#FFCC40" },
|
|
139
|
+
{ "key": "palette.success.main", "token": "var(--content-success)", "hex": "#4FE290" },
|
|
140
|
+
{ "key": "palette.info.main", "token": "var(--content-info)", "hex": "#CCFDFF" },
|
|
141
|
+
{ "key": "palette.background.default", "token": "var(--bg-primary)", "hex": "#0E0E0E" },
|
|
142
|
+
{ "key": "palette.background.paper", "token": "var(--bg-secondary)", "hex": "#141519" },
|
|
143
|
+
{ "key": "palette.text.primary", "token": "var(--content-primary)", "hex": "#FFFFFF" },
|
|
144
|
+
{ "key": "palette.text.secondary", "token": "var(--content-secondary)", "hex": "#E8E8E8" },
|
|
145
|
+
{ "key": "palette.text.disabled", "token": "var(--content-disabled)", "hex": "#4A4A4A" },
|
|
146
|
+
{ "key": "palette.divider", "token": "var(--border-default)", "hex": "#4A4A4A" }
|
|
147
|
+
]
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
"muiTypography": {
|
|
151
|
+
"description": "MUI typography variant → DS equivalent.",
|
|
152
|
+
"mappings": [
|
|
153
|
+
{ "variant": "h1", "dsClass": ".trdr-h1", "fontToken": "var(--font-primary)", "size": 80, "weight": 500, "lineHeight": 1.1 },
|
|
154
|
+
{ "variant": "h2", "dsClass": ".trdr-h2", "fontToken": "var(--font-primary)", "size": 56, "weight": 500, "lineHeight": 1.1 },
|
|
155
|
+
{ "variant": "h3", "dsClass": ".trdr-h3", "fontToken": "var(--font-primary)", "size": 46, "weight": 700, "lineHeight": 1.15 },
|
|
156
|
+
{ "variant": "h4", "dsClass": ".trdr-h4", "fontToken": "var(--font-primary)", "size": 38, "weight": 500, "lineHeight": 1.15 },
|
|
157
|
+
{ "variant": "h5", "dsClass": ".trdr-h5", "fontToken": "var(--font-primary)", "size": 32, "weight": 500, "lineHeight": 1.2 },
|
|
158
|
+
{ "variant": "h6", "dsClass": ".trdr-h6", "fontToken": "var(--font-primary)", "size": 26, "weight": 500, "lineHeight": 1.2 },
|
|
159
|
+
{ "variant": "subtitle1", "dsClass": ".trdr-h7", "fontToken": "var(--font-secondary)", "size": 22, "weight": 600, "lineHeight": 1.3 },
|
|
160
|
+
{ "variant": "body1", "dsClass": ".trdr-body-b2", "fontToken": "var(--font-secondary)", "size": 16, "weight": 500, "lineHeight": 1.5 },
|
|
161
|
+
{ "variant": "body2", "dsClass": ".trdr-body-b3", "fontToken": "var(--font-secondary)", "size": 14, "weight": 400, "lineHeight": 1.5 },
|
|
162
|
+
{ "variant": "caption", "dsClass": ".trdr-body-b4", "fontToken": "var(--font-secondary)", "size": 12, "weight": 500, "lineHeight": 1.4 },
|
|
163
|
+
{ "variant": "overline", "dsClass": ".trdr-body-b5", "fontToken": "var(--font-secondary)", "size": 10, "weight": 400, "lineHeight": 1.4 },
|
|
164
|
+
{ "variant": "button", "dsClass": ".trdr-label-l3", "fontToken": "var(--font-secondary)", "size": 14, "weight": 600 }
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
"tailwindArbitrary": {
|
|
169
|
+
"description": "Tailwind arbitrary value hex → DS token. Fix priority: 1) DS class, 2) var() arbitrary, 3) flag.",
|
|
170
|
+
"examples": [
|
|
171
|
+
{ "from": "bg-[#0E0E0E]", "to": "bg-[var(--bg-primary)]" },
|
|
172
|
+
{ "from": "bg-[#141519]", "to": "bg-[var(--bg-secondary)]" },
|
|
173
|
+
{ "from": "bg-[#1A1A1A]", "to": "bg-[var(--bg-tertiary)]" },
|
|
174
|
+
{ "from": "text-[#FFFFFF]", "to": "text-[var(--content-primary)]" },
|
|
175
|
+
{ "from": "text-[#A4A4A4]", "to": "text-[var(--content-tertiary)]" },
|
|
176
|
+
{ "from": "border-[#222222]", "to": "border-[var(--border-subtle)]" },
|
|
177
|
+
{ "from": "border-[#4A4A4A]", "to": "border-[var(--border-default)]" },
|
|
178
|
+
{ "from": "focus:border-[#00D4FF]", "to": "focus:border-[var(--border-focus)]" },
|
|
179
|
+
{ "from": "text-[#4FE290]", "to": "text-[var(--context-trading-up)]" },
|
|
180
|
+
{ "from": "text-[#F34F45]", "to": "text-[var(--context-trading-down)]" }
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Report Mode
|
|
2
|
+
|
|
3
|
+
> **When to load:** `/trdr-ds report`, or auto-triggered by dissatisfaction detection or critical failures.
|
|
4
|
+
> **Purpose:** Generate and send a structured bug report to the skill maintainer.
|
|
5
|
+
|
|
6
|
+
**Maintainer email:** `mrocontent@gmail.com`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Auto-trigger conditions
|
|
11
|
+
|
|
12
|
+
| Condition | Severity | Auto-report? |
|
|
13
|
+
|-----------|----------|--------------|
|
|
14
|
+
| Sub-phase crash (missing files, parse errors, Hub + local both fail) | CRITICAL | Yes |
|
|
15
|
+
| Build fails after sub-phase changes | CRITICAL | Yes |
|
|
16
|
+
| >30% violations in batch unmappable | HIGH | Yes |
|
|
17
|
+
| Component replacement produced malformed JSX/HTML | CRITICAL | Yes |
|
|
18
|
+
| Rollback invoked | HIGH | Yes |
|
|
19
|
+
|
|
20
|
+
When auto-triggered:
|
|
21
|
+
```
|
|
22
|
+
A skill detectou problemas criticos nesta migracao.
|
|
23
|
+
Um bug report sera gerado e enviado ao maintainer (mrocontent@gmail.com).
|
|
24
|
+
|
|
25
|
+
Deseja incluir observacoes adicionais?
|
|
26
|
+
- Escreva seu comentario
|
|
27
|
+
- "pular" / "skip" — enviar sem comentarios
|
|
28
|
+
```
|
|
29
|
+
Wait for reply. Save as `developerNotes`.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Manual invocation
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
Bug report — descreva o problema que encontrou com a skill:
|
|
37
|
+
```
|
|
38
|
+
Wait for reply. Save as `developerNotes`.
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Step R1 — Collect context
|
|
43
|
+
|
|
44
|
+
Gather silently:
|
|
45
|
+
|
|
46
|
+
1. **Project info:** package.json (name, framework, version), Node.js version, OS, skill version
|
|
47
|
+
2. **Migration state:** DS_ANALYSIS.md, DS_PROGRESS.md (including full Execution Log), SPRINT_PLAN.md, DS_MIGRATION.md
|
|
48
|
+
3. **Error context:** specific error/condition, last 3 files modified, build error (first 50 lines if applicable)
|
|
49
|
+
4. **Snapshot versions:** components index generatedAt, tokens.css variable count
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Step R2 — Generate DS_BUG_REPORT.md
|
|
54
|
+
|
|
55
|
+
Write at project root:
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
# TRDR DS — Bug Report
|
|
59
|
+
|
|
60
|
+
**Date:** [ISO datetime]
|
|
61
|
+
**Skill version:** [version]
|
|
62
|
+
**Report type:** [AUTOMATIC | MANUAL]
|
|
63
|
+
**Severity:** [CRITICAL | HIGH | MEDIUM]
|
|
64
|
+
|
|
65
|
+
## Problem Description
|
|
66
|
+
[developerNotes or auto-trigger description]
|
|
67
|
+
|
|
68
|
+
## Project Context
|
|
69
|
+
| Field | Value |
|
|
70
|
+
|-------|-------|
|
|
71
|
+
| Project | [name] |
|
|
72
|
+
| Framework | [framework] [version] |
|
|
73
|
+
| Styling mode | [stylingMode] |
|
|
74
|
+
| Node.js | [version] |
|
|
75
|
+
| OS | [platform] |
|
|
76
|
+
|
|
77
|
+
## Migration State
|
|
78
|
+
| Sub-phase | Status |
|
|
79
|
+
|-----------|--------|
|
|
80
|
+
| Analysis | [status] |
|
|
81
|
+
| A — Foundation | [status] |
|
|
82
|
+
| B — Violations | [status — N/M batches] |
|
|
83
|
+
| C — Components | [status — N/M candidates] |
|
|
84
|
+
| D — Final | [status] |
|
|
85
|
+
|
|
86
|
+
## Violation Summary
|
|
87
|
+
| Category | Found | Fixed | Unfixable |
|
|
88
|
+
|----------|-------|-------|-----------|
|
|
89
|
+
| A — Colors | [n] | [n] | [n] |
|
|
90
|
+
| ... | ... | ... | ... |
|
|
91
|
+
|
|
92
|
+
## Error Details
|
|
93
|
+
[Build errors, unmapped violations, malformed output]
|
|
94
|
+
|
|
95
|
+
## Execution Log
|
|
96
|
+
[Full log from DS_PROGRESS.md]
|
|
97
|
+
|
|
98
|
+
## Developer Notes
|
|
99
|
+
> [Raw text]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Step R3 — Send via email (Resend API)
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
node -e "
|
|
108
|
+
const https = require('https');
|
|
109
|
+
const report = require('fs').readFileSync('DS_BUG_REPORT.md', 'utf8');
|
|
110
|
+
const data = JSON.stringify({
|
|
111
|
+
from: 'TRDR DS Skill <onboarding@resend.dev>',
|
|
112
|
+
to: ['mrocontent@gmail.com'],
|
|
113
|
+
subject: '[TRDR DS SEVERITY] Bug report — PROJECT (vVERSION)',
|
|
114
|
+
text: report
|
|
115
|
+
});
|
|
116
|
+
const req = https.request({
|
|
117
|
+
hostname: 'api.resend.com', path: '/emails', method: 'POST',
|
|
118
|
+
headers: { 'Authorization': 'Bearer ' + process.env.RESEND_API_KEY, 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(data) }
|
|
119
|
+
}, (res) => { let body=''; res.on('data',c=>body+=c); res.on('end',()=>console.log(res.statusCode<300?'OK: '+body:'FAIL ('+res.statusCode+'): '+body)); });
|
|
120
|
+
req.write(data); req.end();
|
|
121
|
+
"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
If `RESEND_API_KEY` not set: report saved locally, instructions to configure.
|
|
125
|
+
If send fails: report saved locally, instructions to send manually.
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Step R4 — Output
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
[If sent:] Bug report gerado e enviado. DS_BUG_REPORT.md salvo. Email enviado para mrocontent@gmail.com.
|
|
133
|
+
[If failed:] Bug report salvo em DS_BUG_REPORT.md. Email nao enviado.
|
|
134
|
+
|
|
135
|
+
-> Para continuar: /trdr-ds resume
|
|
136
|
+
-> Para reverter: /trdr-ds rollback
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Add to DS_PROGRESS.md: `Bug report: DS_BUG_REPORT.md (sent [datetime] — [type] — [severity])`
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Resume Mode
|
|
2
|
+
|
|
3
|
+
> **When to load:** `/trdr-ds resume` — continue migration from last checkpoint.
|
|
4
|
+
> **Purpose:** Pick up the next pending sprint after a `/clear` or new conversation.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Procedure
|
|
9
|
+
|
|
10
|
+
1. Look for `SPRINT_PLAN.md` and `DS_PROGRESS.md` at project root.
|
|
11
|
+
- If neither found: `Nenhuma migracao encontrada. Execute /trdr-ds para iniciar.`
|
|
12
|
+
- If `DS_PROGRESS.md` has `Status: COMPLETE`: `Migracao completa (finalizada [date]). Execute /trdr-ds para verificar novas violacoes.`
|
|
13
|
+
|
|
14
|
+
2. Read `SPRINT_PLAN.md`. Find first sprint with `Status: PENDING` or `Status: IN_PROGRESS`.
|
|
15
|
+
- If all `COMPLETE`: mark migration COMPLETE in DS_PROGRESS.md, output summary.
|
|
16
|
+
|
|
17
|
+
3. Read `DS_PROGRESS.md` for overall state.
|
|
18
|
+
|
|
19
|
+
4. Read **only the relevant section** of `DS_ANALYSIS.md`:
|
|
20
|
+
- Foundation sprint: `## Project` only
|
|
21
|
+
- Violation sprint: `## By File` entries ONLY for files in that sprint
|
|
22
|
+
- Components sprint: `## Component Replacement Candidates`
|
|
23
|
+
- Final sprint: `## Logo Audit`
|
|
24
|
+
|
|
25
|
+
5. Output resume summary:
|
|
26
|
+
```
|
|
27
|
+
Resumindo migracao TRDR DS — [project name]
|
|
28
|
+
|
|
29
|
+
Sprint Plan: [done]/[total] sprints completos ([percentage]%)
|
|
30
|
+
|
|
31
|
+
Sprint 1 — Foundation [status icon]
|
|
32
|
+
Sprint 2 — Violations: src/components/ [status icon]
|
|
33
|
+
Sprint 3 — Violations: src/pages/ <- retomando aqui
|
|
34
|
+
Sprint 4 — Components pending
|
|
35
|
+
Sprint 5 — Final pending
|
|
36
|
+
|
|
37
|
+
Retomando: Sprint [N] — [name]
|
|
38
|
+
Escopo: [sprint scope description]
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Status icons: `done` / `<- retomando aqui` / `pending`
|
|
42
|
+
|
|
43
|
+
6. Execute the current sprint:
|
|
44
|
+
- Read the appropriate phase file from `phases/`
|
|
45
|
+
- Follow the sprint lifecycle (read → execute → save → STOP)
|
|
46
|
+
- All context from files, NEVER from conversation history
|