70 lines
2.8 KiB
JavaScript
70 lines
2.8 KiB
JavaScript
var IMPORTANT_MODIFIER = '!';
|
|
function createSplitModifiers(config) {
|
|
var separator = config.separator || ':';
|
|
var isSeparatorSingleCharacter = separator.length === 1;
|
|
var firstSeparatorCharacter = separator[0];
|
|
var separatorLength = separator.length;
|
|
// splitModifiers inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js
|
|
return function splitModifiers(className) {
|
|
var modifiers = [];
|
|
var bracketDepth = 0;
|
|
var modifierStart = 0;
|
|
var postfixModifierPosition;
|
|
for (var index = 0; index < className.length; index++) {
|
|
var currentCharacter = className[index];
|
|
if (bracketDepth === 0) {
|
|
if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {
|
|
modifiers.push(className.slice(modifierStart, index));
|
|
modifierStart = index + separatorLength;
|
|
continue;
|
|
}
|
|
if (currentCharacter === '/') {
|
|
postfixModifierPosition = index;
|
|
continue;
|
|
}
|
|
}
|
|
if (currentCharacter === '[') {
|
|
bracketDepth++;
|
|
} else if (currentCharacter === ']') {
|
|
bracketDepth--;
|
|
}
|
|
}
|
|
var baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
|
|
var hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
|
|
var baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;
|
|
var maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;
|
|
return {
|
|
modifiers: modifiers,
|
|
hasImportantModifier: hasImportantModifier,
|
|
baseClassName: baseClassName,
|
|
maybePostfixModifierPosition: maybePostfixModifierPosition
|
|
};
|
|
};
|
|
}
|
|
/**
|
|
* Sorts modifiers according to following schema:
|
|
* - Predefined modifiers are sorted alphabetically
|
|
* - When an arbitrary variant appears, it must be preserved which modifiers are before and after it
|
|
*/
|
|
function sortModifiers(modifiers) {
|
|
if (modifiers.length <= 1) {
|
|
return modifiers;
|
|
}
|
|
var sortedModifiers = [];
|
|
var unsortedModifiers = [];
|
|
modifiers.forEach(function (modifier) {
|
|
var isArbitraryVariant = modifier[0] === '[';
|
|
if (isArbitraryVariant) {
|
|
sortedModifiers.push.apply(sortedModifiers, unsortedModifiers.sort().concat([modifier]));
|
|
unsortedModifiers = [];
|
|
} else {
|
|
unsortedModifiers.push(modifier);
|
|
}
|
|
});
|
|
sortedModifiers.push.apply(sortedModifiers, unsortedModifiers.sort());
|
|
return sortedModifiers;
|
|
}
|
|
|
|
export { IMPORTANT_MODIFIER, createSplitModifiers, sortModifiers };
|
|
//# sourceMappingURL=modifier-utils.mjs.map
|