{"version":3,"file":"curves.js","names":[],"sources":["esm/platform/effects/curves.js"],"sourcesContent":["const SAMPLE_N = 32;\nconst PRESETS = {\n  smooth: (t) => (1 - t) ** 3,\n  sharp: (t) => (1 - t) ** 5,\n  gentle: (t) => (1 - t) ** 2,\n  soft: (t) => Math.cos(t * Math.PI / 2),\n  smoother: (t) => 1 - t * t * t * (t * (t * 6 - 15) + 10),\n  linear: (t) => 1 - t\n};\nfunction cubicBezierEval(x1, y1, x2, y2, x) {\n  if (x <= 0) return 0;\n  if (x >= 1) return 1;\n  const cx = 3 * x1;\n  const bx = 3 * (x2 - x1) - cx;\n  const ax = 1 - cx - bx;\n  const cy = 3 * y1;\n  const by = 3 * (y2 - y1) - cy;\n  const ay = 1 - cy - by;\n  let t = x;\n  for (let i = 0; i < 8; i++) {\n    const bxt = ((ax * t + bx) * t + cx) * t;\n    const dbxt = (3 * ax * t + 2 * bx) * t + cx;\n    if (Math.abs(dbxt) < 1e-6) break;\n    t = Math.max(0, Math.min(1, t - (bxt - x) / dbxt));\n  }\n  return ((ay * t + by) * t + cy) * t;\n}\nfunction sampleCubicBezier(curve) {\n  const { x1, y1, x2, y2 } = curve;\n  return Array.from(\n    { length: SAMPLE_N },\n    (_, i) => Number.parseFloat((1 - cubicBezierEval(x1, y1, x2, y2, i / (SAMPLE_N - 1))).toFixed(4))\n  );\n}\nfunction normalizeStops(curve) {\n  return curve.values.map((v) => Math.max(0, Math.min(1, v)));\n}\nfunction sampleCurve(curve) {\n  if (typeof curve === \"string\") {\n    const fn = PRESETS[curve] ?? PRESETS.smooth;\n    return Array.from(\n      { length: SAMPLE_N },\n      (_, i) => Number.parseFloat(fn(i / (SAMPLE_N - 1)).toFixed(4))\n    );\n  }\n  return curve.type === \"cubicBezier\" ? sampleCubicBezier(curve) : normalizeStops(curve);\n}\nfunction serializeCurve(curve) {\n  if (typeof curve === \"string\") return curve;\n  return sampleCurve(curve).join(\",\");\n}\nexport {\n  sampleCurve,\n  serializeCurve\n};\n//# sourceMappingURL=curves.js.map\n"],"mappings":";AAAA,MAAM,WAAW;AACjB,MAAM,UAAU;CACd,SAAS,OAAO,IAAI,MAAM;CAC1B,QAAQ,OAAO,IAAI,MAAM;CACzB,SAAS,OAAO,IAAI,MAAM;CAC1B,OAAO,MAAM,KAAK,IAAI,IAAI,KAAK,KAAK,CAAC;CACrC,WAAW,MAAM,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM;CACrD,SAAS,MAAM,IAAI;AACrB;AACA,SAAS,gBAAgB,IAAI,IAAI,IAAI,IAAI,GAAG;CAC1C,IAAI,KAAK,GAAG,OAAO;CACnB,IAAI,KAAK,GAAG,OAAO;CACnB,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,KAAK,KAAK,MAAM;CAC3B,MAAM,KAAK,IAAI,KAAK;CACpB,MAAM,KAAK,IAAI;CACf,MAAM,KAAK,KAAK,KAAK,MAAM;CAC3B,MAAM,KAAK,IAAI,KAAK;CACpB,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;EAC1B,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,MAAM;EACvC,MAAM,QAAQ,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI;EACzC,IAAI,KAAK,IAAI,IAAI,IAAI,MAAM;EAC3B,IAAI,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,IAAI,CAAC;CACnD;CACA,SAAS,KAAK,IAAI,MAAM,IAAI,MAAM;AACpC;AACA,SAAS,kBAAkB,OAAO;CAChC,MAAM,EAAE,IAAI,IAAI,IAAI,OAAO;CAC3B,OAAO,MAAM,KACX,EAAE,QAAQ,SAAS,IAClB,GAAG,MAAM,OAAO,YAAY,IAAI,gBAAgB,IAAI,IAAI,IAAI,IAAI,KAAK,WAAW,EAAE,EAAC,CAAE,QAAQ,CAAC,CAAC,CAClG;AACF;AACA,SAAS,eAAe,OAAO;CAC7B,OAAO,MAAM,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC;AAC5D;AACA,SAAS,YAAY,OAAO;CAC1B,IAAI,OAAO,UAAU,UAAU;EAC7B,MAAM,KAAK,QAAQ,UAAU,QAAQ;EACrC,OAAO,MAAM,KACX,EAAE,QAAQ,SAAS,IAClB,GAAG,MAAM,OAAO,WAAW,GAAG,KAAK,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAC/D;CACF;CACA,OAAO,MAAM,SAAS,gBAAgB,kBAAkB,KAAK,IAAI,eAAe,KAAK;AACvF;AACA,SAAS,eAAe,OAAO;CAC7B,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,OAAO,YAAY,KAAK,CAAC,CAAC,KAAK,GAAG;AACpC"}