UNPKG

@mui/internal-docs-infra

Version:

MUI Infra - internal documentation creation tools.

76 lines (68 loc) 2.42 kB
import { getShallowTextContent, hasClass, isCommentSpan as isCommentSpanShared, isConstantSpan, isEntityNameSpan, isKeywordSpan as isKeywordSpanShared, isPropertyNameSpan, isStringLiteralSpan as isStringLiteralSpanShared } from "../loadServerTypes/hastTypeUtils.mjs"; import { toKebabCase } from "../loaderUtils/toKebabCase.mjs"; /** * Converts a prop path (array of property names) to a kebab-case dotted string. * Each segment is independently converted. * Example: ["homeAddress", "streetName"] → "home-address.street-name" */ export function propPathToString(propPath, propName) { const allParts = [...propPath, propName]; return allParts.map(toKebabCase).join('.'); } /** * Checks if an element is a linkable span (pl-c1 or pl-en). * In CSS contexts, pl-v (CSS variables) and pl-e (class selectors) are also linkable. * Only spans are considered linkable - not anchors we've already created. */ export function isLinkableSpan(element, lang) { if (isConstantSpan(element) || isEntityNameSpan(element)) { return true; } if (lang?.semantics === 'css') { return isPropertyNameSpan(element) || element.tagName === 'span' && hasClass(element, 'pl-e'); } return false; } /** * Checks if an element is a property span (pl-v or pl-e). */ export function isPropertySpan(element) { return isPropertyNameSpan(element) || element.tagName === 'span' && hasClass(element, 'pl-e'); } /** * Checks if an element is a keyword span (pl-k). */ export function isKeywordSpan(element) { return isKeywordSpanShared(element); } /** * Checks if an element is a comment span (pl-c). */ export function isCommentSpan(element) { return isCommentSpanShared(element); } /** * Checks if an element is an identifier reference span (pl-smi). */ export function isSmiSpan(element) { return element.tagName === 'span' && hasClass(element, 'pl-smi'); } /** * Checks if an element is a string literal span (pl-s). */ export function isStringLiteralSpan(element) { return isStringLiteralSpanShared(element); } /** * Gets the text content of an element (concatenates all text children). */ export function getTextContent(element) { return getShallowTextContent(element); } /** * Gets the class names from an element's properties. */ export function getClassName(element) { const className = element.properties?.className; return Array.isArray(className) ? className : undefined; }