import { Root, ArrayNode, ObjectNode, Attribute, Element, Collection, Primitive, AnyTitle } from '@lottiefiles/last';

/**
 * Copyright 2023 Design Barn Inc.
 */

declare type NodeWithTitle = Root | ArrayNode | ObjectNode | Attribute | Element | Collection;
declare type IsFeatureUsedChecker<T = NodeWithTitle> = (node: T) => boolean;
declare const collectionNodeChecker: IsFeatureUsedChecker<Collection>;
declare const objectNodeChecker: IsFeatureUsedChecker<ObjectNode>;
declare const elementNodeChecker: IsFeatureUsedChecker<Element>;
declare const primitiveNodeChecker: IsFeatureUsedChecker<Primitive>;
declare const attributeValueChecker: IsFeatureUsedChecker<Attribute>;
declare const arrayNodeChecker: IsFeatureUsedChecker<ArrayNode>;
declare const intBooleanNodeChecker: IsFeatureUsedChecker<Attribute>;
declare const timeStretchChecker: IsFeatureUsedChecker<Attribute>;
declare const baselineShiftChecker: IsFeatureUsedChecker<Attribute>;
/**
 * If dilate's (aka Mask Expansion) or Transform Skew is set to a non-animated static value of 0, then it's disabled and not used.
 */
declare const animatedValueStaticChecker: IsFeatureUsedChecker<Element>;
declare const FEATURE_CHECKERS: Map<AnyTitle, IsFeatureUsedChecker<Collection> | IsFeatureUsedChecker<ObjectNode> | IsFeatureUsedChecker<Element> | IsFeatureUsedChecker<Attribute> | IsFeatureUsedChecker<ArrayNode>>;
declare const isFeatureUsed: (feature: AnyTitle, node: NodeWithTitle) => boolean;

export { FEATURE_CHECKERS, type IsFeatureUsedChecker, type NodeWithTitle, animatedValueStaticChecker, arrayNodeChecker, attributeValueChecker, baselineShiftChecker, collectionNodeChecker, elementNodeChecker, intBooleanNodeChecker, isFeatureUsed, objectNodeChecker, primitiveNodeChecker, timeStretchChecker };
