@khipu/design-system 0.1.0-alpha.55 → 0.2.0-alpha.2
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/dist/beercss/khipu-beercss.css +198 -32
- package/dist/beercss/khipu-beercss.js +19 -1
- package/dist/beercss/khipu-beercss.min.css +1 -1
- package/dist/beercss/khipu-beercss.min.js +1 -1
- package/dist/beercss/metadata.json +4 -4
- package/dist/index.d.mts +549 -607
- package/dist/index.d.ts +549 -607
- package/dist/index.js +980 -1959
- package/dist/index.mjs +888 -1862
- package/package.json +6 -5
|
@@ -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-05-
|
|
14
|
+
* Generated: 2026-05-05T20:41:24.239Z
|
|
15
15
|
*
|
|
16
16
|
* To regenerate:
|
|
17
17
|
* cd design-system && npm run tokens:generate
|
|
@@ -133,16 +133,7 @@
|
|
|
133
133
|
--kds-font-weight-semibold: 600;
|
|
134
134
|
--kds-font-weight-bold: 700;
|
|
135
135
|
|
|
136
|
-
/* Font sizes */
|
|
137
|
-
--kds-font-size-xs: 0.75rem;
|
|
138
|
-
--kds-font-size-sm: 0.875rem;
|
|
139
|
-
--kds-font-size-base: 1rem;
|
|
140
|
-
--kds-font-size-lg: 1.125rem;
|
|
141
|
-
--kds-font-size-xl: 1.25rem;
|
|
142
|
-
--kds-font-size-2xl: 1.5rem;
|
|
143
|
-
--kds-font-size-3xl: 1.875rem;
|
|
144
|
-
--kds-font-size-4xl: 2.25rem;
|
|
145
|
-
|
|
136
|
+
/* Font sizes (base scale xs–4xl: see responsive section below) */
|
|
146
137
|
/* Line heights */
|
|
147
138
|
--kds-line-height-tight: 1.2;
|
|
148
139
|
--kds-line-height-snug: 1.375;
|
|
@@ -365,6 +356,16 @@
|
|
|
365
356
|
========================================================================== */
|
|
366
357
|
|
|
367
358
|
|
|
359
|
+
/* Base font-size scale */
|
|
360
|
+
--kds-font-size-xs: 0.6875rem;
|
|
361
|
+
--kds-font-size-sm: 0.8125rem;
|
|
362
|
+
--kds-font-size-base: 0.875rem;
|
|
363
|
+
--kds-font-size-lg: 1rem;
|
|
364
|
+
--kds-font-size-xl: 1.125rem;
|
|
365
|
+
--kds-font-size-2xl: 1.25rem;
|
|
366
|
+
--kds-font-size-3xl: 1.5rem;
|
|
367
|
+
--kds-font-size-4xl: 1.875rem;
|
|
368
|
+
|
|
368
369
|
/* Headings */
|
|
369
370
|
--kds-font-size-h1: 1.75rem;
|
|
370
371
|
--kds-font-size-h2: 1.5rem;
|
|
@@ -401,6 +402,16 @@
|
|
|
401
402
|
/* Tablet (600px+) - Typography */
|
|
402
403
|
@media (min-width: 600px) {
|
|
403
404
|
:root {
|
|
405
|
+
|
|
406
|
+
/* Base font-size scale */
|
|
407
|
+
--kds-font-size-xs: 0.75rem;
|
|
408
|
+
--kds-font-size-sm: 0.875rem;
|
|
409
|
+
--kds-font-size-base: 1rem;
|
|
410
|
+
--kds-font-size-lg: 1.125rem;
|
|
411
|
+
--kds-font-size-xl: 1.25rem;
|
|
412
|
+
--kds-font-size-2xl: 1.5rem;
|
|
413
|
+
--kds-font-size-3xl: 1.875rem;
|
|
414
|
+
--kds-font-size-4xl: 2.25rem;
|
|
404
415
|
--kds-font-size-h1: 2rem;
|
|
405
416
|
--kds-font-size-h2: 1.75rem;
|
|
406
417
|
--kds-font-size-h3: 1.5rem;
|
|
@@ -428,6 +439,16 @@
|
|
|
428
439
|
/* Desktop (840px+) - Typography */
|
|
429
440
|
@media (min-width: 840px) {
|
|
430
441
|
:root {
|
|
442
|
+
|
|
443
|
+
/* Base font-size scale */
|
|
444
|
+
--kds-font-size-xs: 0.75rem;
|
|
445
|
+
--kds-font-size-sm: 0.875rem;
|
|
446
|
+
--kds-font-size-base: 1rem;
|
|
447
|
+
--kds-font-size-lg: 1.125rem;
|
|
448
|
+
--kds-font-size-xl: 1.25rem;
|
|
449
|
+
--kds-font-size-2xl: 1.5rem;
|
|
450
|
+
--kds-font-size-3xl: 1.875rem;
|
|
451
|
+
--kds-font-size-4xl: 2.25rem;
|
|
431
452
|
--kds-font-size-h1: 2.5rem;
|
|
432
453
|
--kds-font-size-h2: 2rem;
|
|
433
454
|
--kds-font-size-h3: 1.75rem;
|
|
@@ -799,6 +820,7 @@ a.kds-btn {
|
|
|
799
820
|
align-items: center;
|
|
800
821
|
justify-content: center;
|
|
801
822
|
gap: 8px;
|
|
823
|
+
text-align: center;
|
|
802
824
|
|
|
803
825
|
/* Typography - Using design tokens */
|
|
804
826
|
font-family: var(--kds-font-family-secondary);
|
|
@@ -984,7 +1006,12 @@ a.kds-btn > .kds-icon > i {
|
|
|
984
1006
|
min-width: var(--kds-spacing-button-icon-size);
|
|
985
1007
|
min-height: var(--kds-spacing-button-icon-size);
|
|
986
1008
|
line-height: 1;
|
|
987
|
-
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
/* Full-width button */
|
|
1012
|
+
button.kds-btn.kds-btn-block,
|
|
1013
|
+
a.kds-btn.kds-btn-block {
|
|
1014
|
+
width: 100%;
|
|
988
1015
|
}
|
|
989
1016
|
|
|
990
1017
|
/* ========================================
|
|
@@ -1008,12 +1035,6 @@ a.kds-btn.kds-btn-md {
|
|
|
1008
1035
|
|
|
1009
1036
|
/* Default .kds-btn uses --kds-spacing-button-min-height (50px) from base styles */
|
|
1010
1037
|
|
|
1011
|
-
/* Full-width button */
|
|
1012
|
-
button.kds-btn.kds-btn-block,
|
|
1013
|
-
a.kds-btn.kds-btn-block {
|
|
1014
|
-
width: 100%;
|
|
1015
|
-
}
|
|
1016
|
-
|
|
1017
1038
|
/* ========================================
|
|
1018
1039
|
Card Components (Material Design 3)
|
|
1019
1040
|
======================================== */
|
|
@@ -4032,6 +4053,96 @@ dialog#surveyModal button.circle {
|
|
|
4032
4053
|
font-size: var(--kds-font-size-sm);
|
|
4033
4054
|
}
|
|
4034
4055
|
|
|
4056
|
+
/* ── Typography variants ── */
|
|
4057
|
+
.kds-text-display1 {
|
|
4058
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4059
|
+
font-size: var(--kds-font-size-4xl, 36px);
|
|
4060
|
+
font-weight: var(--kds-font-weight-bold, 700);
|
|
4061
|
+
line-height: var(--kds-line-height-tight, 1.2);
|
|
4062
|
+
letter-spacing: var(--kds-letter-spacing-tight, -0.025em);
|
|
4063
|
+
}
|
|
4064
|
+
|
|
4065
|
+
.kds-text-display2 {
|
|
4066
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4067
|
+
font-size: var(--kds-font-size-3xl, 30px);
|
|
4068
|
+
font-weight: var(--kds-font-weight-bold, 700);
|
|
4069
|
+
line-height: var(--kds-line-height-tight, 1.2);
|
|
4070
|
+
letter-spacing: var(--kds-letter-spacing-tight, -0.025em);
|
|
4071
|
+
}
|
|
4072
|
+
|
|
4073
|
+
.kds-text-heading1 {
|
|
4074
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4075
|
+
font-size: var(--kds-font-size-2xl, 24px);
|
|
4076
|
+
font-weight: var(--kds-font-weight-semibold, 600);
|
|
4077
|
+
line-height: var(--kds-line-height-snug, 1.375);
|
|
4078
|
+
}
|
|
4079
|
+
|
|
4080
|
+
.kds-text-heading2 {
|
|
4081
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4082
|
+
font-size: var(--kds-font-size-xl, 20px);
|
|
4083
|
+
font-weight: var(--kds-font-weight-semibold, 600);
|
|
4084
|
+
line-height: var(--kds-line-height-snug, 1.375);
|
|
4085
|
+
}
|
|
4086
|
+
|
|
4087
|
+
.kds-text-heading3 {
|
|
4088
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4089
|
+
font-size: var(--kds-font-size-lg, 18px);
|
|
4090
|
+
font-weight: var(--kds-font-weight-semibold, 600);
|
|
4091
|
+
line-height: var(--kds-line-height-normal, 1.5);
|
|
4092
|
+
}
|
|
4093
|
+
|
|
4094
|
+
.kds-text-body-large {
|
|
4095
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4096
|
+
font-size: var(--kds-font-size-base, 16px);
|
|
4097
|
+
font-weight: var(--kds-font-weight-regular, 400);
|
|
4098
|
+
line-height: var(--kds-line-height-relaxed, 1.66);
|
|
4099
|
+
}
|
|
4100
|
+
|
|
4101
|
+
.kds-text-body {
|
|
4102
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4103
|
+
font-size: var(--kds-font-size-sm, 14px);
|
|
4104
|
+
font-weight: var(--kds-font-weight-regular, 400);
|
|
4105
|
+
line-height: var(--kds-line-height-normal, 1.5);
|
|
4106
|
+
}
|
|
4107
|
+
|
|
4108
|
+
.kds-text-body-small {
|
|
4109
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4110
|
+
font-size: var(--kds-font-size-sm, 12px);
|
|
4111
|
+
font-weight: var(--kds-font-weight-regular, 400);
|
|
4112
|
+
line-height: var(--kds-line-height-normal, 1.5);
|
|
4113
|
+
}
|
|
4114
|
+
|
|
4115
|
+
.kds-text-label {
|
|
4116
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4117
|
+
font-size: var(--kds-font-size-sm, 12px);
|
|
4118
|
+
font-weight: var(--kds-font-weight-semibold, 600);
|
|
4119
|
+
line-height: var(--kds-line-height-normal, 1.5);
|
|
4120
|
+
letter-spacing: var(--kds-letter-spacing-widest, 1px);
|
|
4121
|
+
text-transform: uppercase;
|
|
4122
|
+
}
|
|
4123
|
+
|
|
4124
|
+
.kds-text-label-small {
|
|
4125
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4126
|
+
font-size: var(--kds-font-size-xs, 10px);
|
|
4127
|
+
font-weight: var(--kds-font-weight-semibold, 600);
|
|
4128
|
+
line-height: var(--kds-line-height-normal, 1.5);
|
|
4129
|
+
letter-spacing: var(--kds-letter-spacing-widest, 1px);
|
|
4130
|
+
text-transform: uppercase;
|
|
4131
|
+
}
|
|
4132
|
+
|
|
4133
|
+
.kds-text-link {
|
|
4134
|
+
font-family: var(--kds-font-family-primary, 'Public Sans', sans-serif);
|
|
4135
|
+
font-size: inherit;
|
|
4136
|
+
font-weight: var(--kds-font-weight-medium, 500);
|
|
4137
|
+
color: var(--kds-color-primary-main, #8347AD);
|
|
4138
|
+
text-decoration: underline;
|
|
4139
|
+
cursor: pointer;
|
|
4140
|
+
}
|
|
4141
|
+
|
|
4142
|
+
.kds-text-link:hover {
|
|
4143
|
+
color: var(--kds-color-primary-dark, #5B3179);
|
|
4144
|
+
}
|
|
4145
|
+
|
|
4035
4146
|
/* Display utilities */
|
|
4036
4147
|
.kds-hidden {
|
|
4037
4148
|
display: none;
|
|
@@ -4535,14 +4646,26 @@ dialog#surveyModal button.circle {
|
|
|
4535
4646
|
|
|
4536
4647
|
.field.locked > input,
|
|
4537
4648
|
.field.locked > textarea {
|
|
4538
|
-
|
|
4539
|
-
color: var(--kds-color-text-secondary);
|
|
4649
|
+
color: var(--kds-color-text-disabled);
|
|
4540
4650
|
cursor: default;
|
|
4541
|
-
|
|
4651
|
+
pointer-events: none;
|
|
4542
4652
|
}
|
|
4543
4653
|
|
|
4544
4654
|
.field.locked > label {
|
|
4545
|
-
color: var(--kds-color-text-
|
|
4655
|
+
color: var(--kds-color-text-disabled);
|
|
4656
|
+
}
|
|
4657
|
+
|
|
4658
|
+
/* Locked: suppress all hover/focus visual changes */
|
|
4659
|
+
.field.label.border:not(.fill).locked:hover:not(:focus-within) > label::after,
|
|
4660
|
+
.field.label.border:not(.fill).locked:focus-within > label::after {
|
|
4661
|
+
border-block-start-color: var(--outline);
|
|
4662
|
+
}
|
|
4663
|
+
.field.label.border:not(.fill).locked:hover:not(:focus-within) > :is(input, textarea, select),
|
|
4664
|
+
.field.label.border:not(.fill).locked:focus-within > :is(input, textarea, select) {
|
|
4665
|
+
border-color: var(--outline);
|
|
4666
|
+
}
|
|
4667
|
+
.field.label.locked:hover:not(:focus-within) > label {
|
|
4668
|
+
color: var(--kds-color-text-disabled);
|
|
4546
4669
|
}
|
|
4547
4670
|
|
|
4548
4671
|
.field.locked > i {
|
|
@@ -5234,6 +5357,11 @@ dialog#surveyModal button.circle {
|
|
|
5234
5357
|
font-weight: var(--kds-font-weight-semibold);
|
|
5235
5358
|
}
|
|
5236
5359
|
|
|
5360
|
+
/* Auto-managed tab panels: hidden attribute must win over any display rule */
|
|
5361
|
+
[data-kds-tab-panel][hidden] {
|
|
5362
|
+
display: none;
|
|
5363
|
+
}
|
|
5364
|
+
|
|
5237
5365
|
|
|
5238
5366
|
/* ========================================
|
|
5239
5367
|
PAYMENT FLOW — DOMAIN COMPONENTS
|
|
@@ -5279,8 +5407,8 @@ dialog#surveyModal button.circle {
|
|
|
5279
5407
|
/* Symmetric padding */
|
|
5280
5408
|
padding: var(--kds-spacing-2);
|
|
5281
5409
|
|
|
5282
|
-
/*
|
|
5283
|
-
border-radius: var(--kds-radius-card);
|
|
5410
|
+
/* Bottom-only border-radius — top is flush so the brand-inner logo isn't clipped */
|
|
5411
|
+
border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
|
|
5284
5412
|
|
|
5285
5413
|
/* Override .kds-card-elevated transition — scroll drives the animation, not CSS transitions */
|
|
5286
5414
|
transition: none;
|
|
@@ -5292,10 +5420,8 @@ dialog#surveyModal button.circle {
|
|
|
5292
5420
|
/* clip-path clips the card from the bottom to hide the collapsible space.
|
|
5293
5421
|
This is VISUAL ONLY — no layout change — prevents scroll feedback loop.
|
|
5294
5422
|
Safari 13.1+ compatible (inset + round)
|
|
5295
|
-
|
|
5296
|
-
|
|
5297
|
-
/* Bottom inset = collapsible height + half the card padding to tighten
|
|
5298
|
-
the gap between "Código" and the visible bottom edge when collapsed. */
|
|
5423
|
+
round uses bottom-only radii (0 top, card-radius bottom) to match
|
|
5424
|
+
border-radius and avoid clipping the brand logo at the top corners. */
|
|
5299
5425
|
clip-path: inset(
|
|
5300
5426
|
0 0
|
|
5301
5427
|
calc(
|
|
@@ -5303,7 +5429,7 @@ dialog#surveyModal button.circle {
|
|
|
5303
5429
|
+ var(--kds-spacing-1) * var(--collapse-progress)
|
|
5304
5430
|
)
|
|
5305
5431
|
0
|
|
5306
|
-
round var(--kds-radius-card)
|
|
5432
|
+
round 0 0 var(--kds-radius-card) var(--kds-radius-card)
|
|
5307
5433
|
);
|
|
5308
5434
|
|
|
5309
5435
|
/* Suppress card's own shadow — wrapper handles it */
|
|
@@ -5314,7 +5440,8 @@ dialog#surveyModal button.circle {
|
|
|
5314
5440
|
.kds-invoice-sticky .kds-brand-inner {
|
|
5315
5441
|
margin-bottom: calc(var(--kds-spacing-1) * (1 - var(--collapse-progress)) + var(--kds-spacing-0-5) * var(--collapse-progress));
|
|
5316
5442
|
}
|
|
5317
|
-
.kds-invoice-sticky .kds-brand-inner svg
|
|
5443
|
+
.kds-invoice-sticky .kds-brand-inner svg,
|
|
5444
|
+
.kds-invoice-sticky .kds-brand-inner img {
|
|
5318
5445
|
height: calc(22px - 5px * var(--collapse-progress));
|
|
5319
5446
|
}
|
|
5320
5447
|
|
|
@@ -5375,6 +5502,12 @@ dialog#surveyModal button.circle {
|
|
|
5375
5502
|
}
|
|
5376
5503
|
}
|
|
5377
5504
|
|
|
5505
|
+
/* Invoice sticky: mobile-first — bottom-only border-radius to prevent clipping the brand logo.
|
|
5506
|
+
Desktop restores full border-radius (see min-width:768px block below). */
|
|
5507
|
+
.kds-card-elevated.kds-invoice-sticky {
|
|
5508
|
+
border-radius: 0 0 var(--kds-radius-card) var(--kds-radius-card);
|
|
5509
|
+
}
|
|
5510
|
+
|
|
5378
5511
|
/* -- Invoice Collapsible (kv rows below header) -- */
|
|
5379
5512
|
.kds-invoice-collapsible {
|
|
5380
5513
|
margin-top: var(--kds-spacing-1-5);
|
|
@@ -5396,11 +5529,17 @@ dialog#surveyModal button.circle {
|
|
|
5396
5529
|
}
|
|
5397
5530
|
|
|
5398
5531
|
/* -- Invoice Header (amount + merchant tile) -- */
|
|
5532
|
+
/* Compound selector overrides BeerCSS `header { padding:0 1rem; display:grid; align-content:center }` */
|
|
5533
|
+
header.kds-invoice-header,
|
|
5534
|
+
div.kds-invoice-header,
|
|
5399
5535
|
.kds-invoice-header {
|
|
5400
5536
|
display: flex;
|
|
5401
5537
|
align-items: flex-start;
|
|
5402
5538
|
justify-content: space-between;
|
|
5403
5539
|
gap: var(--kds-spacing-2);
|
|
5540
|
+
padding: 0;
|
|
5541
|
+
border-radius: 0;
|
|
5542
|
+
align-content: initial;
|
|
5404
5543
|
}
|
|
5405
5544
|
|
|
5406
5545
|
/* Reset BeerCSS sibling margin on <p> inside invoice header — specificity (0,4,1) ties BeerCSS, wins by source order */
|
|
@@ -5759,6 +5898,18 @@ button.kds-btn-success::after {
|
|
|
5759
5898
|
box-shadow: var(--kds-shadow-card);
|
|
5760
5899
|
}
|
|
5761
5900
|
|
|
5901
|
+
/* Payment flow cards — mobile-first: no vertical padding.
|
|
5902
|
+
Desktop (min-width: 768px) restores padding + full border-radius. */
|
|
5903
|
+
.kds-payment-flow .kds-card-elevated {
|
|
5904
|
+
margin-top: 0;
|
|
5905
|
+
padding-top: 0;
|
|
5906
|
+
padding-bottom: 0;
|
|
5907
|
+
}
|
|
5908
|
+
.kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
|
|
5909
|
+
padding-top: var(--kds-spacing-1);
|
|
5910
|
+
padding-bottom: 0;
|
|
5911
|
+
}
|
|
5912
|
+
|
|
5762
5913
|
/* Payment stage — full-viewport centered wrapper */
|
|
5763
5914
|
.kds-payment-stage {
|
|
5764
5915
|
min-height: 100vh;
|
|
@@ -5799,13 +5950,26 @@ button.kds-btn-success::after {
|
|
|
5799
5950
|
|
|
5800
5951
|
}
|
|
5801
5952
|
|
|
5953
|
+
/* Desktop: restore card padding and full border-radius on invoice sticky */
|
|
5954
|
+
@media (min-width: 768px) {
|
|
5955
|
+
.kds-payment-flow .kds-card-elevated,
|
|
5956
|
+
.kds-payment-flow .kds-card-elevated.kds-invoice-sticky {
|
|
5957
|
+
padding-top: var(--kds-spacing-2);
|
|
5958
|
+
padding-bottom: var(--kds-spacing-2);
|
|
5959
|
+
}
|
|
5960
|
+
.kds-card-elevated.kds-invoice-sticky {
|
|
5961
|
+
border-radius: var(--kds-radius-card);
|
|
5962
|
+
}
|
|
5963
|
+
}
|
|
5964
|
+
|
|
5802
5965
|
/* Brand logo row (external, outside cards) */
|
|
5803
5966
|
.kds-brand-row {
|
|
5804
5967
|
padding: 0 var(--kds-spacing-0-5);
|
|
5805
5968
|
display: flex;
|
|
5806
5969
|
align-items: center;
|
|
5807
5970
|
}
|
|
5808
|
-
.kds-brand-row svg
|
|
5971
|
+
.kds-brand-row svg,
|
|
5972
|
+
.kds-brand-row img {
|
|
5809
5973
|
height: 22px;
|
|
5810
5974
|
display: block;
|
|
5811
5975
|
}
|
|
@@ -5815,8 +5979,10 @@ button.kds-btn-success::after {
|
|
|
5815
5979
|
display: none;
|
|
5816
5980
|
align-items: center;
|
|
5817
5981
|
margin-bottom: var(--kds-spacing-1);
|
|
5982
|
+
border-radius: 0;
|
|
5818
5983
|
}
|
|
5819
|
-
.kds-brand-inner svg
|
|
5984
|
+
.kds-brand-inner svg,
|
|
5985
|
+
.kds-brand-inner img {
|
|
5820
5986
|
height: 22px;
|
|
5821
5987
|
display: block;
|
|
5822
5988
|
}
|
|
@@ -1136,13 +1136,14 @@ const ui = _context.ui;
|
|
|
1136
1136
|
* Initialize segmented tabs
|
|
1137
1137
|
* Delegated click on .kds-segmented-tabs button toggles .active and aria-selected
|
|
1138
1138
|
* Sets --_active-idx and --_tab-count CSS custom properties for sliding pill animation
|
|
1139
|
+
* Auto-manages tab panels via data-kds-tab-panel attributes on sibling elements
|
|
1139
1140
|
* Dispatches kds:tab:change with { index, button }
|
|
1140
1141
|
* @param {Element} root - Root element to scope listeners (default: document)
|
|
1141
1142
|
*/
|
|
1142
1143
|
function initSegmentedTabs(root) {
|
|
1143
1144
|
root = root || document;
|
|
1144
1145
|
|
|
1145
|
-
/* Set initial CSS vars on all segmented-tab containers */
|
|
1146
|
+
/* Set initial CSS vars and panel visibility on all segmented-tab containers */
|
|
1146
1147
|
root.querySelectorAll('.kds-segmented-tabs').forEach(function(tabs) {
|
|
1147
1148
|
var buttons = tabs.querySelectorAll('button');
|
|
1148
1149
|
tabs.style.setProperty('--_tab-count', buttons.length);
|
|
@@ -1151,6 +1152,15 @@ const ui = _context.ui;
|
|
|
1151
1152
|
if (b.classList.contains('active') || b.getAttribute('aria-selected') === 'true') activeIdx = i;
|
|
1152
1153
|
});
|
|
1153
1154
|
tabs.style.setProperty('--_active-idx', activeIdx);
|
|
1155
|
+
|
|
1156
|
+
/* Auto-bind panels: find sibling elements with data-kds-tab-panel */
|
|
1157
|
+
var parent = tabs.parentElement;
|
|
1158
|
+
if (parent) {
|
|
1159
|
+
var panels = parent.querySelectorAll('[data-kds-tab-panel]');
|
|
1160
|
+
panels.forEach(function(panel, i) {
|
|
1161
|
+
panel.hidden = i !== activeIdx;
|
|
1162
|
+
});
|
|
1163
|
+
}
|
|
1154
1164
|
});
|
|
1155
1165
|
|
|
1156
1166
|
root.addEventListener('click', function(e) {
|
|
@@ -1171,6 +1181,14 @@ const ui = _context.ui;
|
|
|
1171
1181
|
var index = Array.prototype.indexOf.call(buttons, btn);
|
|
1172
1182
|
tabs.style.setProperty('--_active-idx', index);
|
|
1173
1183
|
|
|
1184
|
+
/* Auto-toggle panels */
|
|
1185
|
+
var parent = tabs.parentElement;
|
|
1186
|
+
if (parent) {
|
|
1187
|
+
parent.querySelectorAll('[data-kds-tab-panel]').forEach(function(panel, i) {
|
|
1188
|
+
panel.hidden = i !== index;
|
|
1189
|
+
});
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1174
1192
|
tabs.dispatchEvent(new CustomEvent('kds:tab:change', {
|
|
1175
1193
|
bubbles: true,
|
|
1176
1194
|
detail: { index: index, button: btn }
|