| // NOTICE: This file is generated by Rollup. To modify it, |
| // please instead edit the ESM counterpart and rebuild with Rollup (npm run build). |
| 'use strict'; |
| |
| const valueParser = require('postcss-value-parser'); |
| const keywords = require('../reference/keywords.cjs'); |
| const getDimension = require('./getDimension.cjs'); |
| const isStandardSyntaxValue = require('./isStandardSyntaxValue.cjs'); |
| const isVariable = require('./isVariable.cjs'); |
| |
| /** @typedef {import('postcss-value-parser').Node} Node */ |
| |
| /** |
| * Get the animation name within an `animation` shorthand property value. |
| * |
| * @param {string} value |
| * |
| * @returns {Node[]} |
| */ |
| function findAnimationName(value) { |
| /** @type {Node[]} */ |
| const animationNames = []; |
| |
| const valueNodes = valueParser(value); |
| const { nodes } = valueNodes; |
| |
| // Handle `inherit`, `initial` and etc |
| if (nodes.length === 1 && nodes[0] && keywords.basicKeywords.has(nodes[0].value.toLowerCase())) { |
| return [nodes[0]]; |
| } |
| |
| let shouldBeIgnored = false; |
| |
| valueNodes.walk((valueNode) => { |
| if (shouldBeIgnored) return; |
| |
| if (valueNode.type === 'function') { |
| return false; |
| } |
| |
| if (valueNode.type !== 'word') { |
| return; |
| } |
| |
| const valueLowerCase = valueNode.value.toLowerCase(); |
| |
| // Ignore non-standard syntax |
| if (!isStandardSyntaxValue(valueLowerCase)) { |
| // Cannot find animation name if shorthand has non-standard syntax value (#5532) |
| shouldBeIgnored = true; |
| animationNames.length = 0; // clears animationNames |
| |
| return; |
| } |
| |
| // Ignore variables |
| if (isVariable(valueLowerCase)) { |
| return; |
| } |
| |
| // Ignore keywords for other animation parts |
| if (keywords.animationShorthandKeywords.has(valueLowerCase)) { |
| return; |
| } |
| |
| // Ignore numbers with units |
| const { unit } = getDimension(valueNode); |
| |
| if (unit || unit === '') { |
| return; |
| } |
| |
| animationNames.push(valueNode); |
| }); |
| |
| return animationNames; |
| } |
| |
| module.exports = findAnimationName; |