| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import * as Geometry from '../../../../models/geometry/geometry.js'; |
| |
| import {CSSLinearEasingModel} from './CSSLinearEasingModel.js'; |
| |
| /** |
| * Provides a unified interface for both linear easing and cubic bezier |
| * models and handles the parsing for animation-timing texts. |
| **/ |
| export abstract class AnimationTimingModel { |
| abstract asCSSText(): string; |
| |
| static parse(text: string): AnimationTimingModel|null { |
| // Try to parse as a CSSLinearEasingModel first. |
| // The reason is: `linear` keyword is valid in both |
| // models, however we want to treat it as a `CSSLinearEasingModel` |
| // for visualizing in animation timing tool. |
| const cssLinearEasingModel = CSSLinearEasingModel.parse(text); |
| if (cssLinearEasingModel) { |
| return cssLinearEasingModel; |
| } |
| |
| return Geometry.CubicBezier.parse(text) || null; |
| } |
| } |
| |
| export const LINEAR_BEZIER = Geometry.LINEAR_BEZIER; |