@koine/dom 2.0.0-beta.72 → 2.0.0-beta.74

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.
Files changed (97) hide show
  1. package/$.d.ts +1 -0
  2. package/$.js +2 -0
  3. package/$all.d.ts +1 -0
  4. package/$all.js +2 -0
  5. package/$each.d.ts +1 -0
  6. package/$each.js +8 -0
  7. package/_listen-delegation.d.ts +1 -10
  8. package/_listen-delegation.js +45 -0
  9. package/addClass.d.ts +1 -0
  10. package/addClass.js +11 -0
  11. package/calculateFixedOffset.d.ts +1 -0
  12. package/calculateFixedOffset.js +9 -0
  13. package/createElement.d.ts +1 -0
  14. package/createElement.js +9 -0
  15. package/emitEvent.d.ts +1 -0
  16. package/emitEvent.js +9 -0
  17. package/escapeSelector.d.ts +1 -0
  18. package/escapeSelector.js +2 -0
  19. package/exists.d.ts +1 -0
  20. package/exists.js +2 -0
  21. package/forEach.d.ts +1 -0
  22. package/forEach.js +6 -0
  23. package/getDataAttr.d.ts +1 -0
  24. package/getDataAttr.js +2 -0
  25. package/getDocumentHeight.d.ts +1 -0
  26. package/getDocumentHeight.js +5 -0
  27. package/getHeight.d.ts +1 -0
  28. package/getHeight.js +2 -0
  29. package/getListeners.d.ts +1 -0
  30. package/getListeners.js +9 -0
  31. package/getOffset.d.ts +1 -0
  32. package/getOffset.js +11 -0
  33. package/getOffsetTop.d.ts +1 -0
  34. package/getOffsetTop.js +11 -0
  35. package/getOffsetTopSlim.d.ts +1 -0
  36. package/getOffsetTopSlim.js +2 -0
  37. package/getScrollbarWidth.d.ts +1 -0
  38. package/getScrollbarWidth.js +2 -0
  39. package/getStyleValue.d.ts +1 -0
  40. package/getStyleValue.js +2 -0
  41. package/getVisualBackgroundColor.d.ts +1 -0
  42. package/getVisualBackgroundColor.js +16 -0
  43. package/index.cjs.js +20 -20
  44. package/index.esm.js +20 -20
  45. package/index.js +45 -0
  46. package/injectCss.d.ts +1 -0
  47. package/injectCss.js +11 -0
  48. package/isHidden.d.ts +1 -0
  49. package/isHidden.js +2 -0
  50. package/isInViewport.d.ts +1 -0
  51. package/isInViewport.js +10 -0
  52. package/isNodeList.d.ts +1 -0
  53. package/isNodeList.js +9 -0
  54. package/isTotallyScrolled.d.ts +1 -0
  55. package/isTotallyScrolled.js +2 -0
  56. package/listen.d.ts +1 -0
  57. package/listen.js +18 -0
  58. package/listenLoaded.d.ts +1 -0
  59. package/listenLoaded.js +3 -0
  60. package/listenOnce.d.ts +1 -0
  61. package/listenOnce.js +9 -0
  62. package/listenResize.d.ts +1 -0
  63. package/listenResize.js +3 -0
  64. package/listenResizeDebounced.d.ts +1 -0
  65. package/listenResizeDebounced.js +4 -0
  66. package/listenResizeThrottled.d.ts +1 -0
  67. package/listenResizeThrottled.js +4 -0
  68. package/listenScroll.d.ts +1 -0
  69. package/listenScroll.js +6 -0
  70. package/listenScrollDebounced.d.ts +1 -0
  71. package/listenScrollDebounced.js +4 -0
  72. package/listenScrollThrottled.d.ts +1 -0
  73. package/listenScrollThrottled.js +4 -0
  74. package/off.d.ts +1 -0
  75. package/off.js +10 -0
  76. package/on.d.ts +1 -0
  77. package/on.js +15 -0
  78. package/onClickOutside.d.ts +1 -0
  79. package/onClickOutside.js +17 -0
  80. package/once.d.ts +1 -0
  81. package/once.js +10 -0
  82. package/package.json +2 -2
  83. package/removeClass.d.ts +1 -0
  84. package/removeClass.js +11 -0
  85. package/scrollTo.d.ts +1 -0
  86. package/scrollTo.js +30 -0
  87. package/setDataAttr.d.ts +1 -0
  88. package/setDataAttr.js +8 -0
  89. package/setVendorCSS.d.ts +1 -0
  90. package/setVendorCSS.js +9 -0
  91. package/siblings.d.ts +1 -0
  92. package/siblings.js +14 -0
  93. package/toArray.d.ts +1 -0
  94. package/toArray.js +2 -0
  95. package/types.js +1 -0
  96. package/unlisten.d.ts +1 -0
  97. package/unlisten.js +20 -0
