@diwauhris/ui 1.7.26 → 1.7.27
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/lib/assets/ui.css +6 -0
- package/lib/index.cjs +22 -13
- package/lib/index.mjs +22 -13
- package/package.json +1 -1
package/lib/assets/ui.css
CHANGED
|
@@ -4442,6 +4442,12 @@ body {
|
|
|
4442
4442
|
animation: datepickerIn 0.2s cubic-bezier(0.16, 1, 0.3, 1);
|
|
4443
4443
|
overflow: hidden;
|
|
4444
4444
|
}
|
|
4445
|
+
/* Hidden during initial measurement — no animation until final position is set */
|
|
4446
|
+
.pis-datepicker-popover--measuring {
|
|
4447
|
+
opacity: 0;
|
|
4448
|
+
pointer-events: none;
|
|
4449
|
+
animation: none;
|
|
4450
|
+
}
|
|
4445
4451
|
@keyframes datepickerIn {
|
|
4446
4452
|
from { opacity: 0; transform: translateY(6px) scale(0.97); }
|
|
4447
4453
|
to { opacity: 1; transform: translateY(0) scale(1); }
|
package/lib/index.cjs
CHANGED
|
@@ -1485,23 +1485,35 @@ function DatePicker({ value, onChange, placeholder, className, disabled, error,
|
|
|
1485
1485
|
}
|
|
1486
1486
|
document.addEventListener("mousedown", handleClickOutside);
|
|
1487
1487
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
1488
|
-
}, []);
|
|
1488
|
+
}, [setIsOpen]);
|
|
1489
1489
|
(0, react.useEffect)(() => {
|
|
1490
|
-
if (!isOpen) return;
|
|
1490
|
+
if (!isOpen || !positioned) return;
|
|
1491
|
+
let armed = false;
|
|
1492
|
+
const armTimer = window.setTimeout(() => {
|
|
1493
|
+
armed = true;
|
|
1494
|
+
}, 150);
|
|
1491
1495
|
const close = () => setIsOpen(false);
|
|
1496
|
+
const onScroll = () => {
|
|
1497
|
+
if (armed) setIsOpen(false);
|
|
1498
|
+
};
|
|
1492
1499
|
const scrollParent = getScrollParent(wrapperRef.current?.parentElement ?? null);
|
|
1493
|
-
if (scrollParent) scrollParent.addEventListener("scroll",
|
|
1494
|
-
window.addEventListener("scroll",
|
|
1500
|
+
if (scrollParent) scrollParent.addEventListener("scroll", onScroll, { passive: true });
|
|
1501
|
+
window.addEventListener("scroll", onScroll, {
|
|
1495
1502
|
capture: true,
|
|
1496
1503
|
passive: true
|
|
1497
1504
|
});
|
|
1498
1505
|
window.addEventListener("resize", close);
|
|
1499
1506
|
return () => {
|
|
1500
|
-
|
|
1501
|
-
|
|
1507
|
+
window.clearTimeout(armTimer);
|
|
1508
|
+
if (scrollParent) scrollParent.removeEventListener("scroll", onScroll);
|
|
1509
|
+
window.removeEventListener("scroll", onScroll, { capture: true });
|
|
1502
1510
|
window.removeEventListener("resize", close);
|
|
1503
1511
|
};
|
|
1504
|
-
}, [
|
|
1512
|
+
}, [
|
|
1513
|
+
isOpen,
|
|
1514
|
+
positioned,
|
|
1515
|
+
setIsOpen
|
|
1516
|
+
]);
|
|
1505
1517
|
(0, react.useEffect)(() => {
|
|
1506
1518
|
if (!isOpen) return;
|
|
1507
1519
|
function handleFocusOut(e) {
|
|
@@ -1512,7 +1524,7 @@ function DatePicker({ value, onChange, placeholder, className, disabled, error,
|
|
|
1512
1524
|
const wrapper = wrapperRef.current;
|
|
1513
1525
|
wrapper?.addEventListener("focusout", handleFocusOut);
|
|
1514
1526
|
return () => wrapper?.removeEventListener("focusout", handleFocusOut);
|
|
1515
|
-
}, [isOpen]);
|
|
1527
|
+
}, [isOpen, setIsOpen]);
|
|
1516
1528
|
function handleKeyDown(e) {
|
|
1517
1529
|
if (e.key === "Escape") {
|
|
1518
1530
|
e.preventDefault();
|
|
@@ -1575,11 +1587,8 @@ function DatePicker({ value, onChange, placeholder, className, disabled, error,
|
|
|
1575
1587
|
})]
|
|
1576
1588
|
}), isOpen && !disabled && !readOnly && (0, react_dom.createPortal)(/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
1577
1589
|
ref: popoverRef,
|
|
1578
|
-
className: "pis-datepicker-popover",
|
|
1579
|
-
style:
|
|
1580
|
-
...popupStyle,
|
|
1581
|
-
visibility: positioned ? void 0 : "hidden"
|
|
1582
|
-
},
|
|
1590
|
+
className: cn("pis-datepicker-popover", !positioned && "pis-datepicker-popover--measuring"),
|
|
1591
|
+
style: popupStyle,
|
|
1583
1592
|
role: "dialog",
|
|
1584
1593
|
"aria-label": ariaLabel ? `${ariaLabel} calendar` : "Date picker",
|
|
1585
1594
|
"aria-modal": "false",
|
package/lib/index.mjs
CHANGED
|
@@ -1461,23 +1461,35 @@ function DatePicker({ value, onChange, placeholder, className, disabled, error,
|
|
|
1461
1461
|
}
|
|
1462
1462
|
document.addEventListener("mousedown", handleClickOutside);
|
|
1463
1463
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
1464
|
-
}, []);
|
|
1464
|
+
}, [setIsOpen]);
|
|
1465
1465
|
useEffect(() => {
|
|
1466
|
-
if (!isOpen) return;
|
|
1466
|
+
if (!isOpen || !positioned) return;
|
|
1467
|
+
let armed = false;
|
|
1468
|
+
const armTimer = window.setTimeout(() => {
|
|
1469
|
+
armed = true;
|
|
1470
|
+
}, 150);
|
|
1467
1471
|
const close = () => setIsOpen(false);
|
|
1472
|
+
const onScroll = () => {
|
|
1473
|
+
if (armed) setIsOpen(false);
|
|
1474
|
+
};
|
|
1468
1475
|
const scrollParent = getScrollParent(wrapperRef.current?.parentElement ?? null);
|
|
1469
|
-
if (scrollParent) scrollParent.addEventListener("scroll",
|
|
1470
|
-
window.addEventListener("scroll",
|
|
1476
|
+
if (scrollParent) scrollParent.addEventListener("scroll", onScroll, { passive: true });
|
|
1477
|
+
window.addEventListener("scroll", onScroll, {
|
|
1471
1478
|
capture: true,
|
|
1472
1479
|
passive: true
|
|
1473
1480
|
});
|
|
1474
1481
|
window.addEventListener("resize", close);
|
|
1475
1482
|
return () => {
|
|
1476
|
-
|
|
1477
|
-
|
|
1483
|
+
window.clearTimeout(armTimer);
|
|
1484
|
+
if (scrollParent) scrollParent.removeEventListener("scroll", onScroll);
|
|
1485
|
+
window.removeEventListener("scroll", onScroll, { capture: true });
|
|
1478
1486
|
window.removeEventListener("resize", close);
|
|
1479
1487
|
};
|
|
1480
|
-
}, [
|
|
1488
|
+
}, [
|
|
1489
|
+
isOpen,
|
|
1490
|
+
positioned,
|
|
1491
|
+
setIsOpen
|
|
1492
|
+
]);
|
|
1481
1493
|
useEffect(() => {
|
|
1482
1494
|
if (!isOpen) return;
|
|
1483
1495
|
function handleFocusOut(e) {
|
|
@@ -1488,7 +1500,7 @@ function DatePicker({ value, onChange, placeholder, className, disabled, error,
|
|
|
1488
1500
|
const wrapper = wrapperRef.current;
|
|
1489
1501
|
wrapper?.addEventListener("focusout", handleFocusOut);
|
|
1490
1502
|
return () => wrapper?.removeEventListener("focusout", handleFocusOut);
|
|
1491
|
-
}, [isOpen]);
|
|
1503
|
+
}, [isOpen, setIsOpen]);
|
|
1492
1504
|
function handleKeyDown(e) {
|
|
1493
1505
|
if (e.key === "Escape") {
|
|
1494
1506
|
e.preventDefault();
|
|
@@ -1551,11 +1563,8 @@ function DatePicker({ value, onChange, placeholder, className, disabled, error,
|
|
|
1551
1563
|
})]
|
|
1552
1564
|
}), isOpen && !disabled && !readOnly && createPortal(/* @__PURE__ */ jsx("div", {
|
|
1553
1565
|
ref: popoverRef,
|
|
1554
|
-
className: "pis-datepicker-popover",
|
|
1555
|
-
style:
|
|
1556
|
-
...popupStyle,
|
|
1557
|
-
visibility: positioned ? void 0 : "hidden"
|
|
1558
|
-
},
|
|
1566
|
+
className: cn("pis-datepicker-popover", !positioned && "pis-datepicker-popover--measuring"),
|
|
1567
|
+
style: popupStyle,
|
|
1559
1568
|
role: "dialog",
|
|
1560
1569
|
"aria-label": ariaLabel ? `${ariaLabel} calendar` : "Date picker",
|
|
1561
1570
|
"aria-modal": "false",
|