{ "version": 3, "sources": [ "index.ts" ], "names": [ "domObjects", "parentNode", "extend", "is", "win", "CheckName", "prefix", "links", "touchAction", "boxSizing", "isProduction", "install", "scope", "logger", "Interactable", "defaults", "console", "base", "devTools", "ignore", "prototype", "options", "checks", "name", "perform", "element", "parentHasStyle", "getInfo", "text", "interaction", "prepared", "HTMLElement", "hasStyle", "noListeners", "actionName", "moveListeners", "interactable", "events", "types", "length", "prop", "styleRe", "test", "style", "window", "getComputedStyle", "parent", "id", "defaultExport", "listeners", "check", "warn" ], "mappings": "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", "sourcesContent": [ "/* eslint-disable no-console */\n/* global process */\nimport domObjects from '@interactjs/utils/domObjects'\nimport { parentNode } from '@interactjs/utils/domUtils'\nimport extend from '@interactjs/utils/extend'\nimport * as is from '@interactjs/utils/is'\nimport win from '@interactjs/utils/window'\n\ndeclare module '@interactjs/core/scope' {\n interface Scope {\n logger: Logger\n }\n}\n\ndeclare module '@interactjs/core/defaultOptions' {\n interface BaseDefaults {\n devTools?: DevToolsOptions\n }\n}\n\ndeclare module '@interactjs/core/Interactable' {\n interface Interactable {\n devTools?: Interact.OptionMethod\n }\n}\n\nexport interface DevToolsOptions {\n ignore: { [P in keyof typeof CheckName]?: boolean }\n}\n\nexport interface Logger {\n warn: (...args: any[]) => void\n error: (...args: any[]) => void\n log: (...args: any[]) => void\n}\n\nexport interface Check {\n name: CheckName\n text: string\n perform: (interaction: Interact.Interaction) => boolean\n getInfo: (interaction: Interact.Interaction) => any[]\n}\n\nenum CheckName {\n touchAction = 'touchAction',\n boxSizing = 'boxSizing',\n noListeners = 'noListeners',\n}\n\nconst prefix = '[interact.js] '\nconst links = {\n touchAction: 'https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action',\n boxSizing: 'https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing',\n}\n\nconst isProduction = process.env.NODE_ENV === 'production'\n\n// eslint-disable-next-line no-restricted-syntax\nfunction install (scope: Interact.Scope, { logger }: { logger?: Logger } = {}) {\n const {\n Interactable,\n defaults,\n } = scope\n\n scope.logger = logger || console\n\n defaults.base.devTools = {\n ignore: {},\n }\n\n Interactable.prototype.devTools = function (options?: object) {\n if (options) {\n extend(this.options.devTools, options)\n return this\n }\n\n return this.options.devTools\n }\n}\n\nconst checks: Check[] = [\n {\n name: CheckName.touchAction,\n perform ({ element }) {\n return !parentHasStyle(element, 'touchAction', /pan-|pinch|none/)\n },\n getInfo ({ element }) {\n return [\n element,\n links.touchAction,\n ]\n },\n text: 'Consider adding CSS \"touch-action: none\" to this element\\n',\n },\n\n {\n name: CheckName.boxSizing,\n perform (interaction) {\n const { element } = interaction\n\n return interaction.prepared.name === 'resize' &&\n element instanceof domObjects.HTMLElement &&\n !hasStyle(element, 'boxSizing', /border-box/)\n },\n text: 'Consider adding CSS \"box-sizing: border-box\" to this resizable element',\n getInfo ({ element }) {\n return [\n element,\n links.boxSizing,\n ]\n },\n },\n\n {\n name: CheckName.noListeners,\n perform (interaction) {\n const actionName = interaction.prepared.name\n const moveListeners = interaction.interactable.events.types[`${actionName}move`] || []\n\n return !moveListeners.length\n },\n getInfo (interaction) {\n return [\n interaction.prepared.name,\n interaction.interactable,\n ]\n },\n text: 'There are no listeners set for this action',\n },\n]\n\nfunction hasStyle (element: HTMLElement, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n return styleRe.test(element.style[prop] || win.window.getComputedStyle(element)[prop])\n}\n\nfunction parentHasStyle (element: Interact.Element, prop: keyof CSSStyleDeclaration, styleRe: RegExp) {\n let parent = element as HTMLElement\n\n while (is.element(parent)) {\n if (hasStyle(parent, prop, styleRe)) {\n return true\n }\n\n parent = parentNode(parent) as HTMLElement\n }\n\n return false\n}\n\nconst id = 'dev-tools'\nconst defaultExport: Interact.Plugin = isProduction\n ? { id, install: () => {} }\n : {\n id,\n install,\n listeners: {\n 'interactions:action-start': ({ interaction }, scope) => {\n for (const check of checks) {\n const options = interaction.interactable && interaction.interactable.options\n\n if (\n !(options && options.devTools && options.devTools.ignore[check.name]) &&\n check.perform(interaction)\n ) {\n scope.logger.warn(prefix + check.text, ...check.getInfo(interaction))\n }\n }\n },\n },\n checks,\n CheckName,\n links,\n prefix,\n }\n\nexport default defaultExport\n" ] }