@khipu/design-system 0.3.5-alpha.32 → 0.3.5-alpha.34

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.
@@ -15,7 +15,7 @@
15
15
  *
16
16
  * AUTO-GENERATED FILE - DO NOT EDIT MANUALLY
17
17
  * Source: design-system/src/tokens/tokens.json
18
- * Generated: 2026-10-07T16:45:16.034Z
18
+ * Generated: 2026-10-09T13:21:42.374Z
19
19
  *
20
20
  * To regenerate:
21
21
  * cd design-system && npm run tokens:generate
@@ -5128,7 +5128,10 @@
5128
5128
  }
5129
5129
 
5130
5130
  /* ── Text-transform utilities ── */
5131
+ /* Also declares --kds-button-text-transform: .kds-btn reads that variable, so the
5132
+ utility wins on buttons without a specificity fight (button.kds-btn is 0-1-1). */
5131
5133
  .kds-theme-root .kds-text-transform-none {
5134
+ --kds-button-text-transform: none;
5132
5135
  text-transform: none;
5133
5136
  }
5134
5137
 
@@ -6470,18 +6473,21 @@
6470
6473
  }
6471
6474
 
6472
6475
  .kds-theme-root .kds-expand-toggle[aria-expanded="true"] i {
6473
- transform: rotate(180deg);
6476
+ /* The `top` nudge is tuned for the closed chevron (expand_more). Rotated, the up-chevron
6477
+ reads low with the same nudge, so the open state takes it back. It lives in the transform
6478
+ (not `top`) so it animates together with the rotation instead of jumping. */
6479
+ transform: translateY(-0.09em) rotate(180deg);
6474
6480
  }
6475
6481
 
6476
6482
  .kds-theme-root .kds-expand-panel {
6477
6483
  overflow: hidden;
6478
- transition: max-height 0.28s ease, margin-top 0.28s ease;
6479
- max-height: 0;
6480
- }
6481
-
6482
- .kds-theme-root .kds-expand-panel[hidden] {
6483
- display: block;
6484
6484
  max-height: 0;
6485
+ /* Collapsed content is out of the accessibility tree and the tab order without the
6486
+ `hidden` attribute: the global `[hidden]` rule (forced, !important) would cut the
6487
+ max-height transition. visibility flips at the end of the close, so the collapse
6488
+ still animates. */
6489
+ visibility: hidden;
6490
+ transition: max-height 0.28s ease, margin-top 0.28s ease, visibility 0s linear 0.28s;
6485
6491
  }
6486
6492
 
6487
6493
  .kds-theme-root .kds-expand-panel.open {
@@ -6490,6 +6496,8 @@
6490
6496
  which overrides this and prevents clipping regardless of content length. */
6491
6497
  max-height: 2000px;
6492
6498
  margin-top: 0;
6499
+ visibility: visible;
6500
+ transition-delay: 0s;
6493
6501
  }
6494
6502
 