package/$.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let $: <T extends Element = HTMLElement>(selector: string, parent?: HTMLElement | Document | null, avoidEscape?: boolean) => T;
2
+ export default $;
package/$.js ADDED
@@ -0,0 +1,2 @@
1
+ export let $ = (selector, parent, avoidEscape) => (parent ? parent : document).querySelector(avoidEscape ? selector : selector.replace(/:/g, "\\:"));
2
+ export default $;
package/$all.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let $all: <T extends Element = HTMLElement>(selector: string, parent?: Element | HTMLElement | Document | null, avoidEscape?: boolean) => NodeListOf<T>;
2
+ export default $all;
package/$all.js ADDED
@@ -0,0 +1,2 @@
1
+ export let $all = (selector, parent, avoidEscape) => (parent ? parent : document).querySelectorAll(avoidEscape ? selector : selector.replace(/:/g, "\\:"));
2
+ export default $all;
package/$each.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let $each: <T extends Element = HTMLElement>(selector: string, callback: ($element: T, index: number) => any, parent?: HTMLElement, scope?: object) => void;
2
+ export default $each;
package/$each.js ADDED
@@ -0,0 +1,8 @@
1
+ import { $all } from "./$all";
2
+ export let $each = (selector, callback, parent, scope) => {
3
+ const nodes = $all(selector, parent);
4
+ for (let i = 0; i < nodes.length; i++) {
5
+ callback.call(scope, nodes[i], i);
6
+ }
7
+ };
8
+ export default $each;
@@ -1,10 +1 @@
1
- import type { AnyDOMEvent, AnyDOMEventTarget, AnyDOMEventType } from "./types";
2
- export type EventCallback<TTarget extends AnyDOMEventTarget = AnyDOMEventTarget, TType extends AnyDOMEventType = AnyDOMEventType> = (event: AnyDOMEvent<TType>, desiredTarget: TTarget) => any;
3
- export type ListenEvent = {
4
- selector: string;
5
- callback: EventCallback;
6
- };
7
- export declare let activeEvents: Partial<Record<AnyDOMEventType, ListenEvent[]>>;
8
- export declare let getIndex: (arr: ListenEvent[], selector: string, callback: EventCallback) => number;
9
- export declare let getRunTarget: (target: Element, selector: string | Window | Document | Element) => false | Window | Document | Element | null;
10
- export declare let eventHandler: (event: Event) => void;
1
+ export {};
@@ -0,0 +1,45 @@
1
+ import { isString } from "@koine/utils";
2
+ import { escapeSelector } from "./escapeSelector";
3
+ export let activeEvents = {};
4
+ export let getIndex = (arr, selector, callback) => {
5
+ for (let i = 0; i < arr.length; i++) {
6
+ if (arr[i].selector === selector &&
7
+ arr[i].callback.toString() === callback.toString())
8
+ return i;
9
+ }
10
+ return -1;
11
+ };
12
+ export let getRunTarget = (target, selector) => {
13
+ if (["*", "window", window].includes(selector)) {
14
+ return window;
15
+ }
16
+ if ([
17
+ "document",
18
+ "document.documentElement",
19
+ document,
20
+ document.documentElement,
21
+ ].includes(selector))
22
+ return document;
23
+ if (isString(selector)) {
24
+ return target.closest(escapeSelector(selector));
25
+ }
26
+ if (typeof selector !== "string" && selector.contains) {
27
+ if (selector === target) {
28
+ return target;
29
+ }
30
+ if (selector.contains(target)) {
31
+ return selector;
32
+ }
33
+ return false;
34
+ }
35
+ return false;
36
+ };
37
+ export let eventHandler = (event) => {
38
+ activeEvents[event.type]?.forEach(function (listener) {
39
+ const target = getRunTarget(event.target, listener.selector);
40
+ if (!target) {
41
+ return;
42
+ }
43
+ listener.callback(event, target);
44
+ });
45
+ };
package/addClass.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let addClass: <T extends Element = HTMLElement>(el?: T | undefined, className?: string) => void;
2
+ export default addClass;
package/addClass.js ADDED
@@ -0,0 +1,11 @@
1
+ export let addClass = (el, className = "") => {
2
+ if (process.env["NODE_ENV"] === "development") {
3
+ if (!el) {
4
+ console.warn("[@koine/dom:addClass] unexisting DOM element");
5
+ return;
6
+ }
7
+ }
8
+ if (el)
9
+ el.classList.add(className);
10
+ };
11
+ export default addClass;
@@ -1 +1,2 @@
1
1
  export declare let calculateFixedOffset: (selector?: string) => number;
2
+ export default calculateFixedOffset;
@@ -0,0 +1,9 @@
1
+ import { $each } from "./$each";
2
+ export let calculateFixedOffset = (selector = "[data-fixed]") => {
3
+ let fixedOffset = 0;
4
+ $each(selector, ($el) => {
5
+ fixedOffset += $el.offsetHeight;
6
+ });
7
+ return fixedOffset;
8
+ };
9
+ export default calculateFixedOffset;
@@ -1,2 +1,3 @@
1
1
  import type { LiteralUnion } from "@koine/utils";
2
2
  export declare let createElement: <TType extends LiteralUnion<keyof HTMLElementTagNameMap, string>, TElement extends HTMLElement = TType extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[TType] : HTMLElement>(type: TType, className?: string) => TElement;
3
+ export default createElement;
@@ -0,0 +1,9 @@
1
+ import { addClass } from "./addClass";
2
+ export let createElement = (type, className) => {
3
+ const el = document.createElement(type);
4
+ if (className) {
5
+ addClass(el, className);
6
+ }
7
+ return el;
8
+ };
9
+ export default createElement;
package/emitEvent.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let emitEvent: (type?: string, detail?: {}) => void;
2
+ export default emitEvent;
package/emitEvent.js ADDED
@@ -0,0 +1,9 @@
1
+ export let emitEvent = (type = "customEvent", detail = {}) => {
2
+ if (typeof window.CustomEvent !== "function")
3
+ return;
4
+ document.dispatchEvent(new CustomEvent(type, {
5
+ bubbles: true,
6
+ detail,
7
+ }));
8
+ };
9
+ export default emitEvent;
@@ -1 +1,2 @@
1
1
  export declare let escapeSelector: (selector: string) => string;
2
+ export default escapeSelector;
@@ -0,0 +1,2 @@
1
+ export let escapeSelector = (selector) => selector.replace(/:/g, "\\:");
2
+ export default escapeSelector;
package/exists.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let exists: (node?: Element) => boolean | undefined;
2
+ export default exists;
package/exists.js ADDED
@@ -0,0 +1,2 @@
1
+ export let exists = (node) => node && node instanceof window.HTMLElement;
2
+ export default exists;
package/forEach.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let forEach: <T extends HTMLElement, TScope = object>(nodes: NodeListOf<T> | T[], callback: (this: TScope, $element: T, index: number) => any, scope?: TScope | undefined) => void;
2
+ export default forEach;
package/forEach.js ADDED
@@ -0,0 +1,6 @@
1
+ export let forEach = (nodes, callback, scope) => {
2
+ for (let i = 0; i < nodes.length; i++) {
3
+ callback.call(scope, nodes[i], i);
4
+ }
5
+ };
6
+ export default forEach;
package/getDataAttr.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let getDataAttr: (element: HTMLElement, attribute: string) => string | null;
2
+ export default getDataAttr;
package/getDataAttr.js ADDED
@@ -0,0 +1,2 @@
1
+ export let getDataAttr = (element, attribute) => element.getAttribute("data-" + attribute);
2
+ export default getDataAttr;
@@ -1 +1,2 @@
1
1
  export declare let getDocumentHeight: () => number;
2
+ export default getDocumentHeight;
@@ -0,0 +1,5 @@
1
+ export let getDocumentHeight = () => {
2
+ const { body, documentElement } = document;
3
+ return Math.max(body.scrollHeight, documentElement.scrollHeight, body.offsetHeight, documentElement.offsetHeight, body.clientHeight, documentElement.clientHeight);
4
+ };
5
+ export default getDocumentHeight;
package/getHeight.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let getHeight: <T extends Element>(element: T) => number;
2
+ export default getHeight;
package/getHeight.js ADDED
@@ -0,0 +1,2 @@
1
+ export let getHeight = (element) => parseInt(window.getComputedStyle(element).height, 10);
2
+ export default getHeight;
package/getListeners.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let getListeners: () => Partial<Record<import("./types").AnyDOMEventType, import("./_listen-delegation").ListenEvent[]>>;
2
+ export default getListeners;
@@ -0,0 +1,9 @@
1
+ import { activeEvents } from "./_listen-delegation";
2
+ export let getListeners = () => {
3
+ const obj = {};
4
+ for (const type in activeEvents) {
5
+ obj[type] = activeEvents[type];
6
+ }
7
+ return obj;
8
+ };
9
+ export default getListeners;
package/getOffset.d.ts CHANGED
@@ -2,3 +2,4 @@ export declare let getOffset: <T extends HTMLElement>(elem: T) => {
2
2
  top: number;
3
3
  left: number;
4
4
  };
