js.foresight 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -6
- package/dist/index.d.ts +0 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/.pnpm/@rollup+plugin-typescript@12.1.2_rollup@4.40.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../src/ForesightManager/Debugger/DebuggerControlPanel.ts","../src/ForesightManager/Debugger/ForesightDebugger.ts","../src/ForesightManager/Manager/ForesightManager.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","// DebuggerControlPanel.ts\r\nimport type { ForesightManager } from \"../Manager/ForesightManager\"\r\nimport type {\r\n ForesightElementData,\r\n ForesightElement,\r\n ForesightManagerProps,\r\n DebuggerSettings,\r\n} from \"../../types/types\"\r\n\r\nexport class DebuggerControlPanel {\r\n private foresightManagerInstance: ForesightManager\r\n private shadowRoot: ShadowRoot | null = null\r\n private controlsContainer: HTMLElement | null = null\r\n private elementListContainer: HTMLElement | null = null\r\n private elementCountSpan: HTMLSpanElement | null = null\r\n private elementListItems: Map<ForesightElement, HTMLElement> = new Map()\r\n\r\n // References to input elements for easy state updates\r\n private trajectoryEnabledCheckbox: HTMLInputElement | null = null\r\n private historySizeSlider: HTMLInputElement | null = null\r\n private historyValueSpan: HTMLSpanElement | null = null\r\n private predictionTimeSlider: HTMLInputElement | null = null\r\n private predictionValueSpan: HTMLSpanElement | null = null\r\n private throttleDelaySlider: HTMLInputElement | null = null\r\n private throttleValueSpan: HTMLSpanElement | null = null\r\n\r\n // For minimize functionality\r\n private minimizeButton: HTMLButtonElement | null = null\r\n private debuggerSection: HTMLElement | null = null // Contains the element list\r\n private isMinimized: boolean = false\r\n\r\n constructor(manager: ForesightManager) {\r\n this.foresightManagerInstance = manager\r\n }\r\n\r\n public initialize(\r\n shadowRoot: ShadowRoot,\r\n initialSettings: ForesightManagerProps,\r\n debuggerSettings: DebuggerSettings\r\n ) {\r\n this.shadowRoot = shadowRoot\r\n this._createDOM() // Create and append the panel's HTML structure\r\n\r\n if (debuggerSettings.isControlPanelDefaultMinimized) {\r\n this.isMinimized = true\r\n }\r\n\r\n if (this.controlsContainer) {\r\n this.shadowRoot.appendChild(this.controlsContainer)\r\n this._queryDOMElements()\r\n this._setupEventListeners()\r\n this.updateControlsState(initialSettings)\r\n this.refreshElementList()\r\n this._applyMinimizedStateVisuals() // Ensure initial state is applied\r\n }\r\n }\r\n\r\n private _createDOM() {\r\n this.controlsContainer = document.createElement(\"div\")\r\n this.controlsContainer.id = \"jsforesight-debug-controls\" // Use existing ID for styles\r\n\r\n // Note: The minimize button already exists in your HTML structure\r\n let controlsHTML = `\r\n <div class=\"jsforesight-debugger-title-container\">\r\n <button class=\"jsforesight-minimize-button\">-</button>\r\n <h3>Foresight Debugger</h3>\r\n <span class=\"jsforesight-info-icon\" title=\"Changes made here are for the current session only and won't persist. Update initial values in the ForesightManager.initialize() props for permanent changes.\">i</span>\r\n </div>\r\n\r\n <div class=\"jsforesight-debugger-section\">\r\n <h4>Session Settings</h4>\r\n <div class=\"control-row\">\r\n <label for=\"jsforesight-trajectory-enabled\">\r\n Enable Mouse Prediction\r\n <span class=\"jsforesight-info-icon\" title=\"Toggles mouse movement prediction. If disabled, only direct hovers trigger actions.\">i</span>\r\n </label>\r\n <input type=\"checkbox\" id=\"jsforesight-trajectory-enabled\">\r\n </div>\r\n <div class=\"control-row\">\r\n <label for=\"jsforesight-history-size\">\r\n History Size\r\n <span class=\"jsforesight-info-icon\" title=\"Number of past mouse positions for velocity calculation (Min: 2, Max: 20). Higher values smooth predictions but add latency.\">i</span>\r\n </label>\r\n <input type=\"range\" id=\"jsforesight-history-size\" min=\"2\" max=\"20\">\r\n <span id=\"jsforesight-history-value\"></span>\r\n </div>\r\n <div class=\"control-row\">\r\n <label for=\"jsforesight-prediction-time\">\r\n Prediction Time (ms)\r\n <span class=\"jsforesight-info-icon\" title=\"How far (ms) to project trajectory (Min: 10, Max: 500). Larger values detect intent sooner.\">i</span>\r\n </label>\r\n <input type=\"range\" id=\"jsforesight-prediction-time\" min=\"10\" max=\"500\" step=\"10\">\r\n <span id=\"jsforesight-prediction-value\"></span>\r\n </div>\r\n <div class=\"control-row\">\r\n <label for=\"jsforesight-throttle-delay\">\r\n Scroll/Resize Throttle (ms)\r\n <span class=\"jsforesight-info-icon\" title=\"Delay (ms) for recalculating element positions on resize/scroll (Min: 0, Max: 500). Higher values improve performance during rapid events.\">i</span>\r\n </label>\r\n <input type=\"range\" id=\"jsforesight-throttle-delay\" min=\"0\" max=\"500\" step=\"10\">\r\n <span id=\"jsforesight-throttle-value\"></span>\r\n </div>\r\n `\r\n controlsHTML += `\r\n <div class=\"jsforesight-debugger-section\">\r\n <h4>Registered Elements (<span id=\"jsforesight-element-count\">0</span>)</h4>\r\n <div id=\"jsforesight-element-list-items-container\" class=\"jsforesight-element-list\">\r\n <em>Initializing...</em>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n\r\n this.controlsContainer.innerHTML = controlsHTML\r\n }\r\n\r\n private _queryDOMElements() {\r\n if (!this.controlsContainer) return\r\n\r\n this.trajectoryEnabledCheckbox = this.controlsContainer.querySelector(\r\n \"#jsforesight-trajectory-enabled\"\r\n )\r\n this.historySizeSlider = this.controlsContainer.querySelector(\"#jsforesight-history-size\")\r\n this.historyValueSpan = this.controlsContainer.querySelector(\"#jsforesight-history-value\")\r\n this.predictionTimeSlider = this.controlsContainer.querySelector(\"#jsforesight-prediction-time\")\r\n this.predictionValueSpan = this.controlsContainer.querySelector(\"#jsforesight-prediction-value\")\r\n this.throttleDelaySlider = this.controlsContainer.querySelector(\"#jsforesight-throttle-delay\")\r\n this.throttleValueSpan = this.controlsContainer.querySelector(\"#jsforesight-throttle-value\")\r\n this.elementListContainer = this.controlsContainer.querySelector(\r\n \"#jsforesight-element-list-items-container\"\r\n )\r\n this.elementCountSpan = this.controlsContainer.querySelector(\"#jsforesight-element-count\")\r\n\r\n // Query elements for minimize functionality\r\n this.minimizeButton = this.controlsContainer.querySelector(\".jsforesight-minimize-button\")\r\n this.debuggerSection = this.controlsContainer.querySelector(\".jsforesight-debugger-section\")\r\n }\r\n\r\n private _setupEventListeners() {\r\n this.trajectoryEnabledCheckbox?.addEventListener(\"change\", (e) => {\r\n this.foresightManagerInstance.alterGlobalSettings({\r\n enableMousePrediction: (e.target as HTMLInputElement).checked,\r\n })\r\n })\r\n\r\n this.historySizeSlider?.addEventListener(\"input\", (e) => {\r\n const value = parseInt((e.target as HTMLInputElement).value)\r\n if (this.historyValueSpan) this.historyValueSpan.textContent = value.toString()\r\n this.foresightManagerInstance.alterGlobalSettings({\r\n positionHistorySize: value,\r\n })\r\n })\r\n\r\n this.predictionTimeSlider?.addEventListener(\"input\", (e) => {\r\n const value = parseInt((e.target as HTMLInputElement).value)\r\n if (this.predictionValueSpan) this.predictionValueSpan.textContent = value.toString()\r\n this.foresightManagerInstance.alterGlobalSettings({\r\n trajectoryPredictionTime: value,\r\n })\r\n })\r\n\r\n this.throttleDelaySlider?.addEventListener(\"input\", (e) => {\r\n const value = parseInt((e.target as HTMLInputElement).value)\r\n if (this.throttleValueSpan) this.throttleValueSpan.textContent = value.toString()\r\n this.foresightManagerInstance.alterGlobalSettings({\r\n resizeScrollThrottleDelay: value,\r\n })\r\n })\r\n\r\n // Add event listener for the minimize button\r\n this.minimizeButton?.addEventListener(\"click\", () => {\r\n this.isMinimized = !this.isMinimized\r\n this._applyMinimizedStateVisuals()\r\n })\r\n }\r\n\r\n private _applyMinimizedStateVisuals() {\r\n if (!this.minimizeButton || !this.debuggerSection || !this.controlsContainer) return\r\n\r\n if (this.isMinimized) {\r\n this.debuggerSection.style.display = \"none\"\r\n this.minimizeButton.textContent = \"+\"\r\n // Optional: Add a class to controlsContainer for more specific styling if needed\r\n // this.controlsContainer.classList.add(\"minimized\")\r\n } else {\r\n this.debuggerSection.style.display = \"\" // Reset to default\r\n this.minimizeButton.textContent = \"-\"\r\n // Optional: Remove the class\r\n // this.controlsContainer.classList.remove(\"minimized\")\r\n }\r\n }\r\n\r\n public updateControlsState(settings: ForesightManagerProps) {\r\n if (this.trajectoryEnabledCheckbox) {\r\n this.trajectoryEnabledCheckbox.checked = settings.enableMousePrediction\r\n }\r\n if (this.historySizeSlider && this.historyValueSpan) {\r\n this.historySizeSlider.value = settings.positionHistorySize.toString()\r\n this.historyValueSpan.textContent = settings.positionHistorySize.toString()\r\n }\r\n if (this.predictionTimeSlider && this.predictionValueSpan) {\r\n this.predictionTimeSlider.value = settings.trajectoryPredictionTime.toString()\r\n this.predictionValueSpan.textContent = settings.trajectoryPredictionTime.toString()\r\n }\r\n if (this.throttleDelaySlider && this.throttleValueSpan) {\r\n this.throttleDelaySlider.value = settings.resizeScrollThrottleDelay.toString()\r\n this.throttleValueSpan.textContent = settings.resizeScrollThrottleDelay.toString()\r\n }\r\n }\r\n\r\n public refreshElementList() {\r\n if (!this.elementListContainer) return\r\n\r\n this.elementListContainer.innerHTML = \"\" // Clear previous items\r\n this.elementListItems.clear()\r\n\r\n const elementsMap = this.foresightManagerInstance.elements\r\n\r\n if (this.elementCountSpan) {\r\n this.elementCountSpan.textContent = elementsMap.size.toString()\r\n }\r\n\r\n if (elementsMap.size === 0) {\r\n this.elementListContainer.innerHTML = \"<em>No elements registered.</em>\"\r\n return\r\n }\r\n\r\n elementsMap.forEach((data, element) => {\r\n const listItem = document.createElement(\"div\")\r\n listItem.className = \"jsforesight-element-list-item\"\r\n this._updateListItemContent(listItem, data)\r\n\r\n this.elementListContainer!.appendChild(listItem)\r\n this.elementListItems.set(element, listItem)\r\n })\r\n }\r\n\r\n private _updateListItemContent(listItem: HTMLElement, data: ForesightElementData) {\r\n listItem.classList.toggle(\"hovering\", data.isHovering)\r\n listItem.classList.toggle(\"trajectory-hit\", data.trajectoryHitData.isTrajectoryHit)\r\n\r\n const statusIndicatorHTML = `<span class=\"status-indicator\"></span>`\r\n const hitBehaviorText = data.unregisterOnCallback ? \"Single\" : \"Multi\"\r\n const hitBehaviorTitle = data.unregisterOnCallback\r\n ? \"Callback triggers once, then element unregisters.\"\r\n : \"Callback can trigger multiple times.\"\r\n\r\n listItem.innerHTML = `\r\n ${statusIndicatorHTML}\r\n <span class=\"element-name\" title=\"${data.name || \"Unnamed Element\"}\">${\r\n data.name || \"Unnamed Element\"\r\n }</span>\r\n <span class=\"hit-behavior\" title=\"${hitBehaviorTitle}\">${hitBehaviorText}</span>\r\n <span class=\"element-details\">(H: ${data.isHovering ? \"Y\" : \"N\"}, T: ${\r\n data.trajectoryHitData.isTrajectoryHit ? \"Y\" : \"N\"\r\n })</span>\r\n `\r\n }\r\n\r\n public cleanup() {\r\n this.controlsContainer?.remove()\r\n this.controlsContainer = null\r\n this.elementListContainer = null\r\n this.elementCountSpan = null\r\n this.elementListItems.clear()\r\n\r\n // Clear references for minimize functionality\r\n this.minimizeButton = null\r\n this.debuggerSection = null\r\n // Event listeners are on elements within controlsContainer, so they'll be GC'd.\r\n }\r\n}\r\n","// ForesightDebugger.ts\r\nimport type { ForesightManager } from \"../Manager/ForesightManager\"\r\nimport { DebuggerControlPanel } from \"./DebuggerControlPanel\" // Import the new class\r\nimport type {\r\n ForesightElementData,\r\n ForesightElement,\r\n ForesightManagerProps,\r\n Point,\r\n} from \"../../types/types\"\r\n\r\nexport class ForesightDebugger {\r\n private foresightManagerInstance: ForesightManager\r\n private shadowHost: HTMLElement | null = null\r\n private shadowRoot: ShadowRoot | null = null\r\n private debugContainer: HTMLElement | null = null // For overlays, trajectory, etc.\r\n private debugLinkOverlays: Map<\r\n ForesightElement,\r\n {\r\n linkOverlay: HTMLElement\r\n expandedOverlay: HTMLElement\r\n nameLabel: HTMLElement\r\n }\r\n > = new Map()\r\n private debugPredictedMouseIndicator: HTMLElement | null = null\r\n private debugTrajectoryLine: HTMLElement | null = null\r\n private debugStyleElement: HTMLStyleElement | null = null\r\n\r\n private controlPanel: DebuggerControlPanel | null = null\r\n private lastElementData: Map<\r\n ForesightElement,\r\n { isHovering: boolean; isTrajectoryHit: boolean }\r\n > = new Map()\r\n\r\n constructor(intentManager: ForesightManager) {\r\n this.foresightManagerInstance = intentManager\r\n // Instantiate controlPanel here, but initialize it later when shadowRoot is available\r\n this.controlPanel = new DebuggerControlPanel(this.foresightManagerInstance)\r\n }\r\n\r\n public initialize(\r\n links: Map<ForesightElement, ForesightElementData>,\r\n currentSettings: ForesightManagerProps,\r\n currentPoint: Point,\r\n predictedPoint: Point\r\n ) {\r\n if (typeof window === \"undefined\") return\r\n this.cleanup()\r\n\r\n this.shadowHost = document.createElement(\"div\")\r\n this.shadowHost.id = \"jsforesight-debugger-shadow-host\"\r\n this.shadowHost.style.pointerEvents = \"none\"\r\n document.body.appendChild(this.shadowHost)\r\n this.shadowRoot = this.shadowHost.attachShadow({ mode: \"open\" })\r\n\r\n this.debugStyleElement = document.createElement(\"style\")\r\n // ... (style content remains the same) ...\r\n this.debugStyleElement.textContent = `\r\n #jsforesight-debug-container { /* For on-page overlays */\r\n position: fixed; top: 0; left: 0; width: 100%; height: 100%;\r\n pointer-events: none; z-index: 9999;\r\n }\r\n .jsforesight-link-overlay {\r\n position: absolute; border: 2px solid transparent;\r\n background-color: rgba(0, 0, 255, 0.1); box-sizing: border-box;\r\n transition: opacity 0.2s ease, border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;\r\n }\r\n .jsforesight-link-overlay.active {\r\n border-color: oklch(83.7% 0.128 66.29); background-color: rgba(255, 0, 0, 0.1);\r\n }\r\n .jsforesight-link-overlay.trajectory-hit {\r\n border-color: oklch(89.7% 0.196 126.665); background-color: rgba(0, 255, 0, 0.3);\r\n box-shadow: 0 0 10px rgba(0, 255, 0, 0.8);\r\n }\r\n .jsforesight-expanded-overlay {\r\n position: absolute; border: 1px dashed rgba(0, 0, 255, 0.3);\r\n background-color: rgba(0, 0, 255, 0.05); box-sizing: border-box;\r\n }\r\n .jsforesight-mouse-predicted {\r\n position: absolute; width: 20px; height: 20px; border-radius: 50%;\r\n border: 2px solid oklch(83.7% 0.128 66.29); background-color: rgba(255, 165, 0, 0.3);\r\n transform: translate(-50%, -50%); z-index: 10000;\r\n }\r\n .jsforesight-trajectory-line {\r\n position: absolute; height: 2px; background-color: rgba(255, 100, 0, 0.5);\r\n transform-origin: left center; z-index: 9999;\r\n }\r\n .jsforesight-name-label {\r\n position: absolute;\r\n background-color: rgba(0, 0, 0, 0.75);\r\n color: white;\r\n padding: 3px 6px;\r\n font-size: 11px;\r\n font-family: Arial, sans-serif;\r\n border-radius: 3px;\r\n z-index: 10001;\r\n white-space: nowrap;\r\n pointer-events: none;\r\n }\r\n /* Styles for #jsforesight-debug-controls and its children are still needed here */\r\n #jsforesight-debug-controls {\r\n position: fixed; bottom: 10px; right: 10px;\r\n background-color: rgba(0, 0, 0, 0.75); color: white; padding: 12px;\r\n border-radius: 5px; font-family: Arial, sans-serif; font-size: 13px;\r\n z-index: 10001; pointer-events: auto; display: flex; flex-direction: column; gap: 8px;\r\n min-width: 300px; max-width: 350px;\r\n }\r\n .jsforesight-debugger-title-container {\r\n display: flex; align-items: center; justify-content: center; gap: 8px; margin-bottom: 8px;\r\n }\r\n .jsforesight-minimize-button{\r\n background: none; border: none; color: white;\r\n font-size: 22px; cursor: pointer; padding: 0;\r\n position: absolute; top: 10px; left: 15px;\r\n }\r\n .jsforesight-debugger-title-container h3 { margin: 0; font-size: 15px; }\r\n #jsforesight-debug-controls label { display: flex; align-items: center; gap: 5px; cursor: pointer; }\r\n #jsforesight-debug-controls input[type=\"range\"] { flex-grow: 1; margin: 0 5px; cursor: pointer;}\r\n #jsforesight-debug-controls input[type=\"checkbox\"] { margin-right: 5px; cursor: pointer; }\r\n #jsforesight-debug-controls .control-row { display: flex; align-items: center; justify-content: space-between; }\r\n #jsforesight-debug-controls .control-row label { flex-basis: auto; }\r\n #jsforesight-debug-controls .control-row span:not(.jsforesight-info-icon) { min-width: 30px; text-align: right; }\r\n .jsforesight-info-icon {\r\n display: inline-flex; align-items: center; justify-content: center;\r\n width: 16px; height: 16px; border-radius: 50%;\r\n background-color: #555; color: white;\r\n font-size: 10px; font-style: italic; font-weight: bold;\r\n font-family: 'Georgia', serif;\r\n cursor: help; user-select: none;\r\n flex-shrink: 0;\r\n }\r\n .jsforesight-debugger-section {\r\n display: flex; flex-direction: column; gap: 6px;\r\n border-top: 1px solid #444;\r\n }\r\n .jsforesight-debugger-section h4 {\r\n margin: 5px 0 2px 0;\r\n font-size: 14px;\r\n font-weight: bold;\r\n }\r\n .jsforesight-element-list {\r\n max-height: 150px;\r\n overflow-y: auto;\r\n background-color: rgba(20, 20, 20, 0.5);\r\n border-radius: 3px;\r\n padding: 5px;\r\n font-size: 12px;\r\n }\r\n .jsforesight-element-list-item {\r\n padding: 4px 6px;\r\n margin-bottom: 3px;\r\n border-radius: 2px;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n background-color: rgba(50,50,50,0.7);\r\n transition: background-color 0.2s ease;\r\n }\r\n .jsforesight-element-list-item:last-child {\r\n margin-bottom: 0;\r\n }\r\n .jsforesight-element-list-item .status-indicator {\r\n width: 10px;\r\n height: 10px;\r\n border-radius: 50%;\r\n background-color: #777;\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 8px;\r\n }\r\n .jsforesight-element-list-item.hovering .status-indicator {\r\n background-color: oklch(83.7% 0.128 66.29 / 0.7);\r\n }\r\n .jsforesight-element-list-item.trajectory-hit .status-indicator {\r\n background-color: oklch(89.7% 0.196 126.665 / 0.7);\r\n }\r\n .jsforesight-element-list-item.hovering.trajectory-hit .status-indicator {\r\n background: linear-gradient(45deg, oklch(89.7% 0.196 126.665 / 0.7) 50%, oklch(83.7% 0.128 66.29 / 0.7) 50%);\r\n }\r\n .jsforesight-element-list-item .element-name {\r\n flex-grow: 1;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n .jsforesight-element-list-item .element-details {\r\n font-size: 10px;\r\n color: #ccc;\r\n flex-shrink: 0;\r\n }\r\n .jsforesight-element-list-item .hit-behavior {\r\n font-size: 10px;\r\n color: #b0b0b0;\r\n margin-right: 5px;\r\n padding: 1px 3px;\r\n border-radius: 2px;\r\n background-color: rgba(0,0,0,0.2);\r\n flex-shrink: 0;\r\n }\r\n `\r\n this.shadowRoot.appendChild(this.debugStyleElement)\r\n\r\n this.debugContainer = document.createElement(\"div\")\r\n this.debugContainer.id = \"jsforesight-debug-container\"\r\n this.shadowRoot.appendChild(this.debugContainer)\r\n\r\n this.debugPredictedMouseIndicator = document.createElement(\"div\")\r\n this.debugPredictedMouseIndicator.className = \"jsforesight-mouse-predicted\"\r\n this.debugContainer.appendChild(this.debugPredictedMouseIndicator)\r\n\r\n this.debugTrajectoryLine = document.createElement(\"div\")\r\n this.debugTrajectoryLine.className = \"jsforesight-trajectory-line\"\r\n this.debugContainer.appendChild(this.debugTrajectoryLine)\r\n\r\n // Initialize the control panel AND PASS THE SHADOW ROOT\r\n if (this.shadowRoot) {\r\n // Ensure shadowRoot is available\r\n this.controlPanel?.initialize(\r\n this.shadowRoot,\r\n currentSettings,\r\n currentSettings.debuggerSettings\r\n )\r\n }\r\n\r\n links.forEach((data, element) => {\r\n this.createOrUpdateLinkOverlay(element, data)\r\n })\r\n\r\n this.updateTrajectoryVisuals(\r\n currentPoint,\r\n predictedPoint,\r\n currentSettings.enableMousePrediction\r\n )\r\n }\r\n\r\n // ... rest of the ForesightDebugger class ...\r\n public cleanup() {\r\n this.controlPanel?.cleanup()\r\n // No need to re-assign this.controlPanel to null here, as a new one is made in constructor\r\n // if ForesightDebugger is re-initialized. If only cleanup is called (e.g. debug off),\r\n // then the instance might still be around but its DOM is gone.\r\n\r\n this.shadowHost?.remove()\r\n this.shadowHost = null\r\n this.shadowRoot = null\r\n this.debugContainer = null\r\n\r\n this.debugLinkOverlays.clear()\r\n this.lastElementData.clear()\r\n this.debugPredictedMouseIndicator = null\r\n this.debugTrajectoryLine = null\r\n this.debugStyleElement = null\r\n }\r\n\r\n public createOrUpdateLinkOverlay(element: ForesightElement, newData: ForesightElementData) {\r\n if (!this.debugContainer || !this.shadowRoot) return\r\n\r\n this.lastElementData.set(element, {\r\n isHovering: newData.isHovering,\r\n isTrajectoryHit: newData.trajectoryHitData.isTrajectoryHit,\r\n })\r\n\r\n let overlays = this.debugLinkOverlays.get(element)\r\n if (!overlays) {\r\n const linkOverlay = document.createElement(\"div\")\r\n linkOverlay.className = \"jsforesight-link-overlay\"\r\n this.debugContainer.appendChild(linkOverlay)\r\n\r\n const expandedOverlay = document.createElement(\"div\")\r\n expandedOverlay.className = \"jsforesight-expanded-overlay\"\r\n this.debugContainer.appendChild(expandedOverlay)\r\n\r\n const nameLabel = document.createElement(\"div\")\r\n nameLabel.className = \"jsforesight-name-label\"\r\n this.debugContainer.appendChild(nameLabel)\r\n\r\n overlays = { linkOverlay, expandedOverlay, nameLabel }\r\n this.debugLinkOverlays.set(element, overlays)\r\n }\r\n\r\n const { linkOverlay, expandedOverlay, nameLabel } = overlays\r\n const rect = element.getBoundingClientRect()\r\n\r\n linkOverlay.style.left = `${rect.left}px`\r\n linkOverlay.style.top = `${rect.top}px`\r\n linkOverlay.style.width = `${rect.width}px`\r\n linkOverlay.style.height = `${rect.height}px`\r\n linkOverlay.classList.toggle(\"trajectory-hit\", newData.trajectoryHitData.isTrajectoryHit)\r\n linkOverlay.classList.toggle(\"active\", newData.isHovering)\r\n\r\n if (newData.elementBounds.expandedRect) {\r\n expandedOverlay.style.left = `${newData.elementBounds.expandedRect.left}px`\r\n expandedOverlay.style.top = `${newData.elementBounds.expandedRect.top}px`\r\n expandedOverlay.style.width = `${\r\n newData.elementBounds.expandedRect.right - newData.elementBounds.expandedRect.left\r\n }px`\r\n expandedOverlay.style.height = `${\r\n newData.elementBounds.expandedRect.bottom - newData.elementBounds.expandedRect.top\r\n }px`\r\n expandedOverlay.style.display = \"block\"\r\n } else {\r\n expandedOverlay.style.display = \"none\"\r\n }\r\n\r\n if (newData.name && newData.name !== \"Unnamed\") {\r\n nameLabel.textContent = newData.name\r\n nameLabel.style.display = \"block\"\r\n nameLabel.style.left = `${rect.left}px`\r\n nameLabel.style.top = `${rect.top - 22}px`\r\n } else {\r\n nameLabel.style.display = \"none\"\r\n }\r\n\r\n this.controlPanel?.refreshElementList()\r\n }\r\n\r\n public removeLinkOverlay(element: ForesightElement) {\r\n const overlays = this.debugLinkOverlays.get(element)\r\n if (overlays) {\r\n overlays.linkOverlay.remove()\r\n overlays.expandedOverlay.remove()\r\n overlays.nameLabel.remove()\r\n this.debugLinkOverlays.delete(element)\r\n }\r\n this.lastElementData.delete(element)\r\n\r\n this.controlPanel?.refreshElementList()\r\n }\r\n\r\n public refreshDisplayedElements() {\r\n const currentManagerElements = new Set(this.foresightManagerInstance.elements.keys())\r\n\r\n // Update or add overlays for currently registered elements\r\n this.foresightManagerInstance.elements.forEach((data, element) => {\r\n this.createOrUpdateLinkOverlay(element, data) // This also triggers controlPanel.refreshElementList\r\n })\r\n\r\n // Remove overlays for elements that are no longer in the manager\r\n const overlaysToRemove = Array.from(this.debugLinkOverlays.keys()).filter(\r\n (el) => !currentManagerElements.has(el)\r\n )\r\n overlaysToRemove.forEach((el) => {\r\n const specificOverlays = this.debugLinkOverlays.get(el)\r\n specificOverlays?.linkOverlay.remove()\r\n specificOverlays?.expandedOverlay.remove()\r\n specificOverlays?.nameLabel.remove()\r\n this.debugLinkOverlays.delete(el)\r\n this.lastElementData.delete(el)\r\n })\r\n\r\n this.controlPanel?.refreshElementList()\r\n }\r\n\r\n public updateAllLinkVisuals(links: Map<ForesightElement, ForesightElementData>) {\r\n if (!this.shadowRoot || !this.debugContainer) return\r\n this.refreshDisplayedElements()\r\n }\r\n\r\n public updateTrajectoryVisuals(\r\n currentPoint: Point,\r\n predictedPoint: Point,\r\n enableMousePrediction: boolean\r\n ) {\r\n if (!this.shadowRoot || !this.debugContainer) return\r\n\r\n const hasRegisteredElements = this.foresightManagerInstance.elements.size > 0\r\n const showVisuals = enableMousePrediction && hasRegisteredElements\r\n\r\n if (this.debugPredictedMouseIndicator) {\r\n this.debugPredictedMouseIndicator.style.left = `${predictedPoint.x}px`\r\n this.debugPredictedMouseIndicator.style.top = `${predictedPoint.y}px`\r\n this.debugPredictedMouseIndicator.style.display = \"block\"\r\n }\r\n\r\n if (this.debugTrajectoryLine) {\r\n if (showVisuals && currentPoint && predictedPoint) {\r\n const dx = predictedPoint.x - currentPoint.x\r\n const dy = predictedPoint.y - currentPoint.y\r\n\r\n if (Math.abs(dx) < 0.1 && Math.abs(dy) < 0.1) {\r\n this.debugTrajectoryLine.style.display = \"none\"\r\n return\r\n }\r\n\r\n const length = Math.sqrt(dx * dx + dy * dy)\r\n const angle = (Math.atan2(dy, dx) * 180) / Math.PI\r\n\r\n this.debugTrajectoryLine.style.left = `${currentPoint.x}px`\r\n this.debugTrajectoryLine.style.top = `${currentPoint.y}px`\r\n this.debugTrajectoryLine.style.width = `${length}px`\r\n this.debugTrajectoryLine.style.transform = `translateY(-50%) rotate(${angle}deg)`\r\n this.debugTrajectoryLine.style.display = \"block\"\r\n } else {\r\n this.debugTrajectoryLine.style.display = \"none\"\r\n }\r\n }\r\n }\r\n\r\n public updateControlsState(settings: ForesightManagerProps) {\r\n this.controlPanel?.updateControlsState(settings)\r\n }\r\n}\r\n","import { ForesightDebugger } from \"../Debugger/ForesightDebugger\"\r\nimport type {\r\n ForesightCallback,\r\n ForesightManagerProps,\r\n ForesightElementData,\r\n ForesightElement,\r\n MousePosition,\r\n Point,\r\n Rect,\r\n UpdateForsightManagerProps,\r\n ForesightElementRegisterResult, // Assuming this is Partial<ForesightManagerProps>\r\n} from \"../../types/types\"\r\n\r\n/**\r\n * Manages the prediction of user intent based on mouse trajectory and element interactions.\r\n *\r\n * ForesightManager is a singleton class responsible for:\r\n * - Registering HTML elements to monitor.\r\n * - Tracking mouse movements and predicting future cursor positions.\r\n * - Detecting when a predicted trajectory intersects with a registered element's bounds.\r\n * - Invoking callbacks associated with elements upon predicted or actual interaction.\r\n * - Optionally unregistering elements after their callback is triggered.\r\n * - Handling global settings for prediction behavior (e.g., history size, prediction time).\r\n * - Optionally enabling a {@link ForesightDebugger} for visual feedback.\r\n * - Automatically updating element bounds on resize using {@link ResizeObserver}.\r\n * - Automatically unregistering elements removed from the DOM using {@link MutationObserver}.\r\n * - Detecting broader layout shifts via {@link MutationObserver} to update element positions.\r\n *\r\n * It should be initialized once using {@link ForesightManager.initialize} and then\r\n * accessed via the static getter {@link ForesightManager.instance}.\r\n */\r\nexport class ForesightManager {\r\n private static manager: ForesightManager\r\n public elements: Map<ForesightElement, ForesightElementData> = new Map()\r\n\r\n private isSetup: boolean = false\r\n private debugger: ForesightDebugger | null = null\r\n\r\n private globalSettings: ForesightManagerProps = {\r\n debug: false,\r\n enableMousePrediction: true,\r\n positionHistorySize: 8,\r\n trajectoryPredictionTime: 80,\r\n defaultHitSlop: { top: 0, left: 0, right: 0, bottom: 0 },\r\n resizeScrollThrottleDelay: 50,\r\n debuggerSettings: {\r\n isControlPanelDefaultMinimized: false,\r\n },\r\n }\r\n\r\n private positions: MousePosition[] = []\r\n private currentPoint: Point = { x: 0, y: 0 }\r\n private predictedPoint: Point = { x: 0, y: 0 }\r\n\r\n private lastResizeScrollCallTimestamp: number = 0\r\n private resizeScrollThrottleTimeoutId: ReturnType<typeof setTimeout> | null = null\r\n\r\n private domObserver: MutationObserver | null = null\r\n private lastDomMutationRectsUpdateTimestamp: number = 0\r\n private domMutationRectsUpdateTimeoutId: ReturnType<typeof setTimeout> | null = null\r\n\r\n private elementResizeObserver: ResizeObserver | null = null\r\n\r\n private constructor() {}\r\n\r\n public static initialize(props?: Partial<UpdateForsightManagerProps>): ForesightManager {\r\n if (!ForesightManager.manager) {\r\n ForesightManager.manager = new ForesightManager()\r\n if (props) {\r\n ForesightManager.manager.alterGlobalSettings(props)\r\n } else {\r\n if (ForesightManager.manager.globalSettings.debug) {\r\n ForesightManager.manager.turnOnDebugMode()\r\n }\r\n }\r\n } else if (props) {\r\n console.warn(\r\n \"ForesightManager is already initialized. Use alterGlobalSettings to update settings. Make sure to not put the ForesightManager.initialize() in a place that rerenders often.\"\r\n )\r\n ForesightManager.manager.alterGlobalSettings(props)\r\n }\r\n return ForesightManager.manager\r\n }\r\n\r\n public static get instance() {\r\n if (!ForesightManager.manager) {\r\n return this.initialize()\r\n }\r\n return ForesightManager.manager\r\n }\r\n\r\n private isTouchDevice = () => {\r\n return window.matchMedia(\"(pointer: coarse)\").matches && navigator.maxTouchPoints > 0\r\n }\r\n\r\n public register({\r\n element,\r\n callback,\r\n hitSlop,\r\n unregisterOnCallback,\r\n name,\r\n }: {\r\n element: ForesightElement\r\n callback: ForesightCallback\r\n hitSlop?: Rect | number\r\n unregisterOnCallback?: boolean\r\n name?: string\r\n }): ForesightElementRegisterResult {\r\n if (this.isTouchDevice()) {\r\n return { isTouchDevice: true, unregister: () => {} }\r\n }\r\n\r\n const normalizedHitSlop = hitSlop\r\n ? this.normalizeHitSlop(hitSlop)\r\n : this.globalSettings.defaultHitSlop\r\n\r\n const originalRect = element.getBoundingClientRect()\r\n\r\n // Use the destructured unregisterOnCallback directly with a default value\r\n // instead of options.unregisterOnCallback\r\n const finalUnregisterOnCallback = unregisterOnCallback ?? true\r\n\r\n const newForesightElementData: ForesightElementData = {\r\n callback,\r\n elementBounds: {\r\n expandedRect: this.getExpandedRect(originalRect, normalizedHitSlop),\r\n originalRect: originalRect,\r\n hitSlop: normalizedHitSlop,\r\n },\r\n isHovering: false,\r\n trajectoryHitData: {\r\n isTrajectoryHit: false,\r\n trajectoryHitTime: 0,\r\n trajectoryHitExpirationTimeoutId: undefined,\r\n },\r\n name: name ?? \"Unnamed\",\r\n unregisterOnCallback: finalUnregisterOnCallback,\r\n }\r\n this.elements.set(element, newForesightElementData)\r\n\r\n if (!this.isSetup) {\r\n this.setupGlobalListeners()\r\n }\r\n\r\n if (this.elementResizeObserver) {\r\n this.elementResizeObserver.observe(element)\r\n }\r\n\r\n if (this.debugger) {\r\n const data = this.elements.get(element)\r\n if (data) this.debugger.createOrUpdateLinkOverlay(element, data)\r\n this.debugger.refreshDisplayedElements()\r\n }\r\n\r\n return { isTouchDevice: false, unregister: () => this.unregister(element) }\r\n }\r\n\r\n private unregister(element: ForesightElement) {\r\n const isRegistered = this.elements.has(element)\r\n if (isRegistered) {\r\n const foresightElementData = this.elements.get(element)\r\n const elementName = foresightElementData?.name || \"Element\"\r\n\r\n // Clear any pending trajectory expiration timeout\r\n if (foresightElementData?.trajectoryHitData.trajectoryHitExpirationTimeoutId) {\r\n clearTimeout(foresightElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId)\r\n }\r\n\r\n if (this.elementResizeObserver) {\r\n this.elementResizeObserver.unobserve(element)\r\n }\r\n\r\n this.elements.delete(element)\r\n\r\n if (this.debugger) {\r\n this.debugger.removeLinkOverlay(element)\r\n this.debugger.refreshDisplayedElements()\r\n }\r\n\r\n if (this.elements.size === 0 && this.isSetup) {\r\n this.removeGlobalListeners()\r\n }\r\n } else {\r\n console.warn(\"Attempted to unregister element not found:\", element)\r\n }\r\n }\r\n\r\n public alterGlobalSettings(props?: Partial<UpdateForsightManagerProps>): void {\r\n let settingsActuallyChanged = false\r\n\r\n if (\r\n props?.positionHistorySize !== undefined &&\r\n this.globalSettings.positionHistorySize !== props.positionHistorySize\r\n ) {\r\n this.globalSettings.positionHistorySize = props.positionHistorySize\r\n settingsActuallyChanged = true\r\n }\r\n\r\n if (\r\n props?.trajectoryPredictionTime !== undefined &&\r\n this.globalSettings.trajectoryPredictionTime !== props.trajectoryPredictionTime\r\n ) {\r\n this.globalSettings.trajectoryPredictionTime = props.trajectoryPredictionTime\r\n settingsActuallyChanged = true\r\n }\r\n\r\n if (\r\n props?.enableMousePrediction !== undefined &&\r\n this.globalSettings.enableMousePrediction !== props.enableMousePrediction\r\n ) {\r\n this.globalSettings.enableMousePrediction = props.enableMousePrediction\r\n settingsActuallyChanged = true\r\n if (this.globalSettings.enableMousePrediction) {\r\n this.predictedPoint = this.predictMousePosition(this.currentPoint)\r\n } else {\r\n this.predictedPoint = this.currentPoint\r\n // When disabling prediction, clear active trajectory hits and their timeouts\r\n this.elements.forEach((data, el) => {\r\n if (data.trajectoryHitData.isTrajectoryHit) {\r\n if (data.trajectoryHitData.trajectoryHitExpirationTimeoutId) {\r\n clearTimeout(data.trajectoryHitData.trajectoryHitExpirationTimeoutId)\r\n }\r\n const updatedElementData: ForesightElementData = {\r\n ...data,\r\n trajectoryHitData: {\r\n isTrajectoryHit: false,\r\n trajectoryHitTime: 0,\r\n trajectoryHitExpirationTimeoutId: undefined,\r\n },\r\n }\r\n this.elements.set(el, updatedElementData)\r\n if (this.debugger) {\r\n this.debugger.createOrUpdateLinkOverlay(el, updatedElementData)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n if (props?.debuggerSettings?.isControlPanelDefaultMinimized !== undefined) {\r\n this.globalSettings.debuggerSettings.isControlPanelDefaultMinimized =\r\n props.debuggerSettings.isControlPanelDefaultMinimized\r\n settingsActuallyChanged = true\r\n }\r\n\r\n if (props?.defaultHitSlop !== undefined) {\r\n const normalizedNewHitSlop = this.normalizeHitSlop(props.defaultHitSlop)\r\n if (!this.areRectsEqual(this.globalSettings.defaultHitSlop, normalizedNewHitSlop)) {\r\n this.globalSettings.defaultHitSlop = normalizedNewHitSlop\r\n settingsActuallyChanged = true\r\n // This recomputes expandedRects using each element's own stored hitSlop.\r\n // If an element's hitSlop itself needs to change because it was using the\r\n // old default, that logic would need to be more explicit here.\r\n // For now, this just updates the global default for future use and forces re-calc.\r\n this.elements.forEach((data, element) => {\r\n this.updateExpandedRect(element)\r\n })\r\n }\r\n }\r\n\r\n if (\r\n props?.resizeScrollThrottleDelay !== undefined &&\r\n this.globalSettings.resizeScrollThrottleDelay !== props.resizeScrollThrottleDelay\r\n ) {\r\n this.globalSettings.resizeScrollThrottleDelay = props.resizeScrollThrottleDelay\r\n settingsActuallyChanged = true\r\n }\r\n\r\n if (props?.debug !== undefined && this.globalSettings.debug !== props.debug) {\r\n this.globalSettings.debug = props.debug\r\n settingsActuallyChanged = true\r\n if (this.globalSettings.debug) {\r\n this.turnOnDebugMode()\r\n } else {\r\n if (this.debugger) {\r\n this.debugger.cleanup()\r\n this.debugger = null\r\n }\r\n }\r\n }\r\n\r\n if (settingsActuallyChanged && this.globalSettings.debug && this.debugger) {\r\n this.debugger.updateControlsState(this.globalSettings)\r\n this.debugger.updateTrajectoryVisuals(\r\n this.currentPoint,\r\n this.predictedPoint,\r\n this.globalSettings.enableMousePrediction\r\n )\r\n this.elements.forEach((data, el) => {\r\n this.debugger!.createOrUpdateLinkOverlay(el, data)\r\n })\r\n this.debugger.refreshDisplayedElements()\r\n }\r\n }\r\n\r\n private turnOnDebugMode() {\r\n if (!this.debugger) {\r\n this.debugger = new ForesightDebugger(this)\r\n this.debugger.initialize(\r\n this.elements,\r\n this.globalSettings,\r\n this.currentPoint,\r\n this.predictedPoint\r\n )\r\n } else {\r\n this.debugger.updateControlsState(this.globalSettings)\r\n this.debugger.updateAllLinkVisuals(this.elements)\r\n this.debugger.updateTrajectoryVisuals(\r\n this.currentPoint,\r\n this.predictedPoint,\r\n this.globalSettings.enableMousePrediction\r\n )\r\n }\r\n }\r\n\r\n private normalizeHitSlop = (hitSlop: number | Rect): Rect => {\r\n if (typeof hitSlop === \"number\") {\r\n return {\r\n top: hitSlop,\r\n left: hitSlop,\r\n right: hitSlop,\r\n bottom: hitSlop,\r\n }\r\n }\r\n return hitSlop\r\n }\r\n\r\n private getExpandedRect(baseRect: Rect | DOMRect, hitSlop: Rect): Rect {\r\n return {\r\n left: baseRect.left - hitSlop.left,\r\n right: baseRect.right + hitSlop.right,\r\n top: baseRect.top - hitSlop.top,\r\n bottom: baseRect.bottom + hitSlop.bottom,\r\n }\r\n }\r\n\r\n private areRectsEqual(rect1: Rect, rect2: Rect): boolean {\r\n if (!rect1 || !rect2) return rect1 === rect2\r\n return (\r\n rect1.left === rect2.left &&\r\n rect1.right === rect2.right &&\r\n rect1.top === rect2.top &&\r\n rect1.bottom === rect2.bottom\r\n )\r\n }\r\n private updateExpandedRect(element: ForesightElement) {\r\n const foresightElementData = this.elements.get(element)\r\n if (!foresightElementData) return\r\n\r\n const newOriginalRect = element.getBoundingClientRect()\r\n const currentHitSlop = foresightElementData.elementBounds.hitSlop\r\n const expandedRect = this.getExpandedRect(newOriginalRect, currentHitSlop)\r\n\r\n if (\r\n !this.areRectsEqual(expandedRect, foresightElementData.elementBounds.expandedRect) ||\r\n !this.areRectsEqual(newOriginalRect, foresightElementData.elementBounds.originalRect)\r\n ) {\r\n this.elements.set(element, {\r\n ...foresightElementData,\r\n elementBounds: {\r\n ...foresightElementData.elementBounds,\r\n originalRect: newOriginalRect,\r\n expandedRect,\r\n },\r\n })\r\n\r\n if (this.debugger) {\r\n const updatedData = this.elements.get(element)\r\n if (updatedData) this.debugger.createOrUpdateLinkOverlay(element, updatedData)\r\n }\r\n }\r\n }\r\n\r\n private updateAllRects() {\r\n this.elements.forEach((data, element) => {\r\n this.updateExpandedRect(element)\r\n })\r\n }\r\n\r\n private predictMousePosition = (point: Point): Point => {\r\n const now = performance.now()\r\n const currentPosition: MousePosition = { point, time: now }\r\n const { x, y } = point\r\n\r\n this.positions.push(currentPosition)\r\n if (this.positions.length > this.globalSettings.positionHistorySize) {\r\n this.positions.shift()\r\n }\r\n\r\n if (this.positions.length < 2) {\r\n return { x, y }\r\n }\r\n\r\n const first = this.positions[0]\r\n const last = this.positions[this.positions.length - 1]\r\n const dt = (last.time - first.time) / 1000\r\n\r\n if (dt === 0) {\r\n return { x, y }\r\n }\r\n\r\n const dx = last.point.x - first.point.x\r\n const dy = last.point.y - first.point.y\r\n const vx = dx / dt\r\n const vy = dy / dt\r\n\r\n const trajectoryPredictionTimeInSeconds = this.globalSettings.trajectoryPredictionTime / 1000\r\n const predictedX = x + vx * trajectoryPredictionTimeInSeconds\r\n const predictedY = y + vy * trajectoryPredictionTimeInSeconds\r\n return { x: predictedX, y: predictedY }\r\n }\r\n\r\n private lineSegmentIntersectsRect(p1: Point, p2: Point, rect: Rect): boolean {\r\n // (Liang-Barsky algorithm implementation)\r\n let t0 = 0.0\r\n let t1 = 1.0\r\n const dx = p2.x - p1.x\r\n const dy = p2.y - p1.y\r\n\r\n const clipTest = (p: number, q: number): boolean => {\r\n if (p === 0) {\r\n if (q < 0) return false\r\n } else {\r\n const r = q / p\r\n if (p < 0) {\r\n if (r > t1) return false\r\n if (r > t0) t0 = r\r\n } else {\r\n if (r < t0) return false\r\n if (r < t1) t1 = r\r\n }\r\n }\r\n return true\r\n }\r\n\r\n if (!clipTest(-dx, p1.x - rect.left)) return false\r\n if (!clipTest(dx, rect.right - p1.x)) return false\r\n if (!clipTest(-dy, p1.y - rect.top)) return false\r\n if (!clipTest(dy, rect.bottom - p1.y)) return false\r\n\r\n return t0 <= t1\r\n }\r\n\r\n private handleMouseMove = (e: MouseEvent) => {\r\n this.currentPoint = { x: e.clientX, y: e.clientY }\r\n this.predictedPoint = this.globalSettings.enableMousePrediction\r\n ? this.predictMousePosition(this.currentPoint)\r\n : this.currentPoint\r\n\r\n let elementsToUpdateInDebugger: ForesightElement[] | null = null\r\n if (this.debugger) {\r\n elementsToUpdateInDebugger = []\r\n }\r\n\r\n const elementsToUnregister: ForesightElement[] = []\r\n\r\n this.elements.forEach((currentData, element) => {\r\n if (!this.elements.has(element)) {\r\n return\r\n }\r\n\r\n const previousDataState = {\r\n isHovering: currentData.isHovering,\r\n trajectoryHitData: currentData.trajectoryHitData,\r\n }\r\n\r\n let callbackFiredThisCycle = false\r\n let finalIsHovering = currentData.isHovering\r\n let finalIsTrajectoryHit = currentData.trajectoryHitData.isTrajectoryHit\r\n let finalTrajectoryHitTime = currentData.trajectoryHitData.trajectoryHitTime\r\n\r\n const { expandedRect } = currentData.elementBounds\r\n\r\n const isCurrentlyPhysicallyHovering =\r\n this.currentPoint.x >= expandedRect.left &&\r\n this.currentPoint.x <= expandedRect.right &&\r\n this.currentPoint.y >= expandedRect.top &&\r\n this.currentPoint.y <= expandedRect.bottom\r\n\r\n let isNewTrajectoryActivation = false\r\n if (\r\n this.globalSettings.enableMousePrediction &&\r\n !isCurrentlyPhysicallyHovering &&\r\n !currentData.trajectoryHitData.isTrajectoryHit // Only activate if not already hit\r\n ) {\r\n if (this.lineSegmentIntersectsRect(this.currentPoint, this.predictedPoint, expandedRect)) {\r\n isNewTrajectoryActivation = true\r\n }\r\n }\r\n\r\n if (isNewTrajectoryActivation) {\r\n currentData.callback()\r\n callbackFiredThisCycle = true\r\n finalIsTrajectoryHit = true\r\n finalTrajectoryHitTime = performance.now()\r\n }\r\n\r\n const isNewPhysicalHoverEvent = isCurrentlyPhysicallyHovering && !currentData.isHovering\r\n\r\n if (isNewPhysicalHoverEvent) {\r\n const hoverCanTriggerCallback =\r\n !currentData.trajectoryHitData.isTrajectoryHit || // If not trajectory hit, hover can trigger\r\n (currentData.trajectoryHitData.isTrajectoryHit &&\r\n !this.globalSettings.enableMousePrediction) // Or if trajectory was hit but prediction is now off\r\n\r\n if (!callbackFiredThisCycle && hoverCanTriggerCallback) {\r\n currentData.callback()\r\n callbackFiredThisCycle = true\r\n }\r\n }\r\n\r\n finalIsHovering = isCurrentlyPhysicallyHovering\r\n\r\n // If physically hovering, it overrides any \"trajectory hit\" state for expiration purposes\r\n // but the visual/logical state of isTrajectoryHit might persist if it happened first.\r\n // The main change is how the expiration timeout is handled.\r\n\r\n if (callbackFiredThisCycle && currentData.unregisterOnCallback) {\r\n elementsToUnregister.push(element)\r\n }\r\n\r\n const coreStateActuallyChanged =\r\n finalIsHovering !== previousDataState.isHovering ||\r\n finalIsTrajectoryHit !== previousDataState.trajectoryHitData.isTrajectoryHit ||\r\n (finalIsTrajectoryHit &&\r\n finalTrajectoryHitTime !== previousDataState.trajectoryHitData.trajectoryHitTime)\r\n\r\n if (coreStateActuallyChanged && this.elements.has(element)) {\r\n let newElementData: ForesightElementData = {\r\n ...currentData,\r\n isHovering: finalIsHovering,\r\n trajectoryHitData: {\r\n isTrajectoryHit: finalIsTrajectoryHit,\r\n trajectoryHitTime: finalTrajectoryHitTime,\r\n trajectoryHitExpirationTimeoutId:\r\n previousDataState.trajectoryHitData.trajectoryHitExpirationTimeoutId, // Preserve existing initially\r\n },\r\n }\r\n\r\n // Manage trajectory hit expiration timeout\r\n if (\r\n newElementData.trajectoryHitData.isTrajectoryHit &&\r\n !previousDataState.trajectoryHitData.isTrajectoryHit\r\n ) {\r\n // Just became a trajectory hit (or re-hit after expiration)\r\n if (newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId) {\r\n clearTimeout(newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId)\r\n }\r\n newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId = setTimeout(() => {\r\n const currentElementData = this.elements.get(element)\r\n if (\r\n currentElementData &&\r\n currentElementData.trajectoryHitData.isTrajectoryHit &&\r\n currentElementData.trajectoryHitData.trajectoryHitTime ===\r\n newElementData.trajectoryHitData.trajectoryHitTime // Ensure it's the same hit instance\r\n ) {\r\n const expiredData: ForesightElementData = {\r\n ...currentElementData,\r\n trajectoryHitData: {\r\n isTrajectoryHit: false,\r\n trajectoryHitExpirationTimeoutId: undefined,\r\n trajectoryHitTime: currentElementData.trajectoryHitData.trajectoryHitTime,\r\n },\r\n }\r\n this.elements.set(element, expiredData)\r\n if (this.debugger) {\r\n this.debugger.createOrUpdateLinkOverlay(element, expiredData)\r\n }\r\n }\r\n }, 200)\r\n } else if (\r\n !newElementData.trajectoryHitData.isTrajectoryHit &&\r\n previousDataState.trajectoryHitData.isTrajectoryHit\r\n ) {\r\n // No longer a trajectory hit (e.g. mouse moved away, physical hover, or prediction disabled)\r\n if (newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId) {\r\n clearTimeout(newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId)\r\n newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId = undefined\r\n }\r\n }\r\n // If it was already a trajectory hit and remains one (e.g. mouse still on trajectory path\r\n // without physical hover, and timeout hasn't fired), the existing timeout continues.\r\n\r\n this.elements.set(element, newElementData)\r\n\r\n if (elementsToUpdateInDebugger) {\r\n elementsToUpdateInDebugger.push(element)\r\n }\r\n }\r\n })\r\n\r\n if (elementsToUnregister.length > 0) {\r\n elementsToUnregister.forEach((element) => {\r\n if (this.elements.has(element)) {\r\n const elementName = this.elements.get(element)?.name || \"Unnamed\"\r\n console.log(\r\n `Unregistering element \"${elementName}\" due to callback and unregisterOnCallback=true.`\r\n )\r\n this.unregister(element) // unregister will clear its own timeout\r\n }\r\n })\r\n }\r\n\r\n if (this.debugger) {\r\n elementsToUpdateInDebugger?.forEach((element) => {\r\n const data = this.elements.get(element) // Get potentially updated data\r\n if (data) {\r\n this.debugger!.createOrUpdateLinkOverlay(element, data)\r\n }\r\n })\r\n this.debugger.updateTrajectoryVisuals(\r\n this.currentPoint,\r\n this.predictedPoint,\r\n this.globalSettings.enableMousePrediction\r\n )\r\n }\r\n }\r\n\r\n private handleResizeOrScroll = (): void => {\r\n if (this.resizeScrollThrottleTimeoutId) {\r\n clearTimeout(this.resizeScrollThrottleTimeoutId)\r\n }\r\n\r\n const now = performance.now()\r\n const timeSinceLastCall = now - this.lastResizeScrollCallTimestamp\r\n const currentDelay = this.globalSettings.resizeScrollThrottleDelay\r\n\r\n if (timeSinceLastCall >= currentDelay) {\r\n this.updateAllRects()\r\n this.lastResizeScrollCallTimestamp = now\r\n this.resizeScrollThrottleTimeoutId = null\r\n } else {\r\n this.resizeScrollThrottleTimeoutId = setTimeout(() => {\r\n this.updateAllRects()\r\n this.lastResizeScrollCallTimestamp = performance.now()\r\n this.resizeScrollThrottleTimeoutId = null\r\n }, currentDelay - timeSinceLastCall)\r\n }\r\n }\r\n\r\n private handleElementResize = (entries: ResizeObserverEntry[]) => {\r\n for (const entry of entries) {\r\n const element = entry.target as ForesightElement\r\n const foresightElementData = this.elements.get(element)\r\n\r\n if (foresightElementData) {\r\n this.updateExpandedRect(element)\r\n }\r\n }\r\n }\r\n\r\n private handleDomMutations = (mutationsList: MutationRecord[]) => {\r\n let structuralChangeDetected = false\r\n for (const mutation of mutationsList) {\r\n if (mutation.type === \"childList\" && mutation.removedNodes.length > 0) {\r\n const currentElements = Array.from(this.elements.keys())\r\n for (const element of currentElements) {\r\n if (!element.isConnected) {\r\n if (this.elements.has(element)) {\r\n this.unregister(element) // unregister will clear its own timeout\r\n }\r\n }\r\n }\r\n }\r\n if (\r\n mutation.type === \"childList\" ||\r\n (mutation.type === \"attributes\" &&\r\n (mutation.attributeName === \"style\" || mutation.attributeName === \"class\"))\r\n ) {\r\n structuralChangeDetected = true\r\n }\r\n }\r\n\r\n if (structuralChangeDetected && this.elements.size > 0) {\r\n if (this.domMutationRectsUpdateTimeoutId) {\r\n clearTimeout(this.domMutationRectsUpdateTimeoutId)\r\n }\r\n const now = performance.now()\r\n const delay = this.globalSettings.resizeScrollThrottleDelay\r\n const timeSinceLastCall = now - this.lastDomMutationRectsUpdateTimestamp\r\n\r\n if (timeSinceLastCall >= delay) {\r\n this.updateAllRects()\r\n this.lastDomMutationRectsUpdateTimestamp = now\r\n this.domMutationRectsUpdateTimeoutId = null\r\n } else {\r\n this.domMutationRectsUpdateTimeoutId = setTimeout(() => {\r\n this.updateAllRects()\r\n this.lastDomMutationRectsUpdateTimestamp = performance.now()\r\n this.domMutationRectsUpdateTimeoutId = null\r\n }, delay - timeSinceLastCall)\r\n }\r\n }\r\n }\r\n\r\n private setupGlobalListeners() {\r\n if (this.isSetup) return\r\n document.addEventListener(\"mousemove\", this.handleMouseMove)\r\n window.addEventListener(\"resize\", this.handleResizeOrScroll)\r\n window.addEventListener(\"scroll\", this.handleResizeOrScroll)\r\n\r\n if (!this.domObserver) {\r\n this.domObserver = new MutationObserver(this.handleDomMutations)\r\n }\r\n this.domObserver.observe(document.documentElement, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n })\r\n\r\n if (!this.elementResizeObserver) {\r\n this.elementResizeObserver = new ResizeObserver(this.handleElementResize)\r\n this.elements.forEach((_, element) => this.elementResizeObserver!.observe(element))\r\n }\r\n this.isSetup = true\r\n }\r\n\r\n private removeGlobalListeners() {\r\n document.removeEventListener(\"mousemove\", this.handleMouseMove)\r\n window.removeEventListener(\"resize\", this.handleResizeOrScroll)\r\n window.removeEventListener(\"scroll\", this.handleResizeOrScroll)\r\n\r\n if (this.resizeScrollThrottleTimeoutId) {\r\n clearTimeout(this.resizeScrollThrottleTimeoutId)\r\n this.resizeScrollThrottleTimeoutId = null\r\n }\r\n if (this.domMutationRectsUpdateTimeoutId) {\r\n clearTimeout(this.domMutationRectsUpdateTimeoutId)\r\n this.domMutationRectsUpdateTimeoutId = null\r\n }\r\n\r\n if (this.domObserver) {\r\n this.domObserver.disconnect()\r\n }\r\n if (this.elementResizeObserver) {\r\n this.elementResizeObserver.disconnect()\r\n }\r\n this.isSetup = false\r\n }\r\n}\r\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","SuppressedError","DebuggerControlPanel","manager","shadowRoot","controlsContainer","elementListContainer","elementCountSpan","elementListItems","Map","trajectoryEnabledCheckbox","historySizeSlider","historyValueSpan","predictionTimeSlider","predictionValueSpan","throttleDelaySlider","throttleValueSpan","minimizeButton","debuggerSection","isMinimized","foresightManagerInstance","initialize","initialSettings","debuggerSettings","_createDOM","isControlPanelDefaultMinimized","appendChild","_queryDOMElements","_setupEventListeners","updateControlsState","refreshElementList","_applyMinimizedStateVisuals","document","createElement","id","innerHTML","controlsHTML","querySelector","_this","_a","addEventListener","e","alterGlobalSettings","enableMousePrediction","target","checked","_b","value","parseInt","textContent","toString","positionHistorySize","_c","trajectoryPredictionTime","_d","resizeScrollThrottleDelay","_e","style","display","settings","clear","elementsMap","elements","size","forEach","data","element","listItem","className","_updateListItemContent","set","classList","toggle","isHovering","trajectoryHitData","isTrajectoryHit","hitBehaviorText","unregisterOnCallback","hitBehaviorTitle","concat","name","cleanup","remove","ForesightDebugger","intentManager","shadowHost","debugContainer","debugLinkOverlays","debugPredictedMouseIndicator","debugTrajectoryLine","debugStyleElement","controlPanel","lastElementData","links","currentSettings","currentPoint","predictedPoint","window","pointerEvents","body","attachShadow","mode","createOrUpdateLinkOverlay","updateTrajectoryVisuals","newData","overlays","get","linkOverlay_1","expandedOverlay_1","nameLabel_1","linkOverlay","expandedOverlay","nameLabel","rect","getBoundingClientRect","left","top","width","height","elementBounds","expandedRect","right","bottom","removeLinkOverlay","delete","refreshDisplayedElements","currentManagerElements","Set","keys","Array","from","filter","el","has","specificOverlays","updateAllLinkVisuals","hasRegisteredElements","showVisuals","x","y","dx","dy","Math","abs","length_1","sqrt","angle","atan2","PI","transform","ForesightManager","isSetup","debugger","globalSettings","debug","defaultHitSlop","positions","lastResizeScrollCallTimestamp","resizeScrollThrottleTimeoutId","domObserver","lastDomMutationRectsUpdateTimestamp","domMutationRectsUpdateTimeoutId","elementResizeObserver","isTouchDevice","matchMedia","matches","navigator","maxTouchPoints","normalizeHitSlop","hitSlop","predictMousePosition","point","currentPosition","time","performance","now","push","shift","first","last","dt","vx","vy","trajectoryPredictionTimeInSeconds","handleMouseMove","clientX","clientY","elementsToUpdateInDebugger","elementsToUnregister","currentData","previousDataState","callbackFiredThisCycle","finalIsHovering","finalIsTrajectoryHit","finalTrajectoryHitTime","trajectoryHitTime","isCurrentlyPhysicallyHovering","isNewTrajectoryActivation","lineSegmentIntersectsRect","callback","hoverCanTriggerCallback","newElementData_1","trajectoryHitExpirationTimeoutId","clearTimeout","setTimeout","currentElementData","expiredData","undefined","elementName","console","log","unregister","handleResizeOrScroll","timeSinceLastCall","currentDelay","updateAllRects","handleElementResize","entries","_i","entries_1","updateExpandedRect","handleDomMutations","mutationsList","structuralChangeDetected","mutationsList_1","mutation","type","removedNodes","currentElements_1","isConnected","attributeName","delay","props","warn","turnOnDebugMode","defineProperty","register","normalizedHitSlop","originalRect","finalUnregisterOnCallback","newForesightElementData","getExpandedRect","setupGlobalListeners","observe","foresightElementData","unobserve","removeGlobalListeners","settingsActuallyChanged","updatedElementData","normalizedNewHitSlop","areRectsEqual","baseRect","rect1","rect2","newOriginalRect","currentHitSlop","updatedData","p1","p2","t0","t1","clipTest","q","r","MutationObserver","documentElement","childList","subtree","attributes","ResizeObserver","_","removeEventListener","disconnect"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/.pnpm/@rollup+plugin-typescript@12.1.2_rollup@4.40.2_tslib@2.8.1_typescript@5.8.3/node_modules/tslib/tslib.es6.js","../src/ForesightManager/Debugger/DebuggerControlPanel.ts","../src/ForesightManager/helpers/isTouchDevice.ts","../src/ForesightManager/Debugger/ForesightDebugger.ts","../src/ForesightManager/Manager/ForesightManager.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","// DebuggerControlPanel.ts\r\nimport type { ForesightManager } from \"../Manager/ForesightManager\"\r\nimport type {\r\n ForesightElementData,\r\n ForesightElement,\r\n ForesightManagerProps,\r\n DebuggerSettings,\r\n} from \"../../types/types\"\r\n\r\nexport class DebuggerControlPanel {\r\n private foresightManagerInstance: ForesightManager\r\n private shadowRoot: ShadowRoot | null = null\r\n private controlsContainer: HTMLElement | null = null\r\n private elementListContainer: HTMLElement | null = null\r\n private elementCountSpan: HTMLSpanElement | null = null\r\n private elementListItems: Map<ForesightElement, HTMLElement> = new Map()\r\n\r\n // References to input elements for easy state updates\r\n private trajectoryEnabledCheckbox: HTMLInputElement | null = null\r\n private historySizeSlider: HTMLInputElement | null = null\r\n private historyValueSpan: HTMLSpanElement | null = null\r\n private predictionTimeSlider: HTMLInputElement | null = null\r\n private predictionValueSpan: HTMLSpanElement | null = null\r\n private throttleDelaySlider: HTMLInputElement | null = null\r\n private throttleValueSpan: HTMLSpanElement | null = null\r\n\r\n // For minimize functionality\r\n private minimizeButton: HTMLButtonElement | null = null\r\n private debuggerSection: HTMLElement | null = null // Contains the element list\r\n private isMinimized: boolean = false\r\n\r\n constructor(manager: ForesightManager) {\r\n this.foresightManagerInstance = manager\r\n }\r\n\r\n public initialize(\r\n shadowRoot: ShadowRoot,\r\n initialSettings: ForesightManagerProps,\r\n debuggerSettings: DebuggerSettings\r\n ) {\r\n this.shadowRoot = shadowRoot\r\n this._createDOM() // Create and append the panel's HTML structure\r\n\r\n if (debuggerSettings.isControlPanelDefaultMinimized) {\r\n this.isMinimized = true\r\n }\r\n\r\n if (this.controlsContainer) {\r\n this.shadowRoot.appendChild(this.controlsContainer)\r\n this._queryDOMElements()\r\n this._setupEventListeners()\r\n this.updateControlsState(initialSettings)\r\n this.refreshElementList()\r\n this._applyMinimizedStateVisuals() // Ensure initial state is applied\r\n }\r\n }\r\n\r\n private _createDOM() {\r\n this.controlsContainer = document.createElement(\"div\")\r\n this.controlsContainer.id = \"jsforesight-debug-controls\" // Use existing ID for styles\r\n\r\n // Note: The minimize button already exists in your HTML structure\r\n let controlsHTML = `\r\n <div class=\"jsforesight-debugger-title-container\">\r\n <button class=\"jsforesight-minimize-button\">-</button>\r\n <h3>Foresight Debugger</h3>\r\n <span class=\"jsforesight-info-icon\" title=\"Changes made here are for the current session only and won't persist. Update initial values in the ForesightManager.initialize() props for permanent changes.\">i</span>\r\n </div>\r\n\r\n <div class=\"jsforesight-debugger-section\">\r\n <h4>Session Settings</h4>\r\n <div class=\"control-row\">\r\n <label for=\"jsforesight-trajectory-enabled\">\r\n Enable Mouse Prediction\r\n <span class=\"jsforesight-info-icon\" title=\"Toggles mouse movement prediction. If disabled, only direct hovers trigger actions.\">i</span>\r\n </label>\r\n <input type=\"checkbox\" id=\"jsforesight-trajectory-enabled\">\r\n </div>\r\n <div class=\"control-row\">\r\n <label for=\"jsforesight-history-size\">\r\n History Size\r\n <span class=\"jsforesight-info-icon\" title=\"Number of past mouse positions for velocity calculation (Min: 2, Max: 20). Higher values smooth predictions but add latency.\">i</span>\r\n </label>\r\n <input type=\"range\" id=\"jsforesight-history-size\" min=\"2\" max=\"20\">\r\n <span id=\"jsforesight-history-value\"></span>\r\n </div>\r\n <div class=\"control-row\">\r\n <label for=\"jsforesight-prediction-time\">\r\n Prediction Time (ms)\r\n <span class=\"jsforesight-info-icon\" title=\"How far (ms) to project trajectory (Min: 10, Max: 500). Larger values detect intent sooner.\">i</span>\r\n </label>\r\n <input type=\"range\" id=\"jsforesight-prediction-time\" min=\"10\" max=\"500\" step=\"10\">\r\n <span id=\"jsforesight-prediction-value\"></span>\r\n </div>\r\n <div class=\"control-row\">\r\n <label for=\"jsforesight-throttle-delay\">\r\n Scroll/Resize Throttle (ms)\r\n <span class=\"jsforesight-info-icon\" title=\"Delay (ms) for recalculating element positions on resize/scroll (Min: 0, Max: 500). Higher values improve performance during rapid events.\">i</span>\r\n </label>\r\n <input type=\"range\" id=\"jsforesight-throttle-delay\" min=\"0\" max=\"500\" step=\"10\">\r\n <span id=\"jsforesight-throttle-value\"></span>\r\n </div>\r\n `\r\n controlsHTML += `\r\n <div class=\"jsforesight-debugger-section\">\r\n <h4>Registered Elements (<span id=\"jsforesight-element-count\">0</span>)</h4>\r\n <div id=\"jsforesight-element-list-items-container\" class=\"jsforesight-element-list\">\r\n <em>Initializing...</em>\r\n </div>\r\n </div>\r\n </div>\r\n `\r\n\r\n this.controlsContainer.innerHTML = controlsHTML\r\n }\r\n\r\n private _queryDOMElements() {\r\n if (!this.controlsContainer) return\r\n\r\n this.trajectoryEnabledCheckbox = this.controlsContainer.querySelector(\r\n \"#jsforesight-trajectory-enabled\"\r\n )\r\n this.historySizeSlider = this.controlsContainer.querySelector(\"#jsforesight-history-size\")\r\n this.historyValueSpan = this.controlsContainer.querySelector(\"#jsforesight-history-value\")\r\n this.predictionTimeSlider = this.controlsContainer.querySelector(\"#jsforesight-prediction-time\")\r\n this.predictionValueSpan = this.controlsContainer.querySelector(\"#jsforesight-prediction-value\")\r\n this.throttleDelaySlider = this.controlsContainer.querySelector(\"#jsforesight-throttle-delay\")\r\n this.throttleValueSpan = this.controlsContainer.querySelector(\"#jsforesight-throttle-value\")\r\n this.elementListContainer = this.controlsContainer.querySelector(\r\n \"#jsforesight-element-list-items-container\"\r\n )\r\n this.elementCountSpan = this.controlsContainer.querySelector(\"#jsforesight-element-count\")\r\n\r\n // Query elements for minimize functionality\r\n this.minimizeButton = this.controlsContainer.querySelector(\".jsforesight-minimize-button\")\r\n this.debuggerSection = this.controlsContainer.querySelector(\".jsforesight-debugger-section\")\r\n }\r\n\r\n private _setupEventListeners() {\r\n this.trajectoryEnabledCheckbox?.addEventListener(\"change\", (e) => {\r\n this.foresightManagerInstance.alterGlobalSettings({\r\n enableMousePrediction: (e.target as HTMLInputElement).checked,\r\n })\r\n })\r\n\r\n this.historySizeSlider?.addEventListener(\"input\", (e) => {\r\n const value = parseInt((e.target as HTMLInputElement).value)\r\n if (this.historyValueSpan) this.historyValueSpan.textContent = value.toString()\r\n this.foresightManagerInstance.alterGlobalSettings({\r\n positionHistorySize: value,\r\n })\r\n })\r\n\r\n this.predictionTimeSlider?.addEventListener(\"input\", (e) => {\r\n const value = parseInt((e.target as HTMLInputElement).value)\r\n if (this.predictionValueSpan) this.predictionValueSpan.textContent = value.toString()\r\n this.foresightManagerInstance.alterGlobalSettings({\r\n trajectoryPredictionTime: value,\r\n })\r\n })\r\n\r\n this.throttleDelaySlider?.addEventListener(\"input\", (e) => {\r\n const value = parseInt((e.target as HTMLInputElement).value)\r\n if (this.throttleValueSpan) this.throttleValueSpan.textContent = value.toString()\r\n this.foresightManagerInstance.alterGlobalSettings({\r\n resizeScrollThrottleDelay: value,\r\n })\r\n })\r\n\r\n // Add event listener for the minimize button\r\n this.minimizeButton?.addEventListener(\"click\", () => {\r\n this.isMinimized = !this.isMinimized\r\n this._applyMinimizedStateVisuals()\r\n })\r\n }\r\n\r\n private _applyMinimizedStateVisuals() {\r\n if (!this.minimizeButton || !this.debuggerSection || !this.controlsContainer) return\r\n\r\n if (this.isMinimized) {\r\n this.debuggerSection.style.display = \"none\"\r\n this.minimizeButton.textContent = \"+\"\r\n // Optional: Add a class to controlsContainer for more specific styling if needed\r\n // this.controlsContainer.classList.add(\"minimized\")\r\n } else {\r\n this.debuggerSection.style.display = \"\" // Reset to default\r\n this.minimizeButton.textContent = \"-\"\r\n // Optional: Remove the class\r\n // this.controlsContainer.classList.remove(\"minimized\")\r\n }\r\n }\r\n\r\n public updateControlsState(settings: ForesightManagerProps) {\r\n if (this.trajectoryEnabledCheckbox) {\r\n this.trajectoryEnabledCheckbox.checked = settings.enableMousePrediction\r\n }\r\n if (this.historySizeSlider && this.historyValueSpan) {\r\n this.historySizeSlider.value = settings.positionHistorySize.toString()\r\n this.historyValueSpan.textContent = settings.positionHistorySize.toString()\r\n }\r\n if (this.predictionTimeSlider && this.predictionValueSpan) {\r\n this.predictionTimeSlider.value = settings.trajectoryPredictionTime.toString()\r\n this.predictionValueSpan.textContent = settings.trajectoryPredictionTime.toString()\r\n }\r\n if (this.throttleDelaySlider && this.throttleValueSpan) {\r\n this.throttleDelaySlider.value = settings.resizeScrollThrottleDelay.toString()\r\n this.throttleValueSpan.textContent = settings.resizeScrollThrottleDelay.toString()\r\n }\r\n }\r\n\r\n public refreshElementList() {\r\n if (!this.elementListContainer) return\r\n\r\n this.elementListContainer.innerHTML = \"\" // Clear previous items\r\n this.elementListItems.clear()\r\n\r\n const elementsMap = this.foresightManagerInstance.elements\r\n\r\n if (this.elementCountSpan) {\r\n this.elementCountSpan.textContent = elementsMap.size.toString()\r\n }\r\n\r\n if (elementsMap.size === 0) {\r\n this.elementListContainer.innerHTML = \"<em>No elements registered.</em>\"\r\n return\r\n }\r\n\r\n elementsMap.forEach((data, element) => {\r\n const listItem = document.createElement(\"div\")\r\n listItem.className = \"jsforesight-element-list-item\"\r\n this._updateListItemContent(listItem, data)\r\n\r\n this.elementListContainer!.appendChild(listItem)\r\n this.elementListItems.set(element, listItem)\r\n })\r\n }\r\n\r\n private _updateListItemContent(listItem: HTMLElement, data: ForesightElementData) {\r\n listItem.classList.toggle(\"hovering\", data.isHovering)\r\n listItem.classList.toggle(\"trajectory-hit\", data.trajectoryHitData.isTrajectoryHit)\r\n\r\n const statusIndicatorHTML = `<span class=\"status-indicator\"></span>`\r\n const hitBehaviorText = data.unregisterOnCallback ? \"Single\" : \"Multi\"\r\n const hitBehaviorTitle = data.unregisterOnCallback\r\n ? \"Callback triggers once, then element unregisters.\"\r\n : \"Callback can trigger multiple times.\"\r\n\r\n listItem.innerHTML = `\r\n ${statusIndicatorHTML}\r\n <span class=\"element-name\" title=\"${data.name || \"Unnamed Element\"}\">${\r\n data.name || \"Unnamed Element\"\r\n }</span>\r\n <span class=\"hit-behavior\" title=\"${hitBehaviorTitle}\">${hitBehaviorText}</span>\r\n <span class=\"element-details\">(H: ${data.isHovering ? \"Y\" : \"N\"}, T: ${\r\n data.trajectoryHitData.isTrajectoryHit ? \"Y\" : \"N\"\r\n })</span>\r\n `\r\n }\r\n\r\n public cleanup() {\r\n this.controlsContainer?.remove()\r\n this.controlsContainer = null\r\n this.elementListContainer = null\r\n this.elementCountSpan = null\r\n this.elementListItems.clear()\r\n\r\n // Clear references for minimize functionality\r\n this.minimizeButton = null\r\n this.debuggerSection = null\r\n // Event listeners are on elements within controlsContainer, so they'll be GC'd.\r\n }\r\n}\r\n","export const isTouchDevice = () => {\r\n return window.matchMedia(\"(pointer: coarse)\").matches && navigator.maxTouchPoints > 0\r\n}\r\n","// ForesightDebugger.ts\r\nimport type { ForesightManager } from \"../Manager/ForesightManager\"\r\nimport { DebuggerControlPanel } from \"./DebuggerControlPanel\" // Import the new class\r\nimport type {\r\n ForesightElementData,\r\n ForesightElement,\r\n ForesightManagerProps,\r\n Point,\r\n} from \"../../types/types\"\r\nimport { isTouchDevice } from \"../helpers/isTouchDevice\"\r\n\r\nexport class ForesightDebugger {\r\n private foresightManagerInstance: ForesightManager\r\n private shadowHost: HTMLElement | null = null\r\n private shadowRoot: ShadowRoot | null = null\r\n private debugContainer: HTMLElement | null = null // For overlays, trajectory, etc.\r\n private debugLinkOverlays: Map<\r\n ForesightElement,\r\n {\r\n linkOverlay: HTMLElement\r\n expandedOverlay: HTMLElement\r\n nameLabel: HTMLElement\r\n }\r\n > = new Map()\r\n private debugPredictedMouseIndicator: HTMLElement | null = null\r\n private debugTrajectoryLine: HTMLElement | null = null\r\n private debugStyleElement: HTMLStyleElement | null = null\r\n\r\n private controlPanel: DebuggerControlPanel | null = null\r\n private lastElementData: Map<\r\n ForesightElement,\r\n { isHovering: boolean; isTrajectoryHit: boolean }\r\n > = new Map()\r\n\r\n constructor(intentManager: ForesightManager) {\r\n this.foresightManagerInstance = intentManager\r\n // Instantiate controlPanel here, but initialize it later when shadowRoot is available\r\n this.controlPanel = new DebuggerControlPanel(this.foresightManagerInstance)\r\n }\r\n\r\n public initialize(\r\n links: Map<ForesightElement, ForesightElementData>,\r\n currentSettings: ForesightManagerProps,\r\n currentPoint: Point,\r\n predictedPoint: Point\r\n ) {\r\n if (typeof window === \"undefined\" || isTouchDevice()) return\r\n this.cleanup()\r\n\r\n this.shadowHost = document.createElement(\"div\")\r\n this.shadowHost.id = \"jsforesight-debugger-shadow-host\"\r\n this.shadowHost.style.pointerEvents = \"none\"\r\n document.body.appendChild(this.shadowHost)\r\n this.shadowRoot = this.shadowHost.attachShadow({ mode: \"open\" })\r\n\r\n this.debugStyleElement = document.createElement(\"style\")\r\n // ... (style content remains the same) ...\r\n this.debugStyleElement.textContent = `\r\n #jsforesight-debug-container { /* For on-page overlays */\r\n position: fixed; top: 0; left: 0; width: 100%; height: 100%;\r\n pointer-events: none; z-index: 9999;\r\n }\r\n .jsforesight-link-overlay {\r\n position: absolute; border: 2px solid transparent;\r\n background-color: rgba(0, 0, 255, 0.1); box-sizing: border-box;\r\n transition: opacity 0.2s ease, border-color 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;\r\n }\r\n .jsforesight-link-overlay.active {\r\n border-color: oklch(83.7% 0.128 66.29); background-color: rgba(255, 0, 0, 0.1);\r\n }\r\n .jsforesight-link-overlay.trajectory-hit {\r\n border-color: oklch(89.7% 0.196 126.665); background-color: rgba(0, 255, 0, 0.3);\r\n box-shadow: 0 0 10px rgba(0, 255, 0, 0.8);\r\n }\r\n .jsforesight-expanded-overlay {\r\n position: absolute; border: 1px dashed rgba(0, 0, 255, 0.3);\r\n background-color: rgba(0, 0, 255, 0.05); box-sizing: border-box;\r\n }\r\n .jsforesight-mouse-predicted {\r\n position: absolute; width: 20px; height: 20px; border-radius: 50%;\r\n border: 2px solid oklch(83.7% 0.128 66.29); background-color: rgba(255, 165, 0, 0.3);\r\n transform: translate(-50%, -50%); z-index: 10000;\r\n }\r\n .jsforesight-trajectory-line {\r\n position: absolute; height: 2px; background-color: rgba(255, 100, 0, 0.5);\r\n transform-origin: left center; z-index: 9999;\r\n }\r\n .jsforesight-name-label {\r\n position: absolute;\r\n background-color: rgba(0, 0, 0, 0.75);\r\n color: white;\r\n padding: 3px 6px;\r\n font-size: 11px;\r\n font-family: Arial, sans-serif;\r\n border-radius: 3px;\r\n z-index: 10001;\r\n white-space: nowrap;\r\n pointer-events: none;\r\n }\r\n /* Styles for #jsforesight-debug-controls and its children are still needed here */\r\n #jsforesight-debug-controls {\r\n position: fixed; bottom: 10px; right: 10px;\r\n background-color: rgba(0, 0, 0, 0.75); color: white; padding: 12px;\r\n border-radius: 5px; font-family: Arial, sans-serif; font-size: 13px;\r\n z-index: 10001; pointer-events: auto; display: flex; flex-direction: column; gap: 8px;\r\n min-width: 300px; max-width: 350px;\r\n }\r\n .jsforesight-debugger-title-container {\r\n display: flex; align-items: center; justify-content: center; gap: 8px; margin-bottom: 8px;\r\n }\r\n .jsforesight-minimize-button{\r\n background: none; border: none; color: white;\r\n font-size: 22px; cursor: pointer; padding: 0;\r\n position: absolute; top: 10px; left: 15px;\r\n }\r\n .jsforesight-debugger-title-container h3 { margin: 0; font-size: 15px; }\r\n #jsforesight-debug-controls label { display: flex; align-items: center; gap: 5px; cursor: pointer; }\r\n #jsforesight-debug-controls input[type=\"range\"] { flex-grow: 1; margin: 0 5px; cursor: pointer;}\r\n #jsforesight-debug-controls input[type=\"checkbox\"] { margin-right: 5px; cursor: pointer; }\r\n #jsforesight-debug-controls .control-row { display: flex; align-items: center; justify-content: space-between; }\r\n #jsforesight-debug-controls .control-row label { flex-basis: auto; }\r\n #jsforesight-debug-controls .control-row span:not(.jsforesight-info-icon) { min-width: 30px; text-align: right; }\r\n .jsforesight-info-icon {\r\n display: inline-flex; align-items: center; justify-content: center;\r\n width: 16px; height: 16px; border-radius: 50%;\r\n background-color: #555; color: white;\r\n font-size: 10px; font-style: italic; font-weight: bold;\r\n font-family: 'Georgia', serif;\r\n cursor: help; user-select: none;\r\n flex-shrink: 0;\r\n }\r\n .jsforesight-debugger-section {\r\n display: flex; flex-direction: column; gap: 6px;\r\n border-top: 1px solid #444;\r\n }\r\n .jsforesight-debugger-section h4 {\r\n margin: 5px 0 2px 0;\r\n font-size: 14px;\r\n font-weight: bold;\r\n }\r\n .jsforesight-element-list {\r\n max-height: 150px;\r\n overflow-y: auto;\r\n background-color: rgba(20, 20, 20, 0.5);\r\n border-radius: 3px;\r\n padding: 5px;\r\n font-size: 12px;\r\n }\r\n .jsforesight-element-list-item {\r\n padding: 4px 6px;\r\n margin-bottom: 3px;\r\n border-radius: 2px;\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n background-color: rgba(50,50,50,0.7);\r\n transition: background-color 0.2s ease;\r\n }\r\n .jsforesight-element-list-item:last-child {\r\n margin-bottom: 0;\r\n }\r\n .jsforesight-element-list-item .status-indicator {\r\n width: 10px;\r\n height: 10px;\r\n border-radius: 50%;\r\n background-color: #777;\r\n flex-shrink: 0;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-size: 8px;\r\n }\r\n .jsforesight-element-list-item.hovering .status-indicator {\r\n background-color: oklch(83.7% 0.128 66.29 / 0.7);\r\n }\r\n .jsforesight-element-list-item.trajectory-hit .status-indicator {\r\n background-color: oklch(89.7% 0.196 126.665 / 0.7);\r\n }\r\n .jsforesight-element-list-item.hovering.trajectory-hit .status-indicator {\r\n background: linear-gradient(45deg, oklch(89.7% 0.196 126.665 / 0.7) 50%, oklch(83.7% 0.128 66.29 / 0.7) 50%);\r\n }\r\n .jsforesight-element-list-item .element-name {\r\n flex-grow: 1;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n text-overflow: ellipsis;\r\n }\r\n .jsforesight-element-list-item .element-details {\r\n font-size: 10px;\r\n color: #ccc;\r\n flex-shrink: 0;\r\n }\r\n .jsforesight-element-list-item .hit-behavior {\r\n font-size: 10px;\r\n color: #b0b0b0;\r\n margin-right: 5px;\r\n padding: 1px 3px;\r\n border-radius: 2px;\r\n background-color: rgba(0,0,0,0.2);\r\n flex-shrink: 0;\r\n }\r\n `\r\n this.shadowRoot.appendChild(this.debugStyleElement)\r\n\r\n this.debugContainer = document.createElement(\"div\")\r\n this.debugContainer.id = \"jsforesight-debug-container\"\r\n this.shadowRoot.appendChild(this.debugContainer)\r\n\r\n this.debugPredictedMouseIndicator = document.createElement(\"div\")\r\n this.debugPredictedMouseIndicator.className = \"jsforesight-mouse-predicted\"\r\n this.debugContainer.appendChild(this.debugPredictedMouseIndicator)\r\n\r\n this.debugTrajectoryLine = document.createElement(\"div\")\r\n this.debugTrajectoryLine.className = \"jsforesight-trajectory-line\"\r\n this.debugContainer.appendChild(this.debugTrajectoryLine)\r\n\r\n // Initialize the control panel AND PASS THE SHADOW ROOT\r\n if (this.shadowRoot) {\r\n // Ensure shadowRoot is available\r\n this.controlPanel?.initialize(\r\n this.shadowRoot,\r\n currentSettings,\r\n currentSettings.debuggerSettings\r\n )\r\n }\r\n\r\n links.forEach((data, element) => {\r\n this.createOrUpdateLinkOverlay(element, data)\r\n })\r\n\r\n this.updateTrajectoryVisuals(\r\n currentPoint,\r\n predictedPoint,\r\n currentSettings.enableMousePrediction\r\n )\r\n }\r\n\r\n // ... rest of the ForesightDebugger class ...\r\n public cleanup() {\r\n this.controlPanel?.cleanup()\r\n // No need to re-assign this.controlPanel to null here, as a new one is made in constructor\r\n // if ForesightDebugger is re-initialized. If only cleanup is called (e.g. debug off),\r\n // then the instance might still be around but its DOM is gone.\r\n\r\n this.shadowHost?.remove()\r\n this.shadowHost = null\r\n this.shadowRoot = null\r\n this.debugContainer = null\r\n\r\n this.debugLinkOverlays.clear()\r\n this.lastElementData.clear()\r\n this.debugPredictedMouseIndicator = null\r\n this.debugTrajectoryLine = null\r\n this.debugStyleElement = null\r\n }\r\n\r\n public createOrUpdateLinkOverlay(element: ForesightElement, newData: ForesightElementData) {\r\n if (!this.debugContainer || !this.shadowRoot) return\r\n\r\n this.lastElementData.set(element, {\r\n isHovering: newData.isHovering,\r\n isTrajectoryHit: newData.trajectoryHitData.isTrajectoryHit,\r\n })\r\n\r\n let overlays = this.debugLinkOverlays.get(element)\r\n if (!overlays) {\r\n const linkOverlay = document.createElement(\"div\")\r\n linkOverlay.className = \"jsforesight-link-overlay\"\r\n this.debugContainer.appendChild(linkOverlay)\r\n\r\n const expandedOverlay = document.createElement(\"div\")\r\n expandedOverlay.className = \"jsforesight-expanded-overlay\"\r\n this.debugContainer.appendChild(expandedOverlay)\r\n\r\n const nameLabel = document.createElement(\"div\")\r\n nameLabel.className = \"jsforesight-name-label\"\r\n this.debugContainer.appendChild(nameLabel)\r\n\r\n overlays = { linkOverlay, expandedOverlay, nameLabel }\r\n this.debugLinkOverlays.set(element, overlays)\r\n }\r\n\r\n const { linkOverlay, expandedOverlay, nameLabel } = overlays\r\n const rect = element.getBoundingClientRect()\r\n\r\n linkOverlay.style.left = `${rect.left}px`\r\n linkOverlay.style.top = `${rect.top}px`\r\n linkOverlay.style.width = `${rect.width}px`\r\n linkOverlay.style.height = `${rect.height}px`\r\n linkOverlay.classList.toggle(\"trajectory-hit\", newData.trajectoryHitData.isTrajectoryHit)\r\n linkOverlay.classList.toggle(\"active\", newData.isHovering)\r\n\r\n if (newData.elementBounds.expandedRect) {\r\n expandedOverlay.style.left = `${newData.elementBounds.expandedRect.left}px`\r\n expandedOverlay.style.top = `${newData.elementBounds.expandedRect.top}px`\r\n expandedOverlay.style.width = `${\r\n newData.elementBounds.expandedRect.right - newData.elementBounds.expandedRect.left\r\n }px`\r\n expandedOverlay.style.height = `${\r\n newData.elementBounds.expandedRect.bottom - newData.elementBounds.expandedRect.top\r\n }px`\r\n expandedOverlay.style.display = \"block\"\r\n } else {\r\n expandedOverlay.style.display = \"none\"\r\n }\r\n\r\n if (newData.name && newData.name !== \"Unnamed\") {\r\n nameLabel.textContent = newData.name\r\n nameLabel.style.display = \"block\"\r\n nameLabel.style.left = `${rect.left}px`\r\n nameLabel.style.top = `${rect.top - 22}px`\r\n } else {\r\n nameLabel.style.display = \"none\"\r\n }\r\n\r\n this.controlPanel?.refreshElementList()\r\n }\r\n\r\n public removeLinkOverlay(element: ForesightElement) {\r\n const overlays = this.debugLinkOverlays.get(element)\r\n if (overlays) {\r\n overlays.linkOverlay.remove()\r\n overlays.expandedOverlay.remove()\r\n overlays.nameLabel.remove()\r\n this.debugLinkOverlays.delete(element)\r\n }\r\n this.lastElementData.delete(element)\r\n\r\n this.controlPanel?.refreshElementList()\r\n }\r\n\r\n public refreshDisplayedElements() {\r\n const currentManagerElements = new Set(this.foresightManagerInstance.elements.keys())\r\n\r\n // Update or add overlays for currently registered elements\r\n this.foresightManagerInstance.elements.forEach((data, element) => {\r\n this.createOrUpdateLinkOverlay(element, data) // This also triggers controlPanel.refreshElementList\r\n })\r\n\r\n // Remove overlays for elements that are no longer in the manager\r\n const overlaysToRemove = Array.from(this.debugLinkOverlays.keys()).filter(\r\n (el) => !currentManagerElements.has(el)\r\n )\r\n overlaysToRemove.forEach((el) => {\r\n const specificOverlays = this.debugLinkOverlays.get(el)\r\n specificOverlays?.linkOverlay.remove()\r\n specificOverlays?.expandedOverlay.remove()\r\n specificOverlays?.nameLabel.remove()\r\n this.debugLinkOverlays.delete(el)\r\n this.lastElementData.delete(el)\r\n })\r\n\r\n this.controlPanel?.refreshElementList()\r\n }\r\n\r\n public updateAllLinkVisuals(links: Map<ForesightElement, ForesightElementData>) {\r\n if (!this.shadowRoot || !this.debugContainer) return\r\n this.refreshDisplayedElements()\r\n }\r\n\r\n public updateTrajectoryVisuals(\r\n currentPoint: Point,\r\n predictedPoint: Point,\r\n enableMousePrediction: boolean\r\n ) {\r\n if (!this.shadowRoot || !this.debugContainer) return\r\n\r\n const hasRegisteredElements = this.foresightManagerInstance.elements.size > 0\r\n const showVisuals = enableMousePrediction && hasRegisteredElements\r\n\r\n if (this.debugPredictedMouseIndicator) {\r\n this.debugPredictedMouseIndicator.style.left = `${predictedPoint.x}px`\r\n this.debugPredictedMouseIndicator.style.top = `${predictedPoint.y}px`\r\n this.debugPredictedMouseIndicator.style.display = \"block\"\r\n }\r\n\r\n if (this.debugTrajectoryLine) {\r\n if (showVisuals && currentPoint && predictedPoint) {\r\n const dx = predictedPoint.x - currentPoint.x\r\n const dy = predictedPoint.y - currentPoint.y\r\n\r\n if (Math.abs(dx) < 0.1 && Math.abs(dy) < 0.1) {\r\n this.debugTrajectoryLine.style.display = \"none\"\r\n return\r\n }\r\n\r\n const length = Math.sqrt(dx * dx + dy * dy)\r\n const angle = (Math.atan2(dy, dx) * 180) / Math.PI\r\n\r\n this.debugTrajectoryLine.style.left = `${currentPoint.x}px`\r\n this.debugTrajectoryLine.style.top = `${currentPoint.y}px`\r\n this.debugTrajectoryLine.style.width = `${length}px`\r\n this.debugTrajectoryLine.style.transform = `translateY(-50%) rotate(${angle}deg)`\r\n this.debugTrajectoryLine.style.display = \"block\"\r\n } else {\r\n this.debugTrajectoryLine.style.display = \"none\"\r\n }\r\n }\r\n }\r\n\r\n public updateControlsState(settings: ForesightManagerProps) {\r\n this.controlPanel?.updateControlsState(settings)\r\n }\r\n}\r\n","import { ForesightDebugger } from \"../Debugger/ForesightDebugger\"\r\nimport type {\r\n ForesightCallback,\r\n ForesightManagerProps,\r\n ForesightElementData,\r\n ForesightElement,\r\n MousePosition,\r\n Point,\r\n Rect,\r\n UpdateForsightManagerProps,\r\n ForesightElementRegisterResult, // Assuming this is Partial<ForesightManagerProps>\r\n} from \"../../types/types\"\r\nimport { isTouchDevice } from \"../helpers/isTouchDevice\"\r\n\r\n/**\r\n * Manages the prediction of user intent based on mouse trajectory and element interactions.\r\n *\r\n * ForesightManager is a singleton class responsible for:\r\n * - Registering HTML elements to monitor.\r\n * - Tracking mouse movements and predicting future cursor positions.\r\n * - Detecting when a predicted trajectory intersects with a registered element's bounds.\r\n * - Invoking callbacks associated with elements upon predicted or actual interaction.\r\n * - Optionally unregistering elements after their callback is triggered.\r\n * - Handling global settings for prediction behavior (e.g., history size, prediction time).\r\n * - Optionally enabling a {@link ForesightDebugger} for visual feedback.\r\n * - Automatically updating element bounds on resize using {@link ResizeObserver}.\r\n * - Automatically unregistering elements removed from the DOM using {@link MutationObserver}.\r\n * - Detecting broader layout shifts via {@link MutationObserver} to update element positions.\r\n *\r\n * It should be initialized once using {@link ForesightManager.initialize} and then\r\n * accessed via the static getter {@link ForesightManager.instance}.\r\n */\r\nexport class ForesightManager {\r\n private static manager: ForesightManager\r\n public elements: Map<ForesightElement, ForesightElementData> = new Map()\r\n\r\n private isSetup: boolean = false\r\n private debugger: ForesightDebugger | null = null\r\n\r\n private globalSettings: ForesightManagerProps = {\r\n debug: false,\r\n enableMousePrediction: true,\r\n positionHistorySize: 8,\r\n trajectoryPredictionTime: 80,\r\n defaultHitSlop: { top: 0, left: 0, right: 0, bottom: 0 },\r\n resizeScrollThrottleDelay: 50,\r\n debuggerSettings: {\r\n isControlPanelDefaultMinimized: false,\r\n },\r\n }\r\n\r\n private positions: MousePosition[] = []\r\n private currentPoint: Point = { x: 0, y: 0 }\r\n private predictedPoint: Point = { x: 0, y: 0 }\r\n\r\n private lastResizeScrollCallTimestamp: number = 0\r\n private resizeScrollThrottleTimeoutId: ReturnType<typeof setTimeout> | null = null\r\n\r\n private domObserver: MutationObserver | null = null\r\n private lastDomMutationRectsUpdateTimestamp: number = 0\r\n private domMutationRectsUpdateTimeoutId: ReturnType<typeof setTimeout> | null = null\r\n\r\n private elementResizeObserver: ResizeObserver | null = null\r\n\r\n private constructor() {}\r\n\r\n public static initialize(props?: Partial<UpdateForsightManagerProps>): ForesightManager {\r\n if (!ForesightManager.manager) {\r\n ForesightManager.manager = new ForesightManager()\r\n if (props) {\r\n ForesightManager.manager.alterGlobalSettings(props)\r\n } else {\r\n if (ForesightManager.manager.globalSettings.debug) {\r\n ForesightManager.manager.turnOnDebugMode()\r\n }\r\n }\r\n } else if (props) {\r\n console.warn(\r\n \"ForesightManager is already initialized. Use alterGlobalSettings to update settings. Make sure to not put the ForesightManager.initialize() in a place that rerenders often.\"\r\n )\r\n ForesightManager.manager.alterGlobalSettings(props)\r\n }\r\n return ForesightManager.manager\r\n }\r\n\r\n public static get instance() {\r\n if (!ForesightManager.manager) {\r\n return this.initialize()\r\n }\r\n return ForesightManager.manager\r\n }\r\n\r\n public register({\r\n element,\r\n callback,\r\n hitSlop,\r\n unregisterOnCallback,\r\n name,\r\n }: {\r\n element: ForesightElement\r\n callback: ForesightCallback\r\n hitSlop?: Rect | number\r\n unregisterOnCallback?: boolean\r\n name?: string\r\n }): ForesightElementRegisterResult {\r\n if (isTouchDevice()) {\r\n return { isTouchDevice: true, unregister: () => {} }\r\n }\r\n\r\n const normalizedHitSlop = hitSlop\r\n ? this.normalizeHitSlop(hitSlop)\r\n : this.globalSettings.defaultHitSlop\r\n\r\n const originalRect = element.getBoundingClientRect()\r\n\r\n const finalUnregisterOnCallback = unregisterOnCallback ?? true\r\n\r\n const newForesightElementData: ForesightElementData = {\r\n callback,\r\n elementBounds: {\r\n expandedRect: this.getExpandedRect(originalRect, normalizedHitSlop),\r\n originalRect: originalRect,\r\n hitSlop: normalizedHitSlop,\r\n },\r\n isHovering: false,\r\n trajectoryHitData: {\r\n isTrajectoryHit: false,\r\n trajectoryHitTime: 0,\r\n trajectoryHitExpirationTimeoutId: undefined,\r\n },\r\n name: name ?? \"\",\r\n unregisterOnCallback: finalUnregisterOnCallback,\r\n }\r\n this.elements.set(element, newForesightElementData)\r\n\r\n if (!this.isSetup) {\r\n this.setupGlobalListeners()\r\n }\r\n\r\n if (this.elementResizeObserver) {\r\n this.elementResizeObserver.observe(element)\r\n }\r\n\r\n if (this.debugger) {\r\n const data = this.elements.get(element)\r\n if (data) this.debugger.createOrUpdateLinkOverlay(element, data)\r\n this.debugger.refreshDisplayedElements()\r\n }\r\n\r\n return { isTouchDevice: false, unregister: () => this.unregister(element) }\r\n }\r\n\r\n private unregister(element: ForesightElement) {\r\n const isRegistered = this.elements.has(element)\r\n if (isRegistered) {\r\n const foresightElementData = this.elements.get(element)\r\n\r\n // Clear any pending trajectory expiration timeout\r\n if (foresightElementData?.trajectoryHitData.trajectoryHitExpirationTimeoutId) {\r\n clearTimeout(foresightElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId)\r\n }\r\n\r\n if (this.elementResizeObserver) {\r\n this.elementResizeObserver.unobserve(element)\r\n }\r\n\r\n this.elements.delete(element)\r\n\r\n if (this.debugger) {\r\n this.debugger.removeLinkOverlay(element)\r\n this.debugger.refreshDisplayedElements()\r\n }\r\n\r\n if (this.elements.size === 0 && this.isSetup) {\r\n this.removeGlobalListeners()\r\n }\r\n } else {\r\n console.warn(\"Attempted to unregister element not found:\", element)\r\n }\r\n }\r\n\r\n public alterGlobalSettings(props?: Partial<UpdateForsightManagerProps>): void {\r\n let settingsActuallyChanged = false\r\n\r\n if (\r\n props?.positionHistorySize !== undefined &&\r\n this.globalSettings.positionHistorySize !== props.positionHistorySize\r\n ) {\r\n this.globalSettings.positionHistorySize = props.positionHistorySize\r\n settingsActuallyChanged = true\r\n }\r\n\r\n if (\r\n props?.trajectoryPredictionTime !== undefined &&\r\n this.globalSettings.trajectoryPredictionTime !== props.trajectoryPredictionTime\r\n ) {\r\n this.globalSettings.trajectoryPredictionTime = props.trajectoryPredictionTime\r\n settingsActuallyChanged = true\r\n }\r\n\r\n if (\r\n props?.enableMousePrediction !== undefined &&\r\n this.globalSettings.enableMousePrediction !== props.enableMousePrediction\r\n ) {\r\n this.globalSettings.enableMousePrediction = props.enableMousePrediction\r\n settingsActuallyChanged = true\r\n if (this.globalSettings.enableMousePrediction) {\r\n this.predictedPoint = this.predictMousePosition(this.currentPoint)\r\n } else {\r\n this.predictedPoint = this.currentPoint\r\n // When disabling prediction, clear active trajectory hits and their timeouts\r\n this.elements.forEach((data, el) => {\r\n if (data.trajectoryHitData.isTrajectoryHit) {\r\n if (data.trajectoryHitData.trajectoryHitExpirationTimeoutId) {\r\n clearTimeout(data.trajectoryHitData.trajectoryHitExpirationTimeoutId)\r\n }\r\n const updatedElementData: ForesightElementData = {\r\n ...data,\r\n trajectoryHitData: {\r\n isTrajectoryHit: false,\r\n trajectoryHitTime: 0,\r\n trajectoryHitExpirationTimeoutId: undefined,\r\n },\r\n }\r\n this.elements.set(el, updatedElementData)\r\n if (this.debugger) {\r\n this.debugger.createOrUpdateLinkOverlay(el, updatedElementData)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n if (props?.debuggerSettings?.isControlPanelDefaultMinimized !== undefined) {\r\n this.globalSettings.debuggerSettings.isControlPanelDefaultMinimized =\r\n props.debuggerSettings.isControlPanelDefaultMinimized\r\n settingsActuallyChanged = true\r\n }\r\n\r\n if (props?.defaultHitSlop !== undefined) {\r\n const normalizedNewHitSlop = this.normalizeHitSlop(props.defaultHitSlop)\r\n if (!this.areRectsEqual(this.globalSettings.defaultHitSlop, normalizedNewHitSlop)) {\r\n this.globalSettings.defaultHitSlop = normalizedNewHitSlop\r\n settingsActuallyChanged = true\r\n // This recomputes expandedRects using each element's own stored hitSlop.\r\n // If an element's hitSlop itself needs to change because it was using the\r\n // old default, that logic would need to be more explicit here.\r\n // For now, this just updates the global default for future use and forces re-calc.\r\n this.elements.forEach((data, element) => {\r\n this.updateExpandedRect(element)\r\n })\r\n }\r\n }\r\n\r\n if (\r\n props?.resizeScrollThrottleDelay !== undefined &&\r\n this.globalSettings.resizeScrollThrottleDelay !== props.resizeScrollThrottleDelay\r\n ) {\r\n this.globalSettings.resizeScrollThrottleDelay = props.resizeScrollThrottleDelay\r\n settingsActuallyChanged = true\r\n }\r\n\r\n if (props?.debug !== undefined && this.globalSettings.debug !== props.debug) {\r\n this.globalSettings.debug = props.debug\r\n settingsActuallyChanged = true\r\n if (this.globalSettings.debug) {\r\n this.turnOnDebugMode()\r\n } else {\r\n if (this.debugger) {\r\n this.debugger.cleanup()\r\n this.debugger = null\r\n }\r\n }\r\n }\r\n\r\n if (settingsActuallyChanged && this.globalSettings.debug && this.debugger) {\r\n this.debugger.updateControlsState(this.globalSettings)\r\n this.debugger.updateTrajectoryVisuals(\r\n this.currentPoint,\r\n this.predictedPoint,\r\n this.globalSettings.enableMousePrediction\r\n )\r\n this.elements.forEach((data, el) => {\r\n this.debugger!.createOrUpdateLinkOverlay(el, data)\r\n })\r\n this.debugger.refreshDisplayedElements()\r\n }\r\n }\r\n\r\n private turnOnDebugMode() {\r\n if (!this.debugger) {\r\n this.debugger = new ForesightDebugger(this)\r\n this.debugger.initialize(\r\n this.elements,\r\n this.globalSettings,\r\n this.currentPoint,\r\n this.predictedPoint\r\n )\r\n } else {\r\n this.debugger.updateControlsState(this.globalSettings)\r\n this.debugger.updateAllLinkVisuals(this.elements)\r\n this.debugger.updateTrajectoryVisuals(\r\n this.currentPoint,\r\n this.predictedPoint,\r\n this.globalSettings.enableMousePrediction\r\n )\r\n }\r\n }\r\n\r\n private normalizeHitSlop = (hitSlop: number | Rect): Rect => {\r\n if (typeof hitSlop === \"number\") {\r\n return {\r\n top: hitSlop,\r\n left: hitSlop,\r\n right: hitSlop,\r\n bottom: hitSlop,\r\n }\r\n }\r\n return hitSlop\r\n }\r\n\r\n private getExpandedRect(baseRect: Rect | DOMRect, hitSlop: Rect): Rect {\r\n return {\r\n left: baseRect.left - hitSlop.left,\r\n right: baseRect.right + hitSlop.right,\r\n top: baseRect.top - hitSlop.top,\r\n bottom: baseRect.bottom + hitSlop.bottom,\r\n }\r\n }\r\n\r\n private areRectsEqual(rect1: Rect, rect2: Rect): boolean {\r\n if (!rect1 || !rect2) return rect1 === rect2\r\n return (\r\n rect1.left === rect2.left &&\r\n rect1.right === rect2.right &&\r\n rect1.top === rect2.top &&\r\n rect1.bottom === rect2.bottom\r\n )\r\n }\r\n private updateExpandedRect(element: ForesightElement) {\r\n const foresightElementData = this.elements.get(element)\r\n if (!foresightElementData) return\r\n\r\n const newOriginalRect = element.getBoundingClientRect()\r\n const currentHitSlop = foresightElementData.elementBounds.hitSlop\r\n const expandedRect = this.getExpandedRect(newOriginalRect, currentHitSlop)\r\n\r\n if (\r\n !this.areRectsEqual(expandedRect, foresightElementData.elementBounds.expandedRect) ||\r\n !this.areRectsEqual(newOriginalRect, foresightElementData.elementBounds.originalRect)\r\n ) {\r\n this.elements.set(element, {\r\n ...foresightElementData,\r\n elementBounds: {\r\n ...foresightElementData.elementBounds,\r\n originalRect: newOriginalRect,\r\n expandedRect,\r\n },\r\n })\r\n\r\n if (this.debugger) {\r\n const updatedData = this.elements.get(element)\r\n if (updatedData) this.debugger.createOrUpdateLinkOverlay(element, updatedData)\r\n }\r\n }\r\n }\r\n\r\n private updateAllRects() {\r\n this.elements.forEach((data, element) => {\r\n this.updateExpandedRect(element)\r\n })\r\n }\r\n\r\n private predictMousePosition = (point: Point): Point => {\r\n const now = performance.now()\r\n const currentPosition: MousePosition = { point, time: now }\r\n const { x, y } = point\r\n\r\n this.positions.push(currentPosition)\r\n if (this.positions.length > this.globalSettings.positionHistorySize) {\r\n this.positions.shift()\r\n }\r\n\r\n if (this.positions.length < 2) {\r\n return { x, y }\r\n }\r\n\r\n const first = this.positions[0]\r\n const last = this.positions[this.positions.length - 1]\r\n const dt = (last.time - first.time) / 1000\r\n\r\n if (dt === 0) {\r\n return { x, y }\r\n }\r\n\r\n const dx = last.point.x - first.point.x\r\n const dy = last.point.y - first.point.y\r\n const vx = dx / dt\r\n const vy = dy / dt\r\n\r\n const trajectoryPredictionTimeInSeconds = this.globalSettings.trajectoryPredictionTime / 1000\r\n const predictedX = x + vx * trajectoryPredictionTimeInSeconds\r\n const predictedY = y + vy * trajectoryPredictionTimeInSeconds\r\n return { x: predictedX, y: predictedY }\r\n }\r\n\r\n private lineSegmentIntersectsRect(p1: Point, p2: Point, rect: Rect): boolean {\r\n // (Liang-Barsky algorithm implementation)\r\n let t0 = 0.0\r\n let t1 = 1.0\r\n const dx = p2.x - p1.x\r\n const dy = p2.y - p1.y\r\n\r\n const clipTest = (p: number, q: number): boolean => {\r\n if (p === 0) {\r\n if (q < 0) return false\r\n } else {\r\n const r = q / p\r\n if (p < 0) {\r\n if (r > t1) return false\r\n if (r > t0) t0 = r\r\n } else {\r\n if (r < t0) return false\r\n if (r < t1) t1 = r\r\n }\r\n }\r\n return true\r\n }\r\n\r\n if (!clipTest(-dx, p1.x - rect.left)) return false\r\n if (!clipTest(dx, rect.right - p1.x)) return false\r\n if (!clipTest(-dy, p1.y - rect.top)) return false\r\n if (!clipTest(dy, rect.bottom - p1.y)) return false\r\n\r\n return t0 <= t1\r\n }\r\n\r\n private handleMouseMove = (e: MouseEvent) => {\r\n this.currentPoint = { x: e.clientX, y: e.clientY }\r\n this.predictedPoint = this.globalSettings.enableMousePrediction\r\n ? this.predictMousePosition(this.currentPoint)\r\n : this.currentPoint\r\n\r\n let elementsToUpdateInDebugger: ForesightElement[] | null = null\r\n if (this.debugger) {\r\n elementsToUpdateInDebugger = []\r\n }\r\n\r\n const elementsToUnregister: ForesightElement[] = []\r\n\r\n this.elements.forEach((currentData, element) => {\r\n if (!this.elements.has(element)) {\r\n return\r\n }\r\n\r\n const previousDataState = {\r\n isHovering: currentData.isHovering,\r\n trajectoryHitData: currentData.trajectoryHitData,\r\n }\r\n\r\n let callbackFiredThisCycle = false\r\n let finalIsHovering = currentData.isHovering\r\n let finalIsTrajectoryHit = currentData.trajectoryHitData.isTrajectoryHit\r\n let finalTrajectoryHitTime = currentData.trajectoryHitData.trajectoryHitTime\r\n\r\n const { expandedRect } = currentData.elementBounds\r\n\r\n const isCurrentlyPhysicallyHovering =\r\n this.currentPoint.x >= expandedRect.left &&\r\n this.currentPoint.x <= expandedRect.right &&\r\n this.currentPoint.y >= expandedRect.top &&\r\n this.currentPoint.y <= expandedRect.bottom\r\n\r\n let isNewTrajectoryActivation = false\r\n if (\r\n this.globalSettings.enableMousePrediction &&\r\n !isCurrentlyPhysicallyHovering &&\r\n !currentData.trajectoryHitData.isTrajectoryHit // Only activate if not already hit\r\n ) {\r\n if (this.lineSegmentIntersectsRect(this.currentPoint, this.predictedPoint, expandedRect)) {\r\n isNewTrajectoryActivation = true\r\n }\r\n }\r\n\r\n if (isNewTrajectoryActivation) {\r\n finalIsTrajectoryHit = true\r\n finalTrajectoryHitTime = performance.now()\r\n callbackFiredThisCycle = true\r\n currentData.callback()\r\n }\r\n\r\n const isNewPhysicalHoverEvent = isCurrentlyPhysicallyHovering && !currentData.isHovering\r\n\r\n if (isNewPhysicalHoverEvent) {\r\n const hoverCanTriggerCallback =\r\n !currentData.trajectoryHitData.isTrajectoryHit || // If not trajectory hit, hover can trigger\r\n (currentData.trajectoryHitData.isTrajectoryHit &&\r\n !this.globalSettings.enableMousePrediction) // Or if trajectory was hit but prediction is now off\r\n\r\n if (!callbackFiredThisCycle && hoverCanTriggerCallback) {\r\n callbackFiredThisCycle = true\r\n currentData.callback()\r\n }\r\n }\r\n\r\n finalIsHovering = isCurrentlyPhysicallyHovering\r\n\r\n // If physically hovering, it overrides any \"trajectory hit\" state for expiration purposes\r\n // but the visual/logical state of isTrajectoryHit might persist if it happened first.\r\n // The main change is how the expiration timeout is handled.\r\n\r\n if (callbackFiredThisCycle && currentData.unregisterOnCallback) {\r\n elementsToUnregister.push(element)\r\n }\r\n\r\n const coreStateActuallyChanged =\r\n finalIsHovering !== previousDataState.isHovering ||\r\n finalIsTrajectoryHit !== previousDataState.trajectoryHitData.isTrajectoryHit ||\r\n (finalIsTrajectoryHit &&\r\n finalTrajectoryHitTime !== previousDataState.trajectoryHitData.trajectoryHitTime)\r\n\r\n if (coreStateActuallyChanged && this.elements.has(element)) {\r\n let newElementData: ForesightElementData = {\r\n ...currentData,\r\n isHovering: finalIsHovering,\r\n trajectoryHitData: {\r\n isTrajectoryHit: finalIsTrajectoryHit,\r\n trajectoryHitTime: finalTrajectoryHitTime,\r\n trajectoryHitExpirationTimeoutId:\r\n previousDataState.trajectoryHitData.trajectoryHitExpirationTimeoutId, // Preserve existing initially\r\n },\r\n }\r\n\r\n // Manage trajectory hit expiration timeout\r\n if (\r\n newElementData.trajectoryHitData.isTrajectoryHit &&\r\n !previousDataState.trajectoryHitData.isTrajectoryHit\r\n ) {\r\n // Just became a trajectory hit (or re-hit after expiration)\r\n if (newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId) {\r\n clearTimeout(newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId)\r\n }\r\n newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId = setTimeout(() => {\r\n const currentElementData = this.elements.get(element)\r\n if (\r\n currentElementData &&\r\n currentElementData.trajectoryHitData.isTrajectoryHit &&\r\n currentElementData.trajectoryHitData.trajectoryHitTime ===\r\n newElementData.trajectoryHitData.trajectoryHitTime // Ensure it's the same hit instance\r\n ) {\r\n const expiredData: ForesightElementData = {\r\n ...currentElementData,\r\n trajectoryHitData: {\r\n isTrajectoryHit: false,\r\n trajectoryHitExpirationTimeoutId: undefined,\r\n trajectoryHitTime: currentElementData.trajectoryHitData.trajectoryHitTime,\r\n },\r\n }\r\n this.elements.set(element, expiredData)\r\n if (this.debugger) {\r\n this.debugger.createOrUpdateLinkOverlay(element, expiredData)\r\n }\r\n }\r\n }, 200)\r\n } else if (\r\n !newElementData.trajectoryHitData.isTrajectoryHit &&\r\n previousDataState.trajectoryHitData.isTrajectoryHit\r\n ) {\r\n // No longer a trajectory hit (e.g. mouse moved away, physical hover, or prediction disabled)\r\n if (newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId) {\r\n clearTimeout(newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId)\r\n newElementData.trajectoryHitData.trajectoryHitExpirationTimeoutId = undefined\r\n }\r\n }\r\n // If it was already a trajectory hit and remains one (e.g. mouse still on trajectory path\r\n // without physical hover, and timeout hasn't fired), the existing timeout continues.\r\n\r\n this.elements.set(element, newElementData)\r\n\r\n if (elementsToUpdateInDebugger) {\r\n elementsToUpdateInDebugger.push(element)\r\n }\r\n }\r\n })\r\n\r\n if (elementsToUnregister.length > 0) {\r\n elementsToUnregister.forEach((element) => {\r\n if (this.elements.has(element)) {\r\n const elementName = this.elements.get(element)?.name || \"Unnamed\"\r\n console.log(\r\n `Unregistering element \"${elementName}\" due to callback and unregisterOnCallback=true.`\r\n )\r\n this.unregister(element) // unregister will clear its own timeout\r\n }\r\n })\r\n }\r\n\r\n if (this.debugger) {\r\n elementsToUpdateInDebugger?.forEach((element) => {\r\n const data = this.elements.get(element) // Get potentially updated data\r\n if (data) {\r\n this.debugger!.createOrUpdateLinkOverlay(element, data)\r\n }\r\n })\r\n this.debugger.updateTrajectoryVisuals(\r\n this.currentPoint,\r\n this.predictedPoint,\r\n this.globalSettings.enableMousePrediction\r\n )\r\n }\r\n }\r\n\r\n private handleResizeOrScroll = (): void => {\r\n if (this.resizeScrollThrottleTimeoutId) {\r\n clearTimeout(this.resizeScrollThrottleTimeoutId)\r\n }\r\n\r\n const now = performance.now()\r\n const timeSinceLastCall = now - this.lastResizeScrollCallTimestamp\r\n const currentDelay = this.globalSettings.resizeScrollThrottleDelay\r\n\r\n if (timeSinceLastCall >= currentDelay) {\r\n this.updateAllRects()\r\n this.lastResizeScrollCallTimestamp = now\r\n this.resizeScrollThrottleTimeoutId = null\r\n } else {\r\n this.resizeScrollThrottleTimeoutId = setTimeout(() => {\r\n this.updateAllRects()\r\n this.lastResizeScrollCallTimestamp = performance.now()\r\n this.resizeScrollThrottleTimeoutId = null\r\n }, currentDelay - timeSinceLastCall)\r\n }\r\n }\r\n\r\n private handleElementResize = (entries: ResizeObserverEntry[]) => {\r\n for (const entry of entries) {\r\n const element = entry.target as ForesightElement\r\n const foresightElementData = this.elements.get(element)\r\n\r\n if (foresightElementData) {\r\n this.updateExpandedRect(element)\r\n }\r\n }\r\n }\r\n\r\n private handleDomMutations = (mutationsList: MutationRecord[]) => {\r\n let structuralChangeDetected = false\r\n for (const mutation of mutationsList) {\r\n if (mutation.type === \"childList\" && mutation.removedNodes.length > 0) {\r\n const currentElements = Array.from(this.elements.keys())\r\n for (const element of currentElements) {\r\n if (!element.isConnected) {\r\n if (this.elements.has(element)) {\r\n this.unregister(element) // unregister will clear its own timeout\r\n }\r\n }\r\n }\r\n }\r\n if (\r\n mutation.type === \"childList\" ||\r\n (mutation.type === \"attributes\" &&\r\n (mutation.attributeName === \"style\" || mutation.attributeName === \"class\"))\r\n ) {\r\n structuralChangeDetected = true\r\n }\r\n }\r\n\r\n if (structuralChangeDetected && this.elements.size > 0) {\r\n if (this.domMutationRectsUpdateTimeoutId) {\r\n clearTimeout(this.domMutationRectsUpdateTimeoutId)\r\n }\r\n const now = performance.now()\r\n const delay = this.globalSettings.resizeScrollThrottleDelay\r\n const timeSinceLastCall = now - this.lastDomMutationRectsUpdateTimestamp\r\n\r\n if (timeSinceLastCall >= delay) {\r\n this.updateAllRects()\r\n this.lastDomMutationRectsUpdateTimestamp = now\r\n this.domMutationRectsUpdateTimeoutId = null\r\n } else {\r\n this.domMutationRectsUpdateTimeoutId = setTimeout(() => {\r\n this.updateAllRects()\r\n this.lastDomMutationRectsUpdateTimestamp = performance.now()\r\n this.domMutationRectsUpdateTimeoutId = null\r\n }, delay - timeSinceLastCall)\r\n }\r\n }\r\n }\r\n\r\n private setupGlobalListeners() {\r\n if (this.isSetup) return\r\n document.addEventListener(\"mousemove\", this.handleMouseMove)\r\n window.addEventListener(\"resize\", this.handleResizeOrScroll)\r\n window.addEventListener(\"scroll\", this.handleResizeOrScroll)\r\n\r\n if (!this.domObserver) {\r\n this.domObserver = new MutationObserver(this.handleDomMutations)\r\n }\r\n this.domObserver.observe(document.documentElement, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n })\r\n\r\n if (!this.elementResizeObserver) {\r\n this.elementResizeObserver = new ResizeObserver(this.handleElementResize)\r\n this.elements.forEach((_, element) => this.elementResizeObserver!.observe(element))\r\n }\r\n this.isSetup = true\r\n }\r\n\r\n private removeGlobalListeners() {\r\n document.removeEventListener(\"mousemove\", this.handleMouseMove)\r\n window.removeEventListener(\"resize\", this.handleResizeOrScroll)\r\n window.removeEventListener(\"scroll\", this.handleResizeOrScroll)\r\n\r\n if (this.resizeScrollThrottleTimeoutId) {\r\n clearTimeout(this.resizeScrollThrottleTimeoutId)\r\n this.resizeScrollThrottleTimeoutId = null\r\n }\r\n if (this.domMutationRectsUpdateTimeoutId) {\r\n clearTimeout(this.domMutationRectsUpdateTimeoutId)\r\n this.domMutationRectsUpdateTimeoutId = null\r\n }\r\n\r\n if (this.domObserver) {\r\n this.domObserver.disconnect()\r\n }\r\n if (this.elementResizeObserver) {\r\n this.elementResizeObserver.disconnect()\r\n }\r\n this.isSetup = false\r\n }\r\n}\r\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","SuppressedError","DebuggerControlPanel","manager","shadowRoot","controlsContainer","elementListContainer","elementCountSpan","elementListItems","Map","trajectoryEnabledCheckbox","historySizeSlider","historyValueSpan","predictionTimeSlider","predictionValueSpan","throttleDelaySlider","throttleValueSpan","minimizeButton","debuggerSection","isMinimized","foresightManagerInstance","initialize","initialSettings","debuggerSettings","_createDOM","isControlPanelDefaultMinimized","appendChild","_queryDOMElements","_setupEventListeners","updateControlsState","refreshElementList","_applyMinimizedStateVisuals","document","createElement","id","innerHTML","controlsHTML","querySelector","_this","_a","addEventListener","e","alterGlobalSettings","enableMousePrediction","target","checked","_b","value","parseInt","textContent","toString","positionHistorySize","_c","trajectoryPredictionTime","_d","resizeScrollThrottleDelay","_e","style","display","settings","clear","elementsMap","elements","size","forEach","data","element","listItem","className","_updateListItemContent","set","classList","toggle","isHovering","trajectoryHitData","isTrajectoryHit","hitBehaviorText","unregisterOnCallback","hitBehaviorTitle","concat","name","cleanup","remove","isTouchDevice","window","matchMedia","matches","navigator","maxTouchPoints","ForesightDebugger","intentManager","shadowHost","debugContainer","debugLinkOverlays","debugPredictedMouseIndicator","debugTrajectoryLine","debugStyleElement","controlPanel","lastElementData","links","currentSettings","currentPoint","predictedPoint","pointerEvents","body","attachShadow","mode","createOrUpdateLinkOverlay","updateTrajectoryVisuals","newData","overlays","get","linkOverlay_1","expandedOverlay_1","nameLabel_1","linkOverlay","expandedOverlay","nameLabel","rect","getBoundingClientRect","left","top","width","height","elementBounds","expandedRect","right","bottom","removeLinkOverlay","delete","refreshDisplayedElements","currentManagerElements","Set","keys","Array","from","filter","el","has","specificOverlays","updateAllLinkVisuals","hasRegisteredElements","showVisuals","x","y","dx","dy","Math","abs","length_1","sqrt","angle","atan2","PI","transform","ForesightManager","isSetup","debugger","globalSettings","debug","defaultHitSlop","positions","lastResizeScrollCallTimestamp","resizeScrollThrottleTimeoutId","domObserver","lastDomMutationRectsUpdateTimestamp","domMutationRectsUpdateTimeoutId","elementResizeObserver","normalizeHitSlop","hitSlop","predictMousePosition","point","currentPosition","time","performance","now","push","shift","first","last","dt","vx","vy","trajectoryPredictionTimeInSeconds","handleMouseMove","clientX","clientY","elementsToUpdateInDebugger","elementsToUnregister","currentData","previousDataState","callbackFiredThisCycle","finalIsHovering","finalIsTrajectoryHit","finalTrajectoryHitTime","trajectoryHitTime","isCurrentlyPhysicallyHovering","isNewTrajectoryActivation","lineSegmentIntersectsRect","callback","hoverCanTriggerCallback","newElementData_1","trajectoryHitExpirationTimeoutId","clearTimeout","setTimeout","currentElementData","expiredData","undefined","elementName","console","log","unregister","handleResizeOrScroll","timeSinceLastCall","currentDelay","updateAllRects","handleElementResize","entries","_i","entries_1","updateExpandedRect","handleDomMutations","mutationsList","structuralChangeDetected","mutationsList_1","mutation","type","removedNodes","currentElements_1","isConnected","attributeName","delay","props","warn","turnOnDebugMode","defineProperty","register","normalizedHitSlop","originalRect","finalUnregisterOnCallback","newForesightElementData","getExpandedRect","setupGlobalListeners","observe","foresightElementData","unobserve","removeGlobalListeners","settingsActuallyChanged","updatedElementData","normalizedNewHitSlop","areRectsEqual","baseRect","rect1","rect2","newOriginalRect","currentHitSlop","updatedData","p1","p2","t0","t1","clipTest","q","r","MutationObserver","documentElement","childList","subtree","attributes","ResizeObserver","_","removeEventListener","disconnect"],"mappings":"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","x_google_ignoreList":[0]}
|