@khipu/design-system 0.3.3 → 0.3.5-alpha.1

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-08-12T20:53:27.253Z
18
+ * Generated: 2026-08-12T21:54:49.906Z
19
19
  *
20
20
  * To regenerate:
21
21
  * cd design-system && npm run tokens:generate
@@ -687,6 +687,37 @@
687
687
  --outline: var(--kds-color-input-border);
688
688
  --outline-variant: var(--kds-border-light);
689
689
 
690
+ /* ========================================
691
+ EXTENDED BRAND ROLES
692
+
693
+ Several roles used to resolve straight to --kds-color-primary-main, which
694
+ meant a brand could not have (say) a green link next to a navy button.
695
+ They are split into their own tokens:
696
+
697
+ --kds-color-accent form icon, expand toggle, checkbox/radio
698
+ --kds-color-accent-soft form icon backdrop
699
+ --kds-font-family-heading display/heading tier
700
+ --kds-invoice-amount-font-family
701
+ --kds-invoice-amount-color
702
+ --kds-button-font-family
703
+ --kds-button-text-transform
704
+ --kds-button-primary-bg
705
+ --kds-button-primary-bg-hover
706
+
707
+ These are deliberately NOT declared here. Each one is consumed as
708
+ var(--new-token, <the expression it used to be>), so the default is
709
+ supplied at the point of use.
710
+
711
+ Declaring them as :root aliases looks equivalent but is not. A custom
712
+ property is substituted on the element that DECLARES it, so
713
+ `--kds-color-accent: var(--kds-color-primary-main)` on :root freezes to
714
+ whatever the primary is at :root. A brand that sets its primary further
715
+ down the tree (which is how khenshin-web applies merchant styles) would
716
+ inherit the already-resolved Khipu purple and lose its own colour. Using
717
+ them as fallbacks resolves against the primary in effect at the consuming
718
+ element, so unbranded output and existing brands are both unchanged.
719
+ ======================================== */
720
+
690
721
  /* ========================================
691
722
  ONBOARDING COMPONENTS TOKENS
692
723
  ======================================== */
@@ -1012,12 +1043,12 @@
1012
1043
  width: 100%;
1013
1044
 
1014
1045
  /* Typography - Using design tokens */
1015
- font-family: var(--kds-font-family-secondary);
1046
+ font-family: var(--kds-button-font-family, var(--kds-font-family-secondary));
1016
1047
  font-weight: var(--kds-font-weight-medium); /* 500 */
1017
1048
  font-size: var(--kds-typography-button-font-size); /* 0.875rem = 14px */
1018
1049
  line-height: var(--kds-typography-button-line-height); /* 1.5 */
1019
1050
  letter-spacing: var(--kds-typography-button-letter-spacing); /* 0.46px */
1020
- text-transform: uppercase;
1051
+ text-transform: var(--kds-button-text-transform, uppercase);
1021
1052
 
1022
1053
  /* Spacing - Using design tokens */
1023
1054
  padding: var(--kds-spacing-button-padding); /* 0 16px */
@@ -1074,16 +1105,19 @@
1074
1105
  /* Primary button - Khipu purple */
1075
1106
  .kds-theme-root button.kds-btn-primary,
1076
1107
  .kds-theme-root a.kds-btn-primary {
1077
- background: var(--kds-color-primary-main); /* #8347AD */
1108
+ background: var(--kds-button-primary-bg, var(--kds-color-primary-main)); /* #8347AD */
1078
1109
  color: var(--kds-color-primary-contrast); /* #FFF light / dark-purple on dark (lavender bg) */
1079
1110
  border: none;
1080
1111
  box-shadow: 0 1px 2px rgba(131, 71, 173, .25);
1081
1112
  }
1082
1113
 
1083
- /* Hover State - background más oscuro */
1114
+ /* Hover State - background más oscuro.
1115
+ Its own token, not primary-dark: once a brand sets the button background
1116
+ independently of the primary, deriving hover from the primary would snap it
1117
+ back to the brand's other colour on the first pointer-over. */
1084
1118
  .kds-theme-root button.kds-btn-primary:hover:not(:disabled),
