clases 1.1.4 → 1.1.5
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/dist/index.cjs +14 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +37 -9
package/dist/index.cjs
CHANGED
|
@@ -18,11 +18,21 @@ function createCl(...plugins) {
|
|
|
18
18
|
if (typeof value === "object") {
|
|
19
19
|
return Object.entries(value).map(([nestedKey, nestedValue]) => {
|
|
20
20
|
const isRegistered = registry[nestedKey] !== void 0;
|
|
21
|
-
|
|
21
|
+
let nextKey;
|
|
22
|
+
if (key === "" || key === "base") {
|
|
23
|
+
nextKey = nestedKey;
|
|
24
|
+
} else if (isRegistered) {
|
|
25
|
+
nextKey = `${key}:${nestedKey}`;
|
|
26
|
+
} else {
|
|
27
|
+
nextKey = key;
|
|
28
|
+
}
|
|
22
29
|
return process(nextKey, nestedValue);
|
|
23
30
|
}).join(" ");
|
|
24
31
|
}
|
|
25
|
-
const resolvedPrefix = key.split(":").map((part) =>
|
|
32
|
+
const resolvedPrefix = key.split(":").map((part) => {
|
|
33
|
+
if (part === "base") return null;
|
|
34
|
+
return registry[part] || null;
|
|
35
|
+
}).filter(Boolean).join(":");
|
|
26
36
|
if (typeof value === "string") {
|
|
27
37
|
return value.split(/[,\s\n]+/).filter(Boolean).map((cls) => !resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`).join(" ");
|
|
28
38
|
}
|
|
@@ -33,7 +43,8 @@ function createCl(...plugins) {
|
|
|
33
43
|
if (input !== null && typeof input === "object" && !Array.isArray(input)) {
|
|
34
44
|
return Object.entries(input).map(([k, v]) => {
|
|
35
45
|
if (v === true) return k;
|
|
36
|
-
|
|
46
|
+
if (registry[k] || k === "base") return process(k, v);
|
|
47
|
+
return process("base", v);
|
|
37
48
|
}).join(" ");
|
|
38
49
|
}
|
|
39
50
|
return input;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["twMerge","clsx"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["twMerge","clsx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { twMerge } from 'tailwind-merge';\r\nimport clsx, { type ClassValue } from 'clsx';\r\n\r\n/**\r\n * Motor de prefijos con soporte para plugins, lógica transparente y limpieza via twMerge.\r\n */\r\nexport function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins) {\r\n const registry: Record<string, string> = Object.assign({}, ...plugins);\r\n\r\n const process = (key: string, value: any): string => {\r\n if (!value) return '';\r\n\r\n // 1. Manejo de Arrays\r\n if (Array.isArray(value)) {\r\n return value\r\n .map((v) => process(key, v))\r\n .filter(Boolean)\r\n .join(' ');\r\n }\r\n\r\n // 2. Manejo de Objetos (Nesting y Lógica)\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .map(([nestedKey, nestedValue]) => {\r\n const isRegistered = registry[nestedKey] !== undefined;\r\n\r\n let nextKey: string;\r\n if (key === '' || key === 'base') {\r\n // Si no hay prefijo previo, el hijo inicia la cadena\r\n nextKey = nestedKey;\r\n } else if (isRegistered) {\r\n // Si el hijo es un prefijo registrado, se concatena (ej: md:hover)\r\n nextKey = `${key}:${nestedKey}`;\r\n } else {\r\n // Si el hijo es lógica transparente (ej: variants), heredamos el prefijo padre\r\n nextKey = key;\r\n }\r\n\r\n return process(nextKey, nestedValue);\r\n })\r\n .join(' ');\r\n }\r\n\r\n // 3. Resolución Final de Prefijos\r\n const resolvedPrefix = key\r\n .split(':')\r\n .map((part) => {\r\n if (part === 'base') return null; // 'base' nunca se imprime\r\n return registry[part] || null; // Solo lo registrado sobrevive\r\n })\r\n .filter(Boolean)\r\n .join(':');\r\n\r\n // 4. Aplicación de Clases\r\n if (typeof value === 'string') {\r\n return value\r\n .split(/[,\\s\\n]+/)\r\n .filter(Boolean)\r\n .map((cls) => (!resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`))\r\n .join(' ');\r\n }\r\n return '';\r\n };\r\n\r\n /**\r\n * Función resultante (tw)\r\n */\r\n return (...inputs: ClassValue[]) => {\r\n const processed = inputs.map((input) => {\r\n if (input !== null && typeof input === 'object' && !Array.isArray(input)) {\r\n return Object.entries(input)\r\n .map(([k, v]) => {\r\n // Soporte para booleanos nativos de clsx: { 'clase': true }\r\n if (v === true) return k;\r\n\r\n // Si la llave es un prefijo registrado (md, hover, ui), empezamos proceso\r\n if (registry[k] || k === 'base') return process(k, v);\r\n\r\n // Si no es prefijo (ej: variantes dinámicas), procesamos el interior como base\r\n return process('base', v);\r\n })\r\n .join(' ');\r\n }\r\n return input;\r\n });\r\n\r\n // Resolvemos con clsx y limpiamos conflictos con twMerge\r\n return twMerge(clsx(processed));\r\n };\r\n}\r\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { ClassValue } from 'clsx';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Motor de prefijos con soporte para plugins, lógica transparente y limpieza via twMerge.
|
|
5
|
+
*/
|
|
6
|
+
declare function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins): (...inputs: ClassValue[]) => string;
|
|
2
7
|
|
|
3
8
|
export { createCl };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import { ClassValue } from 'clsx';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Motor de prefijos con soporte para plugins, lógica transparente y limpieza via twMerge.
|
|
5
|
+
*/
|
|
6
|
+
declare function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins): (...inputs: ClassValue[]) => string;
|
|
2
7
|
|
|
3
8
|
export { createCl };
|
package/dist/index.js
CHANGED
|
@@ -12,11 +12,21 @@ function createCl(...plugins) {
|
|
|
12
12
|
if (typeof value === "object") {
|
|
13
13
|
return Object.entries(value).map(([nestedKey, nestedValue]) => {
|
|
14
14
|
const isRegistered = registry[nestedKey] !== void 0;
|
|
15
|
-
|
|
15
|
+
let nextKey;
|
|
16
|
+
if (key === "" || key === "base") {
|
|
17
|
+
nextKey = nestedKey;
|
|
18
|
+
} else if (isRegistered) {
|
|
19
|
+
nextKey = `${key}:${nestedKey}`;
|
|
20
|
+
} else {
|
|
21
|
+
nextKey = key;
|
|
22
|
+
}
|
|
16
23
|
return process(nextKey, nestedValue);
|
|
17
24
|
}).join(" ");
|
|
18
25
|
}
|
|
19
|
-
const resolvedPrefix = key.split(":").map((part) =>
|
|
26
|
+
const resolvedPrefix = key.split(":").map((part) => {
|
|
27
|
+
if (part === "base") return null;
|
|
28
|
+
return registry[part] || null;
|
|
29
|
+
}).filter(Boolean).join(":");
|
|
20
30
|
if (typeof value === "string") {
|
|
21
31
|
return value.split(/[,\s\n]+/).filter(Boolean).map((cls) => !resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`).join(" ");
|
|
22
32
|
}
|
|
@@ -27,7 +37,8 @@ function createCl(...plugins) {
|
|
|
27
37
|
if (input !== null && typeof input === "object" && !Array.isArray(input)) {
|
|
28
38
|
return Object.entries(input).map(([k, v]) => {
|
|
29
39
|
if (v === true) return k;
|
|
30
|
-
|
|
40
|
+
if (registry[k] || k === "base") return process(k, v);
|
|
41
|
+
return process("base", v);
|
|
31
42
|
}).join(" ");
|
|
32
43
|
}
|
|
33
44
|
return input;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import { twMerge } from 'tailwind-merge';\r\nimport clsx, { type ClassValue } from 'clsx';\r\n\r\n/**\r\n * Motor de prefijos con soporte para plugins, lógica transparente y limpieza via twMerge.\r\n */\r\nexport function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins) {\r\n const registry: Record<string, string> = Object.assign({}, ...plugins);\r\n\r\n const process = (key: string, value: any): string => {\r\n if (!value) return '';\r\n\r\n // 1. Manejo de Arrays\r\n if (Array.isArray(value)) {\r\n return value\r\n .map((v) => process(key, v))\r\n .filter(Boolean)\r\n .join(' ');\r\n }\r\n\r\n // 2. Manejo de Objetos (Nesting y Lógica)\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .map(([nestedKey, nestedValue]) => {\r\n const isRegistered = registry[nestedKey] !== undefined;\r\n\r\n let nextKey: string;\r\n if (key === '' || key === 'base') {\r\n // Si no hay prefijo previo, el hijo inicia la cadena\r\n nextKey = nestedKey;\r\n } else if (isRegistered) {\r\n // Si el hijo es un prefijo registrado, se concatena (ej: md:hover)\r\n nextKey = `${key}:${nestedKey}`;\r\n } else {\r\n // Si el hijo es lógica transparente (ej: variants), heredamos el prefijo padre\r\n nextKey = key;\r\n }\r\n\r\n return process(nextKey, nestedValue);\r\n })\r\n .join(' ');\r\n }\r\n\r\n // 3. Resolución Final de Prefijos\r\n const resolvedPrefix = key\r\n .split(':')\r\n .map((part) => {\r\n if (part === 'base') return null; // 'base' nunca se imprime\r\n return registry[part] || null; // Solo lo registrado sobrevive\r\n })\r\n .filter(Boolean)\r\n .join(':');\r\n\r\n // 4. Aplicación de Clases\r\n if (typeof value === 'string') {\r\n return value\r\n .split(/[,\\s\\n]+/)\r\n .filter(Boolean)\r\n .map((cls) => (!resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`))\r\n .join(' ');\r\n }\r\n return '';\r\n };\r\n\r\n /**\r\n * Función resultante (tw)\r\n */\r\n return (...inputs: ClassValue[]) => {\r\n const processed = inputs.map((input) => {\r\n if (input !== null && typeof input === 'object' && !Array.isArray(input)) {\r\n return Object.entries(input)\r\n .map(([k, v]) => {\r\n // Soporte para booleanos nativos de clsx: { 'clase': true }\r\n if (v === true) return k;\r\n\r\n // Si la llave es un prefijo registrado (md, hover, ui), empezamos proceso\r\n if (registry[k] || k === 'base') return process(k, v);\r\n\r\n // Si no es prefijo (ej: variantes dinámicas), procesamos el interior como base\r\n return process('base', v);\r\n })\r\n .join(' ');\r\n }\r\n return input;\r\n });\r\n\r\n // Resolvemos con clsx y limpiamos conflictos con twMerge\r\n return twMerge(clsx(processed));\r\n };\r\n}\r\n"]}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { twMerge } from 'tailwind-merge';
|
|
2
|
-
import clsx from 'clsx';
|
|
2
|
+
import clsx, { type ClassValue } from 'clsx';
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* Motor de prefijos con soporte para plugins, lógica transparente y limpieza via twMerge.
|
|
6
|
+
*/
|
|
4
7
|
export function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins) {
|
|
5
8
|
const registry: Record<string, string> = Object.assign({}, ...plugins);
|
|
6
9
|
|
|
7
10
|
const process = (key: string, value: any): string => {
|
|
8
11
|
if (!value) return '';
|
|
9
12
|
|
|
13
|
+
// 1. Manejo de Arrays
|
|
10
14
|
if (Array.isArray(value)) {
|
|
11
15
|
return value
|
|
12
16
|
.map((v) => process(key, v))
|
|
@@ -14,26 +18,40 @@ export function createCl<TPlugins extends Record<string, string>[]>(...plugins:
|
|
|
14
18
|
.join(' ');
|
|
15
19
|
}
|
|
16
20
|
|
|
21
|
+
// 2. Manejo de Objetos (Nesting y Lógica)
|
|
17
22
|
if (typeof value === 'object') {
|
|
18
23
|
return Object.entries(value)
|
|
19
24
|
.map(([nestedKey, nestedValue]) => {
|
|
20
25
|
const isRegistered = registry[nestedKey] !== undefined;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
26
|
+
|
|
27
|
+
let nextKey: string;
|
|
28
|
+
if (key === '' || key === 'base') {
|
|
29
|
+
// Si no hay prefijo previo, el hijo inicia la cadena
|
|
30
|
+
nextKey = nestedKey;
|
|
31
|
+
} else if (isRegistered) {
|
|
32
|
+
// Si el hijo es un prefijo registrado, se concatena (ej: md:hover)
|
|
33
|
+
nextKey = `${key}:${nestedKey}`;
|
|
34
|
+
} else {
|
|
35
|
+
// Si el hijo es lógica transparente (ej: variants), heredamos el prefijo padre
|
|
36
|
+
nextKey = key;
|
|
37
|
+
}
|
|
24
38
|
|
|
25
39
|
return process(nextKey, nestedValue);
|
|
26
40
|
})
|
|
27
41
|
.join(' ');
|
|
28
42
|
}
|
|
29
43
|
|
|
30
|
-
//
|
|
44
|
+
// 3. Resolución Final de Prefijos
|
|
31
45
|
const resolvedPrefix = key
|
|
32
46
|
.split(':')
|
|
33
|
-
.map((part) =>
|
|
47
|
+
.map((part) => {
|
|
48
|
+
if (part === 'base') return null; // 'base' nunca se imprime
|
|
49
|
+
return registry[part] || null; // Solo lo registrado sobrevive
|
|
50
|
+
})
|
|
34
51
|
.filter(Boolean)
|
|
35
52
|
.join(':');
|
|
36
53
|
|
|
54
|
+
// 4. Aplicación de Clases
|
|
37
55
|
if (typeof value === 'string') {
|
|
38
56
|
return value
|
|
39
57
|
.split(/[,\s\n]+/)
|
|
@@ -44,19 +62,29 @@ export function createCl<TPlugins extends Record<string, string>[]>(...plugins:
|
|
|
44
62
|
return '';
|
|
45
63
|
};
|
|
46
64
|
|
|
47
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Función resultante (tw)
|
|
67
|
+
*/
|
|
68
|
+
return (...inputs: ClassValue[]) => {
|
|
48
69
|
const processed = inputs.map((input) => {
|
|
49
70
|
if (input !== null && typeof input === 'object' && !Array.isArray(input)) {
|
|
50
71
|
return Object.entries(input)
|
|
51
72
|
.map(([k, v]) => {
|
|
73
|
+
// Soporte para booleanos nativos de clsx: { 'clase': true }
|
|
52
74
|
if (v === true) return k;
|
|
53
|
-
|
|
54
|
-
|
|
75
|
+
|
|
76
|
+
// Si la llave es un prefijo registrado (md, hover, ui), empezamos proceso
|
|
77
|
+
if (registry[k] || k === 'base') return process(k, v);
|
|
78
|
+
|
|
79
|
+
// Si no es prefijo (ej: variantes dinámicas), procesamos el interior como base
|
|
80
|
+
return process('base', v);
|
|
55
81
|
})
|
|
56
82
|
.join(' ');
|
|
57
83
|
}
|
|
58
84
|
return input;
|
|
59
85
|
});
|
|
86
|
+
|
|
87
|
+
// Resolvemos con clsx y limpiamos conflictos con twMerge
|
|
60
88
|
return twMerge(clsx(processed));
|
|
61
89
|
};
|
|
62
90
|
}
|