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 +1 -1
- package/rook-framework/config/rk-color-scheme-group.json +138 -0
- package/rook-framework/config/rk-settings_schema.json +1 -1
- package/rook-framework/snippets/rk-color-schemes-standalone.liquid +61 -0
- package/rook-framework/snippets/rk-color-schemes.liquid +43 -0
- package/rook-framework/snippets/rk-variables.liquid +11 -9
- package/src/config/constants.js +1 -1
- package/src/services/FrameworkInstaller.js +122 -16
- package/src/utils/logger.js +1 -1
package/package.json
CHANGED
|
@@ -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
|
|
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
|
|
5
|
-
|
|
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
|
-
|
|
8
|
-
{% render 'rk-variables' %}
|
|
9
|
+
Para esquemas de cores por seção, veja rk-color-schemes.liquid.
|
|
9
10
|
|
|
10
|
-
|
|
11
|
-
|
|
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 —
|
|
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
|
-
|
|
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
|
package/src/config/constants.js
CHANGED
|
@@ -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-
|
|
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.
|
|
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
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
|
package/src/utils/logger.js
CHANGED
|
@@ -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.
|
|
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('');
|