@webalternatif/js-core 1.3.0 → 1.4.0

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.
@@ -0,0 +1,62 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
8
+ import { isTouchDevice } from "./is.js";
9
+ var Mouse = /*#__PURE__*/function () {
10
+ function Mouse() {
11
+ _classCallCheck(this, Mouse);
12
+ }
13
+ return _createClass(Mouse, null, [{
14
+ key: "getPosition",
15
+ value: function getPosition(ev, element) {
16
+ ev = _assertClassBrand(Mouse, this, _getEvent).call(this, ev);
17
+ var rect = {
18
+ left: 0,
19
+ top: 0
20
+ };
21
+ if (element instanceof Element) {
22
+ var r = element.getBoundingClientRect();
23
+ rect = {
24
+ left: window.scrollX + r.left,
25
+ top: window.scrollY + r.top
26
+ };
27
+ }
28
+ return {
29
+ x: ev.pageX !== undefined ? ev.pageX - rect.left : rect.left,
30
+ y: ev.pageY !== undefined ? ev.pageY - rect.top : rect.top
31
+ };
32
+ }
33
+ }, {
34
+ key: "getViewportPosition",
35
+ value: function getViewportPosition(ev) {
36
+ ev = _assertClassBrand(Mouse, this, _getEvent).call(this, ev);
37
+ return {
38
+ x: ev.clientX,
39
+ y: ev.clientY
40
+ };
41
+ }
42
+ }, {
43
+ key: "getElement",
44
+ value: function getElement(ev) {
45
+ ev = _assertClassBrand(Mouse, this, _getEvent).call(this, ev);
46
+ return window.document.elementFromPoint(ev.clientX, ev.clientY);
47
+ }
48
+ }]);
49
+ }();
50
+ function _getEvent(ev) {
51
+ var _ev$originalEvent;
52
+ if (isTouchDevice()) {
53
+ var orgEvent = ev.originalEvent ? ev.originalEvent : ev;
54
+ if (orgEvent.changedTouches && orgEvent.changedTouches.length) {
55
+ ev = orgEvent.changedTouches[0];
56
+ } else if (orgEvent.touches) {
57
+ ev = orgEvent.touches[0];
58
+ }
59
+ }
60
+ return (_ev$originalEvent = ev.originalEvent) !== null && _ev$originalEvent !== void 0 ? _ev$originalEvent : ev;
61
+ }
62
+ export default Mouse;
@@ -0,0 +1,110 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
3
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
4
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
8
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
9
+ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
10
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
11
+ function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
12
+ function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
13
+ import { isFunction, isPlainObject } from "./is.js";
14
+ import { each, extend } from "./traversal.js";
15
+
16
+ /**
17
+ * @typedef {string | (() => string)} TranslatorValue
18
+ */
19
+
20
+ /**
21
+ * @typedef {Record<string, Record<string, Record<string, TranslatorValue>>>} TranslatorNsMapping
22
+ */
23
+
24
+ /**
25
+ * @typedef {Record<string, Record<string, TranslatorValue>>} TranslatorCoreMapping
26
+ */
27
+
28
+ /**
29
+ * @typedef {TranslatorNsMapping | TranslatorCoreMapping} TranslatorMapping
30
+ */
31
+ var _lang = /*#__PURE__*/new WeakMap();
32
+ var _mapping = /*#__PURE__*/new WeakMap();
33
+ var _Translator_brand = /*#__PURE__*/new WeakSet();
34
+ var Translator = /*#__PURE__*/function () {
35
+ /**
36
+ * @param {TranslatorMapping} mapping
37
+ * @param {string} [defaultLang]
38
+ */
39
+ function Translator(_mapping2, defaultLang) {
40
+ _classCallCheck(this, Translator);
41
+ _classPrivateMethodInitSpec(this, _Translator_brand);
42
+ /** @type string */
43
+ _classPrivateFieldInitSpec(this, _lang, void 0);
44
+ /** @type TranslatorMapping */
45
+ _classPrivateFieldInitSpec(this, _mapping, void 0);
46
+ _assertClassBrand(_Translator_brand, this, _setMapping).call(this, _mapping2);
47
+ this.setLang(defaultLang);
48
+ }
49
+ return _createClass(Translator, [{
50
+ key: "translate",
51
+ value:
52
+ /**
53
+ * @param {string} label
54
+ * @param {string} [namespace]
55
+ * @param {string} [lang]
56
+ * @returns {string}
57
+ */
58
+ function translate(label, namespace, lang) {
59
+ lang = undefined === lang ? this.getLang() : lang;
60
+ namespace = undefined === namespace ? 'core' : namespace;
61
+ var translationExists = undefined !== _classPrivateFieldGet(_mapping, this)[namespace] && undefined !== _classPrivateFieldGet(_mapping, this)[namespace][lang] && undefined !== _classPrivateFieldGet(_mapping, this)[namespace][lang][label];
62
+ if (translationExists) {
63
+ var tr = _classPrivateFieldGet(_mapping, this)[namespace][lang][label];
64
+ return isFunction(tr) ? tr() : tr;
65
+ }
66
+ return 'en' !== lang ? this.translate(label, namespace, 'en') : label;
67
+ }
68
+ }, {
69
+ key: "_",
70
+ value: function _() {
71
+ return this.translate.apply(this, arguments);
72
+ }
73
+ }, {
74
+ key: "getLang",
75
+ value: function getLang() {
76
+ return _classPrivateFieldGet(_lang, this);
77
+ }
78
+ }, {
79
+ key: "setLang",
80
+ value: function setLang(lang) {
81
+ if (!lang) {
82
+ if (typeof navigator !== 'undefined' && navigator.language) {
83
+ lang = navigator.language;
84
+ } else if (typeof process !== 'undefined' && process.env) {
85
+ lang = process.env.LANG || process.env.LC_ALL || process.env.LC_MESSAGES;
86
+ }
87
+ }
88
+ _classPrivateFieldSet(_lang, this, (lang || 'en').trim().toLowerCase().slice(0, 2));
89
+ }
90
+ }]);
91
+ }();
92
+ function _setMapping(mapping) {
93
+ var nsMapping = {},
94
+ coreMapping = {};
95
+ each(mapping, function (ns, langs) {
96
+ each(langs, function (lang, trads) {
97
+ if (isPlainObject(trads)) {
98
+ if (undefined === nsMapping[ns]) nsMapping[ns] = {};
99
+ nsMapping[ns][lang] = trads;
100
+ } else {
101
+ if (undefined === coreMapping[ns]) coreMapping[ns] = {};
102
+ coreMapping[ns][lang] = trads;
103
+ }
104
+ });
105
+ });
106
+ _classPrivateFieldSet(_mapping, this, extend(true, nsMapping, {
107
+ core: extend({}, nsMapping.core || {}, coreMapping)
108
+ }));
109
+ }
110
+ export { Translator as default };
package/dist/cjs/dom.js CHANGED
@@ -1,3 +1,7 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
5
  function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
