{"version":3,"file":"animatorStyle.js","names":[],"sources":["esm/platform/animatorStyle.js"],"sourcesContent":["const animatorKey = /* @__PURE__ */ Symbol.for(\"one.native.animator\");\nfunction animatedSwiftStyle(animator) {\n  return { ...animator.samples[0], [animatorKey]: animator };\n}\nfunction animatorStyleOf(style) {\n  return style[animatorKey];\n}\nconst colorFields = /* @__PURE__ */ new Set([\"foregroundStyle\", \"tint\", \"background\", \"borderColor\", \"glassEffectTint\"]);\nfunction same(a, b) {\n  return a === b || JSON.stringify(a) === JSON.stringify(b);\n}\nfunction sdkPairs(style) {\n  return style.sdkModifiers ? JSON.parse(style.sdkModifiers) : [];\n}\nfunction withPayload(base, payload) {\n  return {\n    ...base,\n    sdkModifiers: JSON.stringify([...sdkPairs(base), [\"oneNativeAnimator\", JSON.stringify(payload)]])\n  };\n}\nfunction phaseNative(animator, natives) {\n  const keys = [...new Set(natives.flatMap((native) => Object.keys(native)))];\n  const varying = keys.filter((key) => natives.some((native) => !same(native[key], natives[0][key])));\n  for (const key of varying) {\n    if (colorFields.has(key) && natives.some((native) => native[key] !== void 0 && typeof native[key] !== \"number\"))\n      throw new Error(`${animator.owner} content can vary ${key} by phase only with plain colors, not platform colors`);\n  }\n  const phases = natives.map(\n    (native) => Object.fromEntries(varying.filter((key) => native[key] !== void 0).map((key) => [key, native[key]]))\n  );\n  return withPayload(natives[0], { id: animator.id, kind: \"phase\", varying, phases });\n}\nconst numericText = /^-?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?$/i;\nfunction leavesOf(value) {\n  const leaves = [];\n  const texts = [];\n  const leaf = (number, text, quoted) => {\n    leaves.push(number);\n    texts.push(text);\n    return quoted ? `__oneKS${leaves.length - 1}__` : `__oneKN${leaves.length - 1}__`;\n  };\n  if (numericText.test(value)) return { shape: leaf(Number(value), value, true), leaves, texts };\n  let parsed;\n  try {\n    parsed = /^[[{]/.test(value) ? JSON.parse(value) : void 0;\n  } catch {\n    parsed = void 0;\n  }\n  if (parsed === void 0) return { shape: value, leaves, texts };\n  const walk = (item) => {\n    if (typeof item === \"number\") return leaf(item, JSON.stringify(item), false);\n    if (typeof item === \"string\" && numericText.test(item)) return leaf(Number(item), item, true);\n    if (Array.isArray(item)) return item.map(walk);\n    if (item && typeof item === \"object\")\n      return Object.fromEntries(Object.entries(item).map(([key, entry]) => [key, walk(entry)]));\n    return item;\n  };\n  return { shape: JSON.stringify(walk(parsed)), leaves, texts };\n}\nfunction keyframeNative(animator, natives) {\n  const { owner, values } = animator;\n  const fieldCount = values[0].length;\n  const tokens = [];\n  const bind = (samples, where) => {\n    if (samples.every((sample) => sample === samples[0])) return void 0;\n    const coefficients = Array.from({ length: fieldCount }, (_, field) => samples[field + 1] - samples[0]);\n    const check = values[fieldCount + 1];\n    let predicted = samples[0];\n    for (let field = 0; field < fieldCount; field++)\n      predicted += coefficients[field] * (check[field] - values[0][field]);\n    const actual = samples[fieldCount + 1];\n    if (!(Math.abs(predicted - actual) <= 1e-6 * Math.max(1, Math.abs(actual))))\n      throw new Error(`${owner} content must map its value linearly to swiftStyle numbers; ${where} does not`);\n    let base = samples[0];\n    for (let field = 0; field < fieldCount; field++) base -= coefficients[field] * values[0][field];\n    tokens.push({ base, coefficients });\n    return tokens.length - 1;\n  };\n  const keys = [...new Set(natives.flatMap((native) => Object.keys(native)))].filter((key) => key !== \"sdkModifiers\");\n  const fields = {};\n  for (const key of keys) {\n    const samples = natives.map((native) => native[key]);\n    if (samples.every((sample) => same(sample, samples[0]))) continue;\n    if (colorFields.has(key) || !samples.every((sample) => typeof sample === \"number\"))\n      throw new Error(`${owner} content can follow its value only through swiftStyle numbers; ${key} changed`);\n    const token = bind(samples, key);\n    if (token !== void 0) fields[key] = token;\n  }\n  const pairs = natives.map(sdkPairs);\n  const names = pairs[0].map(([name]) => name);\n  if (pairs.some((list) => !same(list.map(([name]) => name), names)))\n    throw new Error(`${owner} content must apply the same swiftStyle modifiers at every value`);\n  const template = names.map((name, index) => {\n    const parts = pairs.map((list) => leavesOf(list[index][1]));\n    if (parts.some((part) => part.shape !== parts[0].shape))\n      throw new Error(`${owner} content can follow its value only through swiftStyle numbers; ${name} changed`);\n    let value = parts[0].shape;\n    parts[0].leaves.forEach((_, leaf) => {\n      const token = bind(parts.map((part) => part.leaves[leaf]), name);\n      const text = token === void 0 ? parts[0].texts[leaf] : `@@${token}@@`;\n      value = value.replace(`\"__oneKN${leaf}__\"`, text).replace(`__oneKS${leaf}__`, text);\n    });\n    return [name, value];\n  });\n  return withPayload(natives[0], {\n    id: animator.id,\n    kind: \"keyframe\",\n    fields,\n    sdkModifiers: template.length ? JSON.stringify(template) : void 0,\n    tokens\n  });\n}\nfunction animatorStyleNative(animator, convert) {\n  const natives = animator.samples.map((sample) => convert(sample) ?? {});\n  const native = animator.kind === \"phase\" ? phaseNative(animator, natives) : keyframeNative(animator, natives);\n  return native;\n}\nexport {\n  animatedSwiftStyle,\n  animatorStyleNative,\n  animatorStyleOf\n};\n//# sourceMappingURL=animatorStyle.js.map\n"],"mappings":"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"}