UNPKG

lisn.js

Version:

Simply handle user gestures and actions. Includes widgets.

301 lines (293 loc) 17.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prefixName = exports.prefixLisnData = exports.prefixData = exports.prefixCssVar = exports.prefixCssJsVar = exports.pow = exports.parseFloat = exports.parentOf = exports.onAnimationFrame = exports.newWeakSet = exports.newWeakMap = exports.newSet = exports.newResizeObserver = exports.newPromise = exports.newMutationObserver = exports.newMap = exports.newIntersectionObserver = exports.min = exports.merge = exports.max = exports.log2 = exports.lengthOf = exports.lastOf = exports.keysOf = exports.kebabToCamelCase = exports.isWheelEvent = exports.isTouchPointerEvent = exports.isTouchEvent = exports.isString = exports.isPointerEvent = exports.isObject = exports.isNumber = exports.isNullish = exports.isNonPrimitive = exports.isNodeBAfterA = exports.isNode = exports.isNaN = exports.isMouseEvent = exports.isLiteralString = exports.isKeyboardEvent = exports.isIterableObject = exports.isInstanceOf = exports.isHTMLElement = exports.isFunction = exports.isEmpty = exports.isElement = exports.isDoc = exports.isBoolean = exports.isArray = exports.includes = exports.illegalConstructorError = exports.hasTagName = exports.hasOwnProp = exports.hasDOM = exports.getWindow = exports.getTabIndex = exports.getReadyState = exports.getPointerType = exports.getElementById = exports.getDocScrollingElement = exports.getDocElement = exports.getDoc = exports.getBoundingClientRect = exports.getBody = exports.getAttr = exports.freezeObj = exports.floor = exports.firstOf = exports.filterBlank = exports.filter = exports.exp = exports.every = exports.elScrollTo = exports.elScrollBy = exports.docQuerySelectorAll = exports.docQuerySelector = exports.deleteObjKey = exports.deleteKey = exports.delAttr = exports.defineProperty = exports.currentTargetOf = exports.createElement = exports.createButton = exports.copyObject = exports.copyBoundingRectProps = exports.constructorOf = exports.consoleWarn = exports.consoleLog = exports.consoleInfo = exports.consoleError = exports.consoleDebug = exports.clearTimer = exports.classList = exports.childrenOf = exports.ceil = exports.camelToKebabCase = exports.bugError = exports.assign = exports.arrayFrom = exports.abs = void 0; exports.userAgent = exports.usageError = exports.unsetTabIndex = exports.unsetAttr = exports.typeOrClassOf = exports.typeOf = exports.toUpperCase = exports.toLowerCase = exports.timeSince = exports.timeNow = exports.targetOf = exports.tagName = exports.stringify = exports.strReplace = exports.sqrt = exports.some = exports.sizeOf = exports.setTimer = exports.setTabIndex = exports.setAttr = exports.round = exports.root = exports.remove = exports.querySelectorAll = exports.querySelector = exports.promiseResolve = exports.promiseAll = exports.preventExtensions = exports.preventDefault = void 0; var MC = _interopRequireWildcard(require("./minification-constants.cjs")); var _errors = require("./errors.cjs"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } /** * For minification optimization * * @module * @ignore * @internal */ // credit: underscore.js const root = exports.root = typeof self === "object" && self.self === self && self || typeof global == "object" && global.global === global && global || Function("return this")() || {}; const userAgent = exports.userAgent = typeof navigator === "undefined" ? "" : navigator.userAgent; const kebabToCamelCase = str => str.replace(/-./g, m => toUpperCase(m.charAt(1))); exports.kebabToCamelCase = kebabToCamelCase; const camelToKebabCase = str => str.replace(/[A-Z][a-z]/g, m => "-" + toLowerCase(m)).replace(/[A-Z]+/, m => "-" + toLowerCase(m)); exports.camelToKebabCase = camelToKebabCase; const prefixName = name => `${MC.PREFIX}-${name}`; exports.prefixName = prefixName; const prefixCssVar = name => "--" + prefixName(name); exports.prefixCssVar = prefixCssVar; const prefixCssJsVar = name => prefixCssVar("js--" + name); exports.prefixCssJsVar = prefixCssJsVar; const prefixData = name => `data-${camelToKebabCase(name)}`; exports.prefixData = prefixData; const prefixLisnData = name => prefixData(prefixName(name)); exports.prefixLisnData = prefixLisnData; const toLowerCase = s => s.toLowerCase(); exports.toLowerCase = toLowerCase; const toUpperCase = s => s.toUpperCase(); exports.toUpperCase = toUpperCase; const timeNow = exports.timeNow = Date.now.bind(Date); const timeSince = startTime => timeNow() - startTime; exports.timeSince = timeSince; const hasDOM = () => typeof document !== "undefined"; exports.hasDOM = hasDOM; const getWindow = () => window; exports.getWindow = getWindow; const getDoc = () => document; exports.getDoc = getDoc; const getDocElement = () => getDoc().documentElement; exports.getDocElement = getDocElement; const getDocScrollingElement = () => getDoc().scrollingElement; exports.getDocScrollingElement = getDocScrollingElement; const getBody = () => getDoc().body; exports.getBody = getBody; const getReadyState = () => getDoc().readyState; exports.getReadyState = getReadyState; const getPointerType = event => isPointerEvent(event) ? event.pointerType : isMouseEvent(event) ? "mouse" : null; exports.getPointerType = getPointerType; const onAnimationFrame = callback => requestAnimationFrame(callback); exports.onAnimationFrame = onAnimationFrame; const createElement = (tagName, options) => getDoc().createElement(tagName, options); exports.createElement = createElement; const createButton = (label = "", tag = "button") => { const btn = createElement(tag); setTabIndex(btn); setAttr(btn, MC.S_ROLE, "button"); setAttr(btn, MC.ARIA_PREFIX + "label", label); return btn; }; exports.createButton = createButton; const isNullish = v => v === undefined || v === null; exports.isNullish = isNullish; const isEmpty = v => isNullish(v) || v === ""; exports.isEmpty = isEmpty; const isIterableObject = v => isNonPrimitive(v) && MC.SYMBOL.iterator in v; exports.isIterableObject = isIterableObject; const isArray = v => isInstanceOf(v, MC.ARRAY); exports.isArray = isArray; const isObject = v => isInstanceOf(v, MC.OBJECT); exports.isObject = isObject; const isNonPrimitive = v => v !== null && typeOf(v) === "object"; // only primitive number exports.isNonPrimitive = isNonPrimitive; const isNumber = v => typeOf(v) === "number"; /* eslint-disable-next-line @typescript-eslint/no-wrapper-object-types */ exports.isNumber = isNumber; const isString = v => typeOf(v) === "string" || isInstanceOf(v, MC.STRING); exports.isString = isString; const isLiteralString = v => typeOf(v) === "string"; exports.isLiteralString = isLiteralString; const isBoolean = v => typeOf(v) === "boolean"; /* eslint-disable-next-line @typescript-eslint/no-unsafe-function-type */ exports.isBoolean = isBoolean; const isFunction = v => typeOf(v) === "function" || isInstanceOf(v, MC.FUNCTION); exports.isFunction = isFunction; const isDoc = target => target === getDoc(); exports.isDoc = isDoc; const isMouseEvent = event => isInstanceOf(event, MouseEvent); exports.isMouseEvent = isMouseEvent; const isPointerEvent = event => typeof PointerEvent !== "undefined" && isInstanceOf(event, PointerEvent); exports.isPointerEvent = isPointerEvent; const isTouchPointerEvent = event => isPointerEvent(event) && getPointerType(event) === MC.S_TOUCH; exports.isTouchPointerEvent = isTouchPointerEvent; const isWheelEvent = event => isInstanceOf(event, WheelEvent); exports.isWheelEvent = isWheelEvent; const isKeyboardEvent = event => isInstanceOf(event, KeyboardEvent); exports.isKeyboardEvent = isKeyboardEvent; const isTouchEvent = event => typeof TouchEvent !== "undefined" && isInstanceOf(event, TouchEvent); exports.isTouchEvent = isTouchEvent; const isNode = target => isInstanceOf(target, Node); exports.isNode = isNode; const isElement = target => isInstanceOf(target, Element); exports.isElement = isElement; const isHTMLElement = target => isInstanceOf(target, HTMLElement); exports.isHTMLElement = isHTMLElement; const isNodeBAfterA = (nodeA, nodeB) => (nodeA.compareDocumentPosition(nodeB) & Node.DOCUMENT_POSITION_FOLLOWING) !== 0; exports.isNodeBAfterA = isNodeBAfterA; const strReplace = (s, match, replacement) => s.replace(match, replacement); exports.strReplace = strReplace; const setTimer = exports.setTimer = root.setTimeout.bind(root); const clearTimer = exports.clearTimer = root.clearTimeout.bind(root); const getBoundingClientRect = element => element.getBoundingClientRect(); // Copy size properties explicitly to another object so they can be used with // the spread operator (DOMRect/DOMRectReadOnly's properties are not enumerable) exports.getBoundingClientRect = getBoundingClientRect; const copyBoundingRectProps = rect => { return { x: rect.x, left: rect.left, right: rect.right, [MC.S_WIDTH]: rect[MC.S_WIDTH], y: rect.y, top: rect.top, bottom: rect.bottom, [MC.S_HEIGHT]: rect[MC.S_HEIGHT] }; }; exports.copyBoundingRectProps = copyBoundingRectProps; const querySelector = (root, selector) => root.querySelector(selector); exports.querySelector = querySelector; const querySelectorAll = (root, selector) => root.querySelectorAll(selector); exports.querySelectorAll = querySelectorAll; const docQuerySelector = selector => querySelector(getDoc(), selector); exports.docQuerySelector = docQuerySelector; const docQuerySelectorAll = selector => querySelectorAll(getDoc(), selector); exports.docQuerySelectorAll = docQuerySelectorAll; const getElementById = id => getDoc().getElementById(id); exports.getElementById = getElementById; const getAttr = (element, name) => element.getAttribute(name); exports.getAttr = getAttr; const setAttr = (element, name, value = "true") => element.setAttribute(name, value); exports.setAttr = setAttr; const unsetAttr = (element, name) => element.setAttribute(name, "false"); exports.unsetAttr = unsetAttr; const delAttr = (element, name) => element.removeAttribute(name); exports.delAttr = delAttr; const includes = (arr, v, startAt) => arr.indexOf(v, startAt) >= 0; exports.includes = includes; const every = (array, predicate) => array.every(predicate); exports.every = every; const some = (array, predicate) => array.some(predicate); exports.some = some; const filter = (array, filterFn) => array.filter(filterFn); exports.filter = filter; const filterBlank = array => { const result = array ? filter(array, v => !isEmpty(v)) : undefined; return lengthOf(result) ? result : undefined; }; exports.filterBlank = filterBlank; const sizeOf = obj => { var _obj$size; return (_obj$size = obj === null || obj === void 0 ? void 0 : obj.size) !== null && _obj$size !== void 0 ? _obj$size : 0; }; exports.sizeOf = sizeOf; const lengthOf = obj => { var _obj$length; return (_obj$length = obj === null || obj === void 0 ? void 0 : obj.length) !== null && _obj$length !== void 0 ? _obj$length : 0; }; exports.lengthOf = lengthOf; const lastOf = a => a === null || a === void 0 ? void 0 : a.slice(-1)[0]; exports.lastOf = lastOf; const firstOf = a => a === null || a === void 0 ? void 0 : a.slice(0, 1)[0]; exports.firstOf = firstOf; const tagName = element => element.tagName; exports.tagName = tagName; const hasTagName = (element, tag) => toLowerCase(tagName(element)) === toLowerCase(tag); exports.hasTagName = hasTagName; const preventDefault = event => event.preventDefault(); exports.preventDefault = preventDefault; const arrayFrom = exports.arrayFrom = MC.ARRAY.from.bind(MC.ARRAY); const keysOf = obj => MC.OBJECT.keys(obj); exports.keysOf = keysOf; const defineProperty = exports.defineProperty = MC.OBJECT.defineProperty.bind(MC.OBJECT); // use it in place of object spread const merge = (...a) => { return MC.OBJECT.assign({}, ...a); }; exports.merge = merge; const copyObject = obj => merge(obj); exports.copyObject = copyObject; const promiseResolve = exports.promiseResolve = MC.PROMISE.resolve.bind(MC.PROMISE); const promiseAll = exports.promiseAll = MC.PROMISE.all.bind(MC.PROMISE); const assign = exports.assign = MC.OBJECT.assign.bind(MC.OBJECT); const freezeObj = exports.freezeObj = MC.OBJECT.freeze.bind(MC.OBJECT); const hasOwnProp = (o, prop) => MC.OBJECT.prototype.hasOwnProperty.call(o, prop); exports.hasOwnProp = hasOwnProp; const preventExtensions = exports.preventExtensions = MC.OBJECT.preventExtensions.bind(MC.OBJECT); const stringify = exports.stringify = JSON.stringify.bind(JSON); const floor = exports.floor = MC.MATH.floor.bind(MC.MATH); const ceil = exports.ceil = MC.MATH.ceil.bind(MC.MATH); const log2 = exports.log2 = MC.MATH.log2.bind(MC.MATH); const sqrt = exports.sqrt = MC.MATH.sqrt.bind(MC.MATH); const max = exports.max = MC.MATH.max.bind(MC.MATH); const min = exports.min = MC.MATH.min.bind(MC.MATH); const abs = exports.abs = MC.MATH.abs.bind(MC.MATH); const round = exports.round = MC.MATH.round.bind(MC.MATH); const pow = exports.pow = MC.MATH.pow.bind(MC.MATH); const exp = exports.exp = MC.MATH.exp.bind(MC.MATH); const parseFloat = exports.parseFloat = MC.NUMBER.parseFloat.bind(MC.NUMBER); const isNaN = exports.isNaN = MC.NUMBER.isNaN.bind(MC.NUMBER); const isInstanceOf = (value, Class) => value instanceof Class; exports.isInstanceOf = isInstanceOf; const constructorOf = obj => obj.constructor; exports.constructorOf = constructorOf; const typeOf = obj => typeof obj; exports.typeOf = typeOf; const typeOrClassOf = obj => { var _constructorOf; return isObject(obj) ? (_constructorOf = constructorOf(obj)) === null || _constructorOf === void 0 ? void 0 : _constructorOf.name : typeOf(obj); }; exports.typeOrClassOf = typeOrClassOf; const parentOf = element => { var _element$parentElemen; return (_element$parentElemen = element === null || element === void 0 ? void 0 : element.parentElement) !== null && _element$parentElemen !== void 0 ? _element$parentElemen : null; }; exports.parentOf = parentOf; const childrenOf = element => (element === null || element === void 0 ? void 0 : element.children) || []; exports.childrenOf = childrenOf; const targetOf = obj => obj === null || obj === void 0 ? void 0 : obj.target; exports.targetOf = targetOf; const currentTargetOf = obj => obj === null || obj === void 0 ? void 0 : obj.currentTarget; exports.currentTargetOf = currentTargetOf; const classList = element => element === null || element === void 0 ? void 0 : element.classList; exports.classList = classList; const S_TABINDEX = "tabindex"; const getTabIndex = element => getAttr(element, S_TABINDEX); exports.getTabIndex = getTabIndex; const setTabIndex = (element, index = "0") => setAttr(element, S_TABINDEX, index); exports.setTabIndex = setTabIndex; const unsetTabIndex = element => delAttr(element, S_TABINDEX); exports.unsetTabIndex = unsetTabIndex; const remove = obj => obj === null || obj === void 0 ? void 0 : obj.remove(); exports.remove = remove; const deleteObjKey = (obj, key) => delete obj[key]; exports.deleteObjKey = deleteObjKey; const deleteKey = (map, key) => map === null || map === void 0 ? void 0 : map.delete(key); exports.deleteKey = deleteKey; const elScrollTo = (element, coords, behavior = "instant") => element.scrollTo(merge({ behavior }, coords)); exports.elScrollTo = elScrollTo; const elScrollBy = (element, coords, behavior = "instant") => element.scrollBy(merge({ behavior }, coords)); exports.elScrollBy = elScrollBy; const newPromise = executor => new Promise(executor); exports.newPromise = newPromise; const newMap = entries => new Map(entries); exports.newMap = newMap; const newWeakMap = entries => new WeakMap(entries); exports.newWeakMap = newWeakMap; const newSet = values => new Set(values); exports.newSet = newSet; const newWeakSet = values => new WeakSet(values); exports.newWeakSet = newWeakSet; const newIntersectionObserver = (callback, options) => new IntersectionObserver(callback, options); exports.newIntersectionObserver = newIntersectionObserver; const newResizeObserver = callback => typeof ResizeObserver === "undefined" ? null : new ResizeObserver(callback); exports.newResizeObserver = newResizeObserver; const newMutationObserver = callback => new MutationObserver(callback); exports.newMutationObserver = newMutationObserver; const usageError = msg => new _errors.LisnUsageError(msg); exports.usageError = usageError; const bugError = msg => new _errors.LisnBugError(msg); exports.bugError = bugError; const illegalConstructorError = useWhat => usageError(`Illegal constructor. Use ${useWhat}.`); exports.illegalConstructorError = illegalConstructorError; const CONSOLE = console; const consoleDebug = exports.consoleDebug = CONSOLE.debug.bind(CONSOLE); const consoleLog = exports.consoleLog = CONSOLE.log.bind(CONSOLE); const consoleInfo = exports.consoleInfo = CONSOLE.info.bind(CONSOLE); const consoleWarn = exports.consoleWarn = CONSOLE.warn.bind(CONSOLE); const consoleError = exports.consoleError = CONSOLE.error.bind(CONSOLE); // -------------------- //# sourceMappingURL=minification-helpers.cjs.map