2
6
  function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
7
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
@@ -8,8 +12,109 @@ import { isArray, isArrayLike, isFunction, isObject, isPlainObject, isString } f
8
12
  import { camelCase } from "./string.js";
9
13
  import { each, foreach, map } from "./traversal.js";
10
14
  import { inArray } from "./array.js";
15
+ import Mouse from "./Mouse.js";
11
16
  var cssNumber = ['animationIterationCount', 'aspectRatio', 'borderImageSlice', 'columnCount', 'flexGrow', 'flexShrink', 'fontWeight', 'gridArea', 'gridColumn', 'gridColumnEnd', 'gridColumnStart', 'gridRow', 'gridRowEnd', 'gridRowStart', 'lineHeight', 'opacity', 'order', 'orphans', 'scale', 'widows', 'zIndex', 'zoom', 'fillOpacity', 'floodOpacity', 'stopOpacity', 'strokeMiterlimit', 'strokeOpacity'];
12
- var LISTENERS = new WeakMap();
17
+ var LISTENERS = new Map();
18
+ var CUSTOM_EVENTS = ['longtap', 'dbltap'];
19
+ var ENABLED_EVENTS = new Set();
20
+ var _teardownLongTap = null;
21
+ var _teardownDblTap = null;
22
+ var supplyEvent = function supplyEvent(event) {
23
+ if (ENABLED_EVENTS !== null && ENABLED_EVENTS !== void 0 && ENABLED_EVENTS.has(event)) return;
24
+ if (event === 'longtap') enableLongTap();
25
+ if (event === 'dbltap') enableDblTap();
26
+ ENABLED_EVENTS.add(event);
27
+ };
28
+ var enableLongTap = function enableLongTap() {
29
+ var LONGPRESS_DELAY = 800;
30
+ var MOVE_TOLERANCE = 8;
31
+ var timer = null;
32
+ var startX = 0;
33
+ var startY = 0;
34
+ var target = null;
35
+ var start = function start(ev) {
36
+ target = ev.target;
37
+ var pos = Mouse.getViewportPosition(ev);
38
+ startX = pos.x;
39
+ startY = pos.y;
40
+ timer = setTimeout(function () {
41
+ target.dispatchEvent(new CustomEvent('longtap', {
42
+ bubbles: true,
43
+ cancelable: true,
44
+ detail: {
45
+ originalEvent: ev
46
+ }
47
+ }));
48
+ timer = null;
49
+ }, LONGPRESS_DELAY);
50
+ };
51
+ var move = function move(ev) {
52
+ if (!timer) return;
53
+ var pos = Mouse.getViewportPosition(ev);
54
+ if (Math.hypot(pos.x - startX, pos.y - startY) > MOVE_TOLERANCE) {
55
+ clearTimeout(timer);
56
+ timer = null;
57
+ }
58
+ };
59
+ var end = function end() {
60
+ if (timer) clearTimeout(timer);
61
+ timer = null;
62
+ };
63
+ document.addEventListener('touchstart', start, {
64
+ passive: true
65
+ });
66
+ document.addEventListener('touchmove', move, {
67
+ passive: true
68
+ });
69
+ document.addEventListener('touchend', end);
70
+ document.addEventListener('touchcancel', end);
71
+ _teardownLongTap = function teardownLongTap() {
72
+ document.removeEventListener('touchstart', start, {
73
+ passive: true
74
+ });
75
+ document.removeEventListener('touchmove', move, {
76
+ passive: true
77
+ });
78
+ document.removeEventListener('touchend', end);
79
+ document.removeEventListener('touchcancel', end);
80
+ _teardownLongTap = null;
81
+ };
82
+ };
83
+ var enableDblTap = function enableDblTap() {
84
+ var DBLTAP_DELAY = 300;
85
+ var MOVE_TOLERANCE = 8;
86
+ var lastTapTime = 0;
87
+ var lastPos = null;
88
+ var start = function start(ev) {
89
+ var target = ev.target;
90
+ if (Date.now() - lastTapTime > DBLTAP_DELAY) {
91
+ lastTapTime = Date.now();
92
+ lastPos = Mouse.getViewportPosition(ev);
93
+ } else {
94
+ var pos = Mouse.getViewportPosition(ev);
95
+ if (Math.hypot(pos.x - lastPos.x, pos.y - lastPos.y) <= MOVE_TOLERANCE) {
96
+ target.dispatchEvent(new CustomEvent('dbltap', {
97
+ bubbles: true,
98
+ cancelable: true,
99
+ detail: {
100
+ originalEvent: ev
101
+ }
102
+ }));
103
+ }
104
+ lastTapTime = Date.now();
105
+ lastPos = pos;
106
+ }
107
+ };
108
+ document.addEventListener('touchstart', start, {
109
+ passive: true
110
+ });
111
+ _teardownDblTap = function teardownDblTap() {
112
+ document.removeEventListener('touchstart', start, {
113
+ passive: true
114
+ });
115
+ _teardownDblTap = null;
116
+ };
117
+ };
13
118
 
