clases 1.1.2 → 1.1.3

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
@@ -18,21 +18,11 @@ 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
- let nextKey;
22
- if (key === "base") {
23
- nextKey = nestedKey;
24
- } else if (isRegistered) {
25
- nextKey = `${key}:${nestedKey}`;
26
- } else {
27
- nextKey = key;
28
- }
21
+ const nextKey = key === "base" ? nestedKey : isRegistered ? `${key}:${nestedKey}` : key;
29
22
  return process(nextKey, nestedValue);
30
23
  }).join(" ");
31
24
  }
32
- const resolvedPrefix = key.split(":").map((part) => {
33
- if (part === "base") return null;
34
- return registry[part] || null;
35
- }).filter(Boolean).join(":");
25
+ const resolvedPrefix = key.split(":").map((part) => part === "base" ? null : registry[part] || null).filter(Boolean).join(":");
36
26
  if (typeof value === "string") {
37
27
  return value.split(/[,\s\n]+/).filter(Boolean).map((cls) => !resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`).join(" ");
38
28
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["twMerge","clsx"],"mappings":";;;;;;;;;;AAGO,SAAS,YAAuD,OAAA,EAAmB;AAEtF,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;AAEnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IACrE;AAEA,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,YAAA,GAAe,QAAA,CAAS,SAAS,CAAA,KAAM,MAAA;AAE7C,QAAA,IAAI,OAAA;AACJ,QAAA,IAAI,QAAQ,MAAA,EAAQ;AAChB,UAAA,OAAA,GAAU,SAAA;AAAA,QACd,WAAW,YAAA,EAAc;AACrB,UAAA,OAAA,GAAU,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,QACjC,CAAA,MAAO;AAEH,UAAA,OAAA,GAAU,GAAA;AAAA,QACd;AAEA,QAAA,OAAO,OAAA,CAAQ,SAAS,WAAW,CAAA;AAAA,MACvC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,MAAM,iBAAiB,GAAA,CAClB,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS;AACX,MAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,IAAA;AAG5B,MAAA,OAAO,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA;AAAA,IAC7B,CAAC,CAAA,CACA,MAAA,CAAO,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,KAAkB;AACzB,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACpC,MAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtE,QAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACtB,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AACb,UAAA,IAAI,CAAA,KAAM,MAAM,OAAO,CAAA;AAEvB,UAAA,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,CAAA,KAAM,MAAA;AACrC,UAAA,OAAO,OAAA,CAAQ,YAAA,GAAe,CAAA,GAAI,MAAA,EAAQ,CAAC,CAAA;AAAA,QAC/C,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,MACjB;AACA,MAAA,OAAO,KAAA;AAAA,IACX,CAAC,CAAA;AACD,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 from 'clsx';\r\n\r\nexport function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins) {\r\n // Importante: No incluimos 'base' aquí para que no interfiera en el filtrado final\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 if (Array.isArray(value)) {\r\n return value.map((v) => process(key, v)).filter(Boolean).join(' ');\r\n }\r\n\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 === 'base') {\r\n nextKey = nestedKey;\r\n } else if (isRegistered) {\r\n nextKey = `${key}:${nestedKey}`;\r\n } else {\r\n // Si no está registrado, mantenemos el key actual (transparencia)\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 // RESOLUCIÓN FINAL: Filtro estricto\r\n const resolvedPrefix = key\r\n .split(':')\r\n .map((part) => {\r\n if (part === 'base') return null;\r\n // SOLO devolvemos si existe en el registro. \r\n // Si 'variants' no está, esto devuelve null y se limpia.\r\n return registry[part] || null; \r\n })\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: any[]) => {\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 if (v === true) return k;\r\n // Si la llave inicial no está registrada, empezamos con 'base'\r\n const isRegistered = registry[k] !== undefined;\r\n return process(isRegistered ? k : 'base', v);\r\n })\r\n .join(' ');\r\n }\r\n return input;\r\n });\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;AAErE,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,EAAa,KAAA,KAAuB;AACjD,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IACrE;AAEA,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,YAAA,GAAe,QAAA,CAAS,SAAS,CAAA,KAAM,MAAA;AAK7C,QAAA,MAAM,OAAA,GAAU,QAAQ,MAAA,GAClB,SAAA,GACC,eAAe,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,GAAA;AAE9C,QAAA,OAAO,OAAA,CAAQ,SAAS,WAAW,CAAA;AAAA,MACvC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,MAAM,cAAA,GAAiB,IAClB,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,SAAU,IAAA,KAAS,MAAA,GAAS,OAAQ,QAAA,CAAS,IAAI,KAAK,IAAM,CAAA,CACjE,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,KAAkB;AACzB,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACpC,MAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtE,QAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACtB,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AACb,UAAA,IAAI,CAAA,KAAM,MAAM,OAAO,CAAA;AAGvB,UAAA,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,CAAA,KAAM,MAAA;AACrC,UAAA,OAAO,OAAA,CAAQ,YAAA,GAAe,CAAA,GAAI,MAAA,EAAQ,CAAC,CAAA;AAAA,QAC/C,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,MACjB;AACA,MAAA,OAAO,KAAA;AAAA,IACX,CAAC,CAAA;AACD,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 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 if (Array.isArray(value)) {\r\n return value.map((v) => process(key, v)).filter(Boolean).join(' ');\r\n }\r\n\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 // Si el padre es 'base', el hijo toma su lugar.\r\n // Si el hijo está registrado, se concatena.\r\n // Si no, heredamos el padre para mantener la transparencia.\r\n const nextKey = key === 'base' \r\n ? nestedKey \r\n : (isRegistered ? `${key}:${nestedKey}` : key);\r\n\r\n return process(nextKey, nestedValue);\r\n })\r\n .join(' ');\r\n }\r\n\r\n // RESOLUCIÓN: Solo permitimos partes que existan en el registry\r\n const resolvedPrefix = key\r\n .split(':')\r\n .map((part) => (part === 'base' ? null : (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: any[]) => {\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 if (v === true) return k;\r\n // SI LA LLAVE NO ESTÁ REGISTRADA (ej: 'variants'), \r\n // entramos como 'base' para que sea invisible.\r\n const isRegistered = registry[k] !== undefined;\r\n return process(isRegistered ? k : 'base', v);\r\n })\r\n .join(' ');\r\n }\r\n return input;\r\n });\r\n return twMerge(clsx(processed));\r\n };\r\n}\r\n"]}
package/dist/index.js CHANGED
@@ -12,21 +12,11 @@ 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
- let nextKey;
16
- if (key === "base") {
17
- nextKey = nestedKey;
18
- } else if (isRegistered) {
19
- nextKey = `${key}:${nestedKey}`;
20
- } else {
21
- nextKey = key;
22
- }
15
+ const nextKey = key === "base" ? nestedKey : isRegistered ? `${key}:${nestedKey}` : key;
23
16
  return process(nextKey, nestedValue);
24
17
  }).join(" ");
25
18
  }
26
- const resolvedPrefix = key.split(":").map((part) => {
27
- if (part === "base") return null;
28
- return registry[part] || null;
29
- }).filter(Boolean).join(":");
19
+ const resolvedPrefix = key.split(":").map((part) => part === "base" ? null : registry[part] || null).filter(Boolean).join(":");
30
20
  if (typeof value === "string") {
31
21
  return value.split(/[,\s\n]+/).filter(Boolean).map((cls) => !resolvedPrefix ? cls : `${resolvedPrefix}:${cls}`).join(" ");
32
22
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;AAGO,SAAS,YAAuD,OAAA,EAAmB;AAEtF,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;AAEnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IACrE;AAEA,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,YAAA,GAAe,QAAA,CAAS,SAAS,CAAA,KAAM,MAAA;AAE7C,QAAA,IAAI,OAAA;AACJ,QAAA,IAAI,QAAQ,MAAA,EAAQ;AAChB,UAAA,OAAA,GAAU,SAAA;AAAA,QACd,WAAW,YAAA,EAAc;AACrB,UAAA,OAAA,GAAU,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA;AAAA,QACjC,CAAA,MAAO;AAEH,UAAA,OAAA,GAAU,GAAA;AAAA,QACd;AAEA,QAAA,OAAO,OAAA,CAAQ,SAAS,WAAW,CAAA;AAAA,MACvC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,MAAM,iBAAiB,GAAA,CAClB,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,IAAA,KAAS;AACX,MAAA,IAAI,IAAA,KAAS,QAAQ,OAAO,IAAA;AAG5B,MAAA,OAAO,QAAA,CAAS,IAAI,CAAA,IAAK,IAAA;AAAA,IAC7B,CAAC,CAAA,CACA,MAAA,CAAO,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,KAAkB;AACzB,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACpC,MAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtE,QAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACtB,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AACb,UAAA,IAAI,CAAA,KAAM,MAAM,OAAO,CAAA;AAEvB,UAAA,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,CAAA,KAAM,MAAA;AACrC,UAAA,OAAO,OAAA,CAAQ,YAAA,GAAe,CAAA,GAAI,MAAA,EAAQ,CAAC,CAAA;AAAA,QAC/C,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,MACjB;AACA,MAAA,OAAO,KAAA;AAAA,IACX,CAAC,CAAA;AACD,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 from 'clsx';\r\n\r\nexport function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins) {\r\n // Importante: No incluimos 'base' aquí para que no interfiera en el filtrado final\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 if (Array.isArray(value)) {\r\n return value.map((v) => process(key, v)).filter(Boolean).join(' ');\r\n }\r\n\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 === 'base') {\r\n nextKey = nestedKey;\r\n } else if (isRegistered) {\r\n nextKey = `${key}:${nestedKey}`;\r\n } else {\r\n // Si no está registrado, mantenemos el key actual (transparencia)\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 // RESOLUCIÓN FINAL: Filtro estricto\r\n const resolvedPrefix = key\r\n .split(':')\r\n .map((part) => {\r\n if (part === 'base') return null;\r\n // SOLO devolvemos si existe en el registro. \r\n // Si 'variants' no está, esto devuelve null y se limpia.\r\n return registry[part] || null; \r\n })\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: any[]) => {\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 if (v === true) return k;\r\n // Si la llave inicial no está registrada, empezamos con 'base'\r\n const isRegistered = registry[k] !== undefined;\r\n return process(isRegistered ? k : 'base', v);\r\n })\r\n .join(' ');\r\n }\r\n return input;\r\n });\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;AAErE,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,EAAa,KAAA,KAAuB;AACjD,IAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,IACrE;AAEA,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,YAAA,GAAe,QAAA,CAAS,SAAS,CAAA,KAAM,MAAA;AAK7C,QAAA,MAAM,OAAA,GAAU,QAAQ,MAAA,GAClB,SAAA,GACC,eAAe,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAA,GAAK,GAAA;AAE9C,QAAA,OAAO,OAAA,CAAQ,SAAS,WAAW,CAAA;AAAA,MACvC,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,IACjB;AAGA,IAAA,MAAM,cAAA,GAAiB,IAClB,KAAA,CAAM,GAAG,EACT,GAAA,CAAI,CAAC,SAAU,IAAA,KAAS,MAAA,GAAS,OAAQ,QAAA,CAAS,IAAI,KAAK,IAAM,CAAA,CACjE,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,KAAkB;AACzB,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACpC,MAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtE,QAAA,OAAO,MAAA,CAAO,QAAQ,KAAK,CAAA,CACtB,IAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AACb,UAAA,IAAI,CAAA,KAAM,MAAM,OAAO,CAAA;AAGvB,UAAA,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,CAAA,KAAM,MAAA;AACrC,UAAA,OAAO,OAAA,CAAQ,YAAA,GAAe,CAAA,GAAI,MAAA,EAAQ,CAAC,CAAA;AAAA,QAC/C,CAAC,CAAA,CACA,IAAA,CAAK,GAAG,CAAA;AAAA,MACjB;AACA,MAAA,OAAO,KAAA;AAAA,IACX,CAAC,CAAA;AACD,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 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 if (Array.isArray(value)) {\r\n return value.map((v) => process(key, v)).filter(Boolean).join(' ');\r\n }\r\n\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 // Si el padre es 'base', el hijo toma su lugar.\r\n // Si el hijo está registrado, se concatena.\r\n // Si no, heredamos el padre para mantener la transparencia.\r\n const nextKey = key === 'base' \r\n ? nestedKey \r\n : (isRegistered ? `${key}:${nestedKey}` : key);\r\n\r\n return process(nextKey, nestedValue);\r\n })\r\n .join(' ');\r\n }\r\n\r\n // RESOLUCIÓN: Solo permitimos partes que existan en el registry\r\n const resolvedPrefix = key\r\n .split(':')\r\n .map((part) => (part === 'base' ? null : (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: any[]) => {\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 if (v === true) return k;\r\n // SI LA LLAVE NO ESTÁ REGISTRADA (ej: 'variants'), \r\n // entramos como 'base' para que sea invisible.\r\n const isRegistered = registry[k] !== undefined;\r\n return process(isRegistered ? k : 'base', v);\r\n })\r\n .join(' ');\r\n }\r\n return input;\r\n });\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.2",
3
+ "version": "1.1.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
package/src/index.ts CHANGED
@@ -2,7 +2,6 @@ import { twMerge } from 'tailwind-merge';
2
2
  import clsx from 'clsx';
3
3
 
4
4
  export function createCl<TPlugins extends Record<string, string>[]>(...plugins: TPlugins) {
5
- // Importante: No incluimos 'base' aquí para que no interfiera en el filtrado final
6
5
  const registry: Record<string, string> = Object.assign({}, ...plugins);
7
6
 
8
7
  const process = (key: string, value: any): string => {
@@ -17,30 +16,22 @@ export function createCl<TPlugins extends Record<string, string>[]>(...plugins:
17
16
  .map(([nestedKey, nestedValue]) => {
18
17
  const isRegistered = registry[nestedKey] !== undefined;
19
18
 
20
- let nextKey: string;
21
- if (key === 'base') {
22
- nextKey = nestedKey;
23
- } else if (isRegistered) {
24
- nextKey = `${key}:${nestedKey}`;
25
- } else {
26
- // Si no está registrado, mantenemos el key actual (transparencia)
27
- nextKey = key;
28
- }
19
+ // Si el padre es 'base', el hijo toma su lugar.
20
+ // Si el hijo está registrado, se concatena.
21
+ // Si no, heredamos el padre para mantener la transparencia.
22
+ const nextKey = key === 'base'
23
+ ? nestedKey
24
+ : (isRegistered ? `${key}:${nestedKey}` : key);
29
25
 
30
26
  return process(nextKey, nestedValue);
31
27
  })
32
28
  .join(' ');
33
29
  }
34
30
 
35
- // RESOLUCIÓN FINAL: Filtro estricto
31
+ // RESOLUCIÓN: Solo permitimos partes que existan en el registry
36
32
  const resolvedPrefix = key
37
33
  .split(':')
38
- .map((part) => {
39
- if (part === 'base') return null;
40
- // SOLO devolvemos si existe en el registro.
41
- // Si 'variants' no está, esto devuelve null y se limpia.
42
- return registry[part] || null;
43
- })
34
+ .map((part) => (part === 'base' ? null : (registry[part] || null)))
44
35
  .filter(Boolean)
45
36
  .join(':');
46
37
 
@@ -60,7 +51,8 @@ export function createCl<TPlugins extends Record<string, string>[]>(...plugins:
60
51
  return Object.entries(input)
61
52
  .map(([k, v]) => {
62
53
  if (v === true) return k;
63
- // Si la llave inicial no está registrada, empezamos con 'base'
54
+ // SI LA LLAVE NO ESTÁ REGISTRADA (ej: 'variants'),
55
+ // entramos como 'base' para que sea invisible.
64
56
  const isRegistered = registry[k] !== undefined;
65
57
  return process(isRegistered ? k : 'base', v);
66
58
  })