kaizen-lib 0.2.6 → 0.2.8

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 CHANGED
@@ -242,7 +242,9 @@ Sin `title` no hay nombre accesible propio — pasá `ariaLabel`. `size` (`sm`|`
242
242
  fija el ancho máximo del panel; `maxWidth` lo pisa con un valor explícito. `disableClose`
243
243
  bloquea la X, el overlay y `Escape` a la vez — para una operación en curso, no para "no
244
244
  quiero que cierre nunca". `dismissOnOverlay={false}` sólo desactiva el click afuera, para
245
- un formulario a medio llenar que sigue queriendo cerrar con la X o `Escape`.
245
+ un formulario a medio llenar que sigue queriendo cerrar con la X o `Escape`. `closeLabel`
246
+ (default `'Cerrar'`) es el nombre accesible de la X — mismo criterio que `etiqueta` de
247
+ `LangSelector`: un consumidor con más de un idioma lo pisa, el resto no lo toca.
246
248
 
247
249
  Lo que **no** trae: un `placement` lateral (drawer) y un padding compacto de cuerpo son
248
250
  casos de un solo consumidor cada uno (`components/ui/Dialog` de valle-verde) — se resuelven
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kaizen-lib",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Tokens y componentes compartidos entre los fronts de Kaizen.",
5
5
  "license": "MIT",
6
6
  "author": "Nicolás Sandobal",
package/src/ui/Modal.tsx CHANGED
@@ -111,11 +111,20 @@ const Descripcion = styled.p`
111
111
  color: ${fg.muted};
112
112
  `;
113
113
 
114
- const Body = styled.div<{ $flush: boolean }>`
114
+ const Body = styled.div<{ $flush: boolean; $conFooter: boolean }>`
115
115
  flex: 1 1 auto;
116
116
  min-height: 0;
117
117
  overflow-y: auto;
118
- padding: ${({ $flush }) => ($flush ? space[6] : `0 ${space[6]} ${space[2]}`)};
118
+ padding: ${({ $flush, $conFooter }) => {
119
+ const arriba = $flush ? space[6] : '0';
120
+ /* Con footer, el aire de abajo lo pone el footer (su propio padding-top);
121
+ duplicarlo acá deja un salto más grande que el de los costados. Sin
122
+ footer, el cuerpo es lo último del panel y necesita el mismo aire que
123
+ los costados — dejarlo en el valor reducido pensado para el otro caso
124
+ deja un borde inferior visiblemente más fino que el resto. */
125
+ const abajo = $conFooter ? space[2] : space[6];
126
+ return `${arriba} ${space[6]} ${abajo}`;
127
+ }};
119
128
  `;
120
129
 
121
130
  const Footer = styled.footer`
@@ -176,6 +185,12 @@ type Props = {
176
185
  maxWidth?: string;
177
186
  /** Botón de cierre en la esquina. Default `true`. */
178
187
  showClose?: boolean;
188
+ /**
189
+ * Nombre accesible del botón de cierre. Default `'Cerrar'` — mismo criterio
190
+ * que `LangSelector.etiqueta`: un consumidor con más de un idioma lo pisa,
191
+ * el resto no necesita tocarlo.
192
+ */
193
+ closeLabel?: string;
179
194
  /** Click afuera del panel cierra. Default `true`. */
180
195
  dismissOnOverlay?: boolean;
181
196
  /** Operación en curso: ni la X, ni el overlay, ni Escape cierran. */
@@ -208,6 +223,7 @@ export function Modal({
208
223
  size = 'md',
209
224
  maxWidth,
210
225
  showClose = true,
226
+ closeLabel = 'Cerrar',
211
227
  dismissOnOverlay = true,
212
228
  disableClose = false,
213
229
  ariaLabel,
@@ -318,7 +334,7 @@ export function Modal({
318
334
  onKeyDown={manejarTab}
319
335
  >
320
336
  {showClose ? (
321
- <Cerrar type="button" onClick={onClose} disabled={disableClose} aria-label="Cerrar">
337
+ <Cerrar type="button" onClick={onClose} disabled={disableClose} aria-label={closeLabel}>
322
338
  ×
323
339
  </Cerrar>
324
340
  ) : null}
@@ -332,7 +348,7 @@ export function Modal({
332
348
  </Header>
333
349
  ) : null}
334
350
 
335
- <Body $flush={!title}>{children}</Body>
351
+ <Body $flush={!title} $conFooter={Boolean(footer)}>{children}</Body>
336
352
 
337
353
  {footer ? <Footer>{footer}</Footer> : null}
338
354
  </Panel>