14
119
  /**
15
120
  * @param {any} o
@@ -50,7 +155,7 @@ export var getStyle = function getStyle(el, cssRule) {
50
155
  }
51
156
  return el.style[camelCase(cssRule)] || '';
52
157
  };
53
- export default {
158
+ var dom = {
54
159
  /**
55
160
  * @param {Element} el
56
161
  * @param {string} [selector]
@@ -68,16 +173,16 @@ export default {
68
173
  return this.first(this.children(el, selector));
69
174
  },
70
175
  /**
71
- * @param {Element|Document} refEl
72
- * @param {string|Element|NodeList|Array<Element>} [selector]
73
- * @returns {Element|null}
176
+ * @param {Element|Document|string} refEl
177
+ * @param {string|Element|NodeList|Array<Element>} selector
178
+ * @returns {Element}
74
179
  */
75
180
  findOne: function findOne(refEl, selector) {
76
181
  var _this$find$;
77
182
  return (_this$find$ = this.find(refEl, selector)[0]) !== null && _this$find$ !== void 0 ? _this$find$ : null;
78
183
  },
79
184
  /**
80
- * @param {Element|Document} refEl
185
+ * @param {Element|Document|string} refEl
81
186
  * @param {string|Element|NodeList|Array<Element>} selector
82
187
  * @returns {Array<Element>}
83
188
  */
