tailwind-merge 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <div align="center">
2
2
  <br />
3
3
  <a href="https://github.com/dcastil/tailwind-merge">
4
- <!-- AUTOGENERATED START logo-image --><img src="https://github.com/dcastil/tailwind-merge/raw/v1.1.1/assets/logo.svg" alt="tailwind-merge" width="221px" /><!-- AUTOGENERATED END -->
4
+ <!-- AUTOGENERATED START logo-image --><img src="https://github.com/dcastil/tailwind-merge/raw/v1.2.0/assets/logo.svg" alt="tailwind-merge" width="221px" /><!-- AUTOGENERATED END -->
5
5
  </a>
6
6
  </div>
7
7
 
@@ -55,7 +55,7 @@ function MyGenericInput(props) {
55
55
  }
56
56
  ```
57
57
 
58
- tailwind-merge makes sure to override conflicting classes and keeps everything else untouched. In the case of the `MySlightlyModifiedInput`, the input now only renders the classes `border rounded p-3`.
58
+ tailwind-merge overrides conflicting classes and keeps everything else untouched. In the case of the `MySlightlyModifiedInput`, the input now only renders the classes `border rounded p-3`.
59
59
 
60
60
  ## Features
61
61
 
@@ -86,7 +86,7 @@ twMerge('bottom-auto inset-y-6') // → 'inset-y-6'
86
86
  twMerge('inline block') // → 'block'
87
87
  ```
88
88
 
89
- ### Supports prefixes and stacked prefixes
89
+ ### Supports modifiers and stacked modifiers
90
90
 