1085
1119
  .kds-theme-root a.kds-btn-primary:hover:not(:disabled) {
1086
- background: var(--kds-color-primary-dark); /* #5B3179 */
1120
+ background: var(--kds-button-primary-bg-hover, var(--kds-color-primary-dark)); /* #5B3179 */
1087
1121
  }
1088
1122
 
1089
1123
  /* Active/Focus State */
@@ -1091,7 +1125,7 @@
1091
1125
  .kds-theme-root button.kds-btn-primary:focus-visible:not(:disabled),
1092
1126
  .kds-theme-root a.kds-btn-primary:active:not(:disabled),
1093
1127
  .kds-theme-root a.kds-btn-primary:focus-visible:not(:disabled) {
1094
- background: var(--kds-color-primary-dark);
1128
+ background: var(--kds-button-primary-bg-hover, var(--kds-color-primary-dark));
1095
1129
  }
1096
1130
 
1097
1131
  /* Dark mode: the button is a light lavender with dark text, so hover/active must
@@ -2424,6 +2458,12 @@
2424
2458
  /* Llena y centra dentro de contenedores flex (pantalla de carga); en flujo
2425
2459
  normal (contenedor no-flex) se reduce a su contenido. */
2426
2460
  flex: 1 1 auto;
2461
+ /* Alto propio: el loader es contenido minimo por definicion, asi que sin esto la
2462
+ card queda del alto del spinner y se lee como un recorte. Ocupa el body completo
2463
+ de un telefono para que la pantalla de carga se lea como una pantalla y no como
2464
+ una franja. Va aca y no en la card para que el minimo aplique solo a la carga:
2465
+ el resto de las pantallas crece con su contenido. */
2466
+ min-height: 36rem;
2427
2467
  }
2428
2468
 
2429
2469
  .kds-theme-root .kds-secure-loader-text {
@@ -3236,7 +3276,7 @@
3236
3276
  /* Checked state */
3237
3277
  .kds-theme-root label.checkbox input[type="checkbox"]:checked,
3238
3278
  .kds-theme-root label.radio input[type="radio"]:checked {
3239
- accent-color: var(--primary);
3279
+ accent-color: var(--kds-color-accent, var(--primary));
3240
3280
  }
3241
3281
 
3242
3282
  /* Disabled state */
@@ -5005,9 +5045,12 @@
5005
5045
  background-color: var(--kds-color-info-soft);
5006
5046
  }
5007
5047
 
5008
- /* ── Typography variants ── */
5048
+ /* ── Typography variants ──
5049
+ The display/heading tier resolves through --kds-font-family-heading so a
5050
+ brand can pair a display face with a different body face. Unset by default,
5051
+ so it falls through to the primary family and output is unchanged. */
5009
5052
  .kds-theme-root .kds-text-display1 {
5010
- font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
5053
+ font-family: var(--kds-font-family-heading, var(--kds-font-family-primary, 'Public Sans', sans-serif));
5011
5054
  font-size: var(--kds-font-size-4xl, 36px);
5012
5055
  font-weight: var(--kds-font-weight-bold, 700);
5013
5056
  line-height: var(--kds-line-height-tight, 1.2);
@@ -5015,7 +5058,7 @@
5015
5058
  }
5016
5059
 
5017
5060
  .kds-theme-root .kds-text-display2 {
5018
- font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
5061
+ font-family: var(--kds-font-family-heading, var(--kds-font-family-primary, 'Public Sans', sans-serif));
5019
5062
  font-size: var(--kds-font-size-3xl, 30px);
5020
5063
  font-weight: var(--kds-font-weight-bold, 700);
5021
5064
  line-height: var(--kds-line-height-tight, 1.2);
@@ -5023,21 +5066,21 @@
5023
5066
  }
5024
5067
 
5025
5068
  .kds-theme-root .kds-text-heading1 {
5026
- font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
5069
+ font-family: var(--kds-font-family-heading, var(--kds-font-family-primary, 'Public Sans', sans-serif));
5027
5070
  font-size: var(--kds-font-size-2xl, 24px);
5028
5071
  font-weight: var(--kds-font-weight-semibold, 600);
5029
5072
  line-height: var(--kds-line-height-snug, 1.375);
5030
5073
  }
5031
5074
 
