@khipu/design-system 0.1.0-alpha.56 → 0.2.0-alpha.11
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 +569 -124
- package/dist/beercss/khipu-beercss.js +54 -27
- 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 +577 -635
- package/dist/index.d.ts +577 -635
- package/dist/index.js +988 -1967
- package/dist/index.mjs +896 -1870
- package/package.json +6 -5
|
@@ -923,16 +923,34 @@ const ui = _context.ui;
|
|
|
923
923
|
}
|
|
924
924
|
|
|
925
925
|
/**
|
|
926
|
-
*
|
|
926
|
+
* Dismiss and remove a snackbar with fade-out
|
|
927
|
+
*/
|
|
928
|
+
function dismissSnackbar(snackbar) {
|
|
929
|
+
snackbar.classList.remove('active');
|
|
930
|
+
setTimeout(function() { snackbar.remove(); }, 300);
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
/**
|
|
934
|
+
* Initialize flash messages with auto-dismiss and close button
|
|
927
935
|
*/
|
|
928
936
|
function initFlashMessages() {
|
|
929
|
-
|
|
937
|
+
var snackbars = document.querySelectorAll('.snackbar[data-auto-dismiss="true"]');
|
|
930
938
|
|
|
931
939
|
snackbars.forEach(function(snackbar) {
|
|
940
|
+
// Give text span flex-grow so close button stays right
|
|
941
|
+
var span = snackbar.querySelector('span');
|
|
942
|
+
if (span) span.classList.add('max');
|
|
943
|
+
|
|
944
|
+
// Inject close button
|
|
945
|
+
var closeBtn = document.createElement('button');
|
|
946
|
+
closeBtn.className = 'kds-snackbar-close';
|
|
947
|
+
closeBtn.setAttribute('aria-label', 'Cerrar');
|
|
948
|
+
closeBtn.innerHTML = '<i class="material-symbols-outlined">close</i>';
|
|
949
|
+
closeBtn.onclick = function() { dismissSnackbar(snackbar); };
|
|
950
|
+
snackbar.appendChild(closeBtn);
|
|
951
|
+
|
|
932
952
|
// Auto-dismiss after 5 seconds
|
|
933
|
-
setTimeout(function() {
|
|
934
|
-
snackbar.classList.remove('active');
|
|
935
|
-
}, 5000);
|
|
953
|
+
setTimeout(function() { dismissSnackbar(snackbar); }, 5000);
|
|
936
954
|
});
|
|
937
955
|
}
|
|
938
956
|
|
|
@@ -973,10 +991,15 @@ const ui = _context.ui;
|
|
|
973
991
|
|
|
974
992
|
if (!logoSource) return;
|
|
975
993
|
|
|
994
|
+
// Insert inside the amount div (first child of .kds-invoice-header)
|
|
995
|
+
var header = card.querySelector('.kds-invoice-header');
|
|
996
|
+
var amountDiv = header ? header.firstElementChild : null;
|
|
997
|
+
if (!amountDiv) return;
|
|
998
|
+
|
|
976
999
|
var inner = document.createElement('div');
|
|
977
1000
|
inner.className = 'kds-brand-inner';
|
|
978
1001
|
inner.appendChild(logoSource.cloneNode(true));
|
|
979
|
-
|
|
1002
|
+
amountDiv.insertBefore(inner, amountDiv.firstChild);
|
|
980
1003
|
});
|
|
981
1004
|
}
|
|
982
1005
|
|
|
@@ -1298,7 +1321,7 @@ const ui = _context.ui;
|
|
|
1298
1321
|
/**
|
|
1299
1322
|
* Initialize sticky invoice card progressive collapse on scroll
|
|
1300
1323
|
* MOBILE ONLY - Desktop mantiene cajitas normales
|
|
1301
|
-
* Uses scroll-linked animation (0-
|
|
1324
|
+
* Uses scroll-linked animation (0-60px) for smooth collapse/expand
|
|
1302
1325
|
* Updates CSS custom property --collapse-progress (0 to 1) for GPU-accelerated animations
|
|
1303
1326
|
* Works with multiple screens - targets sticky element in currently active screen
|
|
1304
1327
|
* Safari-compatible: uses native CSS custom properties, calc(), and requestAnimationFrame
|
|
@@ -1307,9 +1330,9 @@ const ui = _context.ui;
|
|
|
1307
1330
|
function initStickyInvoice(root) {
|
|
1308
1331
|
root = root || document;
|
|
1309
1332
|
|
|
1310
|
-
// Progressive collapse range: 0px (expanded) to
|
|
1333
|
+
// Progressive collapse range: 0px (expanded) to 30px (collapsed)
|
|
1311
1334
|
var COLLAPSE_START = 0;
|
|
1312
|
-
var COLLAPSE_END =
|
|
1335
|
+
var COLLAPSE_END = 30;
|
|
1313
1336
|
|
|
1314
1337
|
var lastScrollY = 0;
|
|
1315
1338
|
var ticking = false;
|
|
@@ -1357,13 +1380,23 @@ const ui = _context.ui;
|
|
|
1357
1380
|
if (!currentScreen.style.getPropertyValue('--collapse-collapsible-h')) {
|
|
1358
1381
|
var collapsible = currentSticky.querySelector('.kds-invoice-collapsible');
|
|
1359
1382
|
if (collapsible) {
|
|
1360
|
-
currentScreen.style.setProperty('--collapse-collapsible-h', collapsible.offsetHeight + 'px');
|
|
1383
|
+
currentScreen.style.setProperty('--collapse-collapsible-h', Math.min(collapsible.offsetHeight, 87) + 'px');
|
|
1361
1384
|
}
|
|
1362
1385
|
}
|
|
1363
1386
|
|
|
1364
1387
|
// Single DOM write per frame — set on screen (parent) so it cascades to sticky + siblings
|
|
1365
1388
|
currentScreen.style.setProperty('--collapse-progress', progress);
|
|
1366
1389
|
|
|
1390
|
+
// Close expand panels as soon as the sticky header starts collapsing
|
|
1391
|
+
if (progress > 0) {
|
|
1392
|
+
currentSticky.querySelectorAll('[data-expand-toggle][aria-expanded="true"]').forEach(function(toggle) {
|
|
1393
|
+
toggle.setAttribute('aria-expanded', 'false');
|
|
1394
|
+
var panelId = toggle.getAttribute('aria-controls');
|
|
1395
|
+
var panel = panelId ? document.getElementById(panelId) : null;
|
|
1396
|
+
if (panel) panel.classList.remove('open');
|
|
1397
|
+
});
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1367
1400
|
lastScrollY = scrollY;
|
|
1368
1401
|
});
|
|
1369
1402
|
}
|
|
@@ -1511,25 +1544,24 @@ const ui = _context.ui;
|
|
|
1511
1544
|
type = type || 'info';
|
|
1512
1545
|
duration = duration || 5000;
|
|
1513
1546
|
|
|
1514
|
-
|
|
1547
|
+
var snackbar = document.createElement('div');
|
|
1515
1548
|
snackbar.className = 'snackbar active ' + type;
|
|
1549
|
+
snackbar.setAttribute('data-auto-dismiss', 'true');
|
|
1550
|
+
snackbar.style.setProperty('--kds-snackbar-duration', duration + 'ms');
|
|
1516
1551
|
|
|
1517
|
-
|
|
1552
|
+
var icon = document.createElement('i');
|
|
1518
1553
|
icon.className = 'material-symbols-outlined';
|
|
1519
1554
|
icon.textContent = type === 'success' ? 'check_circle' : (type === 'error' ? 'error' : 'info');
|
|
1520
1555
|
|
|
1521
|
-
|
|
1556
|
+
var span = document.createElement('span');
|
|
1557
|
+
span.className = 'max';
|
|
1522
1558
|
span.textContent = message;
|
|
1523
1559
|
|
|
1524
|
-
|
|
1525
|
-
closeBtn.className = '
|
|
1560
|
+
var closeBtn = document.createElement('button');
|
|
1561
|
+
closeBtn.className = 'kds-snackbar-close';
|
|
1562
|
+
closeBtn.setAttribute('aria-label', 'Cerrar');
|
|
1526
1563
|
closeBtn.innerHTML = '<i class="material-symbols-outlined">close</i>';
|
|
1527
|
-
closeBtn.onclick = function() {
|
|
1528
|
-
snackbar.classList.remove('active');
|
|
1529
|
-
setTimeout(function() {
|
|
1530
|
-
snackbar.remove();
|
|
1531
|
-
}, 300);
|
|
1532
|
-
};
|
|
1564
|
+
closeBtn.onclick = function() { dismissSnackbar(snackbar); };
|
|
1533
1565
|
|
|
1534
1566
|
snackbar.appendChild(icon);
|
|
1535
1567
|
snackbar.appendChild(span);
|
|
@@ -1537,12 +1569,7 @@ const ui = _context.ui;
|
|
|
1537
1569
|
|
|
1538
1570
|
document.body.appendChild(snackbar);
|
|
1539
1571
|
|
|
1540
|
-
setTimeout(function() {
|
|
1541
|
-
snackbar.classList.remove('active');
|
|
1542
|
-
setTimeout(function() {
|
|
1543
|
-
snackbar.remove();
|
|
1544
|
-
}, 300);
|
|
1545
|
-
}, duration);
|
|
1572
|
+
setTimeout(function() { dismissSnackbar(snackbar); }, duration);
|
|
1546
1573
|
}
|
|
1547
1574
|
|
|
1548
1575
|
// Export utilities to window for backward compatibility
|