{"version":3,"file":"helpers.cjs","sources":["../../../src/utils/helpers.js"],"sourcesContent":["// 导入完整的缓动函数库\r\nimport * as easingsLib from './easings.js';\r\n\r\n/**\r\n * 缓动函数集合（向后兼容的简化版本）\r\n * 完整的缓动函数在 easings.js 中\r\n */\r\nexport const easingFunctions = {\r\n  linear: easingsLib.linear,\r\n  'ease-in': easingsLib.easeInQuad,\r\n  'ease-out': easingsLib.easeOutQuad,\r\n  'ease-in-out': easingsLib.easeInOutQuad,\r\n  'ease-in-quad': easingsLib.easeInQuad,\r\n  'ease-out-quad': easingsLib.easeOutQuad,\r\n  'ease-in-out-quad': easingsLib.easeInOutQuad,\r\n  'ease-in-cubic': easingsLib.easeInCubic,\r\n  'ease-out-cubic': easingsLib.easeOutCubic,\r\n  'ease-in-out-cubic': easingsLib.easeInOutCubic,\r\n  // 添加更多缓动函数\r\n  'ease-out-back': easingsLib.easeOutBack,\r\n  'ease-in-back': easingsLib.easeInBack,\r\n  'ease-out-bounce': easingsLib.easeOutBounce,\r\n  'ease-in-bounce': easingsLib.easeInBounce,\r\n};\r\n\r\n/**\r\n * 应用缓动函数\r\n * 支持多种命名格式（驼峰、连字符等）\r\n */\r\nexport function applyEasing(t, easingType = 'linear') {\r\n  if (!easingType) {\r\n    return easingsLib.linear(Math.max(0, Math.min(1, t)));\r\n  }\r\n  \r\n  // 尝试从 easingMap 获取（支持多种格式）\r\n  const easing = easingsLib.getEasingFunction(easingType);\r\n  return easing(Math.max(0, Math.min(1, t)));\r\n}\r\n\r\n/**\r\n * 线性插值\r\n */\r\nexport function lerp(start, end, t) {\r\n  return start + (end - start) * t;\r\n}\r\n\r\n/**\r\n * 角度转弧度\r\n */\r\nexport function degToRad(degrees) {\r\n  return (degrees * Math.PI) / 180;\r\n}\r\n\r\n/**\r\n * 弧度转角度\r\n */\r\nexport function radToDeg(radians) {\r\n  return (radians * 180) / Math.PI;\r\n}\r\n\r\n/**\r\n * 限制数值在范围内\r\n */\r\nexport function clamp(value, min, max) {\r\n  return Math.min(Math.max(value, min), max);\r\n}\r\n\r\n/**\r\n * 生成唯一ID\r\n */\r\nexport function generateId(prefix = '') {\r\n  const timestamp = Date.now();\r\n  const random = Math.random().toString(36).substring(2, 9);\r\n  return prefix ? `${prefix}_${timestamp}_${random}` : `${timestamp}_${random}`;\r\n}\r\n\r\n/**\r\n * 深度合并对象（支持多个源对象）\r\n */\r\nexport function deepMerge(target, ...sources) {\r\n  if (!sources.length) return target;\r\n  const source = sources.shift();\r\n  \r\n  if (isObject(target) && isObject(source)) {\r\n    const output = { ...target };\r\n    Object.keys(source).forEach((key) => {\r\n      if (isObject(source[key]) && !Array.isArray(source[key])) {\r\n        if (!(key in target)) {\r\n          output[key] = { ...source[key] };\r\n        } else {\r\n          output[key] = deepMerge(target[key], source[key]);\r\n        }\r\n      } else {\r\n        output[key] = source[key];\r\n      }\r\n    });\r\n    // 递归合并剩余源对象\r\n    return sources.length ? deepMerge(output, ...sources) : output;\r\n  }\r\n  return source || target;\r\n}\r\n\r\n/**\r\n * 判断是否为对象\r\n */\r\nfunction isObject(item) {\r\n  return item && typeof item === 'object' && !Array.isArray(item);\r\n}\r\n\r\n/**\r\n * 格式化时间（秒转时分秒）\r\n */\r\nexport function formatTime(seconds) {\r\n  const hours = Math.floor(seconds / 3600);\r\n  const minutes = Math.floor((seconds % 3600) / 60);\r\n  const secs = Math.floor(seconds % 60);\r\n  return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;\r\n}\r\n\r\n/**\r\n * 帧数转时间（秒）\r\n */\r\nexport function framesToTime(frames, fps) {\r\n  return frames / fps;\r\n}\r\n\r\n/**\r\n * 时间转帧数\r\n */\r\nexport function timeToFrames(time, fps) {\r\n  return Math.floor(time * fps);\r\n}\r\n\r\n/**\r\n * 为回调函数自动关联上下文（用于平行渲染）\r\n * \r\n * 使用示例：\r\n * ```javascript\r\n * const rotationSpeed = 3;\r\n * const phaseOffset = 0.5;\r\n * \r\n * // 方法1：显式传递上下文对象\r\n * const onFrame = withContext((element, progress, time) => {\r\n *   element.rotation += rotationSpeed;\r\n *   const pulse = 1 + Math.sin(time * 4 + phaseOffset) * 0.2;\r\n *   element.scaleX = pulse;\r\n * }, { rotationSpeed, phaseOffset });\r\n * \r\n * // 方法2：使用对象字面量（ES6 简写语法）\r\n * const onFrame = withContext((element, progress, time) => {\r\n *   element.rotation += rotationSpeed;\r\n *   const pulse = 1 + Math.sin(time * 4 + phaseOffset) * 0.2;\r\n *   element.scaleX = pulse;\r\n * }, { rotationSpeed, phaseOffset });\r\n * \r\n * element.onFrame = onFrame;\r\n * ```\r\n * \r\n * @param {Function} callback - 回调函数\r\n * @param {Object} context - 上下文对象，包含需要在 Worker 中使用的变量\r\n * @returns {Function} 带上下文的回调函数\r\n */\r\nexport function withContext(callback, context) {\r\n  if (typeof callback !== 'function') {\r\n    throw new TypeError('withContext: 第一个参数必须是函数');\r\n  }\r\n  \r\n  if (!context || typeof context !== 'object') {\r\n    throw new TypeError('withContext: 第二个参数必须是对象');\r\n  }\r\n  \r\n  // 将上下文关联到函数上\r\n  callback.__context = context;\r\n  \r\n  return callback;\r\n}\r\n\r\n/**\r\n * 自动从当前作用域捕获上下文变量（实验性功能）\r\n * \r\n * 使用示例：\r\n * ```javascript\r\n * const rotationSpeed = 3;\r\n * const phaseOffset = 0.5;\r\n * \r\n * // 使用 autoContext，自动从当前作用域捕获变量\r\n * const onFrame = autoContext((element, progress, time) => {\r\n *   element.rotation += rotationSpeed;\r\n *   const pulse = 1 + Math.sin(time * 4 + phaseOffset) * 0.2;\r\n *   element.scaleX = pulse;\r\n * }, () => ({ rotationSpeed, phaseOffset }));\r\n * \r\n * element.onFrame = onFrame;\r\n * ```\r\n * \r\n * 注意：由于 JavaScript 限制，需要提供一个函数来返回上下文对象\r\n * 推荐使用 withContext 并直接传递对象字面量\r\n * \r\n * @param {Function} callback - 回调函数\r\n * @param {Function} contextGetter - 返回上下文对象的函数\r\n * @returns {Function} 带上下文的回调函数\r\n */\r\nexport function autoContext(callback, contextGetter) {\r\n  if (typeof callback !== 'function') {\r\n    throw new TypeError('autoContext: 第一个参数必须是函数');\r\n  }\r\n  \r\n  if (typeof contextGetter !== 'function') {\r\n    throw new TypeError('autoContext: 第二个参数必须是函数，用于获取上下文对象');\r\n  }\r\n  \r\n  // 立即获取上下文（在定义时）\r\n  const context = contextGetter();\r\n  \r\n  // 将上下文关联到函数上\r\n  callback.__context = context;\r\n  \r\n  return callback;\r\n}\r\n\r\n/**\r\n * 智能上下文捕获 - 自动从函数代码中提取变量名（实验性）\r\n * \r\n * 使用示例：\r\n * ```javascript\r\n * const rotationSpeed = 3;\r\n * const phaseOffset = 0.5;\r\n * \r\n * // 自动提取函数中使用的变量\r\n * const onFrame = smartContext((element, progress, time) => {\r\n *   element.rotation += rotationSpeed;\r\n *   const pulse = 1 + Math.sin(time * 4 + phaseOffset) * 0.2;\r\n *   element.scaleX = pulse;\r\n * }, { rotationSpeed, phaseOffset }); // 提供作用域对象\r\n * \r\n * element.onFrame = onFrame;\r\n * ```\r\n * \r\n * 注意：由于 JavaScript 限制，仍需要提供作用域对象\r\n * 推荐使用 withContext 并直接传递对象字面量\r\n * \r\n * @param {Function} callback - 回调函数\r\n * @param {Object} scope - 作用域对象，包含可能使用的变量\r\n * @returns {Function} 带上下文的回调函数\r\n */\r\nexport function smartContext(callback, scope) {\r\n  if (typeof callback !== 'function') {\r\n    throw new TypeError('smartContext: 第一个参数必须是函数');\r\n  }\r\n  \r\n  if (!scope || typeof scope !== 'object') {\r\n    throw new TypeError('smartContext: 第二个参数必须是对象');\r\n  }\r\n  \r\n  // 解析函数代码，提取变量名\r\n  const funcCode = callback.toString();\r\n  \r\n  // 简单的变量名提取（匹配标识符）\r\n  // 排除函数参数、关键字、内置对象等\r\n  const excluded = new Set([\r\n    'element', 'progress', 'time', 'item', 'event', 'paperItem', 'paperInstance',\r\n    'if', 'else', 'for', 'while', 'return', 'const', 'let', 'var', 'function',\r\n    'Math', 'Date', 'Array', 'Object', 'String', 'Number', 'Boolean',\r\n    'console', 'window', 'document', 'this', 'undefined', 'null', 'true', 'false'\r\n  ]);\r\n  \r\n  // 提取函数体中的变量名\r\n  const funcBodyMatch = funcCode.match(/\\{([\\s\\S]*)\\}/);\r\n  if (funcBodyMatch) {\r\n    const funcBody = funcBodyMatch[1];\r\n    // 匹配标识符（变量名）\r\n    const identifierRegex = /\\b([a-zA-Z_$][a-zA-Z0-9_$]*)\\b/g;\r\n    const usedVars = new Set();\r\n    let match;\r\n    \r\n    while ((match = identifierRegex.exec(funcBody)) !== null) {\r\n      const varName = match[1];\r\n      if (!excluded.has(varName) && scope.hasOwnProperty(varName)) {\r\n        usedVars.add(varName);\r\n      }\r\n    }\r\n    \r\n    // 只包含实际使用的变量\r\n    const context = {};\r\n    for (const varName of usedVars) {\r\n      context[varName] = scope[varName];\r\n    }\r\n    \r\n    callback.__context = context;\r\n  } else {\r\n    // 如果无法解析，使用整个作用域\r\n    callback.__context = scope;\r\n  }\r\n  \r\n  return callback;\r\n}\r\n\r\n/**\r\n * 自动捕获上下文变量（从当前作用域）\r\n * \r\n * 使用示例：\r\n * ```javascript\r\n * const rotationSpeed = 3;\r\n * const phaseOffset = 0.5;\r\n * \r\n * const onFrame = captureContext((element, progress, time) => {\r\n *   element.rotation += rotationSpeed;\r\n *   const pulse = 1 + Math.sin(time * 4 + phaseOffset) * 0.2;\r\n *   element.scaleX = pulse;\r\n * }, ['rotationSpeed', 'phaseOffset']);\r\n * \r\n * element.onFrame = onFrame;\r\n * ```\r\n * \r\n * 注意：此方法需要显式列出变量名，因为 JavaScript 无法自动检测闭包变量\r\n * \r\n * @param {Function} callback - 回调函数\r\n * @param {Array<string>} variableNames - 需要捕获的变量名数组\r\n * @returns {Function} 带上下文的回调函数\r\n */\r\nexport function captureContext(callback, variableNames) {\r\n  if (typeof callback !== 'function') {\r\n    throw new TypeError('captureContext: 第一个参数必须是函数');\r\n  }\r\n  \r\n  if (!Array.isArray(variableNames)) {\r\n    throw new TypeError('captureContext: 第二个参数必须是字符串数组');\r\n  }\r\n  \r\n  // 从当前作用域捕获变量\r\n  // 注意：这需要在调用 captureContext 的作用域中，变量是可访问的\r\n  const context = {};\r\n  \r\n  // 尝试从调用栈中获取变量（这需要一些技巧）\r\n  // 由于 JavaScript 的限制，我们无法直接访问闭包变量\r\n  // 所以这个方法实际上需要用户手动传递变量值\r\n  \r\n  // 更实用的方法：使用 withContext\r\n  // 这里提供一个简化的实现，要求用户使用对象字面量\r\n  throw new Error('captureContext: 由于 JavaScript 限制，无法自动捕获闭包变量。请使用 withContext 并显式传递上下文对象。');\r\n}\r\n\r\n"],"names":["easingsLib.linear","easingsLib.easeInQuad","easingsLib.easeOutQuad","easingsLib.easeInOutQuad","easingsLib.easeInCubic","easingsLib.easeOutCubic","easingsLib.easeInOutCubic","easingsLib.easeOutBack","easingsLib.easeInBack","easingsLib.easeOutBounce","easingsLib.easeInBounce","easingsLib.getEasingFunction"],"mappings":"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"}