holygrail5 1.0.19 → 1.0.21
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/README.md +88 -18
- package/config.json +205 -77
- package/dist/assets/fonts/suisse-intl-light.woff +0 -0
- package/dist/assets/fonts/suisse-intl-light.woff2 +0 -0
- package/dist/assets/fonts/suisse-intl-medium.woff +0 -0
- package/dist/assets/fonts/suisse-intl-medium.woff2 +0 -0
- package/dist/assets/fonts/suisse-intl-regular.woff +0 -0
- package/dist/assets/fonts/suisse-intl-regular.woff2 +0 -0
- package/dist/assets/fonts/suisse-intl-semibold.woff +0 -0
- package/dist/assets/fonts/suisse-intl-semibold.woff2 +0 -0
- package/dist/assets/fonts/suisse-works-bold.woff +0 -0
- package/dist/assets/fonts/suisse-works-bold.woff2 +0 -0
- package/dist/assets/fonts/suisse-works-medium.woff +0 -0
- package/dist/assets/fonts/suisse-works-medium.woff2 +0 -0
- package/dist/assets/fonts/suisse-works-regular.woff +0 -0
- package/dist/assets/fonts/suisse-works-regular.woff2 +0 -0
- package/dist/componentes.html +429 -0
- package/dist/developer-guide.md +7 -7
- package/dist/guide-styles.css +197 -25
- package/dist/index.html +807 -689
- package/dist/output.css +217 -114
- package/dist/skills.html +14 -8
- package/dist/themes/dutti-demo.html +713 -19
- package/dist/themes/dutti.css +67 -16
- package/dist/themes/limited-demo.html +1121 -0
- package/dist/themes/limited.css +2493 -0
- package/package.json +1 -1
- package/src/.data/.previous-values.json +151 -84
- package/src/assets/fonts/suisse-intl-light.woff +0 -0
- package/src/assets/fonts/suisse-intl-light.woff2 +0 -0
- package/src/assets/fonts/suisse-intl-medium.woff +0 -0
- package/src/assets/fonts/suisse-intl-medium.woff2 +0 -0
- package/src/assets/fonts/suisse-intl-regular.woff +0 -0
- package/src/assets/fonts/suisse-intl-regular.woff2 +0 -0
- package/src/assets/fonts/suisse-intl-semibold.woff +0 -0
- package/src/assets/fonts/suisse-intl-semibold.woff2 +0 -0
- package/src/assets/fonts/suisse-works-bold.woff +0 -0
- package/src/assets/fonts/suisse-works-bold.woff2 +0 -0
- package/src/assets/fonts/suisse-works-medium.woff +0 -0
- package/src/assets/fonts/suisse-works-medium.woff2 +0 -0
- package/src/assets/fonts/suisse-works-regular.woff +0 -0
- package/src/assets/fonts/suisse-works-regular.woff2 +0 -0
- package/src/build/asset-manager.js +94 -3
- package/src/build/build-orchestrator.js +74 -12
- package/src/build/components-generator.js +584 -0
- package/src/build/skills-generator.js +43 -5
- package/src/build/theme-config-loader.js +58 -0
- package/src/build/theme-transformer.js +109 -16
- package/src/build/theme-vars-table-generator.js +349 -0
- package/src/build/typo-table-generator.js +154 -0
- package/src/docs-generator/guide-styles.css +197 -24
- package/src/docs-generator/html-generator.js +92 -246
- package/src/docs-generator/sections/colors-section.js +109 -0
- package/src/docs-generator/value-tracker.js +154 -0
- package/src/generators/typo-generator.js +2 -1
- package/src/generators/utils.js +90 -1
- package/src/skills.html +1 -0
- package/src/watch-config.js +99 -32
- package/themes/{dutti → _base}/_buttons.css +2 -2
- package/themes/{dutti → _base}/_checkboxes.css +1 -1
- package/themes/{dutti → _base}/_forms.css +1 -1
- package/themes/{dutti → _base}/_inputs.css +55 -10
- package/themes/{dutti → _base}/_labels.css +1 -1
- package/themes/dutti/README.md +67 -21
- package/themes/dutti/_variables.css +7 -1
- package/themes/dutti/demo.html +18 -14
- package/themes/dutti/theme.css +22 -44
- package/themes/dutti/theme.json +86 -0
- package/themes/limited/_variables.css +123 -0
- package/themes/limited/demo.html +296 -0
- package/themes/limited/theme.css +32 -0
- package/themes/limited/theme.json +105 -0
- /package/themes/{dutti → _base}/_containers.css +0 -0
- /package/themes/{dutti → _base}/_radios.css +0 -0
- /package/themes/{dutti → _base}/_switches.css +0 -0
- /package/themes/{dutti → _base}/components/_icons.css +0 -0
- /package/themes/{dutti → _base}/objects/_grid.css +0 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="es">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>HolyGrail5 — Componentes base</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Instrument+Sans:regular,100,500,600,700">
|
|
10
|
+
<!-- Framework base -->
|
|
11
|
+
<link rel="stylesheet" href="output.css">
|
|
12
|
+
<!-- Tema base genérico: dutti (variables + componentes) -->
|
|
13
|
+
<link rel="stylesheet" href="themes/dutti.css">
|
|
14
|
+
<!-- Estilos compartidos de guía (header, sidebar, demo-*) -->
|
|
15
|
+
<link rel="stylesheet" href="guide-styles.css">
|
|
16
|
+
<style>
|
|
17
|
+
body {
|
|
18
|
+
font-family: 'Instrument Sans', sans-serif !important;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* Descripción de cada sección (debajo del título) */
|
|
22
|
+
.cmp-desc {
|
|
23
|
+
font-size: 14px;
|
|
24
|
+
line-height: 1.6;
|
|
25
|
+
color: #555;
|
|
26
|
+
margin: 0 0 1.5rem;
|
|
27
|
+
max-width: 720px;
|
|
28
|
+
}
|
|
29
|
+
.cmp-desc code {
|
|
30
|
+
background: #f3f3f3;
|
|
31
|
+
padding: 2px 6px;
|
|
32
|
+
border-radius: 4px;
|
|
33
|
+
font-size: 0.88em;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Preview de cada componente dentro de .demo-item */
|
|
37
|
+
.cmp-preview {
|
|
38
|
+
min-height: 48px;
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
flex-wrap: wrap;
|
|
42
|
+
gap: 0.5rem;
|
|
43
|
+
margin-bottom: var(--hg-spacing-12);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/* Los inputs con floating label necesitan respirar: el label flota
|
|
47
|
+
encima, el helper-text se apila debajo. */
|
|
48
|
+
#inputs .cmp-preview,
|
|
49
|
+
#forms .cmp-preview {
|
|
50
|
+
display: block;
|
|
51
|
+
}
|
|
52
|
+
#inputs .cmp-preview > .form-input-label-2,
|
|
53
|
+
#forms .cmp-preview > .form-group {
|
|
54
|
+
width: 100%;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/* Containers y Grid son estructuras de layout: interesan como
|
|
58
|
+
bloques a 100% del item, no como chips alineados horizontalmente. */
|
|
59
|
+
#containers .demo-grid,
|
|
60
|
+
#grid .demo-grid {
|
|
61
|
+
grid-template-columns: 1fr;
|
|
62
|
+
}
|
|
63
|
+
#containers .cmp-preview,
|
|
64
|
+
#grid .cmp-preview {
|
|
65
|
+
display: block;
|
|
66
|
+
}
|
|
67
|
+
#containers .cmp-preview > [class^="container"],
|
|
68
|
+
#grid .cmp-preview > [class^="hg-grid-"] {
|
|
69
|
+
width: 100%;
|
|
70
|
+
max-width: 100%;
|
|
71
|
+
}
|
|
72
|
+
</style>
|
|
73
|
+
</head>
|
|
74
|
+
<body>
|
|
75
|
+
|
|
76
|
+
<div class="guide-header">
|
|
77
|
+
<a href="index.html" class="guide-logo" style="text-decoration:none;">HolyGrail5</a>
|
|
78
|
+
<div style="display: flex; align-items: center; gap: 1rem;">
|
|
79
|
+
<nav class="guide-nav">
|
|
80
|
+
<a href="index.html">Guía</a>
|
|
81
|
+
<a href="componentes.html" class="active">Componentes</a>
|
|
82
|
+
<a href="themes/dutti-demo.html">Tema Dutti</a>
|
|
83
|
+
<a href="themes/limited-demo.html">Tema Limited</a>
|
|
84
|
+
<a href="skills.html">Skills</a>
|
|
85
|
+
</nav>
|
|
86
|
+
<button class="guide-header-button" onclick="toggleSidebar()">☰</button>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
<div class="guide-sidebar-overlay" onclick="toggleSidebar()"></div>
|
|
91
|
+
|
|
92
|
+
<aside class="guide-sidebar">
|
|
93
|
+
<div class="guide-sidebar-header">
|
|
94
|
+
<div>HolyGrail5</div>
|
|
95
|
+
<p class="guide-sidebar-subtitle">Componentes base</p>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
<nav class="guide-sidebar-nav">
|
|
99
|
+
<p class="guide-sidebar-title">Componentes</p>
|
|
100
|
+
|
|
101
|
+
<a href="#buttons" class="guide-menu-item">Botones</a>
|
|
102
|
+
<a href="#inputs" class="guide-menu-item">Inputs</a>
|
|
103
|
+
<a href="#labels" class="guide-menu-item">Labels</a>
|
|
104
|
+
<a href="#checkboxes" class="guide-menu-item">Checkboxes</a>
|
|
105
|
+
<a href="#radios" class="guide-menu-item">Radios</a>
|
|
106
|
+
<a href="#switches" class="guide-menu-item">Switches</a>
|
|
107
|
+
<a href="#forms" class="guide-menu-item">Formularios</a>
|
|
108
|
+
<a href="#containers" class="guide-menu-item">Containers</a>
|
|
109
|
+
<a href="#grid" class="guide-menu-item">Grid</a>
|
|
110
|
+
</nav>
|
|
111
|
+
</aside>
|
|
112
|
+
|
|
113
|
+
<script>
|
|
114
|
+
function toggleSidebar() {
|
|
115
|
+
const sidebar = document.querySelector('.guide-sidebar');
|
|
116
|
+
const overlay = document.querySelector('.guide-sidebar-overlay');
|
|
117
|
+
sidebar.classList.toggle('open');
|
|
118
|
+
overlay.classList.toggle('active');
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
function closeSidebar() {
|
|
122
|
+
const sidebar = document.querySelector('.guide-sidebar');
|
|
123
|
+
const overlay = document.querySelector('.guide-sidebar-overlay');
|
|
124
|
+
sidebar.classList.remove('open');
|
|
125
|
+
overlay.classList.remove('active');
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
window.toggleSidebar = toggleSidebar;
|
|
129
|
+
window.closeSidebar = closeSidebar;
|
|
130
|
+
</script>
|
|
131
|
+
|
|
132
|
+
<main class="demo-container guide-main-content">
|
|
133
|
+
<h2 class="demo-title">Componentes base</h2>
|
|
134
|
+
|
|
135
|
+
<div class="demo-section-2">
|
|
136
|
+
<h3>¿Qué es esta página?</h3>
|
|
137
|
+
<p class="mb-16">
|
|
138
|
+
Librería de componentes compartidos que viven en
|
|
139
|
+
<code>themes/_base/</code>. Se renderizan con el tema
|
|
140
|
+
<strong>Dutti</strong>
|
|
141
|
+
como base genérica del framework; cualquier otro tema puede
|
|
142
|
+
aplicarse encima para redefinir la identidad visual sin tocar
|
|
143
|
+
el HTML.
|
|
144
|
+
</p>
|
|
145
|
+
</div>
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
<section class="demo-section" id="buttons">
|
|
149
|
+
<h2 class="demo-title">Botones</h2>
|
|
150
|
+
<p class="cmp-desc">Variantes estándar del framework: <code>primary</code>, <code>secondary</code>, <code>tertiary</code>, <code>label-m</code>, <code>link</code> y <code>badge</code>. Clases en <code>themes/_base/_buttons.css</code>. Cada tema puede sobreescribirlas con su propia identidad visual.</p>
|
|
151
|
+
|
|
152
|
+
<h3 class="demo-subtitle">Variantes</h3>
|
|
153
|
+
<div class="demo-grid">
|
|
154
|
+
<div class="demo-item">
|
|
155
|
+
<div class="cmp-preview"><button class="btn btn-primary">Primary</button></div>
|
|
156
|
+
<div class="demo-code">.btn .btn-primary</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="demo-item">
|
|
159
|
+
<div class="cmp-preview"><button class="btn btn-secondary">Secondary</button></div>
|
|
160
|
+
<div class="demo-code">.btn .btn-secondary</div>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="demo-item">
|
|
163
|
+
<div class="cmp-preview"><button class="btn btn-tertiary">Tertiary</button></div>
|
|
164
|
+
<div class="demo-code">.btn .btn-tertiary</div>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="demo-item">
|
|
167
|
+
<div class="cmp-preview"><button class="btn btn-tertiary hg-text-underline">Tertiary underline</button></div>
|
|
168
|
+
<div class="demo-code">.btn .btn-tertiary .hg-text-underline</div>
|
|
169
|
+
</div>
|
|
170
|
+
<div class="demo-item">
|
|
171
|
+
<div class="cmp-preview"><button class="btn btn-label-m">Label M</button></div>
|
|
172
|
+
<div class="demo-code">.btn .btn-label-m</div>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="demo-item">
|
|
175
|
+
<div class="cmp-preview"><button class="btn btn-link">Link</button></div>
|
|
176
|
+
<div class="demo-code">.btn .btn-link</div>
|
|
177
|
+
</div>
|
|
178
|
+
<div class="demo-item">
|
|
179
|
+
<div class="cmp-preview"><button class="btn btn-badge">Badge</button></div>
|
|
180
|
+
<div class="demo-code">.btn .btn-badge</div>
|
|
181
|
+
</div>
|
|
182
|
+
<div class="demo-item">
|
|
183
|
+
<div class="cmp-preview"><button class="btn btn-primary" disabled>Disabled</button></div>
|
|
184
|
+
<div class="demo-code">.btn[disabled]</div>
|
|
185
|
+
</div>
|
|
186
|
+
</div>
|
|
187
|
+
<h3 class="demo-subtitle">Tamaños</h3>
|
|
188
|
+
<div class="demo-grid">
|
|
189
|
+
<div class="demo-item">
|
|
190
|
+
<div class="cmp-preview"><button class="btn btn-primary btn-sm">Small</button></div>
|
|
191
|
+
<div class="demo-code">.btn .btn-sm</div>
|
|
192
|
+
</div>
|
|
193
|
+
<div class="demo-item">
|
|
194
|
+
<div class="cmp-preview"><button class="btn btn-primary btn-md">Medium</button></div>
|
|
195
|
+
<div class="demo-code">.btn .btn-md</div>
|
|
196
|
+
</div>
|
|
197
|
+
<div class="demo-item">
|
|
198
|
+
<div class="cmp-preview"><button class="btn btn-primary btn-lg">Large</button></div>
|
|
199
|
+
<div class="demo-code">.btn .btn-lg</div>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
<h3 class="demo-subtitle">Ancho completo</h3>
|
|
203
|
+
<div class="demo-grid">
|
|
204
|
+
<div class="demo-item">
|
|
205
|
+
<div class="cmp-preview"><button class="btn btn-primary btn-md btn-full">Botón ancho completo</button></div>
|
|
206
|
+
<div class="demo-code">.btn .btn-full</div>
|
|
207
|
+
</div>
|
|
208
|
+
</div>
|
|
209
|
+
</section>
|
|
210
|
+
|
|
211
|
+
<section class="demo-section" id="inputs">
|
|
212
|
+
<h2 class="demo-title">Inputs</h2>
|
|
213
|
+
<p class="cmp-desc">Campos de formulario base con <strong>floating label</strong>: texto, email, password, textarea y select. Cada input vive dentro de <code>.form-input-label-2</code> para que el label se anime al enfocar o al contener valor. Clases en <code>themes/_base/_inputs.css</code>.</p>
|
|
214
|
+
|
|
215
|
+
<h3 class="demo-subtitle">Tipos</h3>
|
|
216
|
+
<div class="demo-grid">
|
|
217
|
+
<div class="demo-item">
|
|
218
|
+
<div class="cmp-preview"><div class="form-input-label-2"><input type="text" id="cmp-input-text" class="input" placeholder=" " /><label for="cmp-input-text">Texto</label></div></div>
|
|
219
|
+
<div class="demo-code">.form-input-label-2 > .input</div>
|
|
220
|
+
</div>
|
|
221
|
+
<div class="demo-item">
|
|
222
|
+
<div class="cmp-preview"><div class="form-input-label-2"><input type="email" id="cmp-input-email" class="input" placeholder=" " /><label for="cmp-input-email">Email</label></div></div>
|
|
223
|
+
<div class="demo-code">.input (type=email)</div>
|
|
224
|
+
</div>
|
|
225
|
+
<div class="demo-item">
|
|
226
|
+
<div class="cmp-preview"><div class="form-input-label-2"><input type="password" id="cmp-input-password" class="input" placeholder=" " /><label for="cmp-input-password">Contraseña</label></div></div>
|
|
227
|
+
<div class="demo-code">.input (type=password)</div>
|
|
228
|
+
</div>
|
|
229
|
+
<div class="demo-item">
|
|
230
|
+
<div class="cmp-preview"><div class="form-input-label-2"><textarea id="cmp-input-textarea" class="input" placeholder=" " rows="3"></textarea><label for="cmp-input-textarea">Comentario</label></div></div>
|
|
231
|
+
<div class="demo-code">.input (textarea)</div>
|
|
232
|
+
</div>
|
|
233
|
+
<div class="demo-item">
|
|
234
|
+
<div class="cmp-preview"><div class="form-input-label-2"><select id="cmp-input-select" class="input"><option>Opción A</option><option>Opción B</option></select><label for="cmp-input-select">Selecciona</label></div></div>
|
|
235
|
+
<div class="demo-code">.input (select)</div>
|
|
236
|
+
</div>
|
|
237
|
+
</div>
|
|
238
|
+
<h3 class="demo-subtitle">Estados</h3>
|
|
239
|
+
<div class="demo-grid">
|
|
240
|
+
<div class="demo-item">
|
|
241
|
+
<div class="cmp-preview"><div class="form-input-label-2"><input type="text" id="cmp-input-error" class="input input-error" value="Valor inválido" placeholder=" " /><label for="cmp-input-error">Error</label></div><span class="helper-text helper-text-error">Este campo tiene un error</span></div>
|
|
242
|
+
<div class="demo-code">.input-error + .helper-text-error</div>
|
|
243
|
+
</div>
|
|
244
|
+
<div class="demo-item">
|
|
245
|
+
<div class="cmp-preview"><div class="form-input-label-2"><input type="text" id="cmp-input-success" class="input input-success" value="Valor válido" placeholder=" " /><label for="cmp-input-success">Success</label></div><span class="helper-text helper-text-success">Campo válido</span></div>
|
|
246
|
+
<div class="demo-code">.input-success + .helper-text-success</div>
|
|
247
|
+
</div>
|
|
248
|
+
<div class="demo-item">
|
|
249
|
+
<div class="cmp-preview"><div class="form-input-label-2"><input type="text" id="cmp-input-warning" class="input input-warning" value="Atención" placeholder=" " /><label for="cmp-input-warning">Warning</label></div><span class="helper-text helper-text-warning">Revisa este campo</span></div>
|
|
250
|
+
<div class="demo-code">.input-warning + .helper-text-warning</div>
|
|
251
|
+
</div>
|
|
252
|
+
<div class="demo-item">
|
|
253
|
+
<div class="cmp-preview"><div class="form-input-label-2"><input type="text" id="cmp-input-disabled" class="input" value="No editable" placeholder=" " disabled /><label for="cmp-input-disabled">Disabled</label></div></div>
|
|
254
|
+
<div class="demo-code">.input[disabled]</div>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
</section>
|
|
258
|
+
|
|
259
|
+
<section class="demo-section" id="labels">
|
|
260
|
+
<h2 class="demo-title">Labels</h2>
|
|
261
|
+
<p class="cmp-desc">Etiquetas de formulario: base, obligatoria e inline. Clases en <code>themes/_base/_labels.css</code>.</p>
|
|
262
|
+
|
|
263
|
+
<h3 class="demo-subtitle">Variantes</h3>
|
|
264
|
+
<div class="demo-grid">
|
|
265
|
+
<div class="demo-item">
|
|
266
|
+
<div class="cmp-preview"><label class="label">Nombre</label></div>
|
|
267
|
+
<div class="demo-code">.label</div>
|
|
268
|
+
</div>
|
|
269
|
+
<div class="demo-item">
|
|
270
|
+
<div class="cmp-preview"><label class="label label-required">Email</label></div>
|
|
271
|
+
<div class="demo-code">.label .label-required</div>
|
|
272
|
+
</div>
|
|
273
|
+
<div class="demo-item">
|
|
274
|
+
<div class="cmp-preview"><label class="label label-inline"><input type="checkbox" /> Acepto los términos</label></div>
|
|
275
|
+
<div class="demo-code">.label .label-inline</div>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
</section>
|
|
279
|
+
|
|
280
|
+
<section class="demo-section" id="checkboxes">
|
|
281
|
+
<h2 class="demo-title">Checkboxes</h2>
|
|
282
|
+
<p class="cmp-desc">Checkbox con input nativo oculto y marca SVG inline dentro de <code>.checkbox-indicator</code>. El estado visible se controla 100% con CSS (sin JS). Clases en <code>themes/_base/_checkboxes.css</code>.</p>
|
|
283
|
+
|
|
284
|
+
<h3 class="demo-subtitle">Estados</h3>
|
|
285
|
+
<div class="demo-grid">
|
|
286
|
+
<div class="demo-item">
|
|
287
|
+
<div class="cmp-preview"><label class="checkbox"><input type="checkbox" /><span class="checkbox-indicator"><svg class="cbox__icon" viewBox="0 0 10 8" width="10" height="8" aria-hidden="true" focusable="false"><path d="M9.05823.198273 9.69185.801721 3.5417 7.25937.308228 3.86422.941848 3.26077 3.5417 5.99062 9.05823.198273Z" fill="currentColor"/></svg></span><span class="checkbox-label">Sin marcar</span></label></div>
|
|
288
|
+
<div class="demo-code">.checkbox</div>
|
|
289
|
+
</div>
|
|
290
|
+
<div class="demo-item">
|
|
291
|
+
<div class="cmp-preview"><label class="checkbox"><input type="checkbox" checked /><span class="checkbox-indicator"><svg class="cbox__icon" viewBox="0 0 10 8" width="10" height="8" aria-hidden="true" focusable="false"><path d="M9.05823.198273 9.69185.801721 3.5417 7.25937.308228 3.86422.941848 3.26077 3.5417 5.99062 9.05823.198273Z" fill="currentColor"/></svg></span><span class="checkbox-label">Marcado</span></label></div>
|
|
292
|
+
<div class="demo-code">.checkbox (checked)</div>
|
|
293
|
+
</div>
|
|
294
|
+
<div class="demo-item">
|
|
295
|
+
<div class="cmp-preview"><label class="checkbox"><input type="checkbox" disabled /><span class="checkbox-indicator"><svg class="cbox__icon" viewBox="0 0 10 8" width="10" height="8" aria-hidden="true" focusable="false"><path d="M9.05823.198273 9.69185.801721 3.5417 7.25937.308228 3.86422.941848 3.26077 3.5417 5.99062 9.05823.198273Z" fill="currentColor"/></svg></span><span class="checkbox-label">Disabled</span></label></div>
|
|
296
|
+
<div class="demo-code">.checkbox[disabled]</div>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
</section>
|
|
300
|
+
|
|
301
|
+
<section class="demo-section" id="radios">
|
|
302
|
+
<h2 class="demo-title">Radios</h2>
|
|
303
|
+
<p class="cmp-desc">Radio buttons con el patrón <code>.checkbox-radio</code>: el input nativo se oculta visualmente y el círculo se pinta con <code>label::before</code>. Clases en <code>themes/_base/_radios.css</code>.</p>
|
|
304
|
+
|
|
305
|
+
<h3 class="demo-subtitle">Grupo</h3>
|
|
306
|
+
<div class="demo-grid">
|
|
307
|
+
<div class="demo-item">
|
|
308
|
+
<div class="cmp-preview"><div class="checkbox-radio"><input id="cmp-radio-1" name="cmp-radio" type="radio" value="A" /><label for="cmp-radio-1"><i class="ico-radio"></i><span class="title-m">Opción A</span></label></div></div>
|
|
309
|
+
<div class="demo-code">.checkbox-radio</div>
|
|
310
|
+
</div>
|
|
311
|
+
<div class="demo-item">
|
|
312
|
+
<div class="cmp-preview"><div class="checkbox-radio"><input id="cmp-radio-2" name="cmp-radio" type="radio" value="B" checked /><label for="cmp-radio-2"><i class="ico-radio"></i><span class="title-m">Opción B (activa)</span></label></div></div>
|
|
313
|
+
<div class="demo-code">.checkbox-radio (checked)</div>
|
|
314
|
+
</div>
|
|
315
|
+
<div class="demo-item">
|
|
316
|
+
<div class="cmp-preview"><div class="checkbox-radio"><input id="cmp-radio-3" name="cmp-radio-2" type="radio" value="C" disabled /><label for="cmp-radio-3"><i class="ico-radio"></i><span class="title-m">Disabled</span></label></div></div>
|
|
317
|
+
<div class="demo-code">.checkbox-radio[disabled]</div>
|
|
318
|
+
</div>
|
|
319
|
+
</div>
|
|
320
|
+
</section>
|
|
321
|
+
|
|
322
|
+
<section class="demo-section" id="switches">
|
|
323
|
+
<h2 class="demo-title">Switches</h2>
|
|
324
|
+
<p class="cmp-desc">Interruptores on/off con el patrón <code>.checkbox-item-2</code>: pista rectangular y un <code>.checkbox-circle</code> que se desplaza al marcar. Clases en <code>themes/_base/_switches.css</code>.</p>
|
|
325
|
+
|
|
326
|
+
<h3 class="demo-subtitle">Estados</h3>
|
|
327
|
+
<div class="demo-grid">
|
|
328
|
+
<div class="demo-item">
|
|
329
|
+
<div class="cmp-preview"><div class="checkbox-item-2"><input id="cmp-switch-1" name="cmp-switch-1" type="checkbox" /><label for="cmp-switch-1"><div class="checkbox-circle"></div><span class="theta">Inactivo</span></label></div></div>
|
|
330
|
+
<div class="demo-code">.checkbox-item-2</div>
|
|
331
|
+
</div>
|
|
332
|
+
<div class="demo-item">
|
|
333
|
+
<div class="cmp-preview"><div class="checkbox-item-2"><input id="cmp-switch-2" name="cmp-switch-2" type="checkbox" checked /><label for="cmp-switch-2"><div class="checkbox-circle"></div><span class="theta">Activado</span></label></div></div>
|
|
334
|
+
<div class="demo-code">.checkbox-item-2 (checked)</div>
|
|
335
|
+
</div>
|
|
336
|
+
<div class="demo-item">
|
|
337
|
+
<div class="cmp-preview"><div class="checkbox-item-2"><input id="cmp-switch-3" name="cmp-switch-3" type="checkbox" disabled /><label for="cmp-switch-3"><div class="checkbox-circle"></div><span class="theta">Disabled</span></label></div></div>
|
|
338
|
+
<div class="demo-code">.checkbox-item-2[disabled]</div>
|
|
339
|
+
</div>
|
|
340
|
+
<div class="demo-item">
|
|
341
|
+
<div class="cmp-preview"><div class="checkbox-item-2 is-error"><input id="cmp-switch-4" name="cmp-switch-4" type="checkbox" /><label for="cmp-switch-4"><div class="checkbox-circle"></div><span class="theta">Error</span></label></div></div>
|
|
342
|
+
<div class="demo-code">.checkbox-item-2.is-error</div>
|
|
343
|
+
</div>
|
|
344
|
+
</div>
|
|
345
|
+
</section>
|
|
346
|
+
|
|
347
|
+
<section class="demo-section" id="forms">
|
|
348
|
+
<h2 class="demo-title">Formularios</h2>
|
|
349
|
+
<p class="cmp-desc">Composición de campos con label flotante + estado. <code>.form-group</code> apila verticalmente los campos; cada uno usa <code>.form-input-label-2</code> para el floating label y (opcionalmente) <code>.helper-text</code> para el mensaje de estado. Clases en <code>themes/_base/_forms.css</code>.</p>
|
|
350
|
+
|
|
351
|
+
<h3 class="demo-subtitle">Grupo de formulario</h3>
|
|
352
|
+
<div class="demo-grid">
|
|
353
|
+
<div class="demo-item">
|
|
354
|
+
<div class="cmp-preview"><div class="form-group"><div class="form-input-label-2"><input type="email" id="cmp-form-email" class="input" placeholder=" " /><label for="cmp-form-email">Email</label></div></div></div>
|
|
355
|
+
<div class="demo-code">.form-group > .form-input-label-2</div>
|
|
356
|
+
</div>
|
|
357
|
+
<div class="demo-item">
|
|
358
|
+
<div class="cmp-preview"><div class="form-group"><div class="form-input-label-2"><textarea id="cmp-form-msg" class="input" rows="3" placeholder=" "></textarea><label for="cmp-form-msg">Mensaje</label></div></div></div>
|
|
359
|
+
<div class="demo-code">.form-group (con textarea)</div>
|
|
360
|
+
</div>
|
|
361
|
+
<div class="demo-item">
|
|
362
|
+
<div class="cmp-preview"><div class="form-group"><div class="form-input-label-2"><input type="text" id="cmp-form-err" class="input input-error" value="" placeholder=" " /><label for="cmp-form-err">Nombre</label></div><span class="helper-text helper-text-error">Este campo es obligatorio</span></div></div>
|
|
363
|
+
<div class="demo-code">.form-group (con helper-text)</div>
|
|
364
|
+
</div>
|
|
365
|
+
</div>
|
|
366
|
+
</section>
|
|
367
|
+
|
|
368
|
+
<section class="demo-section" id="containers">
|
|
369
|
+
<h2 class="demo-title">Containers</h2>
|
|
370
|
+
<p class="cmp-desc">Contenedores centrados con <code>max-width</code> responsivo y/o fijo. <code>.container</code> escala con los breakpoints; <code>.container-2</code> es más estrecho; las variantes <code>.container-640</code>, <code>.container-512</code> y <code>.container-360</code> fijan un ancho concreto. Clases en <code>themes/_base/_containers.css</code>.</p>
|
|
371
|
+
|
|
372
|
+
<h3 class="demo-subtitle">Responsivos</h3>
|
|
373
|
+
<div class="demo-grid">
|
|
374
|
+
<div class="demo-item">
|
|
375
|
+
<div class="cmp-preview"><div class="container" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">.container</div></div>
|
|
376
|
+
<div class="demo-code">.container</div>
|
|
377
|
+
</div>
|
|
378
|
+
<div class="demo-item">
|
|
379
|
+
<div class="cmp-preview"><div class="container-2" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">.container-2</div></div>
|
|
380
|
+
<div class="demo-code">.container-2</div>
|
|
381
|
+
</div>
|
|
382
|
+
</div>
|
|
383
|
+
<h3 class="demo-subtitle">Anchos fijos</h3>
|
|
384
|
+
<div class="demo-grid">
|
|
385
|
+
<div class="demo-item">
|
|
386
|
+
<div class="cmp-preview"><div class="container-640" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">.container-640</div></div>
|
|
387
|
+
<div class="demo-code">.container-640</div>
|
|
388
|
+
</div>
|
|
389
|
+
<div class="demo-item">
|
|
390
|
+
<div class="cmp-preview"><div class="container-512" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">.container-512</div></div>
|
|
391
|
+
<div class="demo-code">.container-512</div>
|
|
392
|
+
</div>
|
|
393
|
+
<div class="demo-item">
|
|
394
|
+
<div class="cmp-preview"><div class="container-360" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">.container-360</div></div>
|
|
395
|
+
<div class="demo-code">.container-360</div>
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
</section>
|
|
399
|
+
|
|
400
|
+
<section class="demo-section" id="grid">
|
|
401
|
+
<h2 class="demo-title">Grid</h2>
|
|
402
|
+
<p class="cmp-desc">Utilidades de CSS Grid inspiradas en Tailwind. El contenedor debe tener <code>display:grid</code> y usar <code>.hg-grid-cols-N</code> para definir N columnas; los hijos usan <code>.hg-col-span-N</code> para ocupar varias. Con el prefijo <code>md:</code> se activan a partir de 768 px. Clases en <code>themes/_base/objects/_grid.css</code>.</p>
|
|
403
|
+
|
|
404
|
+
<h3 class="demo-subtitle">Columnas iguales</h3>
|
|
405
|
+
<div class="demo-grid">
|
|
406
|
+
<div class="demo-item">
|
|
407
|
+
<div class="cmp-preview"><div class="hg-grid-cols-3" style="display:grid; gap:var(--hg-spacing-8);"><div style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">1</div><div style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">2</div><div style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">3</div></div></div>
|
|
408
|
+
<div class="demo-code">.hg-grid-cols-3</div>
|
|
409
|
+
</div>
|
|
410
|
+
<div class="demo-item">
|
|
411
|
+
<div class="cmp-preview"><div class="hg-grid-cols-4" style="display:grid; gap:var(--hg-spacing-8);"><div style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">1</div><div style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">2</div><div style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">3</div><div style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">4</div></div></div>
|
|
412
|
+
<div class="demo-code">.hg-grid-cols-4</div>
|
|
413
|
+
</div>
|
|
414
|
+
</div>
|
|
415
|
+
<h3 class="demo-subtitle">Col-span</h3>
|
|
416
|
+
<div class="demo-grid">
|
|
417
|
+
<div class="demo-item">
|
|
418
|
+
<div class="cmp-preview"><div class="hg-grid-cols-12" style="display:grid; gap:var(--hg-spacing-8);"><div class="hg-col-span-8" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">span 8</div><div class="hg-col-span-4" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">span 4</div></div></div>
|
|
419
|
+
<div class="demo-code">.hg-grid-cols-12 > .hg-col-span-{8,4}</div>
|
|
420
|
+
</div>
|
|
421
|
+
<div class="demo-item">
|
|
422
|
+
<div class="cmp-preview"><div class="hg-grid-cols-12" style="display:grid; gap:var(--hg-spacing-8);"><div class="hg-col-span-6" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">span 6</div><div class="hg-col-span-6" style="background:var(--hg-color-light-grey); padding:var(--hg-spacing-16);">span 6</div></div></div>
|
|
423
|
+
<div class="demo-code">.hg-grid-cols-12 > .hg-col-span-6</div>
|
|
424
|
+
</div>
|
|
425
|
+
</div>
|
|
426
|
+
</section>
|
|
427
|
+
</main>
|
|
428
|
+
</body>
|
|
429
|
+
</html>
|
package/dist/developer-guide.md
CHANGED
|
@@ -94,14 +94,14 @@ Definidos en `config.colors`. Cada color genera una variable `--hg-color-{nombre
|
|
|
94
94
|
```css
|
|
95
95
|
/* Uso en CSS */
|
|
96
96
|
color: var(--hg-color-primary);
|
|
97
|
-
background: var(--hg-color-
|
|
97
|
+
background: var(--hg-color-bg-cream);
|
|
98
98
|
border-color: var(--hg-color-error);
|
|
99
99
|
|
|
100
100
|
/* Uso inline en HTML (cuando no hay clase específica) */
|
|
101
101
|
<div style="color: var(--hg-color-dark-grey)">Texto</div>
|
|
102
102
|
```
|
|
103
103
|
|
|
104
|
-
Colores disponibles por defecto: `white`, `black`, `dark-grey`, `middle-grey`, `light-grey`, `grey-ultra`, `orange`, `mustard`, `primary`, `error`, `info`, `success`, `warning`, `feel`, `feel-dark`, `
|
|
104
|
+
Colores disponibles por defecto: `white`, `black`, `dark-grey`, `middle-grey`, `light-grey`, `grey-ultra`, `orange`, `mustard`, `primary`, `error`, `info`, `success`, `warning`, `feel`, `feel-dark`, `silver`, `gold`, `platinum`, `bg-light`, `bg-cream`.
|
|
105
105
|
|
|
106
106
|
### Spacing
|
|
107
107
|
|
|
@@ -129,7 +129,7 @@ Los valores px se convierten automáticamente a rem (base 16px).
|
|
|
129
129
|
Las variables tipográficas se generan automáticamente y se deduplicam para evitar repeticiones:
|
|
130
130
|
|
|
131
131
|
```css
|
|
132
|
-
--hg-typo-font-family-primary: arial, sans-serif;
|
|
132
|
+
--hg-typo-font-family-primary-regular: arial, sans-serif;
|
|
133
133
|
--hg-typo-font-family-secondary: "ms-serif", serif;
|
|
134
134
|
--hg-typo-font-size-12: 0.75rem;
|
|
135
135
|
--hg-typo-font-size-14: 0.875rem;
|
|
@@ -393,7 +393,7 @@ Las clases son mobile-first. Los valores base aplican a mobile y un media query
|
|
|
393
393
|
```css
|
|
394
394
|
/* CSS generado (ejemplo) */
|
|
395
395
|
.hg-h2 {
|
|
396
|
-
font-family: var(--hg-typo-font-family-primary);
|
|
396
|
+
font-family: var(--hg-typo-font-family-primary-regular);
|
|
397
397
|
font-weight: var(--hg-typo-font-weight-900);
|
|
398
398
|
font-size: var(--hg-typo-font-size-18); /* mobile */
|
|
399
399
|
line-height: var(--hg-typo-line-height-1-976);
|
|
@@ -570,7 +570,7 @@ Clases para mantener proporciones en contenedores.
|
|
|
570
570
|
|
|
571
571
|
```html
|
|
572
572
|
<header class="hg-position-sticky hg-z-50 hg-d-flex hg-justify-between hg-items-center p-16"
|
|
573
|
-
style="top: 0; background: var(--hg-color-white); border-bottom: 1px solid var(--hg-color-
|
|
573
|
+
style="top: 0; background: var(--hg-color-white); border-bottom: 1px solid var(--hg-color-middle-grey);">
|
|
574
574
|
<span class="hg-title-l-b">Logo</span>
|
|
575
575
|
<nav class="hg-d-flex hg-gap-24">
|
|
576
576
|
<a class="hg-text-m" href="#">Inicio</a>
|
|
@@ -585,7 +585,7 @@ Clases para mantener proporciones en contenedores.
|
|
|
585
585
|
```html
|
|
586
586
|
<div class="row">
|
|
587
587
|
<aside class="col-xs-12 col-md-3 hg-d-none md:hg-d-block p-16"
|
|
588
|
-
style="border-right: 1px solid var(--hg-color-
|
|
588
|
+
style="border-right: 1px solid var(--hg-color-middle-grey);">
|
|
589
589
|
<nav class="hg-d-flex hg-flex-column hg-gap-8">
|
|
590
590
|
<a class="hg-text-m" href="#">Sección 1</a>
|
|
591
591
|
<a class="hg-text-m" href="#">Sección 2</a>
|
|
@@ -601,7 +601,7 @@ Clases para mantener proporciones en contenedores.
|
|
|
601
601
|
### Footer multicolumna
|
|
602
602
|
|
|
603
603
|
```html
|
|
604
|
-
<footer class="pt-48 pb-24" style="background: var(--hg-color-
|
|
604
|
+
<footer class="pt-48 pb-24" style="background: var(--hg-color-grey-ultra); color: var(--hg-color-white);">
|
|
605
605
|
<div class="row hg-px-16 md:hg-px-32 hg-gap-24">
|
|
606
606
|
<div class="col-xs-12 col-md-4">
|
|
607
607
|
<h4 class="hg-title-l-b" style="color: var(--hg-color-white);">Empresa</h4>
|