5032
5075
  .kds-theme-root .kds-text-heading2 {
5033
- font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
5076
+ font-family: var(--kds-font-family-heading, var(--kds-font-family-primary, 'Public Sans', sans-serif));
5034
5077
  font-size: var(--kds-font-size-xl, 20px);
5035
5078
  font-weight: var(--kds-font-weight-semibold, 600);
5036
5079
  line-height: var(--kds-line-height-snug, 1.375);
5037
5080
  }
5038
5081
 
5039
5082
  .kds-theme-root .kds-text-heading3 {
5040
- font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
5083
+ font-family: var(--kds-font-family-heading, var(--kds-font-family-primary, 'Public Sans', sans-serif));
5041
5084
  font-size: var(--kds-font-size-lg, 18px);
5042
5085
  font-weight: var(--kds-font-weight-semibold, 600);
5043
5086
  line-height: var(--kds-line-height-normal, 1.5);
@@ -6262,7 +6305,7 @@
6262
6305
  irregular arriba (pegado al resumen) y abajo (~26px hasta el panel). Con height
6263
6306
  auto el botón ajusta a su contenido y el ritmo lo gobiernan los márgenes. */
6264
6307
  height: auto;
6265
- color: var(--kds-color-primary-main);
6308
+ color: var(--kds-color-accent, var(--kds-color-primary-main));
6266
6309
  font-weight: var(--kds-font-weight-medium);
6267
6310
  font-size: var(--kds-font-size-sm);
6268
6311
  cursor: pointer;
@@ -7092,11 +7135,13 @@
7092
7135
  }
7093
7136
 
7094
7137
  .kds-theme-root .kds-invoice-amount {
7138
+ /* inherit: the amount had no family of its own before, it took the body's. */
7139
+ font-family: var(--kds-invoice-amount-font-family, inherit);
7095
7140
  font-weight: var(--kds-font-weight-semibold);
7096
7141
  font-size: var(--kds-font-size-3xl);
7097
7142
  line-height: var(--kds-line-height-tight);
7098
7143
  letter-spacing: var(--kds-letter-spacing-wide);
7099
- color: var(--kds-color-gray-900);
7144
+ color: var(--kds-invoice-amount-color, var(--kds-color-gray-900));
7100
7145
  margin: 0;
7101
7146
  }
7102
7147
 
@@ -7179,8 +7224,23 @@
7179
7224
  padding: var(--kds-spacing-0-5);
7180
7225
  }
7181
7226
 
7227
+ /* Titulo del body de la card: alineado a la izquierda, sin importar que el consumidor
7228
+ traiga .kds-text-center. Va con especificidad de contexto (screen + card) a proposito:
7229
+ el centrado se venia pidiendo app por app y el resultado era inconsistente entre
7230
+ pantallas. Si alguna necesita centrarlo, el modificador explicito es
7231
+ .kds-card-title--centered. */
7232
+ .kds-theme-root .kds-screen > .kds-card-elevated :is(h1, .kds-card-title) {
7233
+ text-align: left;
7234
+ }
7235
+
7236
+ .kds-theme-root .kds-screen > .kds-card-elevated :is(h1, .kds-card-title).kds-card-title--centered {
7237
+ text-align: center;
7238
+ }
7239
+
7182
7240
  /* -- Card Title -- */
7183
7241
  .kds-theme-root .kds-card-title {
7242
+ /* inherit: the card title had no family of its own before. */
7243
+ font-family: var(--kds-font-family-heading, inherit);
7184
7244
  font-weight: var(--kds-font-weight-semibold);
7185
7245
  font-size: var(--kds-font-size-base);
7186
7246
  line-height: 1.5;
@@ -9062,7 +9122,11 @@
9062
9122
 
9063
9123
  .kds-theme-root .kds-form-icon-box {
9064
9124
  align-items: center;
9065
- background: var(--kds-color-background-brand-subtle, #f0f0fa);
9125
+ background: var(--kds-color-accent-soft, var(--kds-color-background-brand-subtle, #f0f0fa));
9126
+ /* The glyph inherits this, so the icon tracks the accent role without the
9127
+ markup having to name a colour utility. Falls back to the primary, which
9128
+ is what the .kds-text-primary utility on the glyph resolved to. */
9129
+ color: var(--kds-color-accent, var(--kds-color-primary-main));
9066
9130
  border-radius: var(--kds-radius-md);
9067
9131
  display: flex;
9068
9132
  height: 52px;