91
91
  ```ts
92
92
  twMerge('p-2 hover:p-4') // → 'p-2 hover:p-4'
@@ -166,8 +166,11 @@ The tailwind-merge config is an object with a few keys.
166
166
  const tailwindMergeConfig = {
167
167
  // ↓ Set how many values should be stored in cache.
168
168
  cacheSize: 500,
169
+ // ↓ Optional prefix from TaiLwind config
170
+ prefix: 'tw-',
169
171
  theme: {
170
172
  // Theme scales are defined here
173
+ // This is not the theme object from your Tailwind config
171
174
  },
172
175
  classGroups: {
173
176
  // Class groups are defined here
@@ -308,6 +311,7 @@ The function takes a callback which returns the config you want to use and retur
308
311
  import { createTailwindMerge } from 'tailwind-merge'
309
312
 
310
313
  const customTwMerge = createTailwindMerge(() => ({
314
+ cacheSize: 500,
311
315
  theme: {},
312
316
  classGroups: {
313
317
  foo: ['foo', 'foo-2', { 'bar-baz': ['', '1', '2'] }],
@@ -67,12 +67,14 @@ function getGroupIdForArbitraryProperty(className) {
67
67
 
68
68
 
69
69
  function createClassMap(config) {
70
- var theme = config.theme;
70
+ var theme = config.theme,
71
+ prefix = config.prefix;
71
72
  var classMap = {
72
73
  nextPart: {},
73
74
  validators: []
74
75
  };
75
- Object.entries(config.classGroups).forEach(function (_ref2) {
76
+ var prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);
77
+ prefixedClassGroupEntries.forEach(function (_ref2) {
76
78
  var classGroupId = _ref2[0],
77
79
  classGroup = _ref2[1];
78
80
  processClassesRecursively(classGroup, classMap, classGroupId, theme);
@@ -128,5 +130,32 @@ function isThemeGetter(func) {
128
130
  return func.isThemeGetter;
129
131
  }
130
132
 
133
+ function getPrefixedClassGroupEntries(classGroupEntries, prefix) {
134
+ if (!prefix) {
135
+ return classGroupEntries;
136
+ }
137
+
138
+ return classGroupEntries.map(function (_ref4) {
139
+ var classGroupId = _ref4[0],
140
+ classGroup = _ref4[1];
141
+ var prefixedClassGroup = classGroup.map(function (classDefinition) {
142
+ if (typeof classDefinition === 'string') {
143
+ return prefix + classDefinition;
144
+ }
145
+
146
+ if (typeof classDefinition === 'object') {
147
+ return Object.fromEntries(Object.entries(classDefinition).map(function (_ref5) {
148
+ var key = _ref5[0],
149
+ value = _ref5[1];
150
+ return [prefix + key, value];
151
+ }));
152
+ }
153
+
154
+ return classDefinition;
155
+ });
156
+ return [classGroupId, prefixedClassGroup];
157
+ });
158
+ }
159
+
131
160
  export { createClassMap, createClassUtils };
132
161
  //# sourceMappingURL=class-utils.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"class-utils.mjs","sources":["../../src/lib/class-utils.ts"],"sourcesContent":["import { ClassGroupId, Config, ClassGroup, ClassValidator, ThemeObject, ThemeGetter } from './types'\n\nexport interface ClassPartObject {\n nextPart: Record<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: ClassGroupId\n}\n\ninterface ClassValidatorObject {\n classGroupId: ClassGroupId\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport function createClassUtils(config: Config) {\n const classMap = createClassMap(config)\n\n function getClassGroupId(className: string) {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n function getConflictingClassGroupIds(classGroupId: ClassGroupId) {\n return config.conflictingClassGroups[classGroupId] || []\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nfunction getGroupRecursive(\n classParts: string[],\n classPartObject: ClassPartObject\n): ClassGroupId | undefined {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart[currentClassPart]\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nfunction getGroupIdForArbitraryProperty(className: string) {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':')\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport function createClassMap(config: Config) {\n const { theme } = config\n const classMap: ClassPartObject = {\n nextPart: {},\n validators: [],\n }\n\n Object.entries(config.classGroups).forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme)\n })\n\n return classMap\n}\n\nfunction processClassesRecursively(\n classGroup: ClassGroup,\n classPartObject: ClassPartObject,\n classGroupId: ClassGroupId,\n theme: ThemeObject\n) {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme\n )\n })\n })\n}\n\nfunction getPart(classPartObject: ClassPartObject, path: string) {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (currentClassPartObject.nextPart[pathPart] === undefined) {\n currentClassPartObject.nextPart[pathPart] = {\n nextPart: {},\n validators: [],\n }\n }\n\n currentClassPartObject = currentClassPartObject.nextPart[pathPart]!\n })\n\n return currentClassPartObject\n}\n\nfunction isThemeGetter(func: ClassValidator | ThemeGetter): func is ThemeGetter {\n return (func as ThemeGetter).isThemeGetter\n}\n"],"names":["CLASS_PART_SEPARATOR","createClassUtils","config","classMap","createClassMap","getClassGroupId","className","classParts","split","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","conflictingClassGroups","classPartObject","currentClassPart","nextClassPartObject","nextPart","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","Object","entries","classGroups","forEach","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","key","path","currentClassPartObject","pathPart","func"],"mappings":"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"}
1
+ {"version":3,"file":"class-utils.mjs","sources":["../../src/lib/class-utils.ts"],"sourcesContent":["import { ClassGroupId, Config, ClassGroup, ClassValidator, ThemeObject, ThemeGetter } from './types'\n\nexport interface ClassPartObject {\n nextPart: Record<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: ClassGroupId\n}\n\ninterface ClassValidatorObject {\n classGroupId: ClassGroupId\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport function createClassUtils(config: Config) {\n const classMap = createClassMap(config)\n\n function getClassGroupId(className: string) {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n function getConflictingClassGroupIds(classGroupId: ClassGroupId) {\n return config.conflictingClassGroups[classGroupId] || []\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nfunction getGroupRecursive(\n classParts: string[],\n classPartObject: ClassPartObject\n): ClassGroupId | undefined {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart[currentClassPart]\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nfunction getGroupIdForArbitraryProperty(className: string) {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':')\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport function createClassMap(config: Config) {\n const { theme, prefix } = config\n const classMap: ClassPartObject = {\n nextPart: {},\n validators: [],\n }\n\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(\n Object.entries(config.classGroups),\n prefix\n )\n\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme)\n })\n\n return classMap\n}\n\nfunction processClassesRecursively(\n classGroup: ClassGroup,\n classPartObject: ClassPartObject,\n classGroupId: ClassGroupId,\n theme: ThemeObject\n) {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme\n )\n })\n })\n}\n\nfunction getPart(classPartObject: ClassPartObject, path: string) {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (currentClassPartObject.nextPart[pathPart] === undefined) {\n currentClassPartObject.nextPart[pathPart] = {\n nextPart: {},\n validators: [],\n }\n }\n\n currentClassPartObject = currentClassPartObject.nextPart[pathPart]!\n })\n\n return currentClassPartObject\n}\n\nfunction isThemeGetter(func: ClassValidator | ThemeGetter): func is ThemeGetter {\n return (func as ThemeGetter).isThemeGetter\n}\n\nfunction getPrefixedClassGroupEntries(\n classGroupEntries: Array<[classGroupId: string, classGroup: ClassGroup]>,\n prefix: string | undefined\n): Array<[classGroupId: string, classGroup: ClassGroup]> {\n if (!prefix) {\n return classGroupEntries\n }\n\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map((classDefinition) => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition\n }\n\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(\n Object.entries(classDefinition).map(([key, value]) => [prefix + key, value])\n )\n }\n\n return classDefinition\n })\n\n return [classGroupId, prefixedClassGroup]\n })\n}\n"],"names":["CLASS_PART_SEPARATOR","createClassUtils","config","classMap","createClassMap","getClassGroupId","className","classParts","split","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","conflictingClassGroups","classPartObject","currentClassPart","nextClassPartObject","nextPart","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","prefix","prefixedClassGroupEntries","getPrefixedClassGroupEntries","Object","entries","classGroups","forEach","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","key","path","currentClassPartObject","pathPart","func","classGroupEntries","map","prefixedClassGroup","fromEntries","value"],"mappings":"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"}
@@ -2,14 +2,14 @@ var SPLIT_CLASSES_REGEX = /\s+/;
2
2
  var IMPORTANT_MODIFIER = '!'; // Regex is needed so we don't match against colons in labels for arbitrary values like `text-[color:var(--mystery-var)]`
3
3
  // I'd prefer to use a negative lookbehind for all supported labels, but lookbheinds don't have good browser support yet. More info: https://caniuse.com/js-regexp-lookbehind
4
4
 
5
- var PREFIX_SEPARATOR_REGEX = /:(?![^[]*\])/;
6
- var PREFIX_SEPARATOR = ':';
5
+ var MODIFIER_SEPARATOR_REGEX = /:(?![^[]*\])/;
6
+ var MODIFIER_SEPARATOR = ':';
7
7
  function mergeClassList(classList, configUtils) {
8
8
  var getClassGroupId = configUtils.getClassGroupId,
9
9
  getConflictingClassGroupIds = configUtils.getConflictingClassGroupIds;
10
10
  /**
11
11
  * Set of classGroupIds in following format:
12
- * `{importantModifier}{variantPrefixes}{classGroupId}`
12
+ * `{importantModifier}{variantModifiers}{classGroupId}`
13
13
  * @example 'float'
14
14
  * @example 'hover:focus:bg-color'
15
15
  * @example '!md:pr'
@@ -17,8 +17,8 @@ function mergeClassList(classList, configUtils) {
17
17
 
18
18
  var classGroupsInConflict = new Set();
19
19
  return classList.trim().split(SPLIT_CLASSES_REGEX).map(function (originalClassName) {
20
- var prefixes = originalClassName.split(PREFIX_SEPARATOR_REGEX);
21
- var classNameWithImportantModifier = prefixes.pop();
20
+ var modifiers = originalClassName.split(MODIFIER_SEPARATOR_REGEX);
21
+ var classNameWithImportantModifier = modifiers.pop();
22
22
  var hasImportantModifier = classNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
23
23
  var className = hasImportantModifier ? classNameWithImportantModifier.substring(1) : classNameWithImportantModifier;
24
24
  var classGroupId = getClassGroupId(className);
@@ -30,11 +30,11 @@ function mergeClassList(classList, configUtils) {
30
30
  };
31
31
  }
32
32
 
33
- var variantPrefix = prefixes.length === 0 ? '' : prefixes.sort().concat('').join(PREFIX_SEPARATOR);
34
- var fullPrefix = hasImportantModifier ? IMPORTANT_MODIFIER + variantPrefix : variantPrefix;
33
+ var variantModifier = modifiers.length === 0 ? '' : modifiers.sort().concat('').join(MODIFIER_SEPARATOR);
34
+ var fullModifier = hasImportantModifier ? IMPORTANT_MODIFIER + variantModifier : variantModifier;
35
35
  return {
36
36
  isTailwindClass: true,
37
- prefix: fullPrefix,
37
+ modifier: fullModifier,
38
38
  classGroupId: classGroupId,
39
39
  originalClassName: originalClassName
40
40
  };
@@ -44,9 +44,9 @@ function mergeClassList(classList, configUtils) {
44
44
  return true;
45
45
  }
46
46
 
47
- var prefix = parsed.prefix,
47
+ var modifier = parsed.modifier,
48
48
  classGroupId = parsed.classGroupId;
49
- var classId = prefix + ":" + classGroupId;
49
+ var classId = modifier + ":" + classGroupId;
50
50
 
51
51
  if (classGroupsInConflict.has(classId)) {
52
52
  return false;
@@ -54,7 +54,7 @@ function mergeClassList(classList, configUtils) {
54
54
 
55
55
  classGroupsInConflict.add(classId);
56
56
  getConflictingClassGroupIds(classGroupId).forEach(function (group) {
57
- return classGroupsInConflict.add(prefix + ":" + group);
57
+ return classGroupsInConflict.add(modifier + ":" + group);
58
58
  });
59
59
  return true;
60
60
  }).reverse().map(function (parsed) {
@@ -1 +1 @@
1
- {"version":3,"file":"merge-classlist.mjs","sources":["../../src/lib/merge-classlist.ts"],"sourcesContent":["import { ConfigUtils } from './config-utils'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\nconst IMPORTANT_MODIFIER = '!'\n// Regex is needed so we don't match against colons in labels for arbitrary values like `text-[color:var(--mystery-var)]`\n// I'd prefer to use a negative lookbehind for all supported labels, but lookbheinds don't have good browser support yet. More info: https://caniuse.com/js-regexp-lookbehind\nconst PREFIX_SEPARATOR_REGEX = /:(?![^[]*\\])/\nconst PREFIX_SEPARATOR = ':'\n\nexport function mergeClassList(classList: string, configUtils: ConfigUtils) {\n const { getClassGroupId, getConflictingClassGroupIds } = configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantPrefixes}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example '!md:pr'\n */\n const classGroupsInConflict = new Set<string>()\n\n return (\n classList\n .trim()\n .split(SPLIT_CLASSES_REGEX)\n .map((originalClassName) => {\n const prefixes = originalClassName.split(PREFIX_SEPARATOR_REGEX)\n const classNameWithImportantModifier = prefixes.pop()!\n\n const hasImportantModifier =\n classNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n const className = hasImportantModifier\n ? classNameWithImportantModifier.substring(1)\n : classNameWithImportantModifier\n\n const classGroupId = getClassGroupId(className)\n\n if (!classGroupId) {\n return {\n isTailwindClass: false as const,\n originalClassName,\n }\n }\n\n const variantPrefix =\n prefixes.length === 0 ? '' : prefixes.sort().concat('').join(PREFIX_SEPARATOR)\n\n const fullPrefix = hasImportantModifier\n ? IMPORTANT_MODIFIER + variantPrefix\n : variantPrefix\n\n return {\n isTailwindClass: true as const,\n prefix: fullPrefix,\n classGroupId,\n originalClassName,\n }\n })\n .reverse()\n // Last class in conflict wins, so we need to filter conflicting classes in reverse order.\n .filter((parsed) => {\n if (!parsed.isTailwindClass) {\n return true\n }\n\n const { prefix, classGroupId } = parsed\n\n const classId = `${prefix}:${classGroupId}`\n\n if (classGroupsInConflict.has(classId)) {\n return false\n }\n\n classGroupsInConflict.add(classId)\n\n getConflictingClassGroupIds(classGroupId).forEach((group) =>\n classGroupsInConflict.add(`${prefix}:${group}`)\n )\n\n return true\n })\n .reverse()\n .map((parsed) => parsed.originalClassName)\n .join(' ')\n )\n}\n"],"names":["SPLIT_CLASSES_REGEX","IMPORTANT_MODIFIER","PREFIX_SEPARATOR_REGEX","PREFIX_SEPARATOR","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","Set","trim","split","map","originalClassName","prefixes","classNameWithImportantModifier","pop","hasImportantModifier","startsWith","className","substring","classGroupId","isTailwindClass","variantPrefix","length","sort","concat","join","fullPrefix","prefix","reverse","filter","parsed","classId","has","add","forEach","group"],"mappings":"AAEA,IAAMA,mBAAmB,GAAG,KAA5B;AACA,IAAMC,kBAAkB,GAAG,GAA3B;AAEA;;AACA,IAAMC,sBAAsB,GAAG,cAA/B;AACA,IAAMC,gBAAgB,GAAG,GAAzB;SAEgBC,eAAeC,WAAmBC;AAC9C,MAAQC,eAAR,GAAyDD,WAAzD,CAAQC,eAAR;AAAA,MAAyBC,2BAAzB,GAAyDF,WAAzD,CAAyBE,2BAAzB;AAEA;;;;;;;;AAOA,MAAMC,qBAAqB,GAAG,IAAIC,GAAJ,EAA9B;AAEA,SACIL,SAAS,CACJM,IADL,GAEKC,KAFL,CAEWZ,mBAFX,EAGKa,GAHL,CAGS,UAACC,iBAAD;AACD,QAAMC,QAAQ,GAAGD,iBAAiB,CAACF,KAAlB,CAAwBV,sBAAxB,CAAjB;AACA,QAAMc,8BAA8B,GAAGD,QAAQ,CAACE,GAAT,EAAvC;AAEA,QAAMC,oBAAoB,GACtBF,8BAA8B,CAACG,UAA/B,CAA0ClB,kBAA1C,CADJ;AAEA,QAAMmB,SAAS,GAAGF,oBAAoB,GAChCF,8BAA8B,CAACK,SAA/B,CAAyC,CAAzC,CADgC,GAEhCL,8BAFN;AAIA,QAAMM,YAAY,GAAGf,eAAe,CAACa,SAAD,CAApC;;AAEA,QAAI,CAACE,YAAL,EAAmB;AACf,aAAO;AACHC,QAAAA,eAAe,EAAE,KADd;AAEHT,QAAAA,iBAAiB,EAAjBA;AAFG,OAAP;AAIH;;AAED,QAAMU,aAAa,GACfT,QAAQ,CAACU,MAAT,KAAoB,CAApB,GAAwB,EAAxB,GAA6BV,QAAQ,CAACW,IAAT,GAAgBC,MAAhB,CAAuB,EAAvB,EAA2BC,IAA3B,CAAgCzB,gBAAhC,CADjC;AAGA,QAAM0B,UAAU,GAAGX,oBAAoB,GACjCjB,kBAAkB,GAAGuB,aADY,GAEjCA,aAFN;AAIA,WAAO;AACHD,MAAAA,eAAe,EAAE,IADd;AAEHO,MAAAA,MAAM,EAAED,UAFL;AAGHP,MAAAA,YAAY,EAAZA,YAHG;AAIHR,MAAAA,iBAAiB,EAAjBA;AAJG,KAAP;AAMH,GAnCL,EAoCKiB,OApCL;AAAA,GAsCKC,MAtCL,CAsCY,UAACC,MAAD;AACJ,QAAI,CAACA,MAAM,CAACV,eAAZ,EAA6B;AACzB,aAAO,IAAP;AACH;;AAED,QAAQO,MAAR,GAAiCG,MAAjC,CAAQH,MAAR;AAAA,QAAgBR,YAAhB,GAAiCW,MAAjC,CAAgBX,YAAhB;AAEA,QAAMY,OAAO,GAAMJ,MAAN,SAAgBR,YAA7B;;AAEA,QAAIb,qBAAqB,CAAC0B,GAAtB,CAA0BD,OAA1B,CAAJ,EAAwC;AACpC,aAAO,KAAP;AACH;;AAEDzB,IAAAA,qBAAqB,CAAC2B,GAAtB,CAA0BF,OAA1B;AAEA1B,IAAAA,2BAA2B,CAACc,YAAD,CAA3B,CAA0Ce,OAA1C,CAAkD,UAACC,KAAD;AAAA,aAC9C7B,qBAAqB,CAAC2B,GAAtB,CAA6BN,MAA7B,SAAuCQ,KAAvC,CAD8C;AAAA,KAAlD;AAIA,WAAO,IAAP;AACH,GA1DL,EA2DKP,OA3DL,GA4DKlB,GA5DL,CA4DS,UAACoB,MAAD;AAAA,WAAYA,MAAM,CAACnB,iBAAnB;AAAA,GA5DT,EA6DKc,IA7DL,CA6DU,GA7DV,CADJ;AAgEH;;;;"}
1
+ {"version":3,"file":"merge-classlist.mjs","sources":["../../src/lib/merge-classlist.ts"],"sourcesContent":["import { ConfigUtils } from './config-utils'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\nconst IMPORTANT_MODIFIER = '!'\n// Regex is needed so we don't match against colons in labels for arbitrary values like `text-[color:var(--mystery-var)]`\n// I'd prefer to use a negative lookbehind for all supported labels, but lookbheinds don't have good browser support yet. More info: https://caniuse.com/js-regexp-lookbehind\nconst MODIFIER_SEPARATOR_REGEX = /:(?![^[]*\\])/\nconst MODIFIER_SEPARATOR = ':'\n\nexport function mergeClassList(classList: string, configUtils: ConfigUtils) {\n const { getClassGroupId, getConflictingClassGroupIds } = configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example '!md:pr'\n */\n const classGroupsInConflict = new Set<string>()\n\n return (\n classList\n .trim()\n .split(SPLIT_CLASSES_REGEX)\n .map((originalClassName) => {\n const modifiers = originalClassName.split(MODIFIER_SEPARATOR_REGEX)\n const classNameWithImportantModifier = modifiers.pop()!\n\n const hasImportantModifier =\n classNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n const className = hasImportantModifier\n ? classNameWithImportantModifier.substring(1)\n : classNameWithImportantModifier\n\n const classGroupId = getClassGroupId(className)\n\n if (!classGroupId) {\n return {\n isTailwindClass: false as const,\n originalClassName,\n }\n }\n\n const variantModifier =\n modifiers.length === 0\n ? ''\n : modifiers.sort().concat('').join(MODIFIER_SEPARATOR)\n\n const fullModifier = hasImportantModifier\n ? IMPORTANT_MODIFIER + variantModifier\n : variantModifier\n\n return {\n isTailwindClass: true as const,\n modifier: fullModifier,\n classGroupId,\n originalClassName,\n }\n })\n .reverse()\n // Last class in conflict wins, so we need to filter conflicting classes in reverse order.\n .filter((parsed) => {\n if (!parsed.isTailwindClass) {\n return true\n }\n\n const { modifier, classGroupId } = parsed\n\n const classId = `${modifier}:${classGroupId}`\n\n if (classGroupsInConflict.has(classId)) {\n return false\n }\n\n classGroupsInConflict.add(classId)\n\n getConflictingClassGroupIds(classGroupId).forEach((group) =>\n classGroupsInConflict.add(`${modifier}:${group}`)\n )\n\n return true\n })\n .reverse()\n .map((parsed) => parsed.originalClassName)\n .join(' ')\n )\n}\n"],"names":["SPLIT_CLASSES_REGEX","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR_REGEX","MODIFIER_SEPARATOR","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","Set","trim","split","map","originalClassName","modifiers","classNameWithImportantModifier","pop","hasImportantModifier","startsWith","className","substring","classGroupId","isTailwindClass","variantModifier","length","sort","concat","join","fullModifier","modifier","reverse","filter","parsed","classId","has","add","forEach","group"],"mappings":"AAEA,IAAMA,mBAAmB,GAAG,KAA5B;AACA,IAAMC,kBAAkB,GAAG,GAA3B;AAEA;;AACA,IAAMC,wBAAwB,GAAG,cAAjC;AACA,IAAMC,kBAAkB,GAAG,GAA3B;SAEgBC,eAAeC,WAAmBC;AAC9C,MAAQC,eAAR,GAAyDD,WAAzD,CAAQC,eAAR;AAAA,MAAyBC,2BAAzB,GAAyDF,WAAzD,CAAyBE,2BAAzB;AAEA;;;;;;;;AAOA,MAAMC,qBAAqB,GAAG,IAAIC,GAAJ,EAA9B;AAEA,SACIL,SAAS,CACJM,IADL,GAEKC,KAFL,CAEWZ,mBAFX,EAGKa,GAHL,CAGS,UAACC,iBAAD;AACD,QAAMC,SAAS,GAAGD,iBAAiB,CAACF,KAAlB,CAAwBV,wBAAxB,CAAlB;AACA,QAAMc,8BAA8B,GAAGD,SAAS,CAACE,GAAV,EAAvC;AAEA,QAAMC,oBAAoB,GACtBF,8BAA8B,CAACG,UAA/B,CAA0ClB,kBAA1C,CADJ;AAEA,QAAMmB,SAAS,GAAGF,oBAAoB,GAChCF,8BAA8B,CAACK,SAA/B,CAAyC,CAAzC,CADgC,GAEhCL,8BAFN;AAIA,QAAMM,YAAY,GAAGf,eAAe,CAACa,SAAD,CAApC;;AAEA,QAAI,CAACE,YAAL,EAAmB;AACf,aAAO;AACHC,QAAAA,eAAe,EAAE,KADd;AAEHT,QAAAA,iBAAiB,EAAjBA;AAFG,OAAP;AAIH;;AAED,QAAMU,eAAe,GACjBT,SAAS,CAACU,MAAV,KAAqB,CAArB,GACM,EADN,GAEMV,SAAS,CAACW,IAAV,GAAiBC,MAAjB,CAAwB,EAAxB,EAA4BC,IAA5B,CAAiCzB,kBAAjC,CAHV;AAKA,QAAM0B,YAAY,GAAGX,oBAAoB,GACnCjB,kBAAkB,GAAGuB,eADc,GAEnCA,eAFN;AAIA,WAAO;AACHD,MAAAA,eAAe,EAAE,IADd;AAEHO,MAAAA,QAAQ,EAAED,YAFP;AAGHP,MAAAA,YAAY,EAAZA,YAHG;AAIHR,MAAAA,iBAAiB,EAAjBA;AAJG,KAAP;AAMH,GArCL,EAsCKiB,OAtCL;AAAA,GAwCKC,MAxCL,CAwCY,UAACC,MAAD;AACJ,QAAI,CAACA,MAAM,CAACV,eAAZ,EAA6B;AACzB,aAAO,IAAP;AACH;;AAED,QAAQO,QAAR,GAAmCG,MAAnC,CAAQH,QAAR;AAAA,QAAkBR,YAAlB,GAAmCW,MAAnC,CAAkBX,YAAlB;AAEA,QAAMY,OAAO,GAAMJ,QAAN,SAAkBR,YAA/B;;AAEA,QAAIb,qBAAqB,CAAC0B,GAAtB,CAA0BD,OAA1B,CAAJ,EAAwC;AACpC,aAAO,KAAP;AACH;;AAEDzB,IAAAA,qBAAqB,CAAC2B,GAAtB,CAA0BF,OAA1B;AAEA1B,IAAAA,2BAA2B,CAACc,YAAD,CAA3B,CAA0Ce,OAA1C,CAAkD,UAACC,KAAD;AAAA,aAC9C7B,qBAAqB,CAAC2B,GAAtB,CAA6BN,QAA7B,SAAyCQ,KAAzC,CAD8C;AAAA,KAAlD;AAIA,WAAO,IAAP;AACH,GA5DL,EA6DKP,OA7DL,GA8DKlB,GA9DL,CA8DS,UAACoB,MAAD;AAAA,WAAYA,MAAM,CAACnB,iBAAnB;AAAA,GA9DT,EA+DKc,IA/DL,CA+DU,GA/DV,CADJ;AAkEH;;;;"}
@@ -5,6 +5,11 @@ export interface Config {
5
5
  * - No cache is used for values <= 0
6
6
  */
7
7
  cacheSize: number;
8
+ /**
9
+ * Prefix added to Tailwind-generated classes
10
+ * @see https://tailwindcss.com/docs/configuration#prefix
11
+ */
12
+ prefix?: string;
8
13
  /**
9
14
  * Theme scales used in classGroups.
10
15
  * The keys are the same as in the Tailwind config but the values are sometimes defined more broadly.
@@ -108,12 +108,14 @@ function getGroupIdForArbitraryProperty(className) {
108
108
 
109
109
 
110
110
  function createClassMap(config) {
111
- var theme = config.theme;
111
+ var theme = config.theme,
112
+ prefix = config.prefix;
112
113
  var classMap = {
113
114
  nextPart: {},
114
115
  validators: []
115
116
  };
116
- Object.entries(config.classGroups).forEach(function (_ref2) {
117
+ var prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);
118
+ prefixedClassGroupEntries.forEach(function (_ref2) {
117
119
  var classGroupId = _ref2[0],
118
120
  classGroup = _ref2[1];
119
121
  processClassesRecursively(classGroup, classMap, classGroupId, theme);
@@ -169,6 +171,33 @@ function isThemeGetter(func) {
169
171
  return func.isThemeGetter;
170
172
  }
171
173
 
174
+ function getPrefixedClassGroupEntries(classGroupEntries, prefix) {
175
+ if (!prefix) {
176
+ return classGroupEntries;
177
+ }
178
+
179
+ return classGroupEntries.map(function (_ref4) {
180
+ var classGroupId = _ref4[0],
181
+ classGroup = _ref4[1];
182
+ var prefixedClassGroup = classGroup.map(function (classDefinition) {
183
+ if (typeof classDefinition === 'string') {
184
+ return prefix + classDefinition;
185
+ }
186
+
187
+ if (typeof classDefinition === 'object') {
188
+ return Object.fromEntries(Object.entries(classDefinition).map(function (_ref5) {
189
+ var key = _ref5[0],
190
+ value = _ref5[1];
191
+ return [prefix + key, value];
192
+ }));
193
+ }
194
+
195
+ return classDefinition;
196
+ });
197
+ return [classGroupId, prefixedClassGroup];
198
+ });
199
+ }
200
+
172
201
  function createConfigUtils(config) {
173
202
  return _extends({
174
203
  cache: getLruCache(config.cacheSize)
@@ -179,14 +208,14 @@ var SPLIT_CLASSES_REGEX = /\s+/;
179
208
  var IMPORTANT_MODIFIER = '!'; // Regex is needed so we don't match against colons in labels for arbitrary values like `text-[color:var(--mystery-var)]`
180
209
  // I'd prefer to use a negative lookbehind for all supported labels, but lookbheinds don't have good browser support yet. More info: https://caniuse.com/js-regexp-lookbehind
181
210
 
182
- var PREFIX_SEPARATOR_REGEX = /:(?![^[]*\])/;
183
- var PREFIX_SEPARATOR = ':';
211
+ var MODIFIER_SEPARATOR_REGEX = /:(?![^[]*\])/;
212
+ var MODIFIER_SEPARATOR = ':';
184
213
  function mergeClassList(classList, configUtils) {
185
214
  var getClassGroupId = configUtils.getClassGroupId,
186
215
  getConflictingClassGroupIds = configUtils.getConflictingClassGroupIds;
187
216
  /**
188
217
  * Set of classGroupIds in following format:
189
- * `{importantModifier}{variantPrefixes}{classGroupId}`
218
+ * `{importantModifier}{variantModifiers}{classGroupId}`
190
219
  * @example 'float'
191
220
  * @example 'hover:focus:bg-color'
192
221
  * @example '!md:pr'
@@ -194,8 +223,8 @@ function mergeClassList(classList, configUtils) {
194
223
 
195
224
  var classGroupsInConflict = new Set();
196
225
  return classList.trim().split(SPLIT_CLASSES_REGEX).map(function (originalClassName) {
197
- var prefixes = originalClassName.split(PREFIX_SEPARATOR_REGEX);
198
- var classNameWithImportantModifier = prefixes.pop();
226
+ var modifiers = originalClassName.split(MODIFIER_SEPARATOR_REGEX);
227
+ var classNameWithImportantModifier = modifiers.pop();
199
228
  var hasImportantModifier = classNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
200
229
  var className = hasImportantModifier ? classNameWithImportantModifier.substring(1) : classNameWithImportantModifier;
201
230
  var classGroupId = getClassGroupId(className);
@@ -207,11 +236,11 @@ function mergeClassList(classList, configUtils) {
207
236
  };
208
237
  }
209
238
 
210
- var variantPrefix = prefixes.length === 0 ? '' : prefixes.sort().concat('').join(PREFIX_SEPARATOR);
211
- var fullPrefix = hasImportantModifier ? IMPORTANT_MODIFIER + variantPrefix : variantPrefix;
239
+ var variantModifier = modifiers.length === 0 ? '' : modifiers.sort().concat('').join(MODIFIER_SEPARATOR);
240
+ var fullModifier = hasImportantModifier ? IMPORTANT_MODIFIER + variantModifier : variantModifier;
212
241
  return {
213
242
  isTailwindClass: true,
214
- prefix: fullPrefix,
243
+ modifier: fullModifier,
215
244
  classGroupId: classGroupId,
216
245
  originalClassName: originalClassName
217
246
  };
@@ -221,9 +250,9 @@ function mergeClassList(classList, configUtils) {
221
250
  return true;
222
251
  }
223
252
 
224
- var prefix = parsed.prefix,
253
+ var modifier = parsed.modifier,
225
254
  classGroupId = parsed.classGroupId;
226
- var classId = prefix + ":" + classGroupId;
255
+ var classId = modifier + ":" + classGroupId;
227
256
 
228
257
  if (classGroupsInConflict.has(classId)) {
229
258
  return false;
@@ -231,7 +260,7 @@ function mergeClassList(classList, configUtils) {
231
260
 
232
261
  classGroupsInConflict.add(classId);
233
262
  getConflictingClassGroupIds(classGroupId).forEach(function (group) {
234
- return classGroupsInConflict.add(prefix + ":" + group);
263
+ return classGroupsInConflict.add(modifier + ":" + group);
235
264
  });
236
265
  return true;
237
266
  }).reverse().map(function (parsed) {