@khipu/design-system 0.1.0-alpha.52 → 0.1.0-alpha.54

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.
@@ -11,7 +11,7 @@
11
11
  *
12
12
  * AUTO-GENERATED FILE - DO NOT EDIT MANUALLY
13
13
  * Source: design-system/src/tokens/tokens.json
14
- * Generated: 2026-04-28T15:56:42.052Z
14
+ * Generated: 2026-04-30T18:22:01.744Z
15
15
  *
16
16
  * To regenerate:
17
17
  * cd design-system && npm run tokens:generate
@@ -35,6 +35,8 @@
35
35
  --kds-color-primary-selected: rgba(131, 71, 173, 0.08);
36
36
  --kds-color-primary-focus: rgba(131, 71, 173, 0.12);
37
37
  --kds-color-primary-focus-visible: rgba(131, 71, 173, 0.30);
38
+ --kds-color-primary-outlined-border-light: rgba(131, 71, 173, 0.20);
39
+ --kds-color-primary-outlined-border: rgba(131, 71, 173, 0.50);
38
40
 
39
41
  /* Secondary palette */
40
42
  --kds-color-secondary-main: #3CB4E5;
@@ -640,7 +642,8 @@ body.dark {
640
642
 
641
643
  /* Extended semantic colors */
642
644
  --kds-color-info-soft: #EFF6FF; /* Alias for info backgrounds */
643
- --kds-color-success-soft: #ECFDF5; /* Success mark and borders */
645
+ --kds-color-success-soft: #ECFDF5; /* Success soft background */
646
+ --kds-color-success-border-light: #BBE2C4; /* Subtle success border for copied/confirmed states */
644
647
 
645
648
  /* Border colors */
646
649
  --kds-color-border-subtle: #F3F4F6; /* Very light border for cards/rows (origin --rule) */
@@ -669,6 +672,19 @@ body.dark {
669
672
  /* Status Block */
670
673
  --kds-status-icon-size: var(--kds-spacing-8); /* 64px */
671
674
  --kds-status-icon-size-sm: var(--kds-spacing-5); /* 40px */
675
+
676
+ /* QR Featured Button */
677
+ --kds-qr-bg-gradient: linear-gradient(135deg, #F7EEFF 0%, #EEF6FF 100%); /* Purple to blue gradient */
678
+ --kds-qr-border: rgba(131, 71, 173, 0.28); /* Primary with 28% opacity */
679
+ --kds-qr-border-hover: var(--kds-color-primary-main); /* Solid primary on hover */
680
+ --kds-qr-shadow: 0 1px 2px rgba(131, 71, 173, 0.08); /* Subtle primary shadow */
681
+ --kds-qr-shadow-hover: 0 2px 8px rgba(131, 71, 173, 0.14); /* Elevated primary shadow */
682
+ --kds-qr-focus-ring: rgba(131, 71, 173, 0.3); /* Focus outline */
683
+ --kds-qr-avatar-border: rgba(131, 71, 173, 0.2); /* Avatar border */
684
+ --kds-qr-avatar-bg: #FFFFFF; /* White avatar background */
685
+ --kds-qr-avatar-radius: 10px; /* Avatar border radius */
686
+ --kds-qr-badge-bg: var(--kds-color-primary-main); /* Badge background */
687
+ --kds-qr-badge-text: #FFFFFF; /* Badge text color */
672
688
  }
673
689
 
674
690
  /* ========================================
@@ -713,6 +729,25 @@ footer {
713
729
  margin-top: auto;
714
730
  }
715
731
 
732
+ /* ========================================
733
+ Scroll Animation Tokens
734
+ ======================================== */
735
+ :root {
736
+ /* Scroll-linked collapse range (mobile sticky invoice) */
737
+ --kds-scroll-collapse-end: 150px;
738
+
739
+ /* Merchant tile: normal and collapsed sizes (from source prototype) */
740
+ --kds-merchant-size: 64px;
741
+ --kds-merchant-size-collapsed: 50px;
742
+ --kds-merchant-radius: var(--kds-radius-md); /* 8px */
743
+ --kds-merchant-radius-collapsed: 6px;
744
+ --kds-merchant-icon-size: 30px;
745
+ --kds-merchant-icon-size-collapsed: 24px;
746
+
747
+ /* Sticky header shadow (scroll collapsed state) */
748
+ --kds-shadow-sticky: 0 2px 10px rgba(16, 24, 40, 0.08);
749
+ }
750
+
716
751
 
717
752
  /* Khipu Custom Components */
718
753
  /* Khipu Custom Components for BeerCSS
@@ -5382,6 +5417,18 @@ dialog#surveyModal button.circle {
5382
5417
  font-size: 30px;
5383
5418
  }
5384
5419
 
5420
+ .kds-invoice-merchant-neutral {
5421
+ background: var(--kds-color-background-paper);
5422
+ border: 1px solid var(--kds-color-border-subtle);
5423
+ color: var(--kds-color-text-primary);
5424
+ }
5425
+
5426
+ .kds-invoice-merchant.initials {
5427
+ font-weight: 700;
5428
+ font-size: 11px;
5429
+ line-height: 1;
5430
+ }
5431
+
5385
5432
  /* -- Card Title -- */
5386
5433
  .kds-card-title {
5387
5434
  font-weight: 700;
@@ -6214,3 +6261,283 @@ button.kds-btn-success::after {
6214
6261
  }
6215
6262
  }
6216
6263
 
6264
+ /* ========================================
6265
+ COPYABLE TABLE (.kds-copyable-table)
6266
+ Compact bordered table with tap-to-copy rows.
6267
+ Used for bank details, receipts, etc.
6268
+ ======================================== */
6269
+
6270
+ .kds-copyable-table {
6271
+ border: 1px solid var(--kds-color-divider);
6272
+ border-radius: var(--kds-radius-md);
6273
+ background: var(--kds-color-background-paper);
6274
+ padding: var(--kds-spacing-0-5) var(--kds-spacing-0-75);
6275
+ box-shadow: 0 1px 0 rgba(20, 16, 38, .02);
6276
+ }
6277
+
6278
+ .kds-copyable-table-row {
6279
+ display: flex;
6280
+ align-items: center;
6281
+ justify-content: space-between;
6282
+ gap: var(--kds-spacing-1-5);
6283
+ padding: var(--kds-spacing-1-25) var(--kds-spacing-1);
6284
+ border-top: 1px solid var(--kds-color-divider);
6285
+ border-radius: var(--kds-spacing-0-75);
6286
+ font-size: var(--kds-font-size-sm);
6287
+ cursor: pointer;
6288
+ transition: background 0.12s ease;
6289
+ position: relative;
6290
+ user-select: none;
6291
+ }
6292
+
6293
+ .kds-copyable-table-row:first-child {
6294
+ border-top: 0;
6295
+ }
6296
+
6297
+ .kds-copyable-table-row:hover {
6298
+ background: var(--kds-color-primary-faint);
6299
+ }
6300
+
6301
+ .kds-copyable-table-row:hover + .kds-copyable-table-row {
6302
+ border-top-color: transparent;
6303
+ }
6304
+
6305
+ .kds-copyable-table-row:active {
6306
+ background: var(--kds-color-primary-selected);
6307
+ }
6308
+
6309
+ .kds-copyable-table-row .k {
6310
+ color: var(--kds-color-text-secondary);
6311
+ font-size: var(--kds-font-size-caption);
6312
+ letter-spacing: 0.3px;
6313
+ text-transform: uppercase;
6314
+ font-weight: var(--kds-font-weight-medium);
6315
+ flex: 0 0 auto;
6316
+ }
6317
+
6318
+ .kds-copyable-table-row .v {
6319
+ color: var(--kds-color-text-primary);
6320
+ font-family: 'JetBrains Mono', 'SF Mono', ui-monospace, Menlo, Consolas, monospace;
6321
+ font-weight: var(--kds-font-weight-medium);
6322
+ text-align: right;
6323
+ font-size: var(--kds-font-size-sm);
6324
+ letter-spacing: -0.1px;
6325
+ word-break: break-word;
6326
+ min-width: 0;
6327
+ display: flex;
6328
+ align-items: center;
6329
+ gap: var(--kds-spacing-1);
6330
+ justify-content: flex-end;
6331
+ flex: 1 1 auto;
6332
+ }
6333
+
6334
+ .kds-copyable-table-row .v::after {
6335
+ content: 'content_copy';
6336
+ font-family: 'Material Symbols Outlined';
6337
+ font-size: var(--kds-font-size-sm);
6338
+ color: var(--kds-color-primary-main);
6339
+ opacity: 0;
6340
+ transition: opacity 0.12s ease;
6341
+ flex: 0 0 auto;
6342
+ }
6343
+
6344
+ .kds-copyable-table-row:hover .v::after {
6345
+ opacity: 0.7;
6346
+ }
6347
+
6348
+ .kds-copyable-table-row.copied {
6349
+ background: var(--kds-color-success-soft);
6350
+ }
6351
+
6352
+ .kds-copyable-table-row.copied .v {
6353
+ color: var(--kds-color-success-dark);
6354
+ }
6355
+
6356
+ .kds-copyable-table-row.copied .v::after {
6357
+ content: 'check';
6358
+ font-family: 'Material Symbols Outlined';
6359
+ color: var(--kds-color-success-dark);
6360
+ opacity: 1;
6361
+ }
6362
+
6363
+ /* Disable BeerCSS ripple on copyable table rows */
6364
+ .kds-copyable-table-row::after {
6365
+ display: none;
6366
+ }
6367
+
6368
+ /* ========================================
6369
+ COPY-ALL BUTTON (.kds-copy-all-btn)
6370
+ Modifier for kds-btn kds-btn-outlined that adds
6371
+ brand-tint background and a .copied success state.
6372
+ Use with: kds-btn kds-btn-outlined kds-btn-block kds-copy-all-btn
6373
+ ======================================== */
6374
+
6375
+ button.kds-copy-all-btn,
6376
+ a.kds-copy-all-btn {
6377
+ background: var(--kds-color-primary-faint);
6378
+ border-color: var(--kds-color-primary-outlined-border-light);
6379
+ margin-top: var(--kds-spacing-1-25);
6380
+ text-transform: none;
6381
+ letter-spacing: normal;
6382
+ }
6383
+
6384
+ button.kds-copy-all-btn:hover:not(:disabled):not(.copied),
6385
+ a.kds-copy-all-btn:hover:not(:disabled):not(.copied) {
6386
+ background: var(--kds-color-primary-selected);
6387
+ border-color: var(--kds-color-primary-main);
6388
+ }
6389
+
6390
+ button.kds-copy-all-btn.copied,
6391
+ button.kds-copy-all-btn.copied:hover,
6392
+ a.kds-copy-all-btn.copied,
6393
+ a.kds-copy-all-btn.copied:hover {
6394
+ background: var(--kds-color-success-soft);
6395
+ color: var(--kds-color-success-dark);
6396
+ border-color: var(--kds-color-success-border-light);
6397
+ }
6398
+
6399
+ /* ========================================
6400
+ SECTION NOTE (.kds-section-note)
6401
+ Lightweight inline note for contextual caveats.
6402
+ Lighter than .kds-alert — informs without
6403
+ competing with the main content.
6404
+ ======================================== */
6405
+
6406
+ .kds-section-note {
6407
+ display: flex;
6408
+ align-items: center;
6409
+ font-size: var(--kds-font-size-caption);
6410
+ color: var(--kds-color-warning-dark);
6411
+ margin: -2px 0 var(--kds-spacing-1-5) !important;
6412
+ margin-block-start: 0 !important;
6413
+ letter-spacing: -0.05px;
6414
+ }
6415
+
6416
+ .kds-section-note > i {
6417
+ font-size: var(--kds-font-size-base);
6418
+ flex: 0 0 auto;
6419
+ color: var(--kds-color-warning-dark);
6420
+ margin-top: 1px;
6421
+ min-width: unset;
6422
+ min-height: unset;
6423
+ }
6424
+
6425
+ /* ========================================
6426
+ INFO TOOLTIP (.kds-info-tip)
6427
+ Inline info button with hover/click tooltip bubble.
6428
+ Reusable in any context.
6429
+ ======================================== */
6430
+
6431
+ .kds-info-tip {
6432
+ background: none;
6433
+ border: 0;
6434
+ padding: 2px;
6435
+ margin: 0;
6436
+ display: inline-flex;
6437
+ align-items: center;
6438
+ justify-content: center;
6439
+ color: var(--kds-color-text-secondary);
6440
+ cursor: pointer;
6441
+ border-radius: 9999px;
6442
+ line-height: 1;
6443
+ position: relative;
6444
+ transition: color 0.12s, background 0.12s;
6445
+ /* Reset BeerCSS button sizing (block-size: 2.5rem, content-box, padding: 1rem) */
6446
+ block-size: auto;
6447
+ inline-size: auto;
6448
+ box-sizing: border-box;
6449
+ }
6450
+
6451
+ .kds-info-tip:hover {
6452
+ color: var(--kds-color-primary-main);
6453
+ background: var(--kds-color-primary-faint);
6454
+ }
6455
+
6456
+ .kds-info-tip:focus-visible {
6457
+ outline: 2px solid var(--kds-color-primary-focus-visible);
6458
+ outline-offset: 2px;
6459
+ }
6460
+
6461
+ .kds-info-tip > i {
6462
+ font-size: var(--kds-font-size-base);
6463
+ }
6464
+
6465
+ .kds-tip-bubble {
6466
+ position: absolute;
6467
+ bottom: calc(100% + 8px);
6468
+ right: -6px;
6469
+ width: max-content;
6470
+ max-width: 240px;
6471
+ background: var(--kds-color-text-primary);
6472
+ color: var(--kds-color-background-paper);
6473
+ font-family: inherit;
6474
+ font-weight: var(--kds-font-weight-regular);
6475
+ font-size: var(--kds-font-size-xs);
6476
+ line-height: 1.45;
6477
+ letter-spacing: -0.05px;
6478
+ text-align: left;
6479
+ padding: var(--kds-spacing-1) var(--kds-spacing-1-25);
6480
+ border-radius: var(--kds-spacing-1);
6481
+ box-shadow: var(--kds-shadow-4);
6482
+ opacity: 0;
6483
+ pointer-events: none;
6484
+ transform: translateY(2px);
6485
+ transition: opacity 0.14s ease, transform 0.14s ease;
6486
+ z-index: 10;
6487
+ white-space: normal;
6488
+ }
6489
+
6490
+ .kds-tip-bubble::after {
6491
+ content: "";
6492
+ position: absolute;
6493
+ top: 100%;
6494
+ right: 10px;
6495
+ border: 5px solid transparent;
6496
+ border-top-color: var(--kds-color-text-primary);
6497
+ }
6498
+
6499
+ .kds-info-tip[aria-expanded="true"] .kds-tip-bubble,
6500
+ .kds-info-tip:hover .kds-tip-bubble,
6501
+ .kds-info-tip:focus-visible .kds-tip-bubble {
6502
+ opacity: 1;
6503
+ transform: none;
6504
+ }
6505
+
6506
+ /* Disable BeerCSS ripple */
6507
+ .kds-info-tip::after {
6508
+ display: none;
6509
+ }
6510
+
6511
+ /* ========================================
6512
+ MONTO ROW (.kds-monto-row)
6513
+ Summary row with title + deadline left, big amount right.
6514
+ Split layout separated by dashed border.
6515
+ ======================================== */
6516
+
6517
+ .kds-monto-row {
6518
+ display: flex;
6519
+ justify-content: space-between;
6520
+ align-items: flex-end;
6521
+ padding: var(--kds-spacing-1-75) 0 var(--kds-spacing-1);
6522
+ border-top: 1px dashed var(--kds-color-divider);
6523
+ margin-top: var(--kds-spacing-1-75);
6524
+ }
6525
+
6526
+ .kds-monto-row-title {
6527
+ font-weight: var(--kds-font-weight-bold);
6528
+ font-size: var(--kds-font-size-base);
6529
+ color: var(--kds-color-text-primary);
6530
+ }
6531
+
6532
+ .kds-monto-row-deadline {
6533
+ font-size: var(--kds-font-size-xs);
6534
+ color: var(--kds-color-text-hint);
6535
+ margin-top: var(--kds-spacing-0-5);
6536
+ }
6537
+
6538
+ .kds-monto-row-value {
6539
+ font-weight: var(--kds-font-weight-bold);
6540
+ font-size: 24px;
6541
+ color: var(--kds-color-text-primary);
6542
+ }
6543
+