|
"use strict"; |
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
function _export(target, all) { |
|
for(var name in all)Object.defineProperty(target, name, { |
|
enumerable: true, |
|
get: all[name] |
|
}); |
|
} |
|
_export(exports, { |
|
updateAllClasses: function() { |
|
return updateAllClasses; |
|
}, |
|
asValue: function() { |
|
return asValue; |
|
}, |
|
parseColorFormat: function() { |
|
return parseColorFormat; |
|
}, |
|
asColor: function() { |
|
return asColor; |
|
}, |
|
asLookupValue: function() { |
|
return asLookupValue; |
|
}, |
|
typeMap: function() { |
|
return typeMap; |
|
}, |
|
coerceValue: function() { |
|
return coerceValue; |
|
}, |
|
getMatchingTypes: function() { |
|
return getMatchingTypes; |
|
} |
|
}); |
|
const _escapeCommas = _interop_require_default(require("./escapeCommas")); |
|
const _withAlphaVariable = require("./withAlphaVariable"); |
|
const _dataTypes = require("./dataTypes"); |
|
const _negateValue = _interop_require_default(require("./negateValue")); |
|
const _validateFormalSyntax = require("./validateFormalSyntax"); |
|
const _featureFlags = require("../featureFlags.js"); |
|
function _interop_require_default(obj) { |
|
return obj && obj.__esModule ? obj : { |
|
default: obj |
|
}; |
|
} |
|
function updateAllClasses(selectors, updateClass) { |
|
selectors.walkClasses((sel)=>{ |
|
sel.value = updateClass(sel.value); |
|
if (sel.raws && sel.raws.value) { |
|
sel.raws.value = (0, _escapeCommas.default)(sel.raws.value); |
|
} |
|
}); |
|
} |
|
function resolveArbitraryValue(modifier, validate) { |
|
if (!isArbitraryValue(modifier)) { |
|
return undefined; |
|
} |
|
let value = modifier.slice(1, -1); |
|
if (!validate(value)) { |
|
return undefined; |
|
} |
|
return (0, _dataTypes.normalize)(value); |
|
} |
|
function asNegativeValue(modifier, lookup = {}, validate) { |
|
let positiveValue = lookup[modifier]; |
|
if (positiveValue !== undefined) { |
|
return (0, _negateValue.default)(positiveValue); |
|
} |
|
if (isArbitraryValue(modifier)) { |
|
let resolved = resolveArbitraryValue(modifier, validate); |
|
if (resolved === undefined) { |
|
return undefined; |
|
} |
|
return (0, _negateValue.default)(resolved); |
|
} |
|
} |
|
function asValue(modifier, options = {}, { validate =()=>true } = {}) { |
|
var _options_values; |
|
let value = (_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier]; |
|
if (value !== undefined) { |
|
return value; |
|
} |
|
if (options.supportsNegativeValues && modifier.startsWith("-")) { |
|
return asNegativeValue(modifier.slice(1), options.values, validate); |
|
} |
|
return resolveArbitraryValue(modifier, validate); |
|
} |
|
function isArbitraryValue(input) { |
|
return input.startsWith("[") && input.endsWith("]"); |
|
} |
|
function splitUtilityModifier(modifier) { |
|
let slashIdx = modifier.lastIndexOf("/"); |
|
|
|
|
|
let arbitraryStartIdx = modifier.lastIndexOf("[", slashIdx); |
|
let arbitraryEndIdx = modifier.indexOf("]", slashIdx); |
|
let isNextToArbitrary = modifier[slashIdx - 1] === "]" || modifier[slashIdx + 1] === "["; |
|
|
|
if (!isNextToArbitrary) { |
|
if (arbitraryStartIdx !== -1 && arbitraryEndIdx !== -1) { |
|
if (arbitraryStartIdx < slashIdx && slashIdx < arbitraryEndIdx) { |
|
slashIdx = modifier.lastIndexOf("/", arbitraryStartIdx); |
|
} |
|
} |
|
} |
|
if (slashIdx === -1 || slashIdx === modifier.length - 1) { |
|
return [ |
|
modifier, |
|
undefined |
|
]; |
|
} |
|
let arbitrary = isArbitraryValue(modifier); |
|
|
|
|
|
|
|
if (arbitrary && !modifier.includes("]/[")) { |
|
return [ |
|
modifier, |
|
undefined |
|
]; |
|
} |
|
return [ |
|
modifier.slice(0, slashIdx), |
|
modifier.slice(slashIdx + 1) |
|
]; |
|
} |
|
function parseColorFormat(value) { |
|
if (typeof value === "string" && value.includes("<alpha-value>")) { |
|
let oldValue = value; |
|
return ({ opacityValue =1 })=>oldValue.replace("<alpha-value>", opacityValue); |
|
} |
|
return value; |
|
} |
|
function unwrapArbitraryModifier(modifier) { |
|
return (0, _dataTypes.normalize)(modifier.slice(1, -1)); |
|
} |
|
function asColor(modifier, options = {}, { tailwindConfig ={} } = {}) { |
|
var _options_values; |
|
if (((_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier]) !== undefined) { |
|
var _options_values1; |
|
return parseColorFormat((_options_values1 = options.values) === null || _options_values1 === void 0 ? void 0 : _options_values1[modifier]); |
|
} |
|
|
|
|
|
let [color, alpha] = splitUtilityModifier(modifier); |
|
if (alpha !== undefined) { |
|
var _options_values2, _tailwindConfig_theme, _tailwindConfig_theme_opacity; |
|
var _options_values_color; |
|
let normalizedColor = (_options_values_color = (_options_values2 = options.values) === null || _options_values2 === void 0 ? void 0 : _options_values2[color]) !== null && _options_values_color !== void 0 ? _options_values_color : isArbitraryValue(color) ? color.slice(1, -1) : undefined; |
|
if (normalizedColor === undefined) { |
|
return undefined; |
|
} |
|
normalizedColor = parseColorFormat(normalizedColor); |
|
if (isArbitraryValue(alpha)) { |
|
return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, unwrapArbitraryModifier(alpha)); |
|
} |
|
if (((_tailwindConfig_theme = tailwindConfig.theme) === null || _tailwindConfig_theme === void 0 ? void 0 : (_tailwindConfig_theme_opacity = _tailwindConfig_theme.opacity) === null || _tailwindConfig_theme_opacity === void 0 ? void 0 : _tailwindConfig_theme_opacity[alpha]) === undefined) { |
|
return undefined; |
|
} |
|
return (0, _withAlphaVariable.withAlphaValue)(normalizedColor, tailwindConfig.theme.opacity[alpha]); |
|
} |
|
return asValue(modifier, options, { |
|
validate: _dataTypes.color |
|
}); |
|
} |
|
function asLookupValue(modifier, options = {}) { |
|
var _options_values; |
|
return (_options_values = options.values) === null || _options_values === void 0 ? void 0 : _options_values[modifier]; |
|
} |
|
function guess(validate) { |
|
return (modifier, options)=>{ |
|
return asValue(modifier, options, { |
|
validate |
|
}); |
|
}; |
|
} |
|
let typeMap = { |
|
any: asValue, |
|
color: asColor, |
|
url: guess(_dataTypes.url), |
|
image: guess(_dataTypes.image), |
|
length: guess(_dataTypes.length), |
|
percentage: guess(_dataTypes.percentage), |
|
position: guess(_dataTypes.position), |
|
lookup: asLookupValue, |
|
"generic-name": guess(_dataTypes.genericName), |
|
"family-name": guess(_dataTypes.familyName), |
|
number: guess(_dataTypes.number), |
|
"line-width": guess(_dataTypes.lineWidth), |
|
"absolute-size": guess(_dataTypes.absoluteSize), |
|
"relative-size": guess(_dataTypes.relativeSize), |
|
shadow: guess(_dataTypes.shadow), |
|
size: guess(_validateFormalSyntax.backgroundSize) |
|
}; |
|
let supportedTypes = Object.keys(typeMap); |
|
function splitAtFirst(input, delim) { |
|
let idx = input.indexOf(delim); |
|
if (idx === -1) return [ |
|
undefined, |
|
input |
|
]; |
|
return [ |
|
input.slice(0, idx), |
|
input.slice(idx + 1) |
|
]; |
|
} |
|
function coerceValue(types, modifier, options, tailwindConfig) { |
|
if (options.values && modifier in options.values) { |
|
for (let { type } of types !== null && types !== void 0 ? types : []){ |
|
let result = typeMap[type](modifier, options, { |
|
tailwindConfig |
|
}); |
|
if (result === undefined) { |
|
continue; |
|
} |
|
return [ |
|
result, |
|
type, |
|
null |
|
]; |
|
} |
|
} |
|
if (isArbitraryValue(modifier)) { |
|
let arbitraryValue = modifier.slice(1, -1); |
|
let [explicitType, value] = splitAtFirst(arbitraryValue, ":"); |
|
|
|
|
|
|
|
if (!/^[\w-_]+$/g.test(explicitType)) { |
|
value = arbitraryValue; |
|
} else if (explicitType !== undefined && !supportedTypes.includes(explicitType)) { |
|
return []; |
|
} |
|
if (value.length > 0 && supportedTypes.includes(explicitType)) { |
|
return [ |
|
asValue(`[${value}]`, options), |
|
explicitType, |
|
null |
|
]; |
|
} |
|
} |
|
let matches = getMatchingTypes(types, modifier, options, tailwindConfig); |
|
|
|
for (let match of matches){ |
|
return match; |
|
} |
|
return []; |
|
} |
|
function* getMatchingTypes(types, rawModifier, options, tailwindConfig) { |
|
let modifiersEnabled = (0, _featureFlags.flagEnabled)(tailwindConfig, "generalizedModifiers"); |
|
let [modifier, utilityModifier] = splitUtilityModifier(rawModifier); |
|
let canUseUtilityModifier = modifiersEnabled && options.modifiers != null && (options.modifiers === "any" || typeof options.modifiers === "object" && (utilityModifier && isArbitraryValue(utilityModifier) || utilityModifier in options.modifiers)); |
|
if (!canUseUtilityModifier) { |
|
modifier = rawModifier; |
|
utilityModifier = undefined; |
|
} |
|
if (utilityModifier !== undefined && modifier === "") { |
|
modifier = "DEFAULT"; |
|
} |
|
|
|
|
|
if (utilityModifier !== undefined) { |
|
if (typeof options.modifiers === "object") { |
|
var _options_modifiers; |
|
var _options_modifiers_utilityModifier; |
|
let configValue = (_options_modifiers_utilityModifier = (_options_modifiers = options.modifiers) === null || _options_modifiers === void 0 ? void 0 : _options_modifiers[utilityModifier]) !== null && _options_modifiers_utilityModifier !== void 0 ? _options_modifiers_utilityModifier : null; |
|
if (configValue !== null) { |
|
utilityModifier = configValue; |
|
} else if (isArbitraryValue(utilityModifier)) { |
|
utilityModifier = unwrapArbitraryModifier(utilityModifier); |
|
} |
|
} |
|
} |
|
for (let { type } of types !== null && types !== void 0 ? types : []){ |
|
let result = typeMap[type](modifier, options, { |
|
tailwindConfig |
|
}); |
|
if (result === undefined) { |
|
continue; |
|
} |
|
yield [ |
|
result, |
|
type, |
|
utilityModifier !== null && utilityModifier !== void 0 ? utilityModifier : null |
|
]; |
|
} |
|
} |
|
|