UNPKG

@wix/css-property-parser

Version:

A comprehensive TypeScript library for parsing and serializing CSS property values with full MDN specification compliance

73 lines (72 loc) 2.65 kB
"use strict"; // CSS display property evaluator // Handles CSS display property values according to MDN specification // https://developer.mozilla.org/en-US/docs/Web/CSS/display Object.defineProperty(exports, "__esModule", { value: true }); exports.parse = parse; exports.toCSSValue = toCSSValue; const shared_utils_1 = require('../utils/shared-utils.cjs'); const css_variable_1 = require('./css-variable.cjs'); const types_1 = require('../types.cjs'); /** * Parses a CSS display property value according to MDN specification * * Supports: * - Basic display values: block, inline, inline-block * - Flexbox values: flex, inline-flex * - Grid values: grid, inline-grid * - Table values: table, inline-table, table-row, table-cell, etc. * - List values: list-item * - Other values: none, contents, flow-root * - Ruby values: ruby, ruby-base, ruby-text, etc. * - Global keywords: inherit, initial, unset, revert, revert-layer * - CSS variables: var(--custom-display) * * @param value - The CSS value to parse * @returns Parsed DisplayValue or null if invalid */ function parse(value) { if (!value || typeof value !== 'string') return null; const trimmed = value.trim(); if (trimmed === '') return null; // CSS variables - parse and return directly if ((0, shared_utils_1.isCssVariable)(trimmed)) { return (0, css_variable_1.parse)(trimmed); } // Global keywords if ((0, shared_utils_1.isGlobalKeyword)(trimmed)) { return { type: 'keyword', keyword: trimmed.toLowerCase() }; } // Display-specific keywords const displayKeyword = (0, shared_utils_1.getValidKeyword)(trimmed, types_1.DISPLAY_KEYWORDS); if (displayKeyword) { return { type: 'keyword', keyword: displayKeyword }; } return null; } /** * Converts a parsed DisplayValue back to CSS string representation * * @param parsed - The parsed display value * @returns CSS value string or null if invalid */ function toCSSValue(parsed) { if (!parsed) return null; // Handle CSS variables if (parsed.type === 'variable') { return (0, css_variable_1.toCSSValue)(parsed); } // Handle keyword values (both display-specific and global) if (parsed.type === 'keyword') { // Runtime validation: ensure keyword is actually valid for display if ((0, shared_utils_1.isGlobalKeyword)(parsed.keyword) || (0, shared_utils_1.isKeywordInArray)(parsed.keyword, types_1.DISPLAY_KEYWORDS)) { return parsed.keyword; } // Invalid keyword - return null instead of invalid CSS return null; } return null; }