diff --git a/packages/core/src/css.ts b/packages/core/src/css.ts index 82c977fa8..dd2b3ca75 100644 --- a/packages/core/src/css.ts +++ b/packages/core/src/css.ts @@ -1,10 +1,12 @@ import type { CSSProperties } from './CSSProperties'; import type { StyledMeta } from './StyledMeta'; +export type LinariaClassName = string & { __linariaClassName: true }; + type CSS = ( strings: TemplateStringsArray, ...exprs: Array -) => string; +) => LinariaClassName; const css: CSS = () => { throw new Error( diff --git a/packages/core/src/cx.ts b/packages/core/src/cx.ts index e34fae2d9..b5bff6951 100644 --- a/packages/core/src/cx.ts +++ b/packages/core/src/cx.ts @@ -1,9 +1,18 @@ -export type ClassName = string | false | void | null | 0; +import { LinariaClassName } from './css'; -type CX = (...classNames: ClassName[]) => string; +export type ClassName = T | false | void | null | 0 | ''; -const cx: CX = function cx() { - return Array.prototype.slice.call(arguments).filter(Boolean).join(' '); +interface ICX { + (...classNames: ClassName[]): LinariaClassName; + (...classNames: ClassName[]): string; +} + +const cx: ICX = function cx() { + const result = Array.prototype.slice + .call(arguments) + .filter(Boolean) + .join(' '); + return result as LinariaClassName; }; export default cx; diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 60cdc6dbf..bef3895b4 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -2,3 +2,4 @@ export { default as css } from './css'; export { default as cx } from './cx'; export type { CSSProperties } from './CSSProperties'; export type { StyledMeta } from './StyledMeta'; +export type { LinariaClassName } from './css';