6495
6503
  /* ========================================
@@ -6796,6 +6804,43 @@
6796
6804
  to { transform: rotate(360deg); }
6797
6805
  }
6798
6806
 
6807
+ /* Dots loader: three dots pulsing in sequence, for an in-progress status inline with
6808
+ text. Color follows currentColor so the consumer sets it with a color utility. */
6809
+ .kds-theme-root .kds-dots-loader {
6810
+ align-items: center;
6811
+ display: inline-flex;
6812
+ gap: var(--kds-spacing-0-5);
6813
+ vertical-align: middle;
6814
+ }
6815
+
6816
+ .kds-theme-root .kds-dots-loader > span {
6817
+ animation: kds-dots-pulse 1.2s ease-in-out infinite;
6818
+ background: currentColor;
6819
+ border-radius: var(--kds-radius-full);
6820
+ height: var(--kds-spacing-0-75);
6821
+ width: var(--kds-spacing-0-75);
6822
+ }
6823
+
6824
+ .kds-theme-root .kds-dots-loader > span:nth-child(2) {
6825
+ animation-delay: 0.15s;
6826
+ }
6827
+
6828
+ .kds-theme-root .kds-dots-loader > span:nth-child(3) {
6829
+ animation-delay: 0.3s;
6830
+ }
6831
+
6832
+ @keyframes kds-dots-pulse {
6833
+ 0%, 80%, 100% { opacity: 0.25; }
6834
+ 40% { opacity: 1; }
6835
+ }
6836
+
6837
+ @media (prefers-reduced-motion: reduce) {
6838
+ .kds-theme-root .kds-dots-loader > span {
6839
+ animation: none;
6840
+ opacity: 0.6;
6841
+ }
6842
+ }
6843
+
6799
6844
  /* ========================================
6800
6845
  14 - BOTTOM SHEET (.kds-bottom-sheet)
6801
6846
  Modal bottom sheet for mobile confirmations
@@ -8230,11 +8275,52 @@
8230
8275
  - Valor fijo, sin vh/dvh: en un iframe (KTUF-239) el viewport es el propio iframe, cuyo
8231
8276
  alto lo da el RESIZE del contenido; un mínimo relativo al viewport se realimenta.
8232
8277
  - El contenido directo (form) crece para que la acción baje dentro de él y no compita
8233
- con el `margin-top: auto` de .kds-card-version. */
8278
+ con el `margin-top: auto` de .kds-card-version.
8279
+ - En pantallas bajas (iframes chicos de comercios, teléfonos chicos) el mínimo baja por
8280
+ escalones, ver abajo. */
8234
8281
  .kds-theme-root .kds-screen > .kds-card-elevated.kds-card-elevated--action {
8235
8282
  min-height: calc(36rem + 2 * var(--kds-spacing-3));
8236
8283
  }
8237
8284
 
8285
+ /* Mínimo del card en pantallas bajas. Algunos comercios embeben el flujo en iframes de alto
8286
+ fijo y reducido: un mínimo de 624px obligaba a scrollear aunque el contenido del paso
8287
+ cupiera. Regla: un escalón aplica solo si la pantalla completa (header + card con ese
8288
+ mínimo + footer seguro + márgenes del stage) cabe en el alto; si no, baja al siguiente.
8289
+ Medido en khenshin-web con su .kds-secure-footer (80px), el caso más alto:
8290
+ - 624px (36rem + padding): pantalla de ~971px en teléfono y ~999px en desktop.
8291
+ - 400px (22rem + padding): pantalla de ~747px en teléfono y ~775px en desktop.
8292
+ - Debajo de eso, sin mínimo: el card mide lo que su contenido.
8293
+ Los umbrales son exactamente esos altos (como los mide el HeightReporter de khenshin-web:
8294
+ contenido del flow + padding del stage), sin holgura: el mínimo nunca agrega scroll en
8295
+ una pantalla o iframe fijo. Con alto automático (KTUF-239, `autoHeight`) el alto que
8296
+ resulta de un escalón cae justo en su umbral, así que se queda ahí y no oscila. Con un
8297
+ header más bajo (sin fila de detalle), sin footer seguro (`showSecureFooter: false`) o
8298
+ sin header (--flush-top) la pantalla mide menos que su umbral: con alto automático el card
8299
+ termina sin mínimo (vuelve a crecer por paso, sin scroll). */
8300
+ @media (max-width: 767px) and (max-height: 970.98px) {
8301
+ .kds-theme-root .kds-screen > .kds-card-elevated.kds-card-elevated--action {
8302
+ min-height: calc(22rem + 2 * var(--kds-spacing-3));
8303
+ }
8304
+ }
8305
+
8306
+ @media (max-width: 767px) and (max-height: 746.98px) {
8307
+ .kds-theme-root .kds-screen > .kds-card-elevated.kds-card-elevated--action {
8308
+ min-height: 0;
8309
+ }
8310
+ }
8311
+
8312
+ @media (min-width: 768px) and (max-height: 998.98px) {
8313
+ .kds-theme-root .kds-screen > .kds-card-elevated.kds-card-elevated--action {
8314
+ min-height: calc(22rem + 2 * var(--kds-spacing-3));
8315
+ }
8316
+ }
8317
+
8318
+ @media (min-width: 768px) and (max-height: 774.98px) {
8319
+ .kds-theme-root .kds-screen > .kds-card-elevated.kds-card-elevated--action {
8320
+ min-height: 0;
8321
+ }
8322
+ }
8323
+
8238
8324
  .kds-theme-root .kds-card-elevated--action > form {
8239
8325
  flex-grow: 1;
8240
8326
  display: flex;