@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 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;