@khipu/design-system 0.1.0-alpha.47 → 0.1.0-alpha.49
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-
|
|
14
|
+
* Generated: 2026-04-27T13:11:56.144Z
|
|
15
15
|
*
|
|
16
16
|
* To regenerate:
|
|
17
17
|
* cd design-system && npm run tokens:generate
|
|
@@ -642,12 +642,21 @@ body.dark {
|
|
|
642
642
|
--kds-color-info-soft: #EFF6FF; /* Alias for info backgrounds */
|
|
643
643
|
--kds-color-success-soft: #ECFDF5; /* Success mark and borders */
|
|
644
644
|
|
|
645
|
+
/* Border colors */
|
|
646
|
+
--kds-color-border-subtle: #F3F4F6; /* Very light border for cards/rows (origin --rule) */
|
|
647
|
+
--kds-color-border-default: #E5E7EB; /* Standard light border for hover/separators (origin --rule-2) */
|
|
648
|
+
|
|
649
|
+
/* Hover background */
|
|
650
|
+
--kds-color-hover-bg: #FAFAFA; /* Ultra-subtle hover background for rows */
|
|
651
|
+
|
|
645
652
|
/* Layout colors */
|
|
646
653
|
--kds-color-shell: #F5F5F5; /* Neutral page background */
|
|
647
654
|
|
|
648
655
|
/* Card specific */
|
|
649
656
|
--kds-radius-card: 14px; /* Payment card radius (between lg and xl) */
|
|
657
|
+
--kds-radius-row: 10px; /* Interactive row radius (copy-row, etc.) */
|
|
650
658
|
--kds-shadow-card: 0 1px 2px rgba(16,24,40,.04), 0 1px 3px rgba(16,24,40,.06); /* Subtle card shadow */
|
|
659
|
+
--kds-shadow-elevated: var(--kds-shadow-8); /* Elevated surfaces like modals */
|
|
651
660
|
|
|
652
661
|
/* Extended semantic soft backgrounds */
|
|
653
662
|
--kds-color-warning-soft: var(--kds-alert-warning-bg); /* #FFFBEB */
|
|
@@ -4492,17 +4501,23 @@ dialog#surveyModal button.circle {
|
|
|
4492
4501
|
.field.locked > input,
|
|
4493
4502
|
.field.locked > textarea {
|
|
4494
4503
|
background: var(--kds-color-shell);
|
|
4495
|
-
color: var(--kds-color-text-
|
|
4504
|
+
color: var(--kds-color-text-secondary);
|
|
4496
4505
|
cursor: default;
|
|
4506
|
+
border-color: var(--kds-color-divider);
|
|
4507
|
+
}
|
|
4508
|
+
|
|
4509
|
+
.field.locked > label {
|
|
4510
|
+
color: var(--kds-color-text-hint);
|
|
4497
4511
|
}
|
|
4498
4512
|
|
|
4499
4513
|
.field.locked > i {
|
|
4500
4514
|
position: absolute;
|
|
4501
|
-
right:
|
|
4515
|
+
right: var(--kds-spacing-1-5);
|
|
4502
4516
|
top: 50%;
|
|
4503
4517
|
transform: translateY(-50%);
|
|
4504
4518
|
color: var(--kds-color-text-disabled);
|
|
4505
4519
|
pointer-events: none;
|
|
4520
|
+
font-size: 18px;
|
|
4506
4521
|
}
|
|
4507
4522
|
|
|
4508
4523
|
/* Verified variant (green check) */
|
|
@@ -4566,12 +4581,11 @@ dialog#surveyModal button.circle {
|
|
|
4566
4581
|
display: flex;
|
|
4567
4582
|
align-items: center;
|
|
4568
4583
|
gap: var(--kds-spacing-1-5);
|
|
4569
|
-
|
|
4570
|
-
padding: var(--kds-spacing-1-75);
|
|
4584
|
+
padding: var(--kds-spacing-1-5);
|
|
4571
4585
|
background: var(--kds-color-surface);
|
|
4572
4586
|
color: var(--kds-color-text-primary);
|
|
4573
|
-
border: 1px solid var(--kds-color-
|
|
4574
|
-
border-radius: var(--kds-radius-
|
|
4587
|
+
border: 1px solid var(--kds-color-border-subtle);
|
|
4588
|
+
border-radius: var(--kds-radius-card);
|
|
4575
4589
|
text-align: left;
|
|
4576
4590
|
cursor: pointer;
|
|
4577
4591
|
transition: border-color 0.2s, background 0.2s;
|
|
@@ -4579,8 +4593,8 @@ dialog#surveyModal button.circle {
|
|
|
4579
4593
|
}
|
|
4580
4594
|
|
|
4581
4595
|
.kds-bank-row:hover {
|
|
4582
|
-
border-color: var(--kds-color-
|
|
4583
|
-
background: var(--kds-color-
|
|
4596
|
+
border-color: var(--kds-color-border-default);
|
|
4597
|
+
background: var(--kds-color-hover-bg);
|
|
4584
4598
|
}
|
|
4585
4599
|
|
|
4586
4600
|
.kds-bank-row-logo {
|
|
@@ -4602,12 +4616,12 @@ dialog#surveyModal button.circle {
|
|
|
4602
4616
|
.kds-bank-row-name {
|
|
4603
4617
|
flex: 1;
|
|
4604
4618
|
font-weight: 500;
|
|
4605
|
-
font-size: var(--kds-font-size-
|
|
4619
|
+
font-size: var(--kds-font-size-sm);
|
|
4606
4620
|
color: var(--kds-color-text-primary);
|
|
4607
4621
|
}
|
|
4608
4622
|
|
|
4609
4623
|
.kds-bank-row > i {
|
|
4610
|
-
color: var(--kds-color-
|
|
4624
|
+
color: var(--kds-color-border-default);
|
|
4611
4625
|
flex-shrink: 0;
|
|
4612
4626
|
}
|
|
4613
4627
|
|
|
@@ -4845,8 +4859,8 @@ dialog#surveyModal button.circle {
|
|
|
4845
4859
|
justify-content: flex-start;
|
|
4846
4860
|
gap: var(--kds-spacing-1-25);
|
|
4847
4861
|
padding: var(--kds-spacing-1-5) var(--kds-spacing-1-75);
|
|
4848
|
-
border: var(--kds-border-width-sm) solid var(--kds-color-
|
|
4849
|
-
border-radius: var(--kds-radius-
|
|
4862
|
+
border: var(--kds-border-width-sm) solid var(--kds-color-border-subtle);
|
|
4863
|
+
border-radius: var(--kds-radius-row);
|
|
4850
4864
|
background: var(--kds-color-surface, var(--kds-color-background-paper));
|
|
4851
4865
|
cursor: pointer;
|
|
4852
4866
|
text-align: left;
|
|
@@ -4858,8 +4872,8 @@ dialog#surveyModal button.circle {
|
|
|
4858
4872
|
}
|
|
4859
4873
|
|
|
4860
4874
|
.kds-copy-row:hover {
|
|
4861
|
-
background: var(--kds-color-
|
|
4862
|
-
border-color: var(--kds-border-
|
|
4875
|
+
background: var(--kds-color-hover-bg);
|
|
4876
|
+
border-color: var(--kds-color-border-default);
|
|
4863
4877
|
}
|
|
4864
4878
|
|
|
4865
4879
|
.kds-copy-row > i {
|
|
@@ -5159,6 +5173,67 @@ dialog#surveyModal button.circle {
|
|
|
5159
5173
|
amount summary, recap, success button
|
|
5160
5174
|
======================================== */
|
|
5161
5175
|
|
|
5176
|
+
/* -- Sticky Invoice Card (.kds-invoice-sticky) -- */
|
|
5177
|
+
/* Collapses detail rows on scroll via .collapsed class (JS toggle) */
|
|
5178
|
+
|
|
5179
|
+
.kds-invoice-sticky {
|
|
5180
|
+
position: sticky;
|
|
5181
|
+
top: 0;
|
|
5182
|
+
z-index: 10;
|
|
5183
|
+
transition: box-shadow 0.25s ease, border-radius 0.25s ease;
|
|
5184
|
+
}
|
|
5185
|
+
|
|
5186
|
+
.kds-invoice-sticky.collapsed {
|
|
5187
|
+
box-shadow: var(--kds-shadow-2);
|
|
5188
|
+
border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
|
|
5189
|
+
}
|
|
5190
|
+
|
|
5191
|
+
.kds-invoice-sticky .kds-invoice-collapsible {
|
|
5192
|
+
overflow: hidden;
|
|
5193
|
+
max-height: 300px;
|
|
5194
|
+
opacity: 1;
|
|
5195
|
+
transition: max-height 0.3s ease, opacity 0.2s ease;
|
|
5196
|
+
}
|
|
5197
|
+
|
|
5198
|
+
.kds-invoice-sticky.collapsed .kds-invoice-collapsible {
|
|
5199
|
+
max-height: 0;
|
|
5200
|
+
opacity: 0;
|
|
5201
|
+
}
|
|
5202
|
+
|
|
5203
|
+
.kds-invoice-sticky .kds-invoice-amount {
|
|
5204
|
+
transition: font-size 0.25s ease;
|
|
5205
|
+
}
|
|
5206
|
+
|
|
5207
|
+
.kds-invoice-sticky.collapsed .kds-invoice-amount {
|
|
5208
|
+
font-size: var(--kds-font-size-xl);
|
|
5209
|
+
}
|
|
5210
|
+
|
|
5211
|
+
.kds-invoice-sticky .kds-invoice-merchant {
|
|
5212
|
+
transition: width 0.25s ease, height 0.25s ease;
|
|
5213
|
+
}
|
|
5214
|
+
|
|
5215
|
+
.kds-invoice-sticky.collapsed .kds-invoice-merchant {
|
|
5216
|
+
width: var(--kds-status-icon-size-sm);
|
|
5217
|
+
height: var(--kds-status-icon-size-sm);
|
|
5218
|
+
}
|
|
5219
|
+
|
|
5220
|
+
.kds-invoice-sticky .kds-invoice-merchant i {
|
|
5221
|
+
transition: font-size 0.25s ease;
|
|
5222
|
+
}
|
|
5223
|
+
|
|
5224
|
+
.kds-invoice-sticky.collapsed .kds-invoice-merchant i {
|
|
5225
|
+
font-size: var(--kds-font-size-xl);
|
|
5226
|
+
}
|
|
5227
|
+
|
|
5228
|
+
.kds-invoice-sticky .kds-invoice-code {
|
|
5229
|
+
transition: margin-top 0.25s ease, font-size 0.25s ease;
|
|
5230
|
+
}
|
|
5231
|
+
|
|
5232
|
+
.kds-invoice-sticky.collapsed .kds-invoice-code {
|
|
5233
|
+
margin-top: 0;
|
|
5234
|
+
font-size: var(--kds-font-size-caption);
|
|
5235
|
+
}
|
|
5236
|
+
|
|
5162
5237
|
/* -- Invoice Header (amount + merchant tile) -- */
|
|
5163
5238
|
.kds-invoice-header {
|
|
5164
5239
|
display: flex;
|
|
@@ -5493,3 +5568,357 @@ button.kds-btn-success::after {
|
|
|
5493
5568
|
.kds-copy-header.spaced {
|
|
5494
5569
|
margin-top: var(--kds-spacing-2-5);
|
|
5495
5570
|
}
|
|
5571
|
+
|
|
5572
|
+
/* ================================================================
|
|
5573
|
+
PAYMENT FLOW LAYOUT
|
|
5574
|
+
Stage, flow container, brand row, screen transitions
|
|
5575
|
+
================================================================ */
|
|
5576
|
+
|
|
5577
|
+
/* Prevent card hover elevation in payment flow */
|
|
5578
|
+
.kds-payment-stage .kds-card-elevated:hover {
|
|
5579
|
+
box-shadow: var(--kds-shadow-card);
|
|
5580
|
+
}
|
|
5581
|
+
|
|
5582
|
+
/* Payment stage — full-viewport centered wrapper */
|
|
5583
|
+
.kds-payment-stage {
|
|
5584
|
+
min-height: 100vh;
|
|
5585
|
+
display: flex;
|
|
5586
|
+
justify-content: center;
|
|
5587
|
+
padding: var(--kds-spacing-2-5) var(--kds-spacing-2) var(--kds-spacing-8);
|
|
5588
|
+
}
|
|
5589
|
+
|
|
5590
|
+
/* Payment flow — narrow column */
|
|
5591
|
+
.kds-payment-flow {
|
|
5592
|
+
width: 100%;
|
|
5593
|
+
max-width: var(--kds-stage-narrow-max-width, 448px);
|
|
5594
|
+
display: flex;
|
|
5595
|
+
flex-direction: column;
|
|
5596
|
+
gap: var(--kds-spacing-3);
|
|
5597
|
+
}
|
|
5598
|
+
|
|
5599
|
+
/* Brand logo row */
|
|
5600
|
+
.kds-brand-row {
|
|
5601
|
+
padding: 0 var(--kds-spacing-0-5);
|
|
5602
|
+
display: flex;
|
|
5603
|
+
align-items: center;
|
|
5604
|
+
}
|
|
5605
|
+
.kds-brand-row svg {
|
|
5606
|
+
height: 22px;
|
|
5607
|
+
display: block;
|
|
5608
|
+
}
|
|
5609
|
+
|
|
5610
|
+
/* Screen transitions (multi-step flows) */
|
|
5611
|
+
.kds-screen {
|
|
5612
|
+
display: none;
|
|
5613
|
+
animation: kds-fadein .22s ease both;
|
|
5614
|
+
}
|
|
5615
|
+
.kds-screen.active {
|
|
5616
|
+
display: flex;
|
|
5617
|
+
flex-direction: column;
|
|
5618
|
+
gap: var(--kds-spacing-3);
|
|
5619
|
+
}
|
|
5620
|
+
@keyframes kds-fadein {
|
|
5621
|
+
from { opacity: 0; transform: translateY(var(--kds-spacing-0-5)); }
|
|
5622
|
+
to { opacity: 1; transform: none; }
|
|
5623
|
+
}
|
|
5624
|
+
|
|
5625
|
+
/* ================================================================
|
|
5626
|
+
PROTOTYPE NAVIGATION & TWEAKS
|
|
5627
|
+
Dev-only components for navigating and tweaking prototypes
|
|
5628
|
+
================================================================ */
|
|
5629
|
+
|
|
5630
|
+
/* Proto nav — floating pill navigation */
|
|
5631
|
+
.kds-proto-nav {
|
|
5632
|
+
position: fixed;
|
|
5633
|
+
left: 50%;
|
|
5634
|
+
bottom: var(--kds-spacing-1-75);
|
|
5635
|
+
transform: translateX(-50%);
|
|
5636
|
+
display: flex;
|
|
5637
|
+
align-items: center;
|
|
5638
|
+
gap: var(--kds-spacing-0-75);
|
|
5639
|
+
background: var(--kds-color-text-primary);
|
|
5640
|
+
color: var(--kds-color-background-paper);
|
|
5641
|
+
padding: var(--kds-spacing-0-75) var(--kds-spacing-1);
|
|
5642
|
+
border-radius: 9999px;
|
|
5643
|
+
box-shadow: var(--kds-shadow-4);
|
|
5644
|
+
z-index: 40;
|
|
5645
|
+
font-size: var(--kds-font-size-xs);
|
|
5646
|
+
}
|
|
5647
|
+
.kds-proto-nav-label {
|
|
5648
|
+
padding: 0 var(--kds-spacing-0-75);
|
|
5649
|
+
color: var(--kds-color-text-hint);
|
|
5650
|
+
}
|
|
5651
|
+
.kds-proto-nav-arrow {
|
|
5652
|
+
background: transparent;
|
|
5653
|
+
border: 0;
|
|
5654
|
+
color: var(--kds-color-text-disabled);
|
|
5655
|
+
cursor: pointer;
|
|
5656
|
+
width: var(--kds-spacing-3-5);
|
|
5657
|
+
height: var(--kds-spacing-3-5);
|
|
5658
|
+
border-radius: 9999px;
|
|
5659
|
+
display: grid;
|
|
5660
|
+
place-items: center;
|
|
5661
|
+
}
|
|
5662
|
+
.kds-proto-nav-arrow:hover {
|
|
5663
|
+
color: var(--kds-color-background-paper);
|
|
5664
|
+
background: rgba(255, 255, 255, .08);
|
|
5665
|
+
}
|
|
5666
|
+
|
|
5667
|
+
/* Tweaks panel — floating config panel */
|
|
5668
|
+
.kds-proto-tweaks {
|
|
5669
|
+
position: fixed;
|
|
5670
|
+
right: var(--kds-spacing-2);
|
|
5671
|
+
bottom: var(--kds-spacing-8);
|
|
5672
|
+
width: 260px;
|
|
5673
|
+
background: var(--kds-color-background-paper);
|
|
5674
|
+
border-radius: var(--kds-radius-card);
|
|
5675
|
+
box-shadow: var(--kds-shadow-4);
|
|
5676
|
+
border: 1px solid var(--kds-color-divider);
|
|
5677
|
+
padding: var(--kds-spacing-1-75);
|
|
5678
|
+
font-size: var(--kds-font-size-body2);
|
|
5679
|
+
z-index: 45;
|
|
5680
|
+
display: none;
|
|
5681
|
+
}
|
|
5682
|
+
.kds-proto-tweaks.open { display: block; }
|
|
5683
|
+
.kds-proto-tweaks h4 {
|
|
5684
|
+
margin: 0 0 var(--kds-spacing-1);
|
|
5685
|
+
font-size: var(--kds-font-size-body2);
|
|
5686
|
+
font-weight: var(--kds-font-weight-bold);
|
|
5687
|
+
}
|
|
5688
|
+
.kds-proto-tweak {
|
|
5689
|
+
display: flex;
|
|
5690
|
+
align-items: center;
|
|
5691
|
+
justify-content: space-between;
|
|
5692
|
+
gap: var(--kds-spacing-1);
|
|
5693
|
+
margin-bottom: var(--kds-spacing-1);
|
|
5694
|
+
}
|
|
5695
|
+
.kds-proto-tweak-column {
|
|
5696
|
+
display: flex;
|
|
5697
|
+
flex-direction: column;
|
|
5698
|
+
align-items: stretch;
|
|
5699
|
+
gap: var(--kds-spacing-0-75);
|
|
5700
|
+
margin-bottom: var(--kds-spacing-1);
|
|
5701
|
+
}
|
|
5702
|
+
.kds-proto-chips {
|
|
5703
|
+
display: flex;
|
|
5704
|
+
gap: var(--kds-spacing-0-75);
|
|
5705
|
+
flex-wrap: wrap;
|
|
5706
|
+
}
|
|
5707
|
+
.kds-proto-chip {
|
|
5708
|
+
border: 1px solid var(--kds-color-divider);
|
|
5709
|
+
background: var(--kds-color-background-paper);
|
|
5710
|
+
color: var(--kds-color-text-primary);
|
|
5711
|
+
padding: var(--kds-spacing-0-5) var(--kds-spacing-1);
|
|
5712
|
+
border-radius: 9999px;
|
|
5713
|
+
font-size: var(--kds-font-size-xs);
|
|
5714
|
+
cursor: pointer;
|
|
5715
|
+
}
|
|
5716
|
+
.kds-proto-chip.active {
|
|
5717
|
+
background: var(--kds-color-primary-faint);
|
|
5718
|
+
border-color: var(--kds-color-primary-main);
|
|
5719
|
+
color: var(--kds-color-primary-main);
|
|
5720
|
+
}
|
|
5721
|
+
.kds-proto-swatch {
|
|
5722
|
+
width: 22px;
|
|
5723
|
+
height: 22px;
|
|
5724
|
+
border-radius: var(--kds-spacing-0-75);
|
|
5725
|
+
border: 1px solid rgba(0, 0, 0, .08);
|
|
5726
|
+
cursor: pointer;
|
|
5727
|
+
}
|
|
5728
|
+
.kds-proto-swatch.active {
|
|
5729
|
+
outline: 2px solid var(--kds-color-primary-main);
|
|
5730
|
+
outline-offset: var(--kds-spacing-0-25);
|
|
5731
|
+
}
|
|
5732
|
+
.kds-proto-input {
|
|
5733
|
+
margin-top: var(--kds-spacing-0-75);
|
|
5734
|
+
padding: var(--kds-spacing-0-75) var(--kds-spacing-1);
|
|
5735
|
+
border: 1px solid var(--kds-color-divider);
|
|
5736
|
+
border-radius: var(--kds-spacing-0-75);
|
|
5737
|
+
font: inherit;
|
|
5738
|
+
}
|
|
5739
|
+
|
|
5740
|
+
/* ================================================================
|
|
5741
|
+
DEMO PAGE LAYOUT
|
|
5742
|
+
Showcase container, sections, labels for component demo pages
|
|
5743
|
+
================================================================ */
|
|
5744
|
+
|
|
5745
|
+
.kds-demo-container {
|
|
5746
|
+
max-width: 480px;
|
|
5747
|
+
margin: 0 auto;
|
|
5748
|
+
display: flex;
|
|
5749
|
+
flex-direction: column;
|
|
5750
|
+
gap: var(--kds-spacing-3);
|
|
5751
|
+
padding: var(--kds-spacing-3) var(--kds-spacing-2);
|
|
5752
|
+
}
|
|
5753
|
+
|
|
5754
|
+
.kds-demo-hero { text-align: center; }
|
|
5755
|
+
.kds-demo-hero h1 { font-size: var(--kds-font-size-xl); margin: 0; }
|
|
5756
|
+
.kds-demo-hero p {
|
|
5757
|
+
font-size: var(--kds-font-size-sm);
|
|
5758
|
+
color: var(--kds-color-text-secondary);
|
|
5759
|
+
margin: var(--kds-spacing-0-5) 0 0;
|
|
5760
|
+
}
|
|
5761
|
+
|
|
5762
|
+
.kds-demo-section {
|
|
5763
|
+
background: var(--kds-color-background-paper);
|
|
5764
|
+
border-radius: var(--kds-radius-card);
|
|
5765
|
+
box-shadow: var(--kds-shadow-card);
|
|
5766
|
+
padding: var(--kds-spacing-2);
|
|
5767
|
+
}
|
|
5768
|
+
.kds-demo-section + .kds-demo-section { margin-top: var(--kds-spacing-1-5); }
|
|
5769
|
+
|
|
5770
|
+
.kds-demo-label {
|
|
5771
|
+
font-size: var(--kds-font-size-caption);
|
|
5772
|
+
color: var(--kds-color-text-hint);
|
|
5773
|
+
text-transform: uppercase;
|
|
5774
|
+
letter-spacing: 0.06em;
|
|
5775
|
+
}
|
|
5776
|
+
|
|
5777
|
+
.kds-demo-section-title {
|
|
5778
|
+
font-size: var(--kds-font-size-sm);
|
|
5779
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5780
|
+
}
|
|
5781
|
+
|
|
5782
|
+
.kds-demo-tab-output {
|
|
5783
|
+
font-size: var(--kds-font-size-xs);
|
|
5784
|
+
color: var(--kds-color-text-hint);
|
|
5785
|
+
text-align: center;
|
|
5786
|
+
margin: 0;
|
|
5787
|
+
}
|
|
5788
|
+
|
|
5789
|
+
.kds-demo-expand-header {
|
|
5790
|
+
display: flex;
|
|
5791
|
+
justify-content: space-between;
|
|
5792
|
+
align-items: baseline;
|
|
5793
|
+
}
|
|
5794
|
+
|
|
5795
|
+
.kds-demo-tabs-grid {
|
|
5796
|
+
display: flex;
|
|
5797
|
+
flex-direction: column;
|
|
5798
|
+
gap: var(--kds-spacing-2);
|
|
5799
|
+
}
|
|
5800
|
+
|
|
5801
|
+
.kds-demo-center { text-align: center; }
|
|
5802
|
+
.kds-demo-spacer { height: var(--kds-spacing-3); }
|
|
5803
|
+
|
|
5804
|
+
/* ========================================
|
|
5805
|
+
BANK MODAL (.kds-bank-modal)
|
|
5806
|
+
Full-screen overlay with scrollable bank list + search
|
|
5807
|
+
======================================== */
|
|
5808
|
+
|
|
5809
|
+
.kds-bank-modal-scrim {
|
|
5810
|
+
position: fixed;
|
|
5811
|
+
inset: 0;
|
|
5812
|
+
background: var(--kds-modal-backdrop);
|
|
5813
|
+
display: none;
|
|
5814
|
+
align-items: center;
|
|
5815
|
+
justify-content: center;
|
|
5816
|
+
z-index: var(--kds-z-index-modal, 50);
|
|
5817
|
+
animation: kds-fade 0.2s ease both;
|
|
5818
|
+
padding: var(--kds-spacing-2);
|
|
5819
|
+
}
|
|
5820
|
+
|
|
5821
|
+
.kds-bank-modal-scrim.open {
|
|
5822
|
+
display: flex;
|
|
5823
|
+
}
|
|
5824
|
+
|
|
5825
|
+
.kds-bank-modal {
|
|
5826
|
+
width: 100%;
|
|
5827
|
+
max-width: var(--kds-stage-narrow-max-width, 448px);
|
|
5828
|
+
height: 85vh;
|
|
5829
|
+
background: var(--kds-color-background-paper);
|
|
5830
|
+
border-radius: var(--kds-radius-card);
|
|
5831
|
+
box-shadow: var(--kds-shadow-elevated);
|
|
5832
|
+
display: flex;
|
|
5833
|
+
flex-direction: column;
|
|
5834
|
+
overflow: hidden;
|
|
5835
|
+
animation: kds-rise 0.28s cubic-bezier(0.2, 0.8, 0.2, 1) both;
|
|
5836
|
+
}
|
|
5837
|
+
|
|
5838
|
+
.kds-bank-modal-header {
|
|
5839
|
+
display: flex;
|
|
5840
|
+
align-items: center;
|
|
5841
|
+
justify-content: space-between;
|
|
5842
|
+
padding: var(--kds-spacing-2) var(--kds-spacing-2) var(--kds-spacing-1);
|
|
5843
|
+
}
|
|
5844
|
+
|
|
5845
|
+
.kds-bank-modal-header h3 {
|
|
5846
|
+
font-size: var(--kds-font-size-lg);
|
|
5847
|
+
font-weight: var(--kds-font-weight-semibold);
|
|
5848
|
+
margin: 0;
|
|
5849
|
+
color: var(--kds-color-text-primary);
|
|
5850
|
+
}
|
|
5851
|
+
|
|
5852
|
+
.kds-bank-modal-close {
|
|
5853
|
+
background: none;
|
|
5854
|
+
border: 0;
|
|
5855
|
+
padding: var(--kds-spacing-0-5);
|
|
5856
|
+
cursor: pointer;
|
|
5857
|
+
color: var(--kds-color-text-secondary);
|
|
5858
|
+
border-radius: var(--kds-radius-full);
|
|
5859
|
+
display: grid;
|
|
5860
|
+
place-items: center;
|
|
5861
|
+
}
|
|
5862
|
+
|
|
5863
|
+
.kds-bank-modal-close::after {
|
|
5864
|
+
display: none;
|
|
5865
|
+
}
|
|
5866
|
+
|
|
5867
|
+
.kds-bank-modal-search {
|
|
5868
|
+
padding: 0 var(--kds-spacing-2) var(--kds-spacing-1-5);
|
|
5869
|
+
}
|
|
5870
|
+
|
|
5871
|
+
.kds-bank-modal-search input {
|
|
5872
|
+
width: 100%;
|
|
5873
|
+
padding: var(--kds-spacing-1-25) var(--kds-spacing-1-5);
|
|
5874
|
+
border: 1px solid var(--kds-color-divider);
|
|
5875
|
+
border-radius: var(--kds-radius-md);
|
|
5876
|
+
font-size: var(--kds-font-size-sm);
|
|
5877
|
+
font-family: inherit;
|
|
5878
|
+
outline: none;
|
|
5879
|
+
color: var(--kds-color-text-primary);
|
|
5880
|
+
background: var(--kds-color-surface);
|
|
5881
|
+
}
|
|
5882
|
+
|
|
5883
|
+
.kds-bank-modal-search input::placeholder {
|
|
5884
|
+
color: var(--kds-color-text-hint);
|
|
5885
|
+
}
|
|
5886
|
+
|
|
5887
|
+
.kds-bank-modal-search input:focus {
|
|
5888
|
+
border-color: var(--kds-color-primary-main);
|
|
5889
|
+
box-shadow: 0 0 0 2px var(--kds-color-primary-faint);
|
|
5890
|
+
}
|
|
5891
|
+
|
|
5892
|
+
.kds-bank-modal-body {
|
|
5893
|
+
flex: 1;
|
|
5894
|
+
overflow-y: auto;
|
|
5895
|
+
padding: 0 var(--kds-spacing-1) var(--kds-spacing-1);
|
|
5896
|
+
}
|
|
5897
|
+
|
|
5898
|
+
.kds-bank-modal-body .kds-bank-list {
|
|
5899
|
+
margin-top: 0;
|
|
5900
|
+
gap: var(--kds-spacing-0-5);
|
|
5901
|
+
}
|
|
5902
|
+
|
|
5903
|
+
.kds-bank-modal-body .kds-bank-row {
|
|
5904
|
+
border: 0;
|
|
5905
|
+
border-radius: var(--kds-radius-md);
|
|
5906
|
+
padding: var(--kds-spacing-1) var(--kds-spacing-1-25);
|
|
5907
|
+
}
|
|
5908
|
+
|
|
5909
|
+
.kds-bank-modal-body .kds-bank-row:hover {
|
|
5910
|
+
background: var(--kds-color-primary-faint);
|
|
5911
|
+
border-color: transparent;
|
|
5912
|
+
}
|
|
5913
|
+
|
|
5914
|
+
.kds-bank-modal-empty {
|
|
5915
|
+
text-align: center;
|
|
5916
|
+
padding: var(--kds-spacing-4) var(--kds-spacing-2);
|
|
5917
|
+
color: var(--kds-color-text-hint);
|
|
5918
|
+
font-size: var(--kds-font-size-sm);
|
|
5919
|
+
display: none;
|
|
5920
|
+
}
|
|
5921
|
+
|
|
5922
|
+
.kds-bank-modal-empty.visible {
|
|
5923
|
+
display: block;
|
|
5924
|
+
}
|
|
@@ -1644,6 +1644,7 @@ function H(e){return e<0?-1:e===0?0:1}function nt(e,t,r){return(1-r)*e+r*t}funct
|
|
|
1644
1644
|
* - Clipboard copy rows
|
|
1645
1645
|
* - Countdown timers
|
|
1646
1646
|
* - Segmented tabs
|
|
1647
|
+
* - Sticky invoice card (collapse on scroll)
|
|
1647
1648
|
*/
|
|
1648
1649
|
|
|
1649
1650
|
(function() {
|
|
@@ -1681,6 +1682,7 @@ function H(e){return e<0?-1:e===0?0:1}function nt(e,t,r){return(1-r)*e+r*t}funct
|
|
|
1681
1682
|
initCopyRow();
|
|
1682
1683
|
initCountdown();
|
|
1683
1684
|
initSegmentedTabs();
|
|
1685
|
+
initStickyInvoice();
|
|
1684
1686
|
|
|
1685
1687
|
console.log('Material Design initialization complete!');
|
|
1686
1688
|
}
|
|
@@ -1895,6 +1897,44 @@ function H(e){return e<0?-1:e===0?0:1}function nt(e,t,r){return(1-r)*e+r*t}funct
|
|
|
1895
1897
|
});
|
|
1896
1898
|
}
|
|
1897
1899
|
|
|
1900
|
+
/**
|
|
1901
|
+
* Initialize sticky invoice card collapse on scroll
|
|
1902
|
+
* Toggles .collapsed class on .kds-invoice-sticky when user scrolls past threshold
|
|
1903
|
+
* Works with multiple screens - targets sticky element in currently active screen
|
|
1904
|
+
* Uses hysteresis (different thresholds for collapse/expand) to prevent oscillation
|
|
1905
|
+
* @param {Element} root - Root element to scope queries (default: document)
|
|
1906
|
+
*/
|
|
1907
|
+
function initStickyInvoice(root) {
|
|
1908
|
+
root = root || document;
|
|
1909
|
+
|
|
1910
|
+
var collapseAt = 60; // px scrolled to collapse
|
|
1911
|
+
var expandAt = 20; // px scrolled to expand (lower = hysteresis)
|
|
1912
|
+
var collapsedStates = {}; // Track collapsed state per screen
|
|
1913
|
+
|
|
1914
|
+
function onScroll() {
|
|
1915
|
+
// Find sticky element in currently active screen
|
|
1916
|
+
var activeScreen = root.querySelector('.kds-screen.active');
|
|
1917
|
+
if (!activeScreen) return;
|
|
1918
|
+
|
|
1919
|
+
var sticky = activeScreen.querySelector('.kds-invoice-sticky');
|
|
1920
|
+
if (!sticky) return;
|
|
1921
|
+
|
|
1922
|
+
var screenId = activeScreen.id || 'default';
|
|
1923
|
+
var isCollapsed = collapsedStates[screenId] || false;
|
|
1924
|
+
var scrollY = window.scrollY || window.pageYOffset;
|
|
1925
|
+
|
|
1926
|
+
if (!isCollapsed && scrollY > collapseAt) {
|
|
1927
|
+
sticky.classList.add('collapsed');
|
|
1928
|
+
collapsedStates[screenId] = true;
|
|
1929
|
+
} else if (isCollapsed && scrollY < expandAt) {
|
|
1930
|
+
sticky.classList.remove('collapsed');
|
|
1931
|
+
collapsedStates[screenId] = false;
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
|
|
1935
|
+
window.addEventListener('scroll', onScroll, { passive: true });
|
|
1936
|
+
}
|
|
1937
|
+
|
|
1898
1938
|
/**
|
|
1899
1939
|
* Utility: Show a snackbar programmatically
|
|
1900
1940
|
* @param {string} message - The message to display
|
|
@@ -1949,6 +1989,7 @@ function H(e){return e<0?-1:e===0?0:1}function nt(e,t,r){return(1-r)*e+r*t}funct
|
|
|
1949
1989
|
window.Khipu.initCopyRow = initCopyRow;
|
|
1950
1990
|
window.Khipu.initCountdown = initCountdown;
|
|
1951
1991
|
window.Khipu.initSegmentedTabs = initSegmentedTabs;
|
|
1992
|
+
window.Khipu.initStickyInvoice = initStickyInvoice;
|
|
1952
1993
|
|
|
1953
1994
|
// Also export showSnackbar to global scope for backward compatibility
|
|
1954
1995
|
window.showSnackbar = showSnackbar;
|