clases 1.1.6 → 1.1.8

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 CHANGED
@@ -10,27 +10,34 @@ var clsx__default = /*#__PURE__*/_interopDefault(clsx);
10
10
  // src/index.ts
11
11
  function createCl(...plugins) {
12
12
  const registry = Object.assign({}, ...plugins);
13
- const process = (key, value) => {
13
+ const getPrefix = (key) => {
14
+ return key.split(":").map((part) => registry[part]).filter(Boolean).join(":");
15
+ };
16
+ const process = (accumulatedKey, value) => {
14
17
  if (!value) return "";
15
18
  if (Array.isArray(value)) {
16
- return value.map((v) => process(key, v)).filter(Boolean).join(" ");
19
+ return value.map((v) => process(accumulatedKey, v)).filter(Boolean).join(" ");
17
20
  }
18
21
  if (typeof value === "object") {
19
- return Object.entries(value).map(([nestedKey, nestedValue]) => {
20
- const isPrefix = registry[nestedKey] !== void 0;
21
- if (isPrefix) {
22
- const nextKey = key ? `${key}:${nestedKey}` : nestedKey;
23
- return process(nextKey, nestedValue);
22
+ return Object.entries(value).map(([k, v]) => {
23
+ if (!v) return "";
24
+ if (registry[k] !== void 0) {
25
+ const nextKey = accumulatedKey ? `${accumulatedKey}:${k}` : k;
26
+ return process(nextKey, v);
24
27
  }
25
- return nestedValue ? process(key, nestedKey) : "";
28
+ return applyPrefix(accumulatedKey, k);
26
29
  }).join(" ");
27
30
  }
28
- const resolvedPrefix = key.split(":").map((part) => registry[part] || null).filter(Boolean).join(":");
29
31
  if (typeof value === "string") {
30
- return value.split(/[,\s\n]+/).filter(Boolean).map((cls) => !resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`).join(" ");
32
+ return applyPrefix(accumulatedKey, value);
31
33
  }
32
34
  return "";
33
35
  };
36
+ const applyPrefix = (key, classString) => {
37
+ const resolved = getPrefix(key);
38
+ if (!resolved) return classString;
39
+ return classString.split(/[,\s\n]+/).filter(Boolean).map((cls) => `${resolved}:${cls}`).join(" ");
40
+ };
34
41
  return (...inputs) => {
35
42
  const processed = inputs.map((input) => process("", input));
36
43
  return tailwindMerge.twMerge(clsx__default.default(processed));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["twMerge","clsx"],"mappings":";;;;;;;;;;AAGO,SAAS,YAAuD,OAAA,EAAmB;AACtF,EAAA,MAAM,WAAmC,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,GAAG,OAAO,CAAA;AAErE,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,EAAa,KAAA,KAAuB;AACjD,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAGnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CACF,GAAA,CAAI,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAC,CAAA,CAC1B,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACtB,IAAI,CAAC,CAAC,SAAA,EAAW,WAAW,CAAA,KAAM;AAC/B,QAAA,MAAM,QAAA,GAAW,QAAA,CAAS,SAAS,CAAA,KAAM,MAAA;AAEzC,QAAA,IAAI,QAAA,EAAU;AACV,UAAA,MAAM,UAAU,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,SAAA;AAC9C,UAAA,OAAO,OAAA,CAAQ,SAAS,WAAW,CAAA;AAAA,QACvC;AAGA,QAAA,OAAO,WAAA,GAAc,OAAA,CAAQ,GAAA,EAAK,SAAS,CAAA,GAAI,EAAA;AAAA,MACnD,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,MAAM,iBAAiB,GAAA,CAClB,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI,KAAK,IAAI,CAAA,CACpC,OAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEb,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,KAAA,CACF,MAAM,UAAU,CAAA,CAChB,OAAO,OAAO,CAAA,CACd,IAAI,CAAC,GAAA,KAAS,CAAC,cAAA,GAAiB,GAAA,GAAM,GAAG,cAAc,CAAA,CAAA,EAAI,GAAG,CAAA,CAAG,CAAA,CACjE,KAAK,GAAG,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,EAAA;AAAA,EACX,CAAA;AAEA,EAAA,OAAO,IAAI,MAAA,KAAyB;AAEhC,IAAA,MAAM,SAAA,GAAY,OAAO,GAAA,CAAI,CAAC,UAAU,OAAA,CAAQ,EAAA,EAAI,KAAK,CAAC,CAAA;AAC1D,IAAA,OAAOA,qBAAA,CAAQC,qBAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EAClC,CAAA;AACJ","file":"index.cjs","sourcesContent":["import { twMerge } from 'tailwind-merge';\r\nimport clsx, { type ClassValue } from 'clsx';\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. Soporte Multilínea (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. Objetos de Prefijos\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .map(([nestedKey, nestedValue]) => {\r\n const isPrefix = registry[nestedKey] !== undefined;\r\n\r\n if (isPrefix) {\r\n const nextKey = key ? `${key}:${nestedKey}` : nestedKey;\r\n return process(nextKey, nestedValue);\r\n }\r\n\r\n // Lógica estándar: si no es prefijo, es una clase condicional\r\n return nestedValue ? process(key, nestedKey) : '';\r\n })\r\n .join(' ');\r\n }\r\n\r\n // 3. Resolución y Aplicación\r\n const resolvedPrefix = key\r\n .split(':')\r\n .map((part) => registry[part] || null)\r\n .filter(Boolean)\r\n .join(':');\r\n\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 return (...inputs: ClassValue[]) => {\r\n // Procesamos uno a uno para capturar objetos de prefijos antes de que clsx los aplane\r\n const processed = inputs.map((input) => process('', input));\r\n return twMerge(clsx(processed));\r\n };\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["twMerge","clsx"],"mappings":";;;;;;;;;;AAGO,SAAS,YAAuD,OAAA,EAAmB;AACtF,EAAA,MAAM,WAAmC,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,GAAG,OAAO,CAAA;AAGrE,EAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAgB;AAC/B,IAAA,OAAO,GAAA,CACF,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI,CAAC,CAAA,CAC5B,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,cAAA,EAAwB,KAAA,KAAuB;AAC5D,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAGnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CACF,GAAA,CAAI,CAAC,CAAA,KAAM,OAAA,CAAQ,cAAA,EAAgB,CAAC,CAAC,CAAA,CACrC,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACtB,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AACb,QAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AAGf,QAAA,IAAI,QAAA,CAAS,CAAC,CAAA,KAAM,MAAA,EAAW;AAC3B,UAAA,MAAM,UAAU,cAAA,GAAiB,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,GAAK,CAAA;AAC5D,UAAA,OAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,QAC7B;AAIA,QAAA,OAAO,WAAA,CAAY,gBAAgB,CAAC,CAAA;AAAA,MACxC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,WAAA,CAAY,gBAAgB,KAAK,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,EAAA;AAAA,EACX,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAa,WAAA,KAAgC;AAC9D,IAAA,MAAM,QAAA,GAAW,UAAU,GAAG,CAAA;AAC9B,IAAA,IAAI,CAAC,UAAU,OAAO,WAAA;AAEtB,IAAA,OAAO,YACF,KAAA,CAAM,UAAU,CAAA,CAChB,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAG,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA,CACjC,KAAK,GAAG,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,OAAO,IAAI,MAAA,KAAyB;AAChC,IAAA,MAAM,SAAA,GAAY,OAAO,GAAA,CAAI,CAAC,UAAU,OAAA,CAAQ,EAAA,EAAI,KAAK,CAAC,CAAA;AAC1D,IAAA,OAAOA,qBAAA,CAAQC,qBAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EAClC,CAAA;AACJ","file":"index.cjs","sourcesContent":["import { twMerge } from 'tailwind-merge';\r\nimport clsx, { type ClassValue } from 'clsx';\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 // Función auxiliar para obtener el prefijo real de Tailwind\r\n const getPrefix = (key: string) => {\r\n return key\r\n .split(':')\r\n .map((part) => registry[part])\r\n .filter(Boolean)\r\n .join(':');\r\n };\r\n\r\n const process = (accumulatedKey: string, value: any): string => {\r\n if (!value) return '';\r\n\r\n // 1. Arrays: Multilínea\r\n if (Array.isArray(value)) {\r\n return value\r\n .map((v) => process(accumulatedKey, v))\r\n .filter(Boolean)\r\n .join(' ');\r\n }\r\n\r\n // 2. Objetos\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .map(([k, v]) => {\r\n if (!v) return '';\r\n\r\n // Si la llave es un prefijo (md, hover), profundizamos\r\n if (registry[k] !== undefined) {\r\n const nextKey = accumulatedKey ? `${accumulatedKey}:${k}` : k;\r\n return process(nextKey, v);\r\n }\r\n\r\n // Si NO es prefijo, tratamos la llave 'k' como la clase final\r\n // Pero le aplicamos el prefijo acumulado hasta ahora\r\n return applyPrefix(accumulatedKey, k);\r\n })\r\n .join(' ');\r\n }\r\n\r\n // 3. Strings directos: Aplicamos el prefijo acumulado a cada palabra\r\n if (typeof value === 'string') {\r\n return applyPrefix(accumulatedKey, value);\r\n }\r\n\r\n return '';\r\n };\r\n\r\n // Función para aplicar el prefijo resuelto a un string de clases\r\n const applyPrefix = (key: string, classString: string): string => {\r\n const resolved = getPrefix(key);\r\n if (!resolved) return classString;\r\n\r\n return classString\r\n .split(/[,\\s\\n]+/)\r\n .filter(Boolean)\r\n .map((cls) => `${resolved}:${cls}`)\r\n .join(' ');\r\n };\r\n\r\n return (...inputs: ClassValue[]) => {\r\n const processed = inputs.map((input) => process('', input));\r\n return twMerge(clsx(processed));\r\n };\r\n}\r\n"]}
package/dist/index.js CHANGED
@@ -4,27 +4,34 @@ import clsx from 'clsx';
4
4
  // src/index.ts
5
5
  function createCl(...plugins) {
6
6
  const registry = Object.assign({}, ...plugins);
7
- const process = (key, value) => {
7
+ const getPrefix = (key) => {
8
+ return key.split(":").map((part) => registry[part]).filter(Boolean).join(":");
9
+ };
10
+ const process = (accumulatedKey, value) => {
8
11
  if (!value) return "";
9
12
  if (Array.isArray(value)) {
10
- return value.map((v) => process(key, v)).filter(Boolean).join(" ");
13
+ return value.map((v) => process(accumulatedKey, v)).filter(Boolean).join(" ");
11
14
  }
12
15
  if (typeof value === "object") {
13
- return Object.entries(value).map(([nestedKey, nestedValue]) => {
14
- const isPrefix = registry[nestedKey] !== void 0;
15
- if (isPrefix) {
16
- const nextKey = key ? `${key}:${nestedKey}` : nestedKey;
17
- return process(nextKey, nestedValue);
16
+ return Object.entries(value).map(([k, v]) => {
17
+ if (!v) return "";
18
+ if (registry[k] !== void 0) {
19
+ const nextKey = accumulatedKey ? `${accumulatedKey}:${k}` : k;
20
+ return process(nextKey, v);
18
21
  }
19
- return nestedValue ? process(key, nestedKey) : "";
22
+ return applyPrefix(accumulatedKey, k);
20
23
  }).join(" ");
21
24
  }
22
- const resolvedPrefix = key.split(":").map((part) => registry[part] || null).filter(Boolean).join(":");
23
25
  if (typeof value === "string") {
24
- return value.split(/[,\s\n]+/).filter(Boolean).map((cls) => !resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`).join(" ");
26
+ return applyPrefix(accumulatedKey, value);
25
27
  }
26
28
  return "";
27
29
  };
30
+ const applyPrefix = (key, classString) => {
31
+ const resolved = getPrefix(key);
32
+ if (!resolved) return classString;
33
+ return classString.split(/[,\s\n]+/).filter(Boolean).map((cls) => `${resolved}:${cls}`).join(" ");
34
+ };
28
35
  return (...inputs) => {
29
36
  const processed = inputs.map((input) => process("", input));
30
37
  return twMerge(clsx(processed));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;AAGO,SAAS,YAAuD,OAAA,EAAmB;AACtF,EAAA,MAAM,WAAmC,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,GAAG,OAAO,CAAA;AAErE,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,EAAa,KAAA,KAAuB;AACjD,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAGnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CACF,GAAA,CAAI,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAC,CAAA,CAC1B,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACtB,IAAI,CAAC,CAAC,SAAA,EAAW,WAAW,CAAA,KAAM;AAC/B,QAAA,MAAM,QAAA,GAAW,QAAA,CAAS,SAAS,CAAA,KAAM,MAAA;AAEzC,QAAA,IAAI,QAAA,EAAU;AACV,UAAA,MAAM,UAAU,GAAA,GAAM,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,SAAA;AAC9C,UAAA,OAAO,OAAA,CAAQ,SAAS,WAAW,CAAA;AAAA,QACvC;AAGA,QAAA,OAAO,WAAA,GAAc,OAAA,CAAQ,GAAA,EAAK,SAAS,CAAA,GAAI,EAAA;AAAA,MACnD,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,MAAM,iBAAiB,GAAA,CAClB,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI,KAAK,IAAI,CAAA,CACpC,OAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEb,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,KAAA,CACF,MAAM,UAAU,CAAA,CAChB,OAAO,OAAO,CAAA,CACd,IAAI,CAAC,GAAA,KAAS,CAAC,cAAA,GAAiB,GAAA,GAAM,GAAG,cAAc,CAAA,CAAA,EAAI,GAAG,CAAA,CAAG,CAAA,CACjE,KAAK,GAAG,CAAA;AAAA,IACjB;AACA,IAAA,OAAO,EAAA;AAAA,EACX,CAAA;AAEA,EAAA,OAAO,IAAI,MAAA,KAAyB;AAEhC,IAAA,MAAM,SAAA,GAAY,OAAO,GAAA,CAAI,CAAC,UAAU,OAAA,CAAQ,EAAA,EAAI,KAAK,CAAC,CAAA;AAC1D,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EAClC,CAAA;AACJ","file":"index.js","sourcesContent":["import { twMerge } from 'tailwind-merge';\r\nimport clsx, { type ClassValue } from 'clsx';\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. Soporte Multilínea (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. Objetos de Prefijos\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .map(([nestedKey, nestedValue]) => {\r\n const isPrefix = registry[nestedKey] !== undefined;\r\n\r\n if (isPrefix) {\r\n const nextKey = key ? `${key}:${nestedKey}` : nestedKey;\r\n return process(nextKey, nestedValue);\r\n }\r\n\r\n // Lógica estándar: si no es prefijo, es una clase condicional\r\n return nestedValue ? process(key, nestedKey) : '';\r\n })\r\n .join(' ');\r\n }\r\n\r\n // 3. Resolución y Aplicación\r\n const resolvedPrefix = key\r\n .split(':')\r\n .map((part) => registry[part] || null)\r\n .filter(Boolean)\r\n .join(':');\r\n\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 return (...inputs: ClassValue[]) => {\r\n // Procesamos uno a uno para capturar objetos de prefijos antes de que clsx los aplane\r\n const processed = inputs.map((input) => process('', input));\r\n return twMerge(clsx(processed));\r\n };\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;AAGO,SAAS,YAAuD,OAAA,EAAmB;AACtF,EAAA,MAAM,WAAmC,MAAA,CAAO,MAAA,CAAO,EAAC,EAAG,GAAG,OAAO,CAAA;AAGrE,EAAA,MAAM,SAAA,GAAY,CAAC,GAAA,KAAgB;AAC/B,IAAA,OAAO,GAAA,CACF,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI,CAAC,CAAA,CAC5B,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,cAAA,EAAwB,KAAA,KAAuB;AAC5D,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAGnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CACF,GAAA,CAAI,CAAC,CAAA,KAAM,OAAA,CAAQ,cAAA,EAAgB,CAAC,CAAC,CAAA,CACrC,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACtB,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AACb,QAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AAGf,QAAA,IAAI,QAAA,CAAS,CAAC,CAAA,KAAM,MAAA,EAAW;AAC3B,UAAA,MAAM,UAAU,cAAA,GAAiB,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,GAAK,CAAA;AAC5D,UAAA,OAAO,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,QAC7B;AAIA,QAAA,OAAO,WAAA,CAAY,gBAAgB,CAAC,CAAA;AAAA,MACxC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC3B,MAAA,OAAO,WAAA,CAAY,gBAAgB,KAAK,CAAA;AAAA,IAC5C;AAEA,IAAA,OAAO,EAAA;AAAA,EACX,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,EAAa,WAAA,KAAgC;AAC9D,IAAA,MAAM,QAAA,GAAW,UAAU,GAAG,CAAA;AAC9B,IAAA,IAAI,CAAC,UAAU,OAAO,WAAA;AAEtB,IAAA,OAAO,YACF,KAAA,CAAM,UAAU,CAAA,CAChB,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAG,QAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA,CACjC,KAAK,GAAG,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,OAAO,IAAI,MAAA,KAAyB;AAChC,IAAA,MAAM,SAAA,GAAY,OAAO,GAAA,CAAI,CAAC,UAAU,OAAA,CAAQ,EAAA,EAAI,KAAK,CAAC,CAAA;AAC1D,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,EAClC,CAAA;AACJ","file":"index.js","sourcesContent":["import { twMerge } from 'tailwind-merge';\r\nimport clsx, { type ClassValue } from 'clsx';\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 // Función auxiliar para obtener el prefijo real de Tailwind\r\n const getPrefix = (key: string) => {\r\n return key\r\n .split(':')\r\n .map((part) => registry[part])\r\n .filter(Boolean)\r\n .join(':');\r\n };\r\n\r\n const process = (accumulatedKey: string, value: any): string => {\r\n if (!value) return '';\r\n\r\n // 1. Arrays: Multilínea\r\n if (Array.isArray(value)) {\r\n return value\r\n .map((v) => process(accumulatedKey, v))\r\n .filter(Boolean)\r\n .join(' ');\r\n }\r\n\r\n // 2. Objetos\r\n if (typeof value === 'object') {\r\n return Object.entries(value)\r\n .map(([k, v]) => {\r\n if (!v) return '';\r\n\r\n // Si la llave es un prefijo (md, hover), profundizamos\r\n if (registry[k] !== undefined) {\r\n const nextKey = accumulatedKey ? `${accumulatedKey}:${k}` : k;\r\n return process(nextKey, v);\r\n }\r\n\r\n // Si NO es prefijo, tratamos la llave 'k' como la clase final\r\n // Pero le aplicamos el prefijo acumulado hasta ahora\r\n return applyPrefix(accumulatedKey, k);\r\n })\r\n .join(' ');\r\n }\r\n\r\n // 3. Strings directos: Aplicamos el prefijo acumulado a cada palabra\r\n if (typeof value === 'string') {\r\n return applyPrefix(accumulatedKey, value);\r\n }\r\n\r\n return '';\r\n };\r\n\r\n // Función para aplicar el prefijo resuelto a un string de clases\r\n const applyPrefix = (key: string, classString: string): string => {\r\n const resolved = getPrefix(key);\r\n if (!resolved) return classString;\r\n\r\n return classString\r\n .split(/[,\\s\\n]+/)\r\n .filter(Boolean)\r\n .map((cls) => `${resolved}:${cls}`)\r\n .join(' ');\r\n };\r\n\r\n return (...inputs: ClassValue[]) => {\r\n const processed = inputs.map((input) => process('', input));\r\n return twMerge(clsx(processed));\r\n };\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clases",
3
- "version": "1.1.6",
3
+ "version": "1.1.8",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
package/src/index.ts CHANGED
@@ -4,53 +4,66 @@ import clsx, { type ClassValue } from 'clsx';
4
4
  export function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins) {
5
5
  const registry: Record<string, string> = Object.assign({}, ...plugins);
6
6
 
7
- const process = (key: string, value: any): string => {
7
+ // Función auxiliar para obtener el prefijo real de Tailwind
8
+ const getPrefix = (key: string) => {
9
+ return key
10
+ .split(':')
11
+ .map((part) => registry[part])
12
+ .filter(Boolean)
13
+ .join(':');
14
+ };
15
+
16
+ const process = (accumulatedKey: string, value: any): string => {
8
17
  if (!value) return '';
9
18
 
10
- // 1. Soporte Multilínea (Arrays)
19
+ // 1. Arrays: Multilínea
11
20
  if (Array.isArray(value)) {
12
21
  return value
13
- .map((v) => process(key, v))
22
+ .map((v) => process(accumulatedKey, v))
14
23
  .filter(Boolean)
15
24
  .join(' ');
16
25
  }
17
26
 
18
- // 2. Objetos de Prefijos
27
+ // 2. Objetos
19
28
  if (typeof value === 'object') {
20
29
  return Object.entries(value)
21
- .map(([nestedKey, nestedValue]) => {
22
- const isPrefix = registry[nestedKey] !== undefined;
30
+ .map(([k, v]) => {
31
+ if (!v) return '';
23
32
 
24
- if (isPrefix) {
25
- const nextKey = key ? `${key}:${nestedKey}` : nestedKey;
26
- return process(nextKey, nestedValue);
33
+ // Si la llave es un prefijo (md, hover), profundizamos
34
+ if (registry[k] !== undefined) {
35
+ const nextKey = accumulatedKey ? `${accumulatedKey}:${k}` : k;
36
+ return process(nextKey, v);
27
37
  }
28
38
 
29
- // Lógica estándar: si no es prefijo, es una clase condicional
30
- return nestedValue ? process(key, nestedKey) : '';
39
+ // Si NO es prefijo, tratamos la llave 'k' como la clase final
40
+ // Pero le aplicamos el prefijo acumulado hasta ahora
41
+ return applyPrefix(accumulatedKey, k);
31
42
  })
32
43
  .join(' ');
33
44
  }
34
45
 
35
- // 3. Resolución y Aplicación
36
- const resolvedPrefix = key
37
- .split(':')
38
- .map((part) => registry[part] || null)
39
- .filter(Boolean)
40
- .join(':');
41
-
46
+ // 3. Strings directos: Aplicamos el prefijo acumulado a cada palabra
42
47
  if (typeof value === 'string') {
43
- return value
44
- .split(/[,\s\n]+/)
45
- .filter(Boolean)
46
- .map((cls) => (!resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`))
47
- .join(' ');
48
+ return applyPrefix(accumulatedKey, value);
48
49
  }
50
+
49
51
  return '';
50
52
  };
51
53
 
54
+ // Función para aplicar el prefijo resuelto a un string de clases
55
+ const applyPrefix = (key: string, classString: string): string => {
56
+ const resolved = getPrefix(key);
57
+ if (!resolved) return classString;
58
+
59
+ return classString
60
+ .split(/[,\s\n]+/)
61
+ .filter(Boolean)
62
+ .map((cls) => `${resolved}:${cls}`)
63
+ .join(' ');
64
+ };
65
+
52
66
  return (...inputs: ClassValue[]) => {
53
- // Procesamos uno a uno para capturar objetos de prefijos antes de que clsx los aplane
54
67
  const processed = inputs.map((input) => process('', input));
55
68
  return twMerge(clsx(processed));
56
69
  };