@@ -97,12 +202,16 @@ export default {
97
202
  return null;
98
203
  });
99
204
  }
100
- return Array.from(refEl.querySelectorAll(selector));
205
+ try {
206
+ return Array.from(refEl.querySelectorAll(selector));
207
+ } catch (e) {
208
+ return [];
209
+ }
101
210
  },
102
211
  /**
103
- * @param {Element} el
212
+ * @param {Element|string} el
104
213
  * @param {string} data
105
- * @param {string} value
214
+ * @param {string} [value]
106
215
  * @returns {Element|null}
107
216
  */
108
217
  findOneByData: function findOneByData(el, data, value) {
@@ -110,9 +219,9 @@ export default {
110
219
  return (_this$findByData$ = this.findByData(el, data, value)[0]) !== null && _this$findByData$ !== void 0 ? _this$findByData$ : null;
111
220
  },
112
221
  /**
113
- * @param {Element} el
222
+ * @param {Element|string} el
114
223
  * @param {string} data
115
- * @param {string} value
224
+ * @param {string} [value]
116
225
  * @returns {Element[]}
117
226
  */
118
227
  findByData: function findByData(el, data, value) {
@@ -218,7 +327,7 @@ export default {
218
327
  for (var _len2 = arguments.length, children = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
219
328
  children[_key2 - 1] = arguments[_key2];
220
329
  }
221
- foreach(children, function (child) {
330
+ foreach([].concat(children).reverse(), function (child) {
222
331
  if (isString(child)) {
223
332
  child = _this2.create(child);
224
333
  }
@@ -249,7 +358,7 @@ export default {
249
358
  },
250
359
  /**
251
360
  * @param {Element} el
252
- * @param {string|Element} selector
361
+ * @param {string|Element} [selector]
253
362
  * @returns {Element|null}
254
363
  */
255
364
  closest: function closest(el, selector) {
@@ -266,6 +375,9 @@ export default {
266
375
  }
267
376
  return null;
268
377
  }
378
+ if (undefined === selector) {
379
+ return el;
380
+ }
269
381
  return el.closest(selector);
270
382
  },
271
383
  /**
@@ -513,7 +625,11 @@ export default {
513
625
  handler = selector;
514
626
  selector = null;
515
627
  }
516
- foreach(events.split(' '), function (event) {
628
+ foreach(events.split(' '), function (rawEvent) {
629
+ var _rawEvent$split = rawEvent.split('.'),
630
+ _rawEvent$split2 = _slicedToArray(_rawEvent$split, 2),
631
+ event = _rawEvent$split2[0],
632
+ namespace = _rawEvent$split2[1];
517
633
  var listener = function listener(ev) {
518
634
  if (!selector) {
519
635
  handler.call(el, ev);
@@ -522,11 +638,11 @@ export default {
522
638
  var currentTarget = ev.target;
523
639
  while (currentTarget && currentTarget !== el) {
524
640
  if (_this5.matches(currentTarget, selector)) {
525
- var wrappedEv = Object.assign({}, ev, {
641
+ var wrappedEv = {
526
642
  originalEvent: ev,
527
643
  type: ev.type,
528
- currentTarget: currentTarget,
529
644
  target: ev.target,
645
+ currentTarget: currentTarget,
530
646
  relatedTarget: ev.relatedTarget,
531
647
  button: ev.button,
532
648
  pageX: ev.pageX,
@@ -540,7 +656,7 @@ export default {
540
656
  stopImmediatePropagation: function stopImmediatePropagation() {
541
657
  return ev.stopImmediatePropagation.apply(ev, arguments);
542
658
  }
543
- });
659
+ };
544
660
  handler.call(currentTarget, wrappedEv);
545
661
  break;
546
662
  }
@@ -557,16 +673,20 @@ export default {
557
673
  handler: handler,
558
674
  selector: selector,
559
675
  listener: listener,
676
+ namespace: namespace,
560
677
  options: options
561
678
  });
679
+ if (inArray(event, CUSTOM_EVENTS)) {
680
+ supplyEvent(event);
681
+ }
562
682
  el.addEventListener(event, listener, options);
563
683
  });
564
684
  return el;
565
685
  },
566
686
  /**
567
687
  * @param {Element|Document|Window} el
568
- * @param {string} events
569
- * @param {string|Element|function} selector
688
+ * @param {string} [events]
689
+ * @param {string|Element|function} [selector]
570
690
  * @param {function|AddEventListenerOptions|boolean} [handler]
571
691
  * @param {AddEventListenerOptions|boolean} [options]
572
692
  * @returns {Element}
@@ -579,10 +699,19 @@ export default {
579
699
  }
580
700
  var store = LISTENERS.get(el);
581
701
  if (!store) return el;
582
- foreach(events.split(' '), function (event) {
583
- each(_toConsumableArray(store).reverse(), function (i, l) {
584
- if (l.event === event && l.handler === handler && l.selector === selector && (options === undefined || l.options === options)) {
585
- el.removeEventListener(event, l.listener, l.options);
702
+ var evts = events ? events.split(' ') : [undefined];
703
+ foreach(evts, function (rawEvent) {
704
+ var _ref = undefined === rawEvent ? [undefined, undefined] : rawEvent.split('.'),
705
+ _ref2 = _slicedToArray(_ref, 2),
706
+ event = _ref2[0],
707
+ namespace = _ref2[1];
708
+ event = !event ? undefined : event;
709
+ var hasEvent = undefined !== event;
710
+ var hasNs = undefined !== namespace;
711
+ foreach(_toConsumableArray(store).reverse(), function (l) {
712
+ var match = !hasEvent && !hasNs || hasEvent && !hasNs && l.event === event || !hasEvent && hasNs && l.namespace === namespace || hasEvent && hasNs && l.event === event && l.namespace === namespace;
713
+ if (match && (undefined === event || l.event === event) && (undefined === handler || l.handler === handler) && (undefined === selector || l.selector === selector) && (undefined === namespace || l.namespace === namespace) && (undefined === options || l.options === options)) {
714
+ el.removeEventListener(l.event, l.listener, l.options);
586
715
  var index = store.indexOf(l);
587
716
  index !== -1 && store.splice(index, 1);
588
717
  }
@@ -620,14 +749,14 @@ export default {
620
749
  * @param {Element} el
621
750
  * @param {string} selectorClosest
622
751
  * @param {string} selectorFind
623
- * @returns {NodeList|null}
752
+ * @returns {Array<Element>}
624
753
  */
625
754
  closestFind: function closestFind(el, selectorClosest, selectorFind) {
626
755
  var closest = this.closest(el, selectorClosest);
627
756
  if (closest) {
628
757
  return this.find(closest, selectorFind);
629
758
  }
630
- return null;
759
+ return [];
631
760
  },
632
761
  /**
633
762
  * @param {Element} el
@@ -657,18 +786,30 @@ export default {
657
786
  */
658
787
  last: function last(nodeList) {
659
788
  var _arr;
789
+ if (nodeList instanceof Element) return nodeList;
660
790
  var arr = Array.from(nodeList);
661
791
  return (_arr = arr[arr.length - 1]) !== null && _arr !== void 0 ? _arr : null;
662
792
  },
663
793
  /**
664
794
  * @param {string} html
665
- * @returns {Element|null}
795
+ * @returns {Element|DocumentFragment|null}
666
796
  */
667
797
  create: function create(html) {
668
- var _tpl$content$firstEle;
798
+ html += '';
799
+ var isTagName = function isTagName(s) {
800
+ return /^[A-Za-z][A-Za-z0-9-]*$/.test(s);
801
+ };
802
+ if (isTagName(html)) {
803
+ return document.createElement(html);
804
+ }
669
805
  var tpl = document.createElement('template');
670
806
  tpl.innerHTML = html.trim();
671
- return (_tpl$content$firstEle = tpl.content.firstElementChild) !== null && _tpl$content$firstEle !== void 0 ? _tpl$content$firstEle : null;
807
+ var frag = tpl.content;
808
+ if (frag.childElementCount === 1 && frag.children.length === 1) {
809
+ return frag.firstElementChild;
810
+ }
811
+ if (!frag.firstChild) return null;
812
+ return frag.cloneNode(true);
672
813
  },
673
814
  /**
674
815
  * @param {NodeList|Array<Element>} nodeList
@@ -720,13 +861,13 @@ export default {
720
861
  return el;
721
862
  },
722
863
  /**
723
- * @param {Element|NodeList} el
864
+ * @param {Element|NodeList|Array<Element>} el
724
865
  * @param {string|Element} selector
725
- * @return {Element[]}
866
+ * @return {Array<Element>}
726
867
  */
727
868
  not: function not(el, selector) {
728
869
  var elements = el instanceof Element ? [el] : Array.from(el);
729
- var selectorIsString = webf.isString(selector);
870
+ var selectorIsString = isString(selector);
730
871
  return elements.filter(function (e) {
731
872
  if (!(e instanceof Element)) return false;
732
873
  return selectorIsString ? !e.matches(selector) : e !== selector;
@@ -747,6 +888,7 @@ export default {
747
888
  * @param {string|Element} selector
748
889
  */
749
890
  matches: function matches(el, selector) {
891
+ if (!el) return false;
750
892
  return selector instanceof Element ? selector === el : el.matches(selector);
751
893
  },
752
894
  /**
@@ -759,14 +901,22 @@ export default {
759
901
  },
760
902
  /**
761
903
  * @param {Element} el
762
- * @param {Element[]} children
904
+ * @param {NodeList|Array<Element>|string[]} children
763
905
  * @returns {Element}
764
906
  */
765
907
  replaceChildren: function replaceChildren(el) {
908
+ var _this7 = this;
909
+ var nodes = [];
766
910
  for (var _len4 = arguments.length, children = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
767
911
  children[_key4 - 1] = arguments[_key4];
768
912
  }
769
- el.replaceChildren.apply(el, children);
913
+ foreach(children, function (child) {
914
+ if (isString(child)) {
915
+ child = _this7.create(child);
916
+ }
917
+ if (child) nodes.push(child);
918
+ });
919
+ el.replaceChildren.apply(el, nodes);
770
920
  return el;
771
921
  },
772
922
  /**
@@ -792,4 +942,13 @@ export default {
792
942
  left: rect.left + wOffset.left
793
943
  };
794
944
  }
795
- };
945
+ };
946
+ if ('test' === process.env.NODE_ENV) {
947
+ dom.__resetCustomEventsForTests = function () {
948
+ var _teardownLongTap2, _teardownDblTap2;
949
+ ENABLED_EVENTS.clear();
950
+ (_teardownLongTap2 = _teardownLongTap) === null || _teardownLongTap2 === void 0 || _teardownLongTap2();
951
+ (_teardownDblTap2 = _teardownDblTap) === null || _teardownDblTap2 === void 0 || _teardownDblTap2();
952
+ };
953
+ }
954
+ export default dom;
package/dist/cjs/index.js CHANGED
@@ -13,8 +13,9 @@ import * as traversal from './traversal.js';
13
13
  import dom, { getStyle, isDomElement, isWindow, isDocument } from './dom.js';
14
14
  import * as math from './math.js';
15
15
  import * as utils from './utils.js';
16
- import * as i18n from './i18n.js';
16
+ import * as i18n from './Translator.js';
17
17
  import eventDispatcher from './eventDispatcher.js';
18
+ import Mouse from './Mouse.js';
18
19
  var webf = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({}, stringFunctions), arrayFunctions), traversal), is), random), {}, {
19
20
  dom: dom,
20
21
  isWindow: isWindow,
@@ -22,7 +23,8 @@ var webf = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread
22
23
  isDomElement: isDomElement,
23
24
  getStyle: getStyle
24
25
  }, math), utils), i18n), {}, {
25
- eventDispatcher: eventDispatcher
26
+ eventDispatcher: eventDispatcher,
27
+ Mouse: Mouse
26
28
  });
27
29
  export default webf;
28
- export { stringFunctions, arrayFunctions, traversal, is, random, getStyle, dom, math, utils, eventDispatcher };
30
+ export { stringFunctions, arrayFunctions, traversal, is, random, getStyle, dom, math, utils, eventDispatcher, Mouse };
package/dist/cjs/is.js CHANGED
@@ -24,7 +24,9 @@ export var isUndefined = function isUndefined(v) {
24
24
  return typeof v === 'undefined';
25
25
  };
26
26
  export var isArrayLike = function isArrayLike(o) {
27
- return null !== o && !isString(o) && !isFunction(o) && isInt(o.length) && o.length >= 0 && Number.isFinite(o.length);
27
+ return !!o && !isString(o) && !isFunction(o) && isInt(o.length)
28
+ // && o.length >= 0
29
+ && Number.isFinite(o.length);
28
30
  };
29
31
  export var isArray = function isArray(a) {
30
32
  return Array.isArray(a);