5
+ export default getOffset;
package/getOffset.js ADDED
@@ -0,0 +1,11 @@
1
+ export let getOffset = (elem) => {
2
+ let left = 0;
3
+ let top = 0;
4
+ while (elem && !isNaN(elem.offsetLeft) && !isNaN(elem.offsetTop)) {
5
+ left += elem.offsetLeft - elem.scrollLeft;
6
+ top += elem.offsetTop - elem.scrollTop;
7
+ elem = elem.offsetParent;
8
+ }
9
+ return { top, left };
10
+ };
11
+ export default getOffset;
package/getOffsetTop.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let getOffsetTop: <T extends HTMLElement>(elem: T) => number;
2
+ export default getOffsetTop;
@@ -0,0 +1,11 @@
1
+ export let getOffsetTop = (elem) => {
2
+ let location = 0;
3
+ if (elem.offsetParent) {
4
+ while (elem) {
5
+ location += elem.offsetTop;
6
+ elem = elem.offsetParent;
7
+ }
8
+ }
9
+ return location >= 0 ? location : 0;
10
+ };
11
+ export default getOffsetTop;
@@ -1 +1,2 @@
1
1
  export declare let getOffsetTopSlim: <T extends HTMLElement>(elem: T) => number;
2
+ export default getOffsetTopSlim;
@@ -0,0 +1,2 @@
1
+ export let getOffsetTopSlim = (elem) => elem.getBoundingClientRect().top + window.scrollY;
2
+ export default getOffsetTopSlim;
@@ -1 +1,2 @@
1
1
  export declare let getScrollbarWidth: <T extends HTMLElement>(element?: T | undefined) => number;
2
+ export default getScrollbarWidth;
@@ -0,0 +1,2 @@
1
+ export let getScrollbarWidth = (element) => window.innerWidth - (element || document.documentElement).clientWidth;
2
+ export default getScrollbarWidth;
@@ -1 +1,2 @@
1
1
  export declare let getStyleValue: <T extends HTMLElement>(el: T, prop: string) => string;
2
+ export default getStyleValue;
@@ -0,0 +1,2 @@
1
+ export let getStyleValue = (el, prop) => getComputedStyle(el, null).getPropertyValue(prop);
2
+ export default getStyleValue;
@@ -1 +1,2 @@
1
1
  export declare let getVisualBackgroundColor: (elem?: null | HTMLElement) => string;
2
+ export default getVisualBackgroundColor;
@@ -0,0 +1,16 @@
1
+ export let getVisualBackgroundColor = (elem) => {
2
+ if (!elem)
3
+ return "#fff";
4
+ const transparent = "rgba(0, 0, 0, 0)";
5
+ const transparentIE11 = "transparent";
6
+ const bg = window.getComputedStyle(elem).backgroundColor;
7
+ if (bg === transparent || bg === transparentIE11) {
8
+ const parent = elem.parentElement;
9
+ if (parent) {
10
+ return getVisualBackgroundColor(parent);
11
+ }
12
+ return "#fff";
13
+ }
14
+ return bg;
15
+ };
16
+ export default getVisualBackgroundColor;
package/index.cjs.js CHANGED
@@ -4,11 +4,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var utils = require('@koine/utils');
6
6
 
7
- let $=(e,r,t)=>(r||document).querySelector(t?e:e.replace(/:/g,"\\:"));
7
+ let $=(e,t,r)=>(t||document).querySelector(r?e:e.replace(/:/g,"\\:"));
8
8
 
9
- let $all=(e,l,r)=>(l||document).querySelectorAll(r?e:e.replace(/:/g,"\\:"));
9
+ let $all=(e,l,t)=>(l||document).querySelectorAll(t?e:e.replace(/:/g,"\\:"));
10
10
 
11
- let $each=(e,t,o,r)=>{let a=$all(e,o);for(let l=0;l<a.length;l++)t.call(r,a[l],l);};
11
+ let $each=(l,t,a,o)=>{let r=$all(l,a);for(let e=0;e<r.length;e++)t.call(o,r[e],e);};
12
12
 
13
13
  let addClass=(e,s="")=>{if("development"===process.env.NODE_ENV&&!e){console.warn("[@koine/dom:addClass] unexisting DOM element");return}e&&e.classList.add(s);};
14
14
 
@@ -22,7 +22,7 @@ let escapeSelector=e=>e.replace(/:/g,"\\:");
22
22
 
23
23
  let exists=e=>e&&e instanceof window.HTMLElement;
24
24
 
25
- let forEach=(l,e,t)=>{for(let o=0;o<l.length;o++)e.call(t,l[o],o);};
25
+ let forEach=(e,l,t)=>{for(let o=0;o<e.length;o++)l.call(t,e[o],o);};
26
26
 
27
27
  let getDataAttr=(t,e)=>t.getAttribute("data-"+e);
28
28
 
@@ -34,7 +34,7 @@ let activeEvents={};let getIndex=(e,t,n)=>{for(let r=0;r<e.length;r++)if(e[r].se
34
34
 
35
35
  let getListeners=()=>{let t={};for(let r in activeEvents)t[r]=activeEvents[r];return t};
36
36
 
37
- let getOffset=f=>{let e=0,t=0;for(;f&&!isNaN(f.offsetLeft)&&!isNaN(f.offsetTop);)e+=f.offsetLeft-f.scrollLeft,t+=f.offsetTop-f.scrollTop,f=f.offsetParent;return {top:t,left:e}};
37
+ let getOffset=e=>{let f=0,t=0;for(;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)f+=e.offsetLeft-e.scrollLeft,t+=e.offsetTop-e.scrollTop,e=e.offsetParent;return {top:t,left:f}};
38
38
 
39
39
  let getOffsetTop=e=>{let t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return t>=0?t:0};
40
40
 
@@ -56,43 +56,43 @@ let isNodeList=t=>{let e=Object.prototype.toString.call(t);return "object"==type
56
56
 
57
57
  let isTotallyScrolled=l=>!!l&&l.scrollHeight-l.scrollTop<=l.clientHeight;
58
58
 
59
- let off=(e,n,o,t=!1)=>{"development"!==process.env.NODE_ENV||e||console.warn("[@koine/dom:off] unexisting DOM element"),e&&e.removeEventListener(n,o,t);};
59
+ let off=(e,o,n,t=!1)=>{"development"!==process.env.NODE_ENV||e||console.warn("[@koine/dom:off] unexisting DOM element"),e&&e.removeEventListener(o,n,t);};
60
60
 
61
- let on=(n,t,i,r=!1)=>("development"!==process.env.NODE_ENV||n||console.warn("[@koine/dom:on] unexisting DOM element"),n)?(n.addEventListener(t,i,r),()=>off(n,t,i)):utils.noop;
61
+ let on=(n,t,r,i=!1)=>("development"!==process.env.NODE_ENV||n||console.warn("[@koine/dom:on] unexisting DOM element"),n)?(n.addEventListener(t,r,i),()=>off(n,t,r)):utils.noop;
62
62
 
63
- let listenLoaded=e=>on(document,"DOMContentLoaded",e);
63
+ let listenLoaded=o=>on(document,"DOMContentLoaded",o);
64
64
 
65
- let listen=(e,l,r)=>{l&&r&&e.split(",").forEach(function(e){activeEvents[e=e.trim()]||(activeEvents[e]=[],on(window,e,eventHandler,!0)),activeEvents[e]?.push({selector:l,callback:r});});};
65
+ let listen=(i,l,r)=>{l&&r&&i.split(",").forEach(function(i){activeEvents[i=i.trim()]||(activeEvents[i]=[],on(window,i,eventHandler,!0)),activeEvents[i]?.push({selector:l,callback:r});});};
66
66
 
67
- let unlisten=(l,o,n)=>{l.split(",").forEach(l=>{let f=activeEvents[l=l.trim()];if(!f)return;if(f.length<2||!o){delete activeEvents[l],off(window,l,eventHandler,!0);return}let m=getIndex(f,o,n);m<0||activeEvents[l].splice(m,1);});};
67
+ let unlisten=(r,n,o)=>{r.split(",").forEach(r=>{let f=activeEvents[r=r.trim()];if(!f)return;if(f.length<2||!n){delete activeEvents[r],off(window,r,eventHandler,!0);return}let p=getIndex(f,n,o);p<0||activeEvents[r].splice(p,1);});};
68
68
 
69
- let listenOnce=(n,o,r)=>listen(n,o,function e(l){let m=getRunTarget(l.target,o);r(l,m||window),unlisten(n,o,e);});
69
+ let listenOnce=(i,o,l)=>listen(i,o,function e(r){let m=getRunTarget(r.target,o);l(r,m||window),unlisten(i,o,e);});
70
70
 
71
- let listenResize=(i,o)=>on(o||window,"resize",i);
71
+ let listenResize=(i,t)=>on(t||window,"resize",i);
72
72
 
73
- let listenResizeDebounced=(o,...t)=>listenResize(utils.debounce(...t),o);
73
+ let listenResizeDebounced=(t,...o)=>listenResize(utils.debounce(...o),t);
74
74
 
75
75
  let listenResizeThrottled=(i,...o)=>listenResize(utils.throttle(...o),i);
76
76
 
77
- let listenScroll=(l,r)=>on(r||window,"scroll",l,{capture:!0,passive:!0});
77
+ let listenScroll=(o,e)=>on(e||window,"scroll",o,{capture:!0,passive:!0});
78
78
 
79
- let listenScrollDebounced=(e,...r)=>listenScroll(utils.debounce(...r),e);
79
+ let listenScrollDebounced=(o,...t)=>listenScroll(utils.debounce(...t),o);
80
80
 
81
- let listenScrollThrottled=(t,...r)=>listenScroll(utils.throttle(...r),t);
81
+ let listenScrollThrottled=(o,...r)=>listenScroll(utils.throttle(...r),o);
82
82
 
83
- let once=(t,e,f,m=!1)=>{let n=r=>{f(r),off(t,e,n);};return on(t,e,n,m)};
83
+ let once=(r,t,f,m=!1)=>{let n=e=>{f(e),off(r,t,n);};return on(r,t,n,m)};
84
84
 
85
- let onClickOutside=(c,e,r=!1)=>{let i=t=>{!c.contains(t.target)&&(e(t),r&&n());},n=()=>{off(document,"click",i);};return on(document,"click",i),n};
85
+ let onClickOutside=(e,c,i=!1)=>{let r=t=>{!e.contains(t.target)&&(c(t),i&&n());},n=()=>{off(document,"click",r);};return on(document,"click",r),n};
86
86
 
87
87
  let removeClass=(e,s="")=>{("development"!==process.env.NODE_ENV||e)&&e&&e.classList.remove(s);};
88
88
 
89
- let scrollTo=(i,l,e,r)=>{let w=i.toFixed();if(l){let i=!1,r=function(){window.pageYOffset.toFixed()===w&&(off(window,"scroll",r),i=!0,l());};on(window,"scroll",r),r(),e&&setTimeout(()=>{i||(off(window,"scroll",r),l());},e);}window.scrollTo({top:i,behavior:r||"smooth"});};
89
+ let scrollTo=(t,e,i,r)=>{let w=t.toFixed();if(e){let t=!1,r=function(){window.pageYOffset.toFixed()===w&&(off(window,"scroll",r),t=!0,e());};on(window,"scroll",r),r(),i&&setTimeout(()=>{t||(off(window,"scroll",r),e());},i);}window.scrollTo({top:t,behavior:r||"smooth"});};
90
90
 
91
91
  let setDataAttr=(t,e,r)=>{if(null==r){t.removeAttribute("data-"+e);return}t.setAttribute("data-"+e,r.toString());};
92
92
 
93
93
  let setVendorCSS=(e,t,s)=>{let l=t.charAt(0).toUpperCase()+t.slice(1);e.style["webkit"+l]=s,e.style["moz"+l]=s,e.style["ms"+l]=s,e.style["o"+l]=s,e.style[t]=s;};
94
94
 
95
- let siblings=e=>{if(e&&e.parentNode){let r=e.parentNode.firstChild,t=[];for(;r;r=r.nextSibling)1===r.nodeType&&r!==e&&t.push(r);return t}return []};
95
+ let siblings=e=>{if(e&&e.parentNode){let t=e.parentNode.firstChild,r=[];for(;t;t=t.nextSibling)1===t.nodeType&&t!==e&&r.push(t);return r}return []};
96
96
 
97
97
  let toArray=r=>Array.prototype.slice.call(r);
98
98
 
package/index.esm.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { isString, noop, debounce, throttle } from '@koine/utils';
2
2
 
3
- let $=(e,r,t)=>(r||document).querySelector(t?e:e.replace(/:/g,"\\:"));
3
+ let $=(e,t,r)=>(t||document).querySelector(r?e:e.replace(/:/g,"\\:"));
4
4
 
5
- let $all=(e,l,r)=>(l||document).querySelectorAll(r?e:e.replace(/:/g,"\\:"));
5
+ let $all=(e,l,t)=>(l||document).querySelectorAll(t?e:e.replace(/:/g,"\\:"));
6
6
 
7
- let $each=(e,t,o,r)=>{let a=$all(e,o);for(let l=0;l<a.length;l++)t.call(r,a[l],l);};
7
+ let $each=(l,t,a,o)=>{let r=$all(l,a);for(let e=0;e<r.length;e++)t.call(o,r[e],e);};
8
8
 
9
9
  let addClass=(e,s="")=>{if("development"===process.env.NODE_ENV&&!e){console.warn("[@koine/dom:addClass] unexisting DOM element");return}e&&e.classList.add(s);};
10
10
 
@@ -18,7 +18,7 @@ let escapeSelector=e=>e.replace(/:/g,"\\:");
18
18
 
19
19
  let exists=e=>e&&e instanceof window.HTMLElement;
20
20
 
21
- let forEach=(l,e,t)=>{for(let o=0;o<l.length;o++)e.call(t,l[o],o);};
21
+ let forEach=(e,l,t)=>{for(let o=0;o<e.length;o++)l.call(t,e[o],o);};
22
22
 
23
23
  let getDataAttr=(t,e)=>t.getAttribute("data-"+e);
24
24
 
@@ -30,7 +30,7 @@ let activeEvents={};let getIndex=(e,t,n)=>{for(let r=0;r<e.length;r++)if(e[r].se
30
30
 
31
31
  let getListeners=()=>{let t={};for(let r in activeEvents)t[r]=activeEvents[r];return t};
32
32
 
33
- let getOffset=f=>{let e=0,t=0;for(;f&&!isNaN(f.offsetLeft)&&!isNaN(f.offsetTop);)e+=f.offsetLeft-f.scrollLeft,t+=f.offsetTop-f.scrollTop,f=f.offsetParent;return {top:t,left:e}};
33
+ let getOffset=e=>{let f=0,t=0;for(;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)f+=e.offsetLeft-e.scrollLeft,t+=e.offsetTop-e.scrollTop,e=e.offsetParent;return {top:t,left:f}};
34
34
 
35
35
  let getOffsetTop=e=>{let t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return t>=0?t:0};
36
36
 
@@ -52,43 +52,43 @@ let isNodeList=t=>{let e=Object.prototype.toString.call(t);return "object"==type
52
52
 
53
53
  let isTotallyScrolled=l=>!!l&&l.scrollHeight-l.scrollTop<=l.clientHeight;
54
54
 
55
- let off=(e,n,o,t=!1)=>{"development"!==process.env.NODE_ENV||e||console.warn("[@koine/dom:off] unexisting DOM element"),e&&e.removeEventListener(n,o,t);};
55
+ let off=(e,o,n,t=!1)=>{"development"!==process.env.NODE_ENV||e||console.warn("[@koine/dom:off] unexisting DOM element"),e&&e.removeEventListener(o,n,t);};
56
56
 
57
- let on=(n,t,i,r=!1)=>("development"!==process.env.NODE_ENV||n||console.warn("[@koine/dom:on] unexisting DOM element"),n)?(n.addEventListener(t,i,r),()=>off(n,t,i)):noop;
57
+ let on=(n,t,r,i=!1)=>("development"!==process.env.NODE_ENV||n||console.warn("[@koine/dom:on] unexisting DOM element"),n)?(n.addEventListener(t,r,i),()=>off(n,t,r)):noop;
58
58
 
59
- let listenLoaded=e=>on(document,"DOMContentLoaded",e);
59
+ let listenLoaded=o=>on(document,"DOMContentLoaded",o);
60
60
 
61
- let listen=(e,l,r)=>{l&&r&&e.split(",").forEach(function(e){activeEvents[e=e.trim()]||(activeEvents[e]=[],on(window,e,eventHandler,!0)),activeEvents[e]?.push({selector:l,callback:r});});};
61
+ let listen=(i,l,r)=>{l&&r&&i.split(",").forEach(function(i){activeEvents[i=i.trim()]||(activeEvents[i]=[],on(window,i,eventHandler,!0)),activeEvents[i]?.push({selector:l,callback:r});});};
62
62
 
63
- let unlisten=(l,o,n)=>{l.split(",").forEach(l=>{let f=activeEvents[l=l.trim()];if(!f)return;if(f.length<2||!o){delete activeEvents[l],off(window,l,eventHandler,!0);return}let m=getIndex(f,o,n);m<0||activeEvents[l].splice(m,1);});};
63
+ let unlisten=(r,n,o)=>{r.split(",").forEach(r=>{let f=activeEvents[r=r.trim()];if(!f)return;if(f.length<2||!n){delete activeEvents[r],off(window,r,eventHandler,!0);return}let p=getIndex(f,n,o);p<0||activeEvents[r].splice(p,1);});};
64
64
 
65
- let listenOnce=(n,o,r)=>listen(n,o,function e(l){let m=getRunTarget(l.target,o);r(l,m||window),unlisten(n,o,e);});
65
+ let listenOnce=(i,o,l)=>listen(i,o,function e(r){let m=getRunTarget(r.target,o);l(r,m||window),unlisten(i,o,e);});
66
66
 
67
- let listenResize=(i,o)=>on(o||window,"resize",i);
67
+ let listenResize=(i,t)=>on(t||window,"resize",i);
68
68
 
69
- let listenResizeDebounced=(o,...t)=>listenResize(debounce(...t),o);
69
+ let listenResizeDebounced=(t,...o)=>listenResize(debounce(...o),t);
70
70
 
71
71
  let listenResizeThrottled=(i,...o)=>listenResize(throttle(...o),i);
72
72
 
73
- let listenScroll=(l,r)=>on(r||window,"scroll",l,{capture:!0,passive:!0});
73
+ let listenScroll=(o,e)=>on(e||window,"scroll",o,{capture:!0,passive:!0});
74
74
 
75
- let listenScrollDebounced=(e,...r)=>listenScroll(debounce(...r),e);
75
+ let listenScrollDebounced=(o,...t)=>listenScroll(debounce(...t),o);
76
76
 
77
- let listenScrollThrottled=(t,...r)=>listenScroll(throttle(...r),t);
77
+ let listenScrollThrottled=(o,...r)=>listenScroll(throttle(...r),o);
78
78
 
79
- let once=(t,e,f,m=!1)=>{let n=r=>{f(r),off(t,e,n);};return on(t,e,n,m)};
79
+ let once=(r,t,f,m=!1)=>{let n=e=>{f(e),off(r,t,n);};return on(r,t,n,m)};
80
80
 
81
- let onClickOutside=(c,e,r=!1)=>{let i=t=>{!c.contains(t.target)&&(e(t),r&&n());},n=()=>{off(document,"click",i);};return on(document,"click",i),n};
81
+ let onClickOutside=(e,c,i=!1)=>{let r=t=>{!e.contains(t.target)&&(c(t),i&&n());},n=()=>{off(document,"click",r);};return on(document,"click",r),n};
82
82
 
83
83
  let removeClass=(e,s="")=>{("development"!==process.env.NODE_ENV||e)&&e&&e.classList.remove(s);};
84
84
 
85
- let scrollTo=(i,l,e,r)=>{let w=i.toFixed();if(l){let i=!1,r=function(){window.pageYOffset.toFixed()===w&&(off(window,"scroll",r),i=!0,l());};on(window,"scroll",r),r(),e&&setTimeout(()=>{i||(off(window,"scroll",r),l());},e);}window.scrollTo({top:i,behavior:r||"smooth"});};
85
+ let scrollTo=(t,e,i,r)=>{let w=t.toFixed();if(e){let t=!1,r=function(){window.pageYOffset.toFixed()===w&&(off(window,"scroll",r),t=!0,e());};on(window,"scroll",r),r(),i&&setTimeout(()=>{t||(off(window,"scroll",r),e());},i);}window.scrollTo({top:t,behavior:r||"smooth"});};
86
86
 
87
87
  let setDataAttr=(t,e,r)=>{if(null==r){t.removeAttribute("data-"+e);return}t.setAttribute("data-"+e,r.toString());};
88
88
 
89
89
  let setVendorCSS=(e,t,s)=>{let l=t.charAt(0).toUpperCase()+t.slice(1);e.style["webkit"+l]=s,e.style["moz"+l]=s,e.style["ms"+l]=s,e.style["o"+l]=s,e.style[t]=s;};
90
90
 
91
- let siblings=e=>{if(e&&e.parentNode){let r=e.parentNode.firstChild,t=[];for(;r;r=r.nextSibling)1===r.nodeType&&r!==e&&t.push(r);return t}return []};
91
+ let siblings=e=>{if(e&&e.parentNode){let t=e.parentNode.firstChild,r=[];for(;t;t=t.nextSibling)1===t.nodeType&&t!==e&&r.push(t);return r}return []};
92
92
 
93
93
  let toArray=r=>Array.prototype.slice.call(r);
94
94
 
package/index.js ADDED
@@ -0,0 +1,45 @@
1
+ export { $ } from "./$";
2
+ export { $all } from "./$all";
3
+ export { $each } from "./$each";
4
+ export { addClass } from "./addClass";
5
+ export { calculateFixedOffset } from "./calculateFixedOffset";
6
+ export { createElement } from "./createElement";
7
+ export { emitEvent } from "./emitEvent";
8
+ export { escapeSelector } from "./escapeSelector";
9
+ export { exists } from "./exists";
10
+ export { forEach } from "./forEach";
11
+ export { getDataAttr } from "./getDataAttr";
12
+ export { getDocumentHeight } from "./getDocumentHeight";
13
+ export { getHeight } from "./getHeight";
14
+ export { getListeners } from "./getListeners";
15
+ export { getOffset } from "./getOffset";
16
+ export { getOffsetTop } from "./getOffsetTop";
17
+ export { getOffsetTopSlim } from "./getOffsetTopSlim";
18
+ export { getScrollbarWidth } from "./getScrollbarWidth";
19
+ export { getStyleValue } from "./getStyleValue";
20
+ export { getVisualBackgroundColor } from "./getVisualBackgroundColor";
21
+ export { injectCss } from "./injectCss";
22
+ export { isHidden } from "./isHidden";
23
+ export { isInViewport } from "./isInViewport";
24
+ export { isNodeList } from "./isNodeList";
25
+ export { isTotallyScrolled } from "./isTotallyScrolled";
26
+ export { listenLoaded } from "./listenLoaded";
27
+ export { listenOnce } from "./listenOnce";
28
+ export { listenResize } from "./listenResize";
29
+ export { listenResizeDebounced } from "./listenResizeDebounced";
30
+ export { listenResizeThrottled } from "./listenResizeThrottled";
31
+ export { listenScroll } from "./listenScroll";
32
+ export { listenScrollDebounced } from "./listenScrollDebounced";
33
+ export { listenScrollThrottled } from "./listenScrollThrottled";
34
+ export { listen } from "./listen";
35
+ export { off } from "./off";
36
+ export { once } from "./once";
37
+ export { onClickOutside } from "./onClickOutside";
38
+ export { on } from "./on";
39
+ export { removeClass } from "./removeClass";
40
+ export { scrollTo } from "./scrollTo";
41
+ export { setDataAttr } from "./setDataAttr";
42
+ export { setVendorCSS } from "./setVendorCSS";
43
+ export { siblings } from "./siblings";
44
+ export { toArray } from "./toArray";
45
+ export { unlisten } from "./unlisten";
package/injectCss.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let injectCss: (id: string, cssString?: string, root?: Document) => void;
2
+ export default injectCss;
package/injectCss.js ADDED
@@ -0,0 +1,11 @@
1
+ import { $ } from "./$";
2
+ export let injectCss = (id, cssString = "", root = document) => {
3
+ let styleblock = $("#" + id);
4
+ if (!styleblock) {
5
+ styleblock = root.createElement("style");
6
+ styleblock.id = id;
7
+ root.body.appendChild(styleblock);
8
+ }
9
+ styleblock.innerHTML = cssString;
10
+ };
11
+ export default injectCss;
package/isHidden.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let isHidden: <T extends HTMLElement>(el?: T | undefined) => boolean;
2
+ export default isHidden;
package/isHidden.js ADDED
@@ -0,0 +1,2 @@
1
+ export let isHidden = (el) => !el || el.offsetParent === null;
2
+ export default isHidden;
package/isInViewport.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let isInViewport: <T extends Element>(elem: T) => boolean;
2
+ export default isInViewport;
@@ -0,0 +1,10 @@
1
+ export let isInViewport = (elem) => {
2
+ const distance = elem.getBoundingClientRect();
3
+ return (distance.top >= 0 &&
4
+ distance.left >= 0 &&
5
+ distance.bottom <=
6
+ (window.innerHeight || document.documentElement.clientHeight) &&
7
+ distance.right <=
8
+ (window.innerWidth || document.documentElement.clientWidth));
9
+ };
10
+ export default isInViewport;
package/isNodeList.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let isNodeList: (nodes: any) => nodes is NodeList;
2
+ export default isNodeList;
package/isNodeList.js ADDED
@@ -0,0 +1,9 @@
1
+ export let isNodeList = (nodes) => {
2
+ const stringRepr = Object.prototype.toString.call(nodes);
3
+ return (typeof nodes === "object" &&
4
+ /^\[object (HTMLCollection|NodeList|Object)\]$/.test(stringRepr) &&
5
+ typeof nodes.length === "number" &&
6
+ (nodes.length === 0 ||
7
+ (typeof nodes[0] === "object" && nodes[0].nodeType > 0)));
8
+ };
9
+ export default isNodeList;
@@ -1 +1,2 @@
1
1
  export declare let isTotallyScrolled: <T extends HTMLElement>(el?: T | null | undefined) => boolean;
2
+ export default isTotallyScrolled;
@@ -0,0 +1,2 @@
1
+ export let isTotallyScrolled = (el) => el ? el.scrollHeight - el.scrollTop <= el.clientHeight : false;
2
+ export default isTotallyScrolled;
package/listen.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { type EventCallback } from "./_listen-delegation";
2
2
  import type { AnyDOMEventTarget, AnyDOMEventType } from "./types";
3
3
  export declare let listen: <TTypes extends AnyDOMEventType, TTarget extends AnyDOMEventTarget = AnyDOMEventTarget>(types: TTypes, selector: string, callback: EventCallback<TTarget, TTypes>) => void;
4
+ export default listen;
package/listen.js ADDED
@@ -0,0 +1,18 @@
1
+ import { activeEvents, eventHandler, } from "./_listen-delegation";
2
+ import { on } from "./on";
3
+ export let listen = (types, selector, callback) => {
4
+ if (!selector || !callback)
5
+ return;
6
+ types.split(",").forEach(function (type) {
7
+ type = type.trim();
8
+ if (!activeEvents[type]) {
9
+ activeEvents[type] = [];
10
+ on(window, type, eventHandler, true);
11
+ }
12
+ activeEvents[type]?.push({
13
+ selector: selector,
14
+ callback: callback,
15
+ });
16
+ });
17
+ };
18
+ export default listen;
package/listenLoaded.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let listenLoaded: (handler: (event: Event) => any) => () => void;
2
+ export default listenLoaded;
@@ -0,0 +1,3 @@
1
+ import { on } from "./on";
2
+ export let listenLoaded = (handler) => on(document, "DOMContentLoaded", handler);
3
+ export default listenLoaded;
package/listenOnce.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import { type EventCallback } from "./_listen-delegation";
2
2
  export declare let listenOnce: (types: string, selector: string, callback: EventCallback) => void;
3
+ export default listenOnce;
package/listenOnce.js ADDED
@@ -0,0 +1,9 @@
1
+ import { getRunTarget } from "./_listen-delegation";
2
+ import { listen } from "./listen";
3
+ import { unlisten } from "./unlisten";
4
+ export let listenOnce = (types, selector, callback) => listen(types, selector, function temp(event) {
5
+ const target = getRunTarget(event.target, selector);
6
+ callback(event, target || window);
7
+ unlisten(types, selector, temp);
8
+ });
9
+ export default listenOnce;
package/listenResize.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import type { AnyDOMEventTargetLoose } from "./types";
2
2
  export declare let listenResize: (handler: () => void, el?: AnyDOMEventTargetLoose) => () => void;
3
+ export default listenResize;
@@ -0,0 +1,3 @@
1
+ import { on } from "./on";
2
+ export let listenResize = (handler, el) => on(el || window, "resize", handler);
3
+ export default listenResize;
@@ -1,2 +1,3 @@
1
1
  import { listenResize } from "./listenResize";
2
2
  export declare let listenResizeDebounced: (el?: Parameters<typeof listenResize>[1], fn: (...args: any[]) => any, wait?: number | undefined, immediate?: boolean | undefined) => () => void;
3
+ export default listenResizeDebounced;
@@ -0,0 +1,4 @@
1
+ import { debounce } from "@koine/utils";
2
+ import { listenResize } from "./listenResize";
3
+ export let listenResizeDebounced = (el, ...args) => listenResize(debounce(...args), el);
4
+ export default listenResizeDebounced;
@@ -1,2 +1,3 @@
1
1
  import { listenResize } from "./listenResize";
2
2
  export declare let listenResizeThrottled: (el?: Parameters<typeof listenResize>[1], fn: Function, limit: number, context?: unknown) => () => void;
3
+ export default listenResizeThrottled;
@@ -0,0 +1,4 @@
1
+ import { throttle } from "@koine/utils";
2
+ import { listenResize } from "./listenResize";
3
+ export let listenResizeThrottled = (el, ...args) => listenResize(throttle(...args), el);
4
+ export default listenResizeThrottled;
package/listenScroll.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import type { AnyDOMEventTargetLoose } from "./types";
2
2
  export declare let listenScroll: (handler: () => void, el?: AnyDOMEventTargetLoose) => () => void;
3
+ export default listenScroll;
@@ -0,0 +1,6 @@
1
+ import { on } from "./on";
2
+ export let listenScroll = (handler, el) => on(el || window, "scroll", handler, {
3
+ capture: true,
4
+ passive: true,
5
+ });
6
+ export default listenScroll;
@@ -1,2 +1,3 @@
1
1
  import { listenScroll } from "./listenScroll";
2
2
  export declare let listenScrollDebounced: (el?: Parameters<typeof listenScroll>[1], fn: (...args: any[]) => any, wait?: number | undefined, immediate?: boolean | undefined) => () => void;
3
+ export default listenScrollDebounced;
@@ -0,0 +1,4 @@
1
+ import { debounce } from "@koine/utils";
2
+ import { listenScroll } from "./listenScroll";
3
+ export let listenScrollDebounced = (el, ...args) => listenScroll(debounce(...args), el);
4
+ export default listenScrollDebounced;
@@ -1,2 +1,3 @@
1
1
  import { listenScroll } from "./listenScroll";
2
2
  export declare let listenScrollThrottled: (el?: Parameters<typeof listenScroll>[1], fn: Function, limit: number, context?: unknown) => () => void;
3
+ export default listenScrollThrottled;
@@ -0,0 +1,4 @@
1
+ import { throttle } from "@koine/utils";
2
+ import { listenScroll } from "./listenScroll";
3
+ export let listenScrollThrottled = (el, ...args) => listenScroll(throttle(...args), el);
4
+ export default listenScrollThrottled;
package/off.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import type { AnyDOMEvent, AnyDOMEventTargetLoose, AnyDOMEventType } from "./types";
2
2
  export declare let off: <TType extends AnyDOMEventType>(el: AnyDOMEventTargetLoose, type: TType, handler: (event: AnyDOMEvent<TType>) => void, options?: EventListenerOptions | boolean) => void;
3
+ export default off;
package/off.js ADDED
@@ -0,0 +1,10 @@
1
+ export let off = (el, type, handler, options = false) => {
2
+ if (process.env["NODE_ENV"] === "development") {
3
+ if (!el) {
4
+ console.warn("[@koine/dom:off] unexisting DOM element");
5
+ }
6
+ }
7
+ if (el)
8
+ el.removeEventListener(type, handler, options);
9
+ };
10
+ export default off;
package/on.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import type { AnyDOMEvent, AnyDOMEventTargetLoose, AnyDOMEventType } from "./types";
2
2
  export declare let on: <TType extends AnyDOMEventType>(el: AnyDOMEventTargetLoose, type: TType, handler: (event: AnyDOMEvent<TType>) => void, options?: AddEventListenerOptions | boolean) => () => void;
3
+ export default on;
package/on.js ADDED
@@ -0,0 +1,15 @@
1
+ import { noop } from "@koine/utils";
2
+ import { off } from "./off";
3
+ export let on = (el, type, handler, options = false) => {
4
+ if (process.env["NODE_ENV"] === "development") {
5
+ if (!el) {
6
+ console.warn("[@koine/dom:on] unexisting DOM element");
7
+ }
8
+ }
9
+ if (el) {
10
+ el.addEventListener(type, handler, options);
11
+ return () => off(el, type, handler);
12
+ }
13
+ return noop;
14
+ };
15
+ export default on;
@@ -1 +1,2 @@
1
1
  export declare let onClickOutside: <T extends HTMLElement>(element: T, callback: (event: Event) => any, autoUnbind?: boolean) => () => void;
2
+ export default onClickOutside;
@@ -0,0 +1,17 @@
1
+ import { off } from "./off";
2
+ import { on } from "./on";
3
+ export let onClickOutside = (element, callback, autoUnbind = false) => {
4
+ const bind = (event) => {
5
+ if (!element.contains(event.target)) {
6
+ callback(event);
7
+ if (autoUnbind)
8
+ unbind();
9
+ }
10
+ };
11
+ const unbind = () => {
12
+ off(document, "click", bind);
13
+ };
14
+ on(document, "click", bind);
15
+ return unbind;
16
+ };
17
+ export default onClickOutside;
package/once.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  import type { AnyDOMEventTargetLoose } from "./types";
2
2
  export declare let once: (el: AnyDOMEventTargetLoose, type: string, handler: EventListener, options?: EventListenerOptions | boolean) => () => void;
3
+ export default once;
package/once.js ADDED
@@ -0,0 +1,10 @@
1
+ import { off } from "./off";
2
+ import { on } from "./on";
3
+ export let once = (el, type, handler, options = false) => {
4
+ const handlerWrapper = (event) => {
5
+ handler(event);
6
+ off(el, type, handlerWrapper);
7
+ };
8
+ return on(el, type, handlerWrapper, options);
9
+ };
10
+ export default once;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@koine/dom",
3
3
  "sideEffects": false,
4
4
  "dependencies": {
5
- "@koine/utils": "2.0.0-beta.72"
5
+ "@koine/utils": "2.0.0-beta.74"
6
6
  },
7
7
  "exports": {
8
8
  "./package.json": "./package.json",
@@ -14,5 +14,5 @@
14
14
  },
15
15
  "module": "./index.esm.js",
16
16
  "main": "./index.cjs.js",
17
- "version": "2.0.0-beta.72"
17
+ "version": "2.0.0-beta.74"
18
18
  }
package/removeClass.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let removeClass: <T extends Element>(el?: T | undefined, className?: string) => void;
2
+ export default removeClass;
package/removeClass.js ADDED
@@ -0,0 +1,11 @@
1
+ export let removeClass = (el, className = "") => {
2
+ if (process.env["NODE_ENV"] === "development") {
3
+ if (!el) {
4
+ ("[@koine/dom:removeClass] unexisting DOM element");
5
+ return;
6
+ }
7
+ }
8
+ if (el)
9
+ el.classList.remove(className);
10
+ };
11
+ export default removeClass;
package/scrollTo.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let scrollTo: (destination: number, callback?: () => void, fallbackTimeout?: number, behavior?: ScrollBehavior) => void;
2
+ export default scrollTo;
package/scrollTo.js ADDED
@@ -0,0 +1,30 @@
1
+ import { off } from "./off";
2
+ import { on } from "./on";
3
+ export let scrollTo = (destination, callback, fallbackTimeout, behavior) => {
4
+ const fixedDestination = destination.toFixed();
5
+ if (callback) {
6
+ let callbackFired = false;
7
+ const onScroll = function () {
8
+ if (window.pageYOffset.toFixed() === fixedDestination) {
9
+ off(window, "scroll", onScroll);
10
+ callbackFired = true;
11
+ callback();
12
+ }
13
+ };
14
+ on(window, "scroll", onScroll);
15
+ onScroll();
16
+ if (fallbackTimeout) {
17
+ setTimeout(() => {
18
+ if (!callbackFired) {
19
+ off(window, "scroll", onScroll);
20
+ callback();
21
+ }
22
+ }, fallbackTimeout);
23
+ }
24
+ }
25
+ window.scrollTo({
26
+ top: destination,
27
+ behavior: behavior || "smooth",
28
+ });
29
+ };
30
+ export default scrollTo;
package/setDataAttr.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let setDataAttr: <T extends Element>(element: T, attribute: string, value?: string | number | null | boolean) => void;
2
+ export default setDataAttr;
package/setDataAttr.js ADDED
@@ -0,0 +1,8 @@
1
+ export let setDataAttr = (element, attribute, value) => {
2
+ if (value === null || typeof value === "undefined") {
3
+ element.removeAttribute("data-" + attribute);
4
+ return;
5
+ }
6
+ element.setAttribute("data-" + attribute, value.toString());
7
+ };
8
+ export default setDataAttr;
package/setVendorCSS.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let setVendorCSS: <T extends HTMLElement>(element: T, prop: string, value: string | number | boolean) => void;
2
+ export default setVendorCSS;
@@ -0,0 +1,9 @@
1
+ export let setVendorCSS = (element, prop, value) => {
2
+ const propUpper = prop.charAt(0).toUpperCase() + prop.slice(1);
3
+ element.style["webkit" + propUpper] = value;
4
+ element.style["moz" + propUpper] = value;
5
+ element.style["ms" + propUpper] = value;
6
+ element.style["o" + propUpper] = value;
7
+ element.style[prop] = value;
8
+ };
9
+ export default setVendorCSS;
package/siblings.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let siblings: <T extends Element>(node: T) => Element[];
2
+ export default siblings;
package/siblings.js ADDED
@@ -0,0 +1,14 @@
1
+ export let siblings = (node) => {
2
+ if (node && node.parentNode) {
3
+ let n = node.parentNode.firstChild;
4
+ const matched = [];
5
+ for (; n; n = n.nextSibling) {
6
+ if (n.nodeType === 1 && n !== node) {
7
+ matched.push(n);
8
+ }
9
+ }
10
+ return matched;
11
+ }
12
+ return [];
13
+ };
14
+ export default siblings;
package/toArray.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  export declare let toArray: <T extends Element>(nodeList: NodeListOf<T> | HTMLFormControlsCollection) => T[] | HTMLFormElement[];
2
+ export default toArray;
package/toArray.js ADDED
@@ -0,0 +1,2 @@
1
+ export let toArray = (nodeList) => Array.prototype.slice.call(nodeList);
2
+ export default toArray;
package/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
package/unlisten.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { type EventCallback } from "./_listen-delegation";
2
2
  import type { AnyDOMEventTarget, AnyDOMEventType } from "./types";
3
3
  export declare let unlisten: <TTypes extends AnyDOMEventType, TTarget extends AnyDOMEventTarget = AnyDOMEventTarget>(types: TTypes, selector: string, callback: EventCallback<TTarget, TTypes>) => void;
4
+ export default unlisten;
package/unlisten.js ADDED
@@ -0,0 +1,20 @@
1
+ import { activeEvents, eventHandler, getIndex, } from "./_listen-delegation";
2
+ import { off } from "./off";
3
+ export let unlisten = (types, selector, callback) => {
4
+ types.split(",").forEach((type) => {
5
+ type = type.trim();
6
+ const events = activeEvents[type];
7
+ if (!events)
8
+ return;
9
+ if (events.length < 2 || !selector) {
10
+ delete activeEvents[type];
11
+ off(window, type, eventHandler, true);
12
+ return;
13
+ }
14
+ const index = getIndex(events, selector, callback);
15
+ if (index < 0)
16
+ return;
17
+ activeEvents[type].splice(index, 1);
18
+ });
19
+ };
20
+ export default unlisten;