rook-cli 1.3.11 → 1.3.13

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.11",
3
+ "version": "1.3.13",
4
4
  "description": "CLI para instalar componentes Shopify",
5
5
  "repository": {
6
6
  "type": "git",
@@ -135,6 +135,7 @@ O framework inteiro vive em `/rook-framework/` como pasta isolada. Para portar p
135
135
  │ ├── rk-collapsible.liquid ← Molécula: Painel ocultável
136
136
  │ ├── rk-carousel.liquid ← Molécula: Slider/Carousel (Swiper.js)
137
137
  │ ├── rk-bottom-app-bar.liquid ← Molécula: Barra de navegação inferior estilo App
138
+ │ ├── rk-group.liquid ← Molécula: Container flexível com controladores completos (layout/size/bg/overlay/border/link)
138
139
  │ ├── rk-external-assets.liquid ← Serviço: Gerenciador de preconnects, CDNs e scripts externos (GSAP/Animejs)
139
140
  │ ├── rk-scripts.liquid ← Serviço: Carregador centralizado dos Web Components JS do framework
140
141
  │ └── rk-quick-add.liquid ← Molécula: Add to Cart (⚠️ exceção)
@@ -152,7 +153,8 @@ O framework inteiro vive em `/rook-framework/` como pasta isolada. Para portar p
152
153
  ├── rk-pix-discount.liquid ← Block: Desconto Pix com customizer
153
154
  ├── rk-quantity.liquid ← Block: Seletor qtd com customizer
154
155
  ├── rk-quick-add.liquid ← Block: Add to Cart com customizer
155
- └── rk-skeleton.liquid ← Block: Skeleton com customizer
156
+ ├── rk-skeleton.liquid ← Block: Skeleton com customizer
157
+ └── rk-group.liquid ← Block: Grupo container com customizer
156
158
  ```
157
159
 
158
160
  ---
@@ -1038,6 +1040,73 @@ Shapes: `text` \| `circle` \| `rect`
1038
1040
 
1039
1041
  ---
1040
1042
 
1043
+ #### `rk-group`
1044
+ **Arquivo:** `snippets/rk-group.liquid`
1045
+ **Controller:** Nenhum (CSS puro + Liquid)
1046
+ **Descrição:** Container flexível ("smart div") que aceita qualquer conteúdo dentro dele com controladores completos para layout, tamanho, espaçamento, fundo (cor/imagem), overlay (sólido/gradiente), borda e link. Compõe internamente os snippets `rk-layout-style`, `rk-size-style` e `rk-spacing-style` para máxima reutilização.
1047
+
1048
+ | Prop | Tipo | Default | Descrição |
1049
+ |---|---|---|---|
1050
+ | `children` | string | — | HTML do conteúdo interno (obrigatório) |
1051
+ | `settings` | object | — | Objeto de configurações do block/section |
1052
+ | `shopify_attributes` | string | — | Atributos do editor Shopify |
1053
+ | `class` | string | — | Classes CSS extras |
1054
+ | `style` | string | — | Estilos inline extras |
1055
+
1056
+ **Settings de Layout:**
1057
+ | Setting | Tipo | Default | Descrição |
1058
+ |---|---|---|---|
1059
+ | `content_direction` | select | `column` | `column` \| `row` |
1060
+ | `vertical_on_mobile` | checkbox | `true` | Empilha no mobile (quando `row`) |
1061
+ | `horizontal_alignment` | select | `flex-start` | Alinhamento horizontal (row) |
1062
+ | `vertical_alignment` | select | `center` | Alinhamento vertical (row) |
1063
+ | `horizontal_alignment_flex_direction_column` | select | `flex-start` | Alinhamento horizontal (column) |
1064
+ | `vertical_alignment_flex_direction_column` | select | `center` | Alinhamento vertical (column) |
1065
+ | `gap` | range | `12px` | Espaço entre itens |
1066
+
1067
+ **Settings de Tamanho:**
1068
+ | Setting | Tipo | Default | Descrição |
1069
+ |---|---|---|---|
1070
+ | `width` | select | `fill` | `fill` \| `fit-content` \| `custom` |
1071
+ | `custom_width` | range | `100%` | Largura personalizada (%) |
1072
+ | `width_mobile` | select | `fill` | Override mobile |
1073
+ | `custom_width_mobile` | range | `100%` | Largura mobile personalizada |
1074
+ | `height` | select | `fit` | `fit` \| `fill` \| `custom` |
1075
+ | `custom_height` | range | `100%` | Altura personalizada (%) |
1076
+
1077
+ **Settings de Aparência:**
1078
+ | Setting | Tipo | Default | Descrição |
1079
+ |---|---|---|---|
1080
+ | `background_color` | color | — | Cor de fundo |
1081
+ | `background_image` | image_picker | — | Imagem de fundo |
1082
+ | `background_image_position` | select | `cover` | `cover` \| `contain` |
1083
+ | `border` | select | `none` | `none` \| `solid` |
1084
+ | `border_width` | range | `1px` | Espessura da borda |
1085
+ | `border_opacity` | range | `100%` | Opacidade da borda |
1086
+ | `border_radius` | range | `0` | Arredondamento |
1087
+ | `toggle_overlay` | checkbox | `false` | Ativar overlay |
1088
+ | `overlay_color` | color (alpha) | `#00000026` | Cor do overlay |
1089
+ | `overlay_style` | select | `solid` | `solid` \| `gradient` |
1090
+ | `gradient_direction` | select | `to top` | Direção do gradiente |
1091
+ | `link` | url | — | Link do grupo inteiro |
1092
+ | `open_in_new_tab` | checkbox | `false` | Abrir em nova aba |
1093
+
1094
+ **Exemplo:**
1095
+ ```liquid
1096
+ {%- capture children %}
1097
+ {% content_for 'blocks' %}
1098
+ {% endcapture %}
1099
+ {% render 'rk-group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes %}
1100
+ ```
1101
+
1102
+ **Comportamento Técnico:**
1103
+ - Link wrapper usa `position: absolute; inset: 0` com `pointer-events: none` nos filhos, preservando interatividade de `a`, `button`, `input`, `textarea`, `select`
1104
+ - Background image usa `<img>` com `object-fit` (cover/contain) para performance e lazy-loading nativo
1105
+ - Overlay suporta cor sólida ou gradiente linear com transparência
1106
+ - No Design Mode do Shopify, pointer-events são restaurados no conteúdo para permitir edição
1107
+
1108
+ ---
1109
+
1041
1110
  ### 5.3 Serviços
1042
1111
 
1043
1112
  #### `rk-external-assets`
@@ -2755,6 +2755,129 @@ a.rk-card {
2755
2755
  will-change: opacity, transform;
2756
2756
  }
2757
2757
 
2758
+ /* --------------------------------------------------------------------------
2759
+ rk-group (Group Container — Smart Div with full controllers)
2760
+ Flexible container that accepts any content with layout, size, spacing,
2761
+ background, overlay, border and link controls.
2762
+ -------------------------------------------------------------------------- */
2763
+ .rk-group {
2764
+ position: relative;
2765
+ display: block;
2766
+ background-color: var(--rk-group-bg, transparent);
2767
+ border-style: var(--rk-group-border-style, none);
2768
+ border-width: var(--rk-group-border-width, 0);
2769
+ border-color: rgb(var(--rk-color-border-rgb, 229 229 229) / var(--rk-group-border-opacity, 1));
2770
+ border-radius: var(--rk-group-radius, 0);
2771
+ overflow: hidden;
2772
+ }
2773
+
2774
+ .rk-group--height-fit {
2775
+ height: auto;
2776
+ }
2777
+
2778
+ .rk-group--height-fill {
2779
+ height: 100%;
2780
+ }
2781
+
2782
+ .rk-group--height-custom {
2783
+ height: var(--rk-height, auto);
2784
+ }
2785
+
2786
+ .rk-group--width-fill {
2787
+ width: 100%;
2788
+ }
2789
+
2790
+ .rk-group--width-fit-content {
2791
+ width: fit-content;
2792
+ }
2793
+
2794
+ .rk-group--width-custom {
2795
+ width: var(--rk-width, auto);
2796
+ }
2797
+
2798
+ @media (max-width: 749px) {
2799
+ .rk-group--width-custom,
2800
+ .rk-group--width-fill {
2801
+ width: var(--rk-width-mobile, var(--rk-width, 100%));
2802
+ }
2803
+ }
2804
+
2805
+ /* Link wrapper — full-bleed clickable area */
2806
+ .rk-group__link {
2807
+ position: absolute;
2808
+ inset: 0;
2809
+ z-index: 1;
2810
+ }
2811
+
2812
+ .rk-group__link ~ .rk-group__content,
2813
+ .rk-group__link ~ .rk-group__media {
2814
+ pointer-events: none;
2815
+ }
2816
+
2817
+ .rk-group__link ~ .rk-group__content :is(a, button, input, textarea, select),
2818
+ .rk-group__link ~ .rk-group__media :is(a, button, input, textarea, select) {
2819
+ pointer-events: auto;
2820
+ }
2821
+
2822
+ .rk-group__link ~ .rk-group__content--design-mode {
2823
+ pointer-events: auto;
2824
+ }
2825
+
2826
+ /* Background media layer */
2827
+ .rk-group__media {
2828
+ position: absolute;
2829
+ inset: 0;
2830
+ z-index: 0;
2831
+ pointer-events: none;
2832
+ }
2833
+
2834
+ .rk-group__bg-image {
2835
+ display: block;
2836
+ width: 100%;
2837
+ height: 100%;
2838
+ }
2839
+
2840
+ .rk-group__bg-image--cover {
2841
+ object-fit: cover;
2842
+ }
2843
+
2844
+ .rk-group__bg-image--contain {
2845
+ object-fit: contain;
2846
+ }
2847
+
2848
+ /* Overlay */
2849
+ .rk-group__overlay {
2850
+ position: absolute;
2851
+ inset: 0;
2852
+ pointer-events: none;
2853
+ }
2854
+
2855
+ .rk-group__overlay--solid {
2856
+ background: var(--rk-group-overlay-color);
2857
+ }
2858
+
2859
+ .rk-group__overlay--gradient {
2860
+ background: linear-gradient(
2861
+ var(--rk-group-overlay-direction, to top),
2862
+ var(--rk-group-overlay-color),
2863
+ var(--rk-group-overlay-color-end, transparent)
2864
+ );
2865
+ }
2866
+
2867
+ /* Content layer */
2868
+ .rk-group__content {
2869
+ position: relative;
2870
+ z-index: 1;
2871
+ min-height: inherit;
2872
+ height: 100%;
2873
+ }
2874
+
2875
+ @media (max-width: 749px) {
2876
+ .rk-group__content--mobile-column {
2877
+ flex-direction: column;
2878
+ }
2879
+ }
2880
+
2758
2881
  /* --------------------------------------------------------------------------
2759
2882
  rk-sr-only (Screen Reader Only utility)
2760
2883
  -------------------------------------------------------------------------- */
@@ -0,0 +1,361 @@
1
+ {% comment %}
2
+ Block: RK Group
3
+ A flexible container that accepts any blocks inside it with full layout,
4
+ sizing, spacing, background, overlay, border and link controls.
5
+ Acts as a "smart div" with all the visual controllers needed.
6
+ {% endcomment %}
7
+
8
+ {%- capture children %}
9
+ {% content_for 'blocks' %}
10
+ {% endcapture %}
11
+
12
+ {% render 'rk-group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes %}
13
+
14
+ {% schema %}
15
+ {
16
+ "name": "RK | Grupo",
17
+ "tag": null,
18
+ "blocks": [
19
+ {
20
+ "type": "@theme"
21
+ },
22
+ {
23
+ "type": "@app"
24
+ }
25
+ ],
26
+ "settings": [
27
+ {
28
+ "type": "header",
29
+ "content": "Layout"
30
+ },
31
+ {
32
+ "type": "select",
33
+ "id": "content_direction",
34
+ "label": "Direção",
35
+ "options": [
36
+ {
37
+ "value": "column",
38
+ "label": "Vertical"
39
+ },
40
+ {
41
+ "value": "row",
42
+ "label": "Horizontal"
43
+ }
44
+ ],
45
+ "default": "column"
46
+ },
47
+ {
48
+ "type": "checkbox",
49
+ "id": "vertical_on_mobile",
50
+ "label": "Empilhar no mobile",
51
+ "default": true,
52
+ "visible_if": "{{ block.settings.content_direction == 'row' }}"
53
+ },
54
+ {
55
+ "type": "select",
56
+ "id": "horizontal_alignment",
57
+ "label": "Alinhamento horizontal",
58
+ "options": [
59
+ { "value": "flex-start", "label": "Esquerda" },
60
+ { "value": "center", "label": "Centro" },
61
+ { "value": "flex-end", "label": "Direita" },
62
+ { "value": "space-between", "label": "Distribuído" }
63
+ ],
64
+ "default": "flex-start",
65
+ "visible_if": "{{ block.settings.content_direction == 'row' }}"
66
+ },
67
+ {
68
+ "type": "select",
69
+ "id": "vertical_alignment",
70
+ "label": "Alinhamento vertical",
71
+ "options": [
72
+ { "value": "flex-start", "label": "Topo" },
73
+ { "value": "center", "label": "Centro" },
74
+ { "value": "flex-end", "label": "Base" }
75
+ ],
76
+ "default": "center",
77
+ "visible_if": "{{ block.settings.content_direction == 'row' }}"
78
+ },
79
+ {
80
+ "type": "select",
81
+ "id": "horizontal_alignment_flex_direction_column",
82
+ "label": "Alinhamento horizontal",
83
+ "options": [
84
+ { "value": "flex-start", "label": "Esquerda" },
85
+ { "value": "center", "label": "Centro" },
86
+ { "value": "flex-end", "label": "Direita" }
87
+ ],
88
+ "default": "flex-start",
89
+ "visible_if": "{{ block.settings.content_direction != 'row' }}"
90
+ },
91
+ {
92
+ "type": "select",
93
+ "id": "vertical_alignment_flex_direction_column",
94
+ "label": "Alinhamento vertical",
95
+ "options": [
96
+ { "value": "flex-start", "label": "Topo" },
97
+ { "value": "center", "label": "Centro" },
98
+ { "value": "flex-end", "label": "Base" },
99
+ { "value": "space-between", "label": "Distribuído" }
100
+ ],
101
+ "default": "center",
102
+ "visible_if": "{{ block.settings.content_direction == 'column' }}"
103
+ },
104
+ {
105
+ "type": "range",
106
+ "id": "gap",
107
+ "label": "Espaço entre itens",
108
+ "min": 0,
109
+ "max": 100,
110
+ "step": 1,
111
+ "unit": "px",
112
+ "default": 12
113
+ },
114
+ {
115
+ "type": "header",
116
+ "content": "Tamanho"
117
+ },
118
+ {
119
+ "type": "select",
120
+ "id": "width",
121
+ "label": "Largura",
122
+ "options": [
123
+ { "value": "fit-content", "label": "Ajustar ao conteúdo" },
124
+ { "value": "fill", "label": "Preencher" },
125
+ { "value": "custom", "label": "Personalizada" }
126
+ ],
127
+ "default": "fill"
128
+ },
129
+ {
130
+ "type": "range",
131
+ "id": "custom_width",
132
+ "label": "Largura personalizada",
133
+ "min": 0,
134
+ "max": 100,
135
+ "step": 1,
136
+ "unit": "%",
137
+ "default": 100,
138
+ "visible_if": "{{ block.settings.width == 'custom' }}"
139
+ },
140
+ {
141
+ "type": "select",
142
+ "id": "width_mobile",
143
+ "label": "Largura mobile",
144
+ "options": [
145
+ { "value": "fit-content", "label": "Ajustar ao conteúdo" },
146
+ { "value": "fill", "label": "Preencher" },
147
+ { "value": "custom", "label": "Personalizada" }
148
+ ],
149
+ "default": "fill"
150
+ },
151
+ {
152
+ "type": "range",
153
+ "id": "custom_width_mobile",
154
+ "label": "Largura mobile personalizada",
155
+ "min": 0,
156
+ "max": 100,
157
+ "step": 1,
158
+ "unit": "%",
159
+ "default": 100,
160
+ "visible_if": "{{ block.settings.width_mobile == 'custom' }}"
161
+ },
162
+ {
163
+ "type": "select",
164
+ "id": "height",
165
+ "label": "Altura",
166
+ "options": [
167
+ { "value": "fit", "label": "Ajustar ao conteúdo" },
168
+ { "value": "fill", "label": "Preencher" },
169
+ { "value": "custom", "label": "Personalizada" }
170
+ ],
171
+ "default": "fit"
172
+ },
173
+ {
174
+ "type": "range",
175
+ "id": "custom_height",
176
+ "label": "Altura personalizada",
177
+ "min": 0,
178
+ "max": 100,
179
+ "step": 1,
180
+ "unit": "%",
181
+ "default": 100,
182
+ "visible_if": "{{ block.settings.height == 'custom' }}"
183
+ },
184
+ {
185
+ "type": "header",
186
+ "content": "Aparência"
187
+ },
188
+ {
189
+ "type": "color",
190
+ "id": "background_color",
191
+ "label": "Cor de fundo"
192
+ },
193
+ {
194
+ "type": "image_picker",
195
+ "id": "background_image",
196
+ "label": "Imagem de fundo"
197
+ },
198
+ {
199
+ "type": "select",
200
+ "id": "background_image_position",
201
+ "label": "Ajuste da imagem",
202
+ "options": [
203
+ { "value": "cover", "label": "Cobrir" },
204
+ { "value": "contain", "label": "Conter" }
205
+ ],
206
+ "default": "cover",
207
+ "visible_if": "{{ block.settings.background_image != blank }}"
208
+ },
209
+ {
210
+ "type": "select",
211
+ "id": "border",
212
+ "label": "Borda",
213
+ "options": [
214
+ { "value": "none", "label": "Nenhuma" },
215
+ { "value": "solid", "label": "Sólida" }
216
+ ],
217
+ "default": "none"
218
+ },
219
+ {
220
+ "type": "range",
221
+ "id": "border_width",
222
+ "min": 0,
223
+ "max": 10,
224
+ "step": 0.5,
225
+ "unit": "px",
226
+ "label": "Espessura da borda",
227
+ "default": 1,
228
+ "visible_if": "{{ block.settings.border != 'none' }}"
229
+ },
230
+ {
231
+ "type": "range",
232
+ "id": "border_opacity",
233
+ "min": 0,
234
+ "max": 100,
235
+ "step": 1,
236
+ "unit": "%",
237
+ "label": "Opacidade da borda",
238
+ "default": 100,
239
+ "visible_if": "{{ block.settings.border != 'none' }}"
240
+ },
241
+ {
242
+ "type": "range",
243
+ "id": "border_radius",
244
+ "label": "Arredondamento",
245
+ "min": 0,
246
+ "max": 100,
247
+ "step": 1,
248
+ "unit": "px",
249
+ "default": 0
250
+ },
251
+ {
252
+ "type": "checkbox",
253
+ "id": "toggle_overlay",
254
+ "label": "Overlay de fundo"
255
+ },
256
+ {
257
+ "type": "color",
258
+ "id": "overlay_color",
259
+ "label": "Cor do overlay",
260
+ "alpha": true,
261
+ "default": "#00000026",
262
+ "visible_if": "{{ block.settings.toggle_overlay }}"
263
+ },
264
+ {
265
+ "type": "select",
266
+ "id": "overlay_style",
267
+ "label": "Estilo do overlay",
268
+ "options": [
269
+ { "value": "solid", "label": "Sólido" },
270
+ { "value": "gradient", "label": "Gradiente" }
271
+ ],
272
+ "default": "solid",
273
+ "visible_if": "{{ block.settings.toggle_overlay }}"
274
+ },
275
+ {
276
+ "type": "select",
277
+ "id": "gradient_direction",
278
+ "label": "Direção do gradiente",
279
+ "options": [
280
+ { "value": "to top", "label": "Para cima" },
281
+ { "value": "to bottom", "label": "Para baixo" }
282
+ ],
283
+ "default": "to top",
284
+ "visible_if": "{{ block.settings.toggle_overlay and block.settings.overlay_style == 'gradient' }}"
285
+ },
286
+ {
287
+ "type": "header",
288
+ "content": "Link"
289
+ },
290
+ {
291
+ "type": "url",
292
+ "id": "link",
293
+ "label": "Link"
294
+ },
295
+ {
296
+ "type": "checkbox",
297
+ "id": "open_in_new_tab",
298
+ "label": "Abrir em nova aba",
299
+ "default": false
300
+ },
301
+ {
302
+ "type": "header",
303
+ "content": "Espaçamento"
304
+ },
305
+ {
306
+ "type": "range",
307
+ "id": "padding-block-start",
308
+ "label": "Topo",
309
+ "min": 0,
310
+ "max": 100,
311
+ "step": 1,
312
+ "unit": "px",
313
+ "default": 0
314
+ },
315
+ {
316
+ "type": "range",
317
+ "id": "padding-block-end",
318
+ "label": "Base",
319
+ "min": 0,
320
+ "max": 100,
321
+ "step": 1,
322
+ "unit": "px",
323
+ "default": 0
324
+ },
325
+ {
326
+ "type": "range",
327
+ "id": "padding-inline-start",
328
+ "label": "Esquerda",
329
+ "min": 0,
330
+ "max": 100,
331
+ "step": 1,
332
+ "unit": "px",
333
+ "default": 0
334
+ },
335
+ {
336
+ "type": "range",
337
+ "id": "padding-inline-end",
338
+ "label": "Direita",
339
+ "min": 0,
340
+ "max": 100,
341
+ "step": 1,
342
+ "unit": "px",
343
+ "default": 0
344
+ }
345
+ ],
346
+ "presets": [
347
+ {
348
+ "name": "RK | Grupo",
349
+ "category": "Rook UI"
350
+ },
351
+ {
352
+ "name": "RK | Grupo Horizontal",
353
+ "category": "Rook UI",
354
+ "settings": {
355
+ "content_direction": "row",
356
+ "gap": 16
357
+ }
358
+ }
359
+ ]
360
+ }
361
+ {% endschema %}
@@ -0,0 +1,130 @@
1
+ {%- doc -%}
2
+ Snippet: RkGroup
3
+ Renders a flexible container block that accepts any content with full layout,
4
+ sizing, spacing, background, overlay, border and link controls.
5
+ Acts as a "smart div" with all the visual controllers needed.
6
+
7
+ @param {string} children - The DOM content of the group (captured HTML)
8
+ @param {object} settings - The block/section settings object
9
+ @param {string} [shopify_attributes] - Shopify editor attributes string
10
+ @param {string} [class] - Custom CSS classes
11
+ @param {string} [style] - Custom inline styles
12
+
13
+ Settings keys used:
14
+ Layout:
15
+ - content_direction: 'column' | 'row' (default: 'column')
16
+ - vertical_on_mobile: boolean (default: true)
17
+ - horizontal_alignment, vertical_alignment (for row)
18
+ - horizontal_alignment_flex_direction_column, vertical_alignment_flex_direction_column (for column)
19
+ - gap: number (px)
20
+ Size:
21
+ - width: 'fill' | 'fit-content' | 'custom'
22
+ - custom_width: number (%)
23
+ - width_mobile: 'fill' | 'fit-content' | 'custom'
24
+ - custom_width_mobile: number (%)
25
+ - height: 'fit' | 'fill' | 'custom'
26
+ - custom_height: number (%)
27
+ Padding:
28
+ - padding-block-start, padding-block-end, padding-inline-start, padding-inline-end: number (px)
29
+ Appearance:
30
+ - background_color: color
31
+ - background_image: image object
32
+ - background_image_position: 'cover' | 'contain' (default: 'cover')
33
+ - border: 'none' | 'solid'
34
+ - border_width: number (px)
35
+ - border_opacity: number (0-100)
36
+ - border_radius: number (px)
37
+ Overlay:
38
+ - toggle_overlay: boolean
39
+ - overlay_color: color (with alpha)
40
+ - overlay_style: 'solid' | 'gradient'
41
+ - gradient_direction: 'to top' | 'to bottom'
42
+ Link:
43
+ - link: url
44
+ - open_in_new_tab: boolean
45
+
46
+ @example
47
+ {% capture children %}
48
+ {% content_for 'blocks' %}
49
+ {% endcapture %}
50
+ {% render 'rk-group', children: children, settings: block.settings, shopify_attributes: block.shopify_attributes %}
51
+ {%- enddoc -%}
52
+
53
+ <div
54
+ class="
55
+ rk-group
56
+ rk-group--height-{{ settings.height | default: 'fit' }}
57
+ rk-group--width-{{ settings.width | default: 'fill' }}
58
+ rk-spacing-style
59
+ rk-size-style
60
+ {{ class }}
61
+ "
62
+ style="
63
+ {% render 'rk-spacing-style', settings: settings %}
64
+ {% render 'rk-size-style', settings: settings %}
65
+ {%- if settings.border != 'none' and settings.border != blank -%}
66
+ --rk-group-border-width: {{ settings.border_width | default: 1 }}px;
67
+ --rk-group-border-style: {{ settings.border }};
68
+ --rk-group-border-opacity: {{ settings.border_opacity | default: 100 | divided_by: 100.0 }};
69
+ {%- endif -%}
70
+ {%- if settings.border_radius != blank and settings.border_radius > 0 -%}
71
+ --rk-group-radius: {{ settings.border_radius }}px;
72
+ {%- endif -%}
73
+ {%- if settings.background_color != blank -%}
74
+ --rk-group-bg: {{ settings.background_color }};
75
+ {%- endif -%}
76
+ {{ style }}
77
+ "
78
+ {{ shopify_attributes }}
79
+ >
80
+ {%- if settings.link != blank -%}
81
+ <a
82
+ href="{{ settings.link }}"
83
+ class="rk-group__link"
84
+ {% if settings.open_in_new_tab %}target="_blank" rel="noopener"{% endif %}
85
+ ></a>
86
+ {%- endif -%}
87
+
88
+ {%- if settings.background_image != blank or settings.toggle_overlay -%}
89
+ <div class="rk-group__media">
90
+ {%- if settings.background_image != blank -%}
91
+ {%- assign bg_position = settings.background_image_position | default: 'cover' -%}
92
+ <img
93
+ src="{{ settings.background_image | image_url: width: 1920 }}"
94
+ alt=""
95
+ loading="lazy"
96
+ class="rk-group__bg-image rk-group__bg-image--{{ bg_position }}"
97
+ width="{{ settings.background_image.width }}"
98
+ height="{{ settings.background_image.height }}"
99
+ >
100
+ {%- endif -%}
101
+
102
+ {%- if settings.toggle_overlay -%}
103
+ {%- assign overlay_color = settings.overlay_color | default: '#00000026' -%}
104
+ {%- assign overlay_style = settings.overlay_style | default: 'solid' -%}
105
+ <div
106
+ class="rk-group__overlay rk-group__overlay--{{ overlay_style }}"
107
+ style="
108
+ --rk-group-overlay-color: {{ overlay_color }};
109
+ --rk-group-overlay-color-end: {{ overlay_color | color_modify: 'alpha', 0 }};
110
+ {%- if overlay_style == 'gradient' -%}
111
+ --rk-group-overlay-direction: {{ settings.gradient_direction | default: 'to top' }};
112
+ {%- endif -%}
113
+ "
114
+ ></div>
115
+ {%- endif -%}
116
+ </div>
117
+ {%- endif -%}
118
+
119
+ <div
120
+ class="
121
+ rk-group__content
122
+ rk-layout-style
123
+ {% if request.design_mode %}rk-group__content--design-mode{% endif %}
124
+ {% if settings.vertical_on_mobile and settings.content_direction == 'row' %} rk-group__content--mobile-column{% endif %}
125
+ "
126
+ style="{% render 'rk-layout-style', settings: settings %}"
127
+ >
128
+ {{- children -}}
129
+ </div>
130
+ </div>
package/src/mcp/server.js CHANGED
@@ -45,6 +45,7 @@ import { FileMapper } from '../filesystem/FileMapper.js';
45
45
  import { ConflictResolver } from '../filesystem/ConflictResolver.js';
46
46
  import { FrameworkInstaller } from '../services/FrameworkInstaller.js';
47
47
  import { generateNames } from '../utils/stringUtils.js';
48
+ import { REMOTE_PATHS } from '../config/constants.js';
48
49
 
49
50
  import path from 'path';
50
51
  import os from 'os';
@@ -206,7 +207,7 @@ async function handleInstallComponent(args) {
206
207
 
207
208
  // Instala cada componente do manifesto
208
209
  for (const nomeComponente of kit.componentes) {
209
- const copiados = await baixarEDistribuir(`components/${nomeComponente}`, diretorioAtual);
210
+ const copiados = await baixarEDistribuir(`${REMOTE_PATHS.COMPONENTS}/${nomeComponente}`, diretorioAtual);
210
211
  totalArquivos += copiados;
211
212
  totalComponentes++;
212
213
  }
@@ -229,7 +230,7 @@ async function handleInstallComponent(args) {
229
230
 
230
231
  } else {
231
232
  // --- Instalação de Componente Individual ---
232
- const caminhoRemoto = `components/${name}`;
233
+ const caminhoRemoto = `${REMOTE_PATHS.COMPONENTS}/${name}`;
233
234
  const copiados = await baixarEDistribuir(caminhoRemoto, diretorioAtual);
234
235
 
235
236
  return {
@@ -59,7 +59,7 @@ export class Logger {
59
59
  console.log(bold(white(' ██║ ██║╚██████╔╝╚██████╔╝██║ ██╗')));
60
60
  console.log(bold(white(' ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝')));
61
61
  console.log('');
62
- console.log(dim(' v1.3.11Shopify Component Tool'));
62
+ console.log(dim(' v1.3.13Rook UI'));
63
63
  console.log('');
64
64
  }
65
65