@akashjs/runtime 0.1.0 → 0.1.1
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/index.cjs +50 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +50 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1579,6 +1579,55 @@ function useWindowSize() {
|
|
|
1579
1579
|
height: (() => height())
|
|
1580
1580
|
};
|
|
1581
1581
|
}
|
|
1582
|
+
function useClickOutside(target, handler, options = {}) {
|
|
1583
|
+
if (typeof document === "undefined") return () => {
|
|
1584
|
+
};
|
|
1585
|
+
const {
|
|
1586
|
+
events = ["pointerdown"],
|
|
1587
|
+
ignore = [],
|
|
1588
|
+
active = true
|
|
1589
|
+
} = options;
|
|
1590
|
+
let isActive = active;
|
|
1591
|
+
function getTarget() {
|
|
1592
|
+
return typeof target === "function" ? target() : target;
|
|
1593
|
+
}
|
|
1594
|
+
function shouldIgnore(event) {
|
|
1595
|
+
const eventTarget = event.target;
|
|
1596
|
+
if (!eventTarget) return false;
|
|
1597
|
+
for (const pattern of ignore) {
|
|
1598
|
+
if (typeof pattern === "string") {
|
|
1599
|
+
if (eventTarget.closest(pattern)) return true;
|
|
1600
|
+
} else {
|
|
1601
|
+
if (pattern === eventTarget || pattern.contains(eventTarget)) return true;
|
|
1602
|
+
}
|
|
1603
|
+
}
|
|
1604
|
+
return false;
|
|
1605
|
+
}
|
|
1606
|
+
function listener(event) {
|
|
1607
|
+
if (!isActive) return;
|
|
1608
|
+
const el = getTarget();
|
|
1609
|
+
if (!el) return;
|
|
1610
|
+
const eventTarget = event.target;
|
|
1611
|
+
if (el === eventTarget || el.contains(eventTarget)) return;
|
|
1612
|
+
if (shouldIgnore(event)) return;
|
|
1613
|
+
handler(event);
|
|
1614
|
+
}
|
|
1615
|
+
for (const eventName of events) {
|
|
1616
|
+
document.addEventListener(eventName, listener, { passive: true, capture: true });
|
|
1617
|
+
}
|
|
1618
|
+
const dispose = () => {
|
|
1619
|
+
for (const eventName of events) {
|
|
1620
|
+
document.removeEventListener(eventName, listener, { capture: true });
|
|
1621
|
+
}
|
|
1622
|
+
};
|
|
1623
|
+
dispose.enable = () => {
|
|
1624
|
+
isActive = true;
|
|
1625
|
+
};
|
|
1626
|
+
dispose.disable = () => {
|
|
1627
|
+
isActive = false;
|
|
1628
|
+
};
|
|
1629
|
+
return dispose;
|
|
1630
|
+
}
|
|
1582
1631
|
|
|
1583
1632
|
// src/portal.ts
|
|
1584
1633
|
var Portal = defineComponent((ctx) => {
|
|
@@ -5390,6 +5439,7 @@ exports.uppercase = uppercase;
|
|
|
5390
5439
|
exports.urlToFilePath = urlToFilePath;
|
|
5391
5440
|
exports.useAnnounce = useAnnounce;
|
|
5392
5441
|
exports.useBreakpoint = useBreakpoint;
|
|
5442
|
+
exports.useClickOutside = useClickOutside;
|
|
5393
5443
|
exports.useClipboard = useClipboard;
|
|
5394
5444
|
exports.useCounter = useCounter;
|
|
5395
5445
|
exports.useDebounce = useDebounce;
|