rook-cli 1.3.4 → 1.3.6

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,6 +1,6 @@
1
1
  {
2
2
  "name": "rook-cli",
3
- "version": "1.3.4",
3
+ "version": "1.3.6",
4
4
  "description": "CLI para instalar componentes Shopify",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,138 @@
1
+ [
2
+ {
3
+ "name": "Rook UI — Esquema de Cores",
4
+ "settings": [
5
+ {
6
+ "type": "paragraph",
7
+ "content": "Esquemas de cores do Rook UI. Cada seção pode aplicar um esquema diferente nos componentes rk-*."
8
+ },
9
+ {
10
+ "type": "color_scheme_group",
11
+ "id": "rk_color_schemes",
12
+ "definition": [
13
+ {
14
+ "type": "header",
15
+ "content": "Cores de Fundo"
16
+ },
17
+ {
18
+ "type": "color",
19
+ "id": "background",
20
+ "label": "Fundo",
21
+ "default": "#ffffff"
22
+ },
23
+ {
24
+ "type": "color",
25
+ "id": "background_secondary",
26
+ "label": "Fundo Secundário",
27
+ "default": "#f5f5f5",
28
+ "info": "Usado em tabs, toggles, progress track e cards."
29
+ },
30
+ {
31
+ "type": "header",
32
+ "content": "Cores Primárias"
33
+ },
34
+ {
35
+ "type": "color",
36
+ "id": "primary",
37
+ "label": "Cor Primária",
38
+ "default": "#000000",
39
+ "info": "Botões, links e destaques."
40
+ },
41
+ {
42
+ "type": "color",
43
+ "id": "primary_hover",
44
+ "label": "Cor Primária (Hover)",
45
+ "default": "#1a1a1a"
46
+ },
47
+ {
48
+ "type": "color",
49
+ "id": "primary_foreground",
50
+ "label": "Texto sobre Primária",
51
+ "default": "#ffffff",
52
+ "info": "Texto quando o fundo é a cor primária (botões, FAB)."
53
+ },
54
+ {
55
+ "type": "header",
56
+ "content": "Cores Secundárias"
57
+ },
58
+ {
59
+ "type": "color",
60
+ "id": "secondary",
61
+ "label": "Cor Secundária",
62
+ "default": "#ffffff"
63
+ },
64
+ {
65
+ "type": "color",
66
+ "id": "secondary_hover",
67
+ "label": "Cor Secundária (Hover)",
68
+ "default": "#f5f5f5"
69
+ },
70
+ {
71
+ "type": "header",
72
+ "content": "Cores Semânticas"
73
+ },
74
+ {
75
+ "type": "color",
76
+ "id": "success",
77
+ "label": "Cor de Sucesso",
78
+ "default": "#22c55e"
79
+ },
80
+ {
81
+ "type": "color",
82
+ "id": "danger",
83
+ "label": "Cor de Erro / Perigo",
84
+ "default": "#ef4444"
85
+ },
86
+ {
87
+ "type": "header",
88
+ "content": "Texto e Bordas"
89
+ },
90
+ {
91
+ "type": "color",
92
+ "id": "text",
93
+ "label": "Cor do Texto",
94
+ "default": "#1a1a1a"
95
+ },
96
+ {
97
+ "type": "color",
98
+ "id": "text_muted",
99
+ "label": "Texto Secundário",
100
+ "default": "#737373"
101
+ },
102
+ {
103
+ "type": "color",
104
+ "id": "border",
105
+ "label": "Cor da Borda",
106
+ "default": "#e5e5e5"
107
+ },
108
+ {
109
+ "type": "color",
110
+ "id": "ring",
111
+ "label": "Anel de Foco (Focus Ring)",
112
+ "default": "#0f172a",
113
+ "info": "Cor do outline de foco para acessibilidade."
114
+ },
115
+ {
116
+ "type": "color",
117
+ "id": "shadow",
118
+ "label": "Cor da Sombra",
119
+ "default": "#000000",
120
+ "info": "Base para box-shadow de cards, drawers e popovers."
121
+ }
122
+ ],
123
+ "role": {
124
+ "text": "text",
125
+ "background": "background",
126
+ "links": "primary",
127
+ "icons": "text",
128
+ "primary_button": "primary",
129
+ "on_primary_button": "primary_foreground",
130
+ "primary_button_border": "primary",
131
+ "secondary_button": "secondary",
132
+ "on_secondary_button": "primary",
133
+ "secondary_button_border": "border"
134
+ }
135
+ }
136
+ ]
137
+ }
138
+ ]
@@ -4,7 +4,7 @@
4
4
  "settings": [
5
5
  {
6
6
  "type": "paragraph",
7
- "content": "Cores globais do Rook UI Core Framework. Essas cores são usadas por todos os componentes rk-*."
7
+ "content": "Cores globais padrão do Rook UI. Essas cores definem o :root e são usadas quando nenhum esquema de cores é aplicado na seção."
8
8
  },
9
9
  {
10
10
  "type": "header",
@@ -0,0 +1,61 @@
1
+ {% comment %}
2
+ Rook UI Core Framework — Color Schemes (Standalone)
3
+ ====================================================
4
+ Gera CSS variables para cada esquema de cores do Rook UI.
5
+ Usado quando o tema NÃO possui color_scheme_group próprio.
6
+
7
+ O color_scheme_group "rk_color_schemes" é definido no settings_schema.json.
8
+ Cada esquema gera uma classe .rk-scheme-{id} para tematização por seção.
9
+
10
+ Uso em seções:
11
+ <div class="rk-scheme-{{ section.settings.rk_color_scheme }}">
12
+ {% render 'rk-button', variant: 'primary' %}
13
+ </div>
14
+
15
+ No schema da seção:
16
+ { "type": "color_scheme", "id": "rk_color_scheme", "label": "Esquema de Cores Rook UI", "default": "scheme-1" }
17
+ {% endcomment %}
18
+
19
+ {% style %}
20
+ {% for scheme in settings.rk_color_schemes -%}
21
+ {% if forloop.index == 1 %}
22
+ :root,
23
+ {% endif %}
24
+ .rk-scheme-{{ scheme.id }} {
25
+ --rk-color-bg: {{ scheme.settings.background }};
26
+ --rk-color-bg-secondary: {{ scheme.settings.background_secondary }};
27
+
28
+ --rk-color-primary: {{ scheme.settings.primary }};
29
+ --rk-color-primary-hover: {{ scheme.settings.primary_hover }};
30
+ --rk-color-primary-foreground: {{ scheme.settings.primary_foreground }};
31
+
32
+ --rk-color-secondary: {{ scheme.settings.secondary }};
33
+ --rk-color-secondary-hover: {{ scheme.settings.secondary_hover }};
34
+
35
+ --rk-color-success: {{ scheme.settings.success }};
36
+ --rk-color-danger: {{ scheme.settings.danger }};
37
+ --rk-color-destructive: {{ scheme.settings.danger }};
38
+
39
+ --rk-color-text: {{ scheme.settings.text }};
40
+ --rk-color-text-muted: {{ scheme.settings.text_muted }};
41
+
42
+ --rk-color-border: {{ scheme.settings.border }};
43
+ --rk-color-ring: {{ scheme.settings.ring }};
44
+ --rk-color-shadow: {{ scheme.settings.shadow }};
45
+
46
+ {%- assign rk_border_c = scheme.settings.border -%}
47
+ --rk-color-border-rgb: {{ rk_border_c.red }} {{ rk_border_c.green }} {{ rk_border_c.blue }};
48
+
49
+ {%- assign rk_text_c = scheme.settings.text -%}
50
+ --rk-color-text-rgb: {{ rk_text_c.red }} {{ rk_text_c.green }} {{ rk_text_c.blue }};
51
+
52
+ {%- assign rk_shadow_c = scheme.settings.shadow -%}
53
+ --rk-color-shadow-rgb: {{ rk_shadow_c.red }} {{ rk_shadow_c.green }} {{ rk_shadow_c.blue }};
54
+
55
+ --rk-color-border-hover: rgb({{ rk_text_c.red }} {{ rk_text_c.green }} {{ rk_text_c.blue }} / 0.3);
56
+
57
+ color: {{ scheme.settings.text }};
58
+ background-color: {{ scheme.settings.background }};
59
+ }
60
+ {% endfor %}
61
+ {% endstyle %}
@@ -0,0 +1,43 @@
1
+ {% comment %}
2
+ Rook UI Core Framework — Color Scheme Bridge
3
+ =============================================
4
+ Mapeia os color_schemes nativos do tema para as variáveis --rk-* do framework.
5
+ Assim, seções que usam `.color-{scheme.id}` automaticamente aplicam as cores
6
+ corretas nos componentes rk-*.
7
+
8
+ Deve ser renderizado no <head> do layout/theme.liquid:
9
+ {% render 'rk-color-schemes' %}
10
+
11
+ Uso em seções (com o color_scheme nativo do tema):
12
+ <div class="color-{{ section.settings.color_scheme }}">
13
+ {% render 'rk-button', variant: 'primary' %}
14
+ </div>
15
+ {% endcomment %}
16
+
17
+ {% style %}
18
+ {% for scheme in settings.color_schemes -%}
19
+ .color-{{ scheme.id }} {
20
+ /* Mapeia cores do tema → variáveis Rook UI */
21
+ --rk-color-bg: rgb({{ scheme.settings.background.rgba }});
22
+ --rk-color-bg-secondary: rgb({{ scheme.settings.background.rgba }});
23
+
24
+ --rk-color-primary: rgb({{ scheme.settings.primary_button_background.rgba }});
25
+ --rk-color-primary-hover: rgb({{ scheme.settings.primary_button_hover_background.rgba }});
26
+ --rk-color-primary-foreground: rgb({{ scheme.settings.primary_button_text.rgba }});
27
+
28
+ --rk-color-secondary: rgb({{ scheme.settings.secondary_button_background.rgba }});
29
+ --rk-color-secondary-hover: rgb({{ scheme.settings.secondary_button_hover_background.rgba }});
30
+
31
+ --rk-color-text: rgb({{ scheme.settings.foreground.rgba }});
32
+ --rk-color-text-muted: rgb({{ scheme.settings.foreground.rgb }} / 0.65);
33
+
34
+ --rk-color-border: rgb({{ scheme.settings.border.rgba }});
35
+ --rk-color-ring: rgb({{ scheme.settings.primary.rgba }});
36
+
37
+ /* Derivados RGB */
38
+ --rk-color-border-rgb: {{ scheme.settings.border.rgb }};
39
+ --rk-color-text-rgb: {{ scheme.settings.foreground.rgb }};
40
+ --rk-color-border-hover: rgb({{ scheme.settings.foreground.rgb }} / 0.3);
41
+ }
42
+ {% endfor %}
43
+ {% endstyle %}
@@ -1,20 +1,22 @@
1
1
  {% comment %}
2
2
  Rook UI Core Framework — CSS Variables (Liquid → CSS)
3
3
  =====================================================
4
- Este snippet gera todas as CSS custom properties dinâmicas do framework,
5
- populadas a partir das settings globais do tema (rk-settings_schema.json).
4
+ Este snippet gera as CSS custom properties globais do framework:
5
+ - Cores globais padrão (:root) usadas quando nenhum rk-scheme é aplicado
6
+ - Border-radius dinâmico
7
+ - Velocidade de transição
6
8
 
7
- Deve ser renderizado no <head> do layout/theme.liquid:
8
- {% render 'rk-variables' %}
9
+ Para esquemas de cores por seção, veja rk-color-schemes.liquid.
9
10
 
10
- Segue o mesmo padrão do Horizon (theme-styles-variables.liquid) usando
11
- a tag {% style %} para injeção inline de CSS com acesso às settings.
11
+ Deve ser renderizado no <head> do layout/theme.liquid:
12
+ {% render 'rk-color-schemes' %} Esquemas de cores (por seção)
13
+ {% render 'rk-variables' %} ← Cores globais + forma + transição
12
14
  {% endcomment %}
13
15
 
14
16
  {% style %}
15
17
  :root {
16
18
  /* ================================================================
17
- CORES — Dinâmicas via Theme Settings
19
+ CORES GLOBAIS Fallback quando nenhum rk-scheme é aplicado
18
20
  ================================================================ */
19
21
 
20
22
  /* Primárias */
@@ -44,7 +46,7 @@
44
46
  --rk-color-ring: {{ settings.rk_color_ring }};
45
47
 
46
48
  {%- comment -%}
47
- Gerar a versão RGB das cores de borda para uso com opacity.
49
+ Valores RGB derivados para uso com opacity.
48
50
  Ex: rgb(var(--rk-color-border-rgb) / 0.5)
49
51
  {%- endcomment -%}
50
52
  {%- assign rk_border_color = settings.rk_color_border -%}
@@ -61,9 +63,9 @@
61
63
  ================================================================ */
62
64
  --rk-radius: {{ settings.rk_border_radius }}px;
63
65
  --rk-radius-sm: {{ settings.rk_border_radius_sm }}px;
66
+ --rk-radius-md: {{ settings.rk_border_radius }}px;
64
67
  --rk-radius-lg: {{ settings.rk_border_radius_lg }}px;
65
68
  --rk-radius-pill: {{ settings.rk_border_radius_pill }}px;
66
- --rk-radius-md: {{ settings.rk_border_radius }}px;
67
69
 
68
70
  /* ================================================================
69
71
  TRANSIÇÃO — Velocidade dinâmica
@@ -6,7 +6,7 @@
6
6
  */
7
7
 
8
8
  /** Repositório de origem no GitHub (owner/repo) */
9
- export const GITHUB_REPO = process.env.GITHUB_REPO || 'chesslabdev/rook-themes';
9
+ export const GITHUB_REPO = process.env.GITHUB_REPO || 'chesslabdev/rook-cli/rook-components';
10
10
 
11
11
  /** URL base da API do GitHub para conteúdo do repositório */
12
12
  export const GITHUB_API_BASE = `https://api.github.com/repos/${GITHUB_REPO}/contents`;
@@ -8,6 +8,10 @@
8
8
  * 4. Injetar settings no settings_schema.json
9
9
  * 5. Patch do layout/theme.liquid
10
10
  *
11
+ * Detecta automaticamente se o tema já possui um color_scheme_group:
12
+ * - SIM → usa rk-color-schemes.liquid (ponte para os schemes do tema)
13
+ * - NÃO → injeta rk-color-scheme-group.json + usa rk-color-schemes-standalone.liquid
14
+ *
11
15
  * Princípio: Responsabilidade Única (SRP) — só instala o framework
12
16
  * Princípio: Inversão de Dependência (DIP) — dependências injetadas
13
17
  */
@@ -22,6 +26,7 @@ const FRAMEWORK_DIR = path.resolve(__dirname, '../../rook-framework');
22
26
  /** Bloco Liquid injetado no <head> do theme.liquid */
23
27
  const HEAD_INJECTION = `
24
28
  {%- comment -%} Rook UI Core Framework {%- endcomment -%}
29
+ {%- render 'rk-color-schemes' -%}
25
30
  {%- render 'rk-variables' -%}
26
31
  {{ 'rk-framework-tokens.css' | asset_url | stylesheet_tag }}
27
32
  {{ 'rk-framework-core.css' | asset_url | stylesheet_tag }}
@@ -56,7 +61,7 @@ export class FrameworkInstaller {
56
61
  * @param {boolean} [options.force=false] - Sobrescrever sem perguntar
57
62
  * @param {boolean} [options.skipLayout=false] - Não modificar theme.liquid
58
63
  * @param {boolean} [options.skipSettings=false] - Não modificar settings_schema.json
59
- * @returns {Promise<{assets: number, snippets: number, blocks: number, settingsSections: number, layoutPatched: boolean}>}
64
+ * @returns {Promise<{assets: number, snippets: number, blocks: number, settingsSections: number, layoutPatched: boolean, colorSchemeMode: string}>}
60
65
  */
61
66
  async install(themePath, options = {}) {
62
67
  const resultado = {
@@ -65,8 +70,19 @@ export class FrameworkInstaller {
65
70
  blocks: 0,
66
71
  settingsSections: 0,
67
72
  layoutPatched: false,
73
+ colorSchemeMode: 'unknown',
68
74
  };
69
75
 
76
+ // Detectar color_scheme_group do tema antes de copiar snippets
77
+ const themeHasColorSchemes = await this._themeHasColorSchemeGroup(themePath);
78
+ resultado.colorSchemeMode = themeHasColorSchemes ? 'bridge' : 'standalone';
79
+
80
+ if (themeHasColorSchemes) {
81
+ this.logger.info(' Tema possui color_scheme_group → modo ponte (reutiliza esquemas do tema)');
82
+ } else {
83
+ this.logger.info(' Tema sem color_scheme_group → modo standalone (esquemas próprios Rook UI)');
84
+ }
85
+
70
86
  // Etapa 1: Assets
71
87
  this.logger.destaque('\n [1/5] Copiando assets...');
72
88
  resultado.assets = await this._copyDir(
@@ -76,14 +92,9 @@ export class FrameworkInstaller {
76
92
  );
77
93
  this.logger.sucesso(` ${resultado.assets} arquivo(s) copiados para assets/`);
78
94
 
79
- // Etapa 2: Snippets
95
+ // Etapa 2: Snippets (com resolução do color-schemes correto)
80
96
  this.logger.destaque('\n [2/5] Copiando snippets...');
81
- resultado.snippets = await this._copyDir(
82
- path.join(FRAMEWORK_DIR, 'snippets'),
83
- path.join(themePath, 'snippets'),
84
- options.force,
85
- (filename) => !filename.includes(' copy')
86
- );
97
+ resultado.snippets = await this._copySnippets(themePath, themeHasColorSchemes, options.force);
87
98
  this.logger.sucesso(` ${resultado.snippets} arquivo(s) copiados para snippets/`);
88
99
 
89
100
  // Etapa 3: Blocks
@@ -95,10 +106,10 @@ export class FrameworkInstaller {
95
106
  );
96
107
  this.logger.sucesso(` ${resultado.blocks} arquivo(s) copiados para blocks/`);
97
108
 
98
- // Etapa 4: Settings
109
+ // Etapa 4: Settings (com injeção condicional do color_scheme_group)
99
110
  if (!options.skipSettings) {
100
111
  this.logger.destaque('\n [4/5] Injetando settings no settings_schema.json...');
101
- resultado.settingsSections = await this._injectSettings(themePath);
112
+ resultado.settingsSections = await this._injectSettings(themePath, themeHasColorSchemes);
102
113
  this.logger.sucesso(` ${resultado.settingsSections} seção(ões) Rook UI injetadas`);
103
114
  } else {
104
115
  this.logger.sutil('[4/5] Pulando settings (--skip-settings)');
@@ -201,6 +212,82 @@ export class FrameworkInstaller {
201
212
  return null;
202
213
  }
203
214
 
215
+ /**
216
+ * Verifica se o tema já possui um color_scheme_group no settings_schema.json.
217
+ *
218
+ * @param {string} themePath
219
+ * @returns {Promise<boolean>}
220
+ * @private
221
+ */
222
+ async _themeHasColorSchemeGroup(themePath) {
223
+ try {
224
+ const settingsPath = path.join(themePath, 'config', 'settings_schema.json');
225
+ if (!await fs.pathExists(settingsPath)) return false;
226
+
227
+ const schema = JSON.parse(await fs.readFile(settingsPath, 'utf8'));
228
+
229
+ for (const section of schema) {
230
+ if (!section.settings) continue;
231
+ for (const setting of section.settings) {
232
+ if (setting.type === 'color_scheme_group') {
233
+ return true;
234
+ }
235
+ }
236
+ }
237
+ } catch {
238
+ // Ignora
239
+ }
240
+ return false;
241
+ }
242
+
243
+ /**
244
+ * Copia snippets com resolução inteligente do rk-color-schemes.
245
+ *
246
+ * - Tema COM color_scheme_group → copia rk-color-schemes.liquid (ponte)
247
+ * - Tema SEM color_scheme_group → copia rk-color-schemes-standalone.liquid como rk-color-schemes.liquid
248
+ *
249
+ * Exclui o arquivo alternativo que não foi usado.
250
+ *
251
+ * @param {string} themePath
252
+ * @param {boolean} themeHasColorSchemes
253
+ * @param {boolean} force
254
+ * @returns {Promise<number>}
255
+ * @private
256
+ */
257
+ async _copySnippets(themePath, themeHasColorSchemes, force) {
258
+ const srcDir = path.join(FRAMEWORK_DIR, 'snippets');
259
+ const destDir = path.join(themePath, 'snippets');
260
+
261
+ // Arquivos a ignorar na cópia genérica
262
+ const skipFiles = new Set([
263
+ 'rk-color-schemes.liquid',
264
+ 'rk-color-schemes-standalone.liquid',
265
+ ]);
266
+
267
+ // Copiar todos os snippets exceto os dois de color-schemes
268
+ const count = await this._copyDir(srcDir, destDir, force, (filename) => {
269
+ if (filename.includes(' copy')) return false;
270
+ if (skipFiles.has(filename)) return false;
271
+ return true;
272
+ });
273
+
274
+ // Copiar a versão correta como rk-color-schemes.liquid
275
+ const sourceFile = themeHasColorSchemes
276
+ ? 'rk-color-schemes.liquid' // Ponte para schemes do tema
277
+ : 'rk-color-schemes-standalone.liquid'; // Schemes próprios do Rook UI
278
+
279
+ const srcPath = path.join(srcDir, sourceFile);
280
+ const destPath = path.join(destDir, 'rk-color-schemes.liquid');
281
+
282
+ if (await fs.pathExists(srcPath)) {
283
+ await fs.copy(srcPath, destPath, { overwrite: true });
284
+ this.logger.sutil(`→ snippets/rk-color-schemes.liquid (${themeHasColorSchemes ? 'ponte' : 'standalone'})`);
285
+ return count + 1;
286
+ }
287
+
288
+ return count;
289
+ }
290
+
204
291
  /**
205
292
  * Copia todos os arquivos de um diretório para outro.
206
293
  *
@@ -251,13 +338,18 @@ export class FrameworkInstaller {
251
338
  /**
252
339
  * Injeta as seções do Rook UI no settings_schema.json do tema.
253
340
  *
341
+ * Se o tema NÃO possui color_scheme_group, injeta também o
342
+ * rk-color-scheme-group.json com o grupo de cores próprio do Rook UI.
343
+ *
254
344
  * @param {string} themePath
345
+ * @param {boolean} themeHasColorSchemes
255
346
  * @returns {Promise<number>} Quantidade de seções injetadas
256
347
  * @private
257
348
  */
258
- async _injectSettings(themePath) {
349
+ async _injectSettings(themePath, themeHasColorSchemes) {
259
350
  const settingsPath = path.join(themePath, 'config', 'settings_schema.json');
260
351
  const rkSettingsPath = path.join(FRAMEWORK_DIR, 'config', 'rk-settings_schema.json');
352
+ const rkColorGroupPath = path.join(FRAMEWORK_DIR, 'config', 'rk-color-scheme-group.json');
261
353
 
262
354
  if (!await fs.pathExists(settingsPath)) {
263
355
  this.logger.aviso('settings_schema.json não encontrado, pulando injeção de settings');
@@ -270,14 +362,27 @@ export class FrameworkInstaller {
270
362
  this.logger.sutil(`Backup criado: settings_schema.json.rk-backup`);
271
363
 
272
364
  try {
273
- // Ler ambos os arquivos
365
+ // Ler arquivos
274
366
  let schema = JSON.parse(await fs.readFile(settingsPath, 'utf8'));
275
367
  const rkSections = JSON.parse(await fs.readFile(rkSettingsPath, 'utf8'));
276
368
 
277
369
  // Remover seções Rook UI existentes (para atualização limpa)
278
370
  schema = schema.filter(s => !s.name || !s.name.startsWith(RK_SECTION_PREFIX));
279
371
 
280
- // Inserir novas seções no final
372
+ // Se o tema NÃO tem color_scheme_group, injetar o do Rook UI
373
+ if (!themeHasColorSchemes && await fs.pathExists(rkColorGroupPath)) {
374
+ const colorGroup = JSON.parse(await fs.readFile(rkColorGroupPath, 'utf8'));
375
+ schema.push(...colorGroup);
376
+ this.logger.sutil('→ Injetado color_scheme_group próprio do Rook UI');
377
+
378
+ for (const section of colorGroup) {
379
+ this.logger.sutil(`→ ${section.name}`);
380
+ }
381
+ } else if (themeHasColorSchemes) {
382
+ this.logger.sutil('→ Tema já possui color_scheme_group, reaproveitando');
383
+ }
384
+
385
+ // Inserir seções padrão no final
281
386
  schema.push(...rkSections);
282
387
 
283
388
  // Salvar
@@ -292,7 +397,8 @@ export class FrameworkInstaller {
292
397
  this.logger.sutil(`→ ${section.name} (${settingsCount} settings)`);
293
398
  }
294
399
 
295
- return rkSections.length;
400
+ const totalSections = rkSections.length + (!themeHasColorSchemes ? 1 : 0);
401
+ return totalSections;
296
402
  } catch (erro) {
297
403
  // Restaurar backup em caso de erro
298
404
  this.logger.erro(`Erro ao injetar settings: ${erro.message}`);
@@ -336,7 +442,7 @@ export class FrameworkInstaller {
336
442
 
337
443
  if (content.includes(headAnchor)) {
338
444
  content = content.replace(headAnchor, HEAD_INJECTION + '\n\n ' + headAnchor);
339
- this.logger.sutil('→ Injetado no <head>: rk-variables, tokens, core CSS');
445
+ this.logger.sutil('→ Injetado no <head>: rk-color-schemes, rk-variables, tokens, core CSS');
340
446
  } else if (content.includes(headFallback)) {
341
447
  content = content.replace(headFallback, HEAD_INJECTION + '\n ' + headFallback);
342
448
  this.logger.sutil('→ Injetado antes de </head> (fallback)');
@@ -366,7 +472,7 @@ export class FrameworkInstaller {
366
472
  * @private
367
473
  */
368
474
  _removeExistingRkBlocks(content) {
369
- // Remover bloco do <head>
475
+ // Remover bloco do <head> (detecta tanto versões com quanto sem rk-color-schemes)
370
476
  const headBlockRegex = /\n?\s*\{%-?\s*comment\s*-?%\}\s*Rook UI Core Framework\s*\{%-?\s*endcomment\s*-?%\}[\s\S]*?\{%-?\s*render\s+'rk-external-assets'[^%]*%\}\s*\n?/g;
371
477
  content = content.replace(headBlockRegex, '\n');
372
478
 
@@ -49,7 +49,7 @@ export class Logger {
49
49
  banner() {
50
50
  console.log('');
51
51
  console.log(pc.bold(pc.white(' ╔══════════════════════════════╗')));
52
- console.log(pc.bold(pc.white(' ║ ♟️ ROOK CLI v1.3.4 ║')));
52
+ console.log(pc.bold(pc.white(' ║ ♟️ ROOK CLI v1.3.6 ║')));
53
53
  console.log(pc.bold(pc.white(' ║ Shopify Component Tool ║')));
54
54
  console.log(pc.bold(pc.white(' ╚══════════════════════════════╝')));
55
55
  console.log('');