css-variants 2.1.2 → 2.2.1

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,366 +1,91 @@
1
- [![test](https://github.com/timphandev/css-variants/actions/workflows/ci.yml/badge.svg)](https://github.com/timphandev/css-variants/actions/workflows/ci.yml)
2
- [![license](https://img.shields.io/github/license/timphandev/css-variants)](https://github.com/timphandev/css-variants/blob/main/LICENSE)
3
- [![npm](https://img.shields.io/npm/dm/css-variants)](https://npmjs.com/package/css-variants)
4
- ![npm](https://img.shields.io/npm/v/css-variants)
1
+ # css-variants
5
2
 
6
- # css-variants Compose class names & styles with variants
3
+ > **Zero-dependency, type-safe CSS variant composition for modern JavaScript**
7
4
 
8
- Lightweight helpers to compose class names and inline styles using "variants". Zero runtime deps, small bundle, and first-class TypeScript support.
5
+ Build powerful, flexible component style systems with variants. Perfect for Tailwind CSS, vanilla CSS, or any CSS-in-JS solution.
9
6
 
10
- <p align="center">
11
- <img src="/.github/assets/logo.png" alt="css-variants" />
12
- </p>
7
+ [![test](https://github.com/timphandev/css-variants/actions/workflows/ci.yml/badge.svg)](https://github.com/timphandev/css-variants/actions/workflows/ci.yml)
8
+ [![npm version](https://img.shields.io/npm/v/css-variants.svg)](https://www.npmjs.com/package/css-variants)
9
+ [![Bundle Size](https://img.shields.io/bundlephobia/minzip/css-variants)](https://bundlephobia.com/package/css-variants)
10
+ [![TypeScript](https://img.shields.io/badge/TypeScript-100%25-blue)](https://www.typescriptlang.org/)
11
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
12
+ [![Give a Star](https://img.shields.io/badge/⭐️%20Give%20a%20Star-support%20the%20project-ffcc00)](https://github.com/timphandev/css-variants)
13
13
 
14
14
  ## Features
15
15
 
16
- 🌱 **Zero deps** — No runtime dependencies; tiny bundle and minimal maintenance.
17
-
18
- 🐪 **Tailwind-friendly** — First-class compatibility with Tailwind via `tw-merge` (see "Tailwind Integration (tw-merge)"), so conflicting utilities are resolved predictably.
19
-
20
- 🔒 **TypeScript-safe** — Strong inference and mapped-type helpers keep variant props typed correctly.
21
-
22
- 🧩 **Variants & compound rules** — Simple `variants` maps plus `compoundVariants` for combination rules (e.g., size + color).
23
-
24
- 🧭 **Slot support** — `scv` / `ssv` manage multiple named slots with per-slot `base`, `variants`, and overrides.
25
-
26
- ⚙️ **Flexible resolver** — Default `cx`, with an option to pass a custom `classNameResolver` (recommended: `twMerge(cx(...))`).
27
-
28
- ⚡ **Performance & tree-shaking** — Minimal runtime and tree-shakeable code paths for small bundles.
29
-
30
- 🧪 **Developer ergonomics** — Colocated `*.test.ts` (Vitest), clear build scripts (`yarn build`) and linting (`yarn lint`).
31
-
32
- Use cases: design-system components, Tailwind + component libraries, SSR-friendly UI primitives.
16
+ - **Tiny & Fast** — Zero dependencies, ~1KB minified+gzipped
17
+ - 🔒 **Type-Safe** — First-class TypeScript support with complete type inference
18
+ - 🧩 **Flexible** — Works with Tailwind, CSS modules, vanilla CSS, or inline styles
19
+ - 👨‍💻 **Developer-Friendly** — Intuitive API inspired by CVA and Panda CSS
20
+ - 🚀 **Production-Ready** — Battle-tested, fully tested, dual CJS/ESM builds
33
21
 
34
22
  ## Installation
35
23
 
36
- Install with your preferred package manager:
37
-
38
24
  ```bash
39
- # npm
40
25
  npm install css-variants
41
-
42
- # yarn
26
+ # or
43
27
  yarn add css-variants
44
-
45
- # pnpm
28
+ # or
46
29
  pnpm add css-variants
47
30
  ```
48
31
 
49
- TypeScript types are included. Import the package in ESM or CJS projects:
50
-
51
- ```ts
52
- // ESM
53
- import { cv, scv, cx } from 'css-variants'
54
-
55
- // CJS
56
- const { cv, scv, cx } = require('css-variants')
57
- ```
58
-
59
- ## Core Utilities
60
-
61
- Quick reference for the main exports. Each utility has full examples below.
62
-
63
- - 🧩 [`cv`](#cv---class-variants) — Class Variants (single element)
64
- - Use to compose class names for one element. Supports `base`, `variants`, `compoundVariants`, and `defaultVariants`.
65
- - Quick: `const btn = cv({ base: 'btn', variants: { size: { sm: 'p-2', lg: 'p-4' } } })`
66
-
67
- - 🎨 [`sv`](#sv---style-variants) — Style Variants (single element)
68
- - Compose inline style objects similarly to `cv` but returning CSS props.
69
- - Quick: `const s = sv({ base: { display: 'flex' }, variants: { size: { sm: { gap: '4px' } } } })`
70
-
71
- - 🧰 [`scv`](#scv-slot-class-variants) — Slot Class Variants (multi-slot)
72
- - Manage class names across named slots (`slots: ['root','title']`) with per-slot `base`, `variants`, and `classNames` overrides.
73
- - Quick: `const card = scv({ slots: ['root','title'], base: { root: 'card' } })`
74
-
75
- - 🧾 [`ssv`](#ssv---slot-style-variants) — Slot Style Variants (multi-slot styles)
76
- - Same as `scv` but composes inline style objects per slot.
77
-
78
- - ⚙️ [`cx`](#cx---class-merger) — Class merger
79
- - Small, typed `clsx`-like utility used as the default `classNameResolver`.
80
- - Quick: `cx('a', { b: true }, ['c']) // => 'a b c'`
81
-
82
- ### [cv](./src/cv.ts) - Class Variants
83
- Compose class names for a single element. Config keys: `base`, `variants`, `defaultVariants`, `compoundVariants`, and optional `classNameResolver` (defaults to `cx`).
84
- `cv` returns a typed function you call with variant props (and optional `className`) to get the final class string.
32
+ ## Quick Example
85
33
 
86
- ```ts
34
+ ```typescript
87
35
  import { cv } from 'css-variants'
88
36
 
89
37
  const button = cv({
90
- base: 'font-bold rounded-lg',
38
+ base: 'font-semibold rounded-lg transition-colors',
91
39
  variants: {
92
40
  color: {
93
- primary: 'bg-blue-500 text-white',
94
- secondary: 'bg-gray-500 text-white'
41
+ primary: 'bg-blue-600 text-white hover:bg-blue-700',
42
+ secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300',
95
43
  },
96
44
  size: {
97
- sm: 'text-sm px-2 py-1',
98
- lg: 'text-lg px-4 py-2'
99
- }
45
+ sm: 'px-3 py-1.5 text-sm',
46
+ md: 'px-4 py-2 text-base',
47
+ lg: 'px-6 py-3 text-lg',
48
+ },
100
49
  },
101
- compoundVariants: [
102
- {
103
- color: 'primary',
104
- size: 'lg',
105
- className: 'uppercase'
106
- }
107
- ],
108
50
  defaultVariants: {
109
51
  color: 'primary',
110
- size: 'sm'
111
- }
112
- })
113
-
114
- // Usage
115
- button() // => 'font-bold rounded-lg bg-blue-500 text-white text-sm px-2 py-1'
116
-
117
- button({ size: 'lg' }) // => 'font-bold rounded-lg bg-blue-500 text-white text-lg px-4 py-2 uppercase'
118
-
119
- button({ size: 'lg', className: 'custom' }) // => 'font-bold rounded-lg bg-blue-500 text-white text-lg px-4 py-2 uppercase custom'
120
- ```
121
-
122
- ### [sv](./src/sv.ts) - Style Variants
123
-
124
- Compose inline style objects for a single element. Config keys: `base`, `variants`, `defaultVariants`, and `compoundVariants`.
125
- `sv` returns a typed function that accepts variant props and an optional `style` object which is shallow-merged into the result.
126
-
127
- ```ts
128
- import { sv } from 'css-variants'
129
-
130
- const button = sv({
131
- base: {
132
- fontWeight: 'bold',
133
- borderRadius: '8px'
134
- },
135
- variants: {
136
- color: {
137
- primary: {
138
- backgroundColor: 'blue',
139
- color: 'white'
140
- },
141
- secondary: {
142
- backgroundColor: 'gray',
143
- color: 'white'
144
- }
145
- }
146
- }
147
- })
148
-
149
- // Usage
150
- button({ color: 'primary' })
151
- // => { fontWeight: 'bold', borderRadius: '8px', backgroundColor: 'blue', color: 'white' }
152
-
153
- button({
154
- color: 'secondary',
155
- style: { padding: '4px' },
156
- })
157
- // => { fontWeight: 'bold', borderRadius: '8px', backgroundColor: 'gray', color: 'white', padding: '4px' }
158
- ```
159
-
160
- ### [scv](./src/scv.ts) - Slot Class Variants
161
-
162
- Compose and merge class names across named slots.
163
- `scv` accepts `slots` plus per-slot `base`, `variants`, `compoundVariants`,
164
- and runtime `classNames` overrides, and returns an object mapping each slot to
165
- its final merged class string. Ideal for components with multiple sub-elements
166
- (for example: `root`, `title`, `content`).
167
-
168
- ```ts
169
- import { scv } from 'css-variants'
170
-
171
- const card = scv({
172
- slots: ['root', 'title', 'content'],
173
- base: {
174
- root: 'rounded-lg shadow',
175
- title: 'text-xl font-bold',
176
- content: 'mt-2'
177
- },
178
- variants: {
179
- size: {
180
- sm: {
181
- root: 'p-4',
182
- title: 'text-base'
183
- },
184
- lg: {
185
- root: 'p-6',
186
- title: 'text-2xl'
187
- }
188
- }
189
- }
190
- })
191
-
192
- // Usage
193
- card({ size: 'sm' })
194
- // => {
195
- // root: 'rounded-lg shadow p-4',
196
- // title: 'text-xl font-bold text-base',
197
- // content: 'mt-2'
198
- // }
199
-
200
- card({
201
- size: 'lg',
202
- classNames: {
203
- content: 'custom',
204
- },
205
- })
206
- // => {
207
- // root: 'rounded-lg shadow p-6',
208
- // title: 'text-xl font-bold text-2xl',
209
- // content: 'mt-2 custom'
210
- // }
211
- ```
212
-
213
- ### [ssv](./src/ssv.ts) - Slot Style Variants
214
-
215
- Compose and merge inline style objects across named slots.
216
- `ssv` accepts `slots` plus per-slot `base`, `variants`, `compoundVariants`,
217
- and runtime `styles` overrides, and returns an object mapping each slot to
218
- its final merged style. Useful for components with multiple styled
219
- sub-elements (for example: `root`, `title`, `content`).
220
-
221
- ```ts
222
- import { ssv } from 'css-variants'
223
-
224
- const card = ssv({
225
- slots: ['root', 'title'],
226
- base: {
227
- root: { padding: '1rem' },
228
- title: { fontWeight: 'bold' }
52
+ size: 'md',
229
53
  },
230
- variants: {
231
- size: {
232
- sm: {
233
- root: { maxWidth: '300px' },
234
- title: { fontSize: '14px' }
235
- },
236
- lg: {
237
- root: { maxWidth: '600px' },
238
- title: { fontSize: '18px' }
239
- }
240
- }
241
- }
242
54
  })
243
55
 
244
- // Usage
245
- card({ size: 'sm' })
246
- // => {
247
- // root: { padding: '1rem', maxWidth: '300px' },
248
- // title: { fontWeight: 'bold', fontSize: '14px' }
249
- // }
250
-
251
- card({
252
- size: 'lg',
253
- styles: {
254
- title: {
255
- color: 'red',
256
- },
257
- },
258
- })
259
- // => {
260
- // root: { padding: '1rem', maxWidth: '600px' },
261
- // title: { fontWeight: 'bold', fontSize: '18px', color: 'red' }
262
- // }
56
+ button() // => 'font-semibold rounded-lg ... bg-blue-600 text-white ... px-4 py-2 text-base'
57
+ button({ color: 'secondary', size: 'lg' }) // => '... bg-gray-200 text-gray-900 ... px-6 py-3 text-lg'
263
58
  ```
264
59
 
265
- ### [cx](./src/cx.ts) - Class Merger
266
-
267
- Similar to `clsx/classnames` but with better TypeScript support.
268
-
269
- ```tsx
270
- import { cx } from 'css-variants'
271
-
272
- // Basic usage
273
- cx('foo', 'bar') // => 'foo bar'
274
-
275
- // With conditions
276
- cx('foo', {
277
- 'bar': true,
278
- 'baz': false
279
- }) // => 'foo bar'
280
-
281
- // With arrays
282
- cx('foo', ['bar', 'baz']) // => 'foo bar baz'
283
-
284
- // With nested structures
285
- cx('foo', {
286
- bar: true,
287
- baz: [
288
- 'qux',
289
- { quux: true }
290
- ]
291
- }) // => 'foo bar qux quux'
60
+ ## Documentation
292
61
 
293
- // With falsy values (they're ignored)
294
- cx('foo', null, undefined, false, 0, '') // => 'foo'
295
- ```
296
-
297
- ## Tailwind Integration (tw-merge)
298
-
299
- Use a resolver that combines `cx` with `tw-merge` to properly merge Tailwind classes
300
- and let `tw-merge` remove conflicting utility classes (recommended for Tailwind users).
301
-
302
- ```ts
303
- import { cv, cx } from 'css-variants'
304
- import { twMerge } from 'tailwind-merge'
305
-
306
- const button = cv({
307
- base: 'btn',
308
- variants: {
309
- color: {
310
- primary: 'bg-blue-500',
311
- danger: 'bg-red-500'
312
- }
313
- },
314
- // recommended resolver: compose `cx` then `twMerge`
315
- classNameResolver: (...args) => twMerge(cx(...args))
316
- })
317
-
318
- // Later classes and conflicting utilities are resolved by `tw-merge`:
319
- button({ color: 'primary', className: 'bg-red-600' })
320
- // => 'btn bg-red-600' (tw-merge will prefer the later `bg-red-600` value)
321
- ```
322
-
323
- ## TypeScript Support
324
-
325
- Full TypeScript support with automatic type inference:
326
-
327
- ```ts
328
- import { cv } from 'css-variants'
329
-
330
- const button = cv({
331
- variants: {
332
- size: {
333
- sm: 'text-sm',
334
- lg: 'text-lg'
335
- }
336
- }
337
- })
338
-
339
- type ButtonProps = Parameters<typeof button>[0]
340
- // => { size?: 'sm' | 'lg' | undefined }
341
- ```
62
+ **[View full documentation →](https://css-variants.vercel.app/)**
342
63
 
343
- ## Inspiration
64
+ - [Getting Started](https://css-variants.vercel.app/getting-started/introduction/)
65
+ - [Core Concepts](https://css-variants.vercel.app/core-concepts/variants/)
66
+ - [API Reference](https://css-variants.vercel.app/api/cv/)
67
+ - [Tailwind CSS Integration](https://css-variants.vercel.app/guides/tailwind/)
344
68
 
345
- This library is inspired by several excellent projects:
69
+ ## Contributing
346
70
 
347
- - [CVA (Class Variance Authority)](https://github.com/joe-bell/cva)
348
- - [Panda CSS](https://github.com/chakra-ui/panda)
71
+ Contributions are welcome! Please read our [contributing guidelines](CONTRIBUTING.md) before submitting PRs.
349
72
 
350
- ## Developer commands
73
+ **Development Setup:**
351
74
 
352
75
  ```bash
353
- yarn test # run vitest tests
354
- yarn build # build CJS + ESM artifacts into dist/
355
- yarn lint # eslint + prettier
76
+ git clone https://github.com/timphandev/css-variants.git
77
+ cd css-variants
78
+ yarn install
79
+ yarn test
80
+ yarn build
356
81
  ```
357
82
 
358
- ## Contribute
83
+ ## ⭐ Like it? Star it!
359
84
 
360
- Please open PRs with focused changes and unit tests under `src/*.test.ts`. Keep runtime footprint minimal and preserve the exported API (`cv`, `sv`, `scv`, `ssv`, `cx`). See [CONTRIBUTING.md](./CONTRIBUTING.md) for process details.
85
+ If this library saves you time, a **⭐ on GitHub** means a lot. Thank you! 🚀
361
86
 
362
87
  ## License
363
88
 
364
- Licensed under the MIT License.
89
+ MIT © [Tim Phan](https://github.com/timphandev)
365
90
 
366
- See [MIT license](./LICENSE) for more information.
91
+ **Made with ❤️ by developers, for developers**
package/dist/cjs/cv.js CHANGED
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.cv = void 0;
4
- const merge_props_1 = require("./utils/merge-props");
5
4
  const cx_1 = require("./cx");
5
+ const merge_props_1 = require("./utils/merge-props");
6
6
  /**
7
7
  * Creates a class variant function that combines base classes, variants, compound variants, and default variants.
8
8
  *
@@ -40,8 +40,7 @@ const cv = (config) => {
40
40
  return (props) => classNameResolver(base, props?.className);
41
41
  }
42
42
  return (props) => {
43
- const { className, ...rest } = props ?? {};
44
- const mergedProps = defaultVariants ? (0, merge_props_1.mergeProps)(defaultVariants, rest) : rest;
43
+ const mergedProps = (0, merge_props_1.mergeProps)(defaultVariants, props, ['className']);
45
44
  const classValues = [];
46
45
  for (const key in mergedProps) {
47
46
  const classValue = variants[key]?.[mergedProps[key]];
@@ -50,22 +49,25 @@ const cv = (config) => {
50
49
  }
51
50
  }
52
51
  if (compoundVariants) {
53
- for (const { className: classValue, ...compoundVariant } of compoundVariants) {
52
+ for (let i = 0; i < compoundVariants.length; i++) {
53
+ const compound = compoundVariants[i];
54
54
  let matches = true;
55
- for (const key in compoundVariant) {
56
- const value = compoundVariant[key];
55
+ for (const key in compound) {
56
+ if (key === 'className')
57
+ continue;
58
+ const value = compound[key];
57
59
  const propValue = mergedProps[key];
58
60
  if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {
59
61
  matches = false;
60
62
  break;
61
63
  }
62
64
  }
63
- if (matches) {
64
- classValues.push(classValue);
65
+ if (matches && compound.className) {
66
+ classValues.push(compound.className);
65
67
  }
66
68
  }
67
69
  }
68
- return classNameResolver(base, classValues, className);
70
+ return classNameResolver(base, classValues, props?.className);
69
71
  };
70
72
  };
71
73
  exports.cv = cv;
@@ -1 +1 @@
1
- {"version":3,"file":"cv.js","sourceRoot":"","sources":["../../src/cv.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAChD,6BAAqC;AAwBrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACI,MAAM,EAAE,GAA0B,CAAC,MAAM,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,GAAG,OAAE,EAAE,GAAG,MAAM,CAAA;IAE5F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAA;QAE1C,MAAM,WAAW,GAA4B,eAAe,CAAC,CAAC,CAAC,IAAA,wBAAU,EAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEvG,MAAM,WAAW,GAAiB,EAAE,CAAA;QAEpC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAW,CAAC,CAAA;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBAC7E,IAAI,OAAO,GAAG,IAAI,CAAA;gBAClB,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAmC,CAAC,CAAA;oBAClE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC5E,OAAO,GAAG,KAAK,CAAA;wBACf,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;IACxD,CAAC,CAAA;AACH,CAAC,CAAA;AAxCY,QAAA,EAAE,MAwCd;AAED,kBAAe,UAAE,CAAA"}
1
+ {"version":3,"file":"cv.js","sourceRoot":"","sources":["../../src/cv.ts"],"names":[],"mappings":";;;AACA,6BAAqC;AACrC,qDAAgD;AAwBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACI,MAAM,EAAE,GAA0B,CAAC,MAAM,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,GAAG,OAAE,EAAE,GAAG,MAAM,CAAA;IAE5F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,WAAW,GAAG,IAAA,wBAAU,EAAC,eAAe,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;QAErE,MAAM,WAAW,GAAiB,EAAE,CAAA;QAEpC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAW,CAAC,CAAA;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;gBACpC,IAAI,OAAO,GAAG,IAAI,CAAA;gBAClB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,GAAG,KAAK,WAAW;wBAAE,SAAQ;oBACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAA4B,CAAC,CAAA;oBACpD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC5E,OAAO,GAAG,KAAK,CAAA;wBACf,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAClC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC/D,CAAC,CAAA;AACH,CAAC,CAAA;AAxCY,QAAA,EAAE,MAwCd;AAED,kBAAe,UAAE,CAAA"}
package/dist/cjs/cx.js CHANGED
@@ -30,7 +30,8 @@ function toVal(input) {
30
30
  }
31
31
  for (const key in input) {
32
32
  if (input[key]) {
33
- result && (result += ' ');
33
+ if (result)
34
+ result += ' ';
34
35
  result += key;
35
36
  }
36
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cx.js","sourceRoot":"","sources":["../../src/cx.ts"],"names":[],"mappings":";AAAA,yCAAyC;;AA+CzC,gBAgBC;AAzDD,SAAS,KAAK,CAAC,KAAiB;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,IAAI,aAAyB,CAAA;QAC7B,IAAI,YAAoB,CAAA;QACxB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;oBAC1C,IAAI,MAAM;wBAAE,MAAM,IAAI,GAAG,CAAA;oBACzB,MAAM,IAAI,YAAY,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAA;YACzB,MAAM,IAAI,GAAG,CAAA;QACf,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAgB,EAAE,CAAC,GAAG,IAAkB;IACtC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,aAAyB,CAAA;IAC7B,IAAI,YAAoB,CAAA;IAExB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;gBAC1C,IAAI,MAAM;oBAAE,MAAM,IAAI,GAAG,CAAA;gBACzB,MAAM,IAAI,YAAY,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,kBAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"cx.js","sourceRoot":"","sources":["../../src/cx.ts"],"names":[],"mappings":";AAAA,yCAAyC;;AA+CzC,gBAgBC;AAzDD,SAAS,KAAK,CAAC,KAAiB;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,IAAI,aAAyB,CAAA;QAC7B,IAAI,YAAoB,CAAA;QACxB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;oBAC1C,IAAI,MAAM;wBAAE,MAAM,IAAI,GAAG,CAAA;oBACzB,MAAM,IAAI,YAAY,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,MAAM;gBAAE,MAAM,IAAI,GAAG,CAAA;YACzB,MAAM,IAAI,GAAG,CAAA;QACf,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAgB,EAAE,CAAC,GAAG,IAAkB;IACtC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,aAAyB,CAAA;IAC7B,IAAI,YAAoB,CAAA;IAExB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;gBAC1C,IAAI,MAAM;oBAAE,MAAM,IAAI,GAAG,CAAA;gBACzB,MAAM,IAAI,YAAY,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,kBAAe,EAAE,CAAA"}
package/dist/cjs/scv.js CHANGED
@@ -51,8 +51,7 @@ const scv = (config) => {
51
51
  };
52
52
  }
53
53
  return (props) => {
54
- const { classNames, ...rest } = props ?? {};
55
- const mergedProps = defaultVariants ? (0, merge_props_1.mergeProps)(defaultVariants, rest) : rest;
54
+ const mergedProps = (0, merge_props_1.mergeProps)(defaultVariants, props, ['classNames']);
56
55
  const slotClassValues = {};
57
56
  for (const slot of slots) {
58
57
  if (base?.[slot]) {
@@ -71,26 +70,29 @@ const scv = (config) => {
71
70
  }
72
71
  }
73
72
  if (compoundVariants) {
74
- for (const { classNames: cls, ...compoundVariant } of compoundVariants) {
73
+ for (let i = 0; i < compoundVariants.length; i++) {
74
+ const compound = compoundVariants[i];
75
75
  let matches = true;
76
- for (const key in compoundVariant) {
77
- const value = compoundVariant[key];
76
+ for (const key in compound) {
77
+ if (key === 'classNames')
78
+ continue;
79
+ const value = compound[key];
78
80
  const propValue = mergedProps[key];
79
81
  if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {
80
82
  matches = false;
81
83
  break;
82
84
  }
83
85
  }
84
- if (matches) {
85
- for (const slot in cls) {
86
- slotClassValues[slot]?.push(cls[slot]);
86
+ if (matches && compound.classNames) {
87
+ for (const slot in compound.classNames) {
88
+ slotClassValues[slot]?.push(compound.classNames[slot]);
87
89
  }
88
90
  }
89
91
  }
90
92
  }
91
- if (classNames) {
92
- for (const slot in classNames) {
93
- slotClassValues[slot]?.push(classNames[slot]);
93
+ if (props?.classNames) {
94
+ for (const slot in props.classNames) {
95
+ slotClassValues[slot]?.push(props.classNames[slot]);
94
96
  }
95
97
  }
96
98
  const result = {};
@@ -1 +1 @@
1
- {"version":3,"file":"scv.js","sourceRoot":"","sources":["../../src/scv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scv.js","sourceRoot":"","sources":["../../src/scv.ts"],"names":[],"mappings":"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"}
package/dist/cjs/ssv.js CHANGED
@@ -47,8 +47,7 @@ const ssv = (config) => {
47
47
  };
48
48
  }
49
49
  return (props) => {
50
- const { styles, ...rest } = props ?? {};
51
- const mergedProps = defaultVariants ? (0, merge_props_1.mergeProps)(defaultVariants, rest) : rest;
50
+ const mergedProps = (0, merge_props_1.mergeProps)(defaultVariants, props, ['styles']);
52
51
  const result = {};
53
52
  for (const slot of slots) {
54
53
  result[slot] = { ...base?.[slot] };
@@ -57,31 +56,34 @@ const ssv = (config) => {
57
56
  const slotStyle = variants[key]?.[mergedProps[key]];
58
57
  if (slotStyle) {
59
58
  for (const slot in slotStyle) {
60
- result[slot] = { ...result[slot], ...slotStyle[slot] };
59
+ Object.assign(result[slot], slotStyle[slot]);
61
60
  }
62
61
  }
63
62
  }
64
63
  if (compoundVariants) {
65
- for (const { styles: slotStyle, ...compoundVariant } of compoundVariants) {
64
+ for (let i = 0; i < compoundVariants.length; i++) {
65
+ const compound = compoundVariants[i];
66
66
  let matches = true;
67
- for (const key in compoundVariant) {
68
- const value = compoundVariant[key];
67
+ for (const key in compound) {
68
+ if (key === 'styles')
69
+ continue;
70
+ const value = compound[key];
69
71
  const propValue = mergedProps[key];
70
72
  if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {
71
73
  matches = false;
72
74
  break;
73
75
  }
74
76
  }
75
- if (matches) {
76
- for (const slot in slotStyle) {
77
- result[slot] = { ...result[slot], ...slotStyle[slot] };
77
+ if (matches && compound.styles) {
78
+ for (const slot in compound.styles) {
79
+ Object.assign(result[slot], compound.styles[slot]);
78
80
  }
79
81
  }
80
82
  }
81
83
  }
82
- if (styles) {
83
- for (const slot in styles) {
84
- result[slot] = { ...result[slot], ...styles[slot] };
84
+ if (props?.styles) {
85
+ for (const slot in props.styles) {
86
+ Object.assign(result[slot], props.styles[slot]);
85
87
  }
86
88
  }
87
89
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"ssv.js","sourceRoot":"","sources":["../../src/ssv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssv.js","sourceRoot":"","sources":["../../src/ssv.ts"],"names":[],"mappings":"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"}
package/dist/cjs/sv.js CHANGED
@@ -36,32 +36,37 @@ const sv = (config) => {
36
36
  return (props) => ({ ...base, ...props?.style });
37
37
  }
38
38
  return (props) => {
39
- const { style, ...rest } = props ?? {};
40
- let result = { ...base };
41
- const mergedProps = defaultVariants ? (0, merge_props_1.mergeProps)(defaultVariants, rest) : rest;
39
+ const result = { ...base };
40
+ const mergedProps = (0, merge_props_1.mergeProps)(defaultVariants, props, ['style']);
42
41
  for (const key in mergedProps) {
43
42
  const styleValue = variants[key]?.[mergedProps[key]];
44
43
  if (styleValue) {
45
- result = { ...result, ...styleValue };
44
+ Object.assign(result, styleValue);
46
45
  }
47
46
  }
48
47
  if (compoundVariants) {
49
- for (const { style: styleValue, ...compoundVariant } of compoundVariants) {
48
+ for (let i = 0; i < compoundVariants.length; i++) {
49
+ const compound = compoundVariants[i];
50
50
  let matches = true;
51
- for (const key in compoundVariant) {
52
- const value = compoundVariant[key];
51
+ for (const key in compound) {
52
+ if (key === 'style')
53
+ continue;
54
+ const value = compound[key];
53
55
  const propValue = mergedProps[key];
54
56
  if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {
55
57
  matches = false;
56
58
  break;
57
59
  }
58
60
  }
59
- if (matches) {
60
- result = { ...result, ...styleValue };
61
+ if (matches && compound.style) {
62
+ Object.assign(result, compound.style);
61
63
  }
62
64
  }
63
65
  }
64
- return { ...result, ...style };
66
+ if (props?.style) {
67
+ Object.assign(result, props.style);
68
+ }
69
+ return result;
65
70
  };
66
71
  };
67
72
  exports.sv = sv;
@@ -1 +1 @@
1
- {"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAuBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACI,MAAM,EAAE,GAA0B,CAAC,MAAM,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;IAEpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAA;QAEtC,IAAI,MAAM,GAAkB,EAAE,GAAG,IAAI,EAAE,CAAA;QAEvC,MAAM,WAAW,GAA4B,eAAe,CAAC,CAAC,CAAC,IAAA,wBAAU,EAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEvG,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAW,CAAC,CAAA;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;YACvC,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBACzE,IAAI,OAAO,GAAG,IAAI,CAAA;gBAClB,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAmC,CAAC,CAAA;oBAClE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC5E,OAAO,GAAG,KAAK,CAAA;wBACf,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAChC,CAAC,CAAA;AACH,CAAC,CAAA;AAxCY,QAAA,EAAE,MAwCd;AAED,kBAAe,UAAE,CAAA"}
1
+ {"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":";;;AACA,qDAAgD;AAuBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACI,MAAM,EAAE,GAA0B,CAAC,MAAM,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;IAEpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,MAAM,GAAkB,EAAE,GAAG,IAAI,EAAE,CAAA;QAEzC,MAAM,WAAW,GAAG,IAAA,wBAAU,EAAC,eAAe,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;QAEjE,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAW,CAAC,CAAA;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;gBACpC,IAAI,OAAO,GAAG,IAAI,CAAA;gBAClB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,GAAG,KAAK,OAAO;wBAAE,SAAQ;oBAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAA4B,CAAC,CAAA;oBACpD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC5E,OAAO,GAAG,KAAK,CAAA;wBACf,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC,CAAA;AA5CY,QAAA,EAAE,MA4Cd;AAED,kBAAe,UAAE,CAAA"}
@@ -1 +1 @@
1
- export declare function mergeProps<T extends Record<string, unknown>>(defaultProps: T, props: T): T;
1
+ export declare function mergeProps<T extends Record<string, unknown>, P extends Record<string, unknown>>(defaultProps: T | undefined, props: P | undefined, omitKeys?: (keyof P)[]): Record<string, unknown>;
@@ -1,13 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mergeProps = mergeProps;
4
- function mergeProps(defaultProps, props) {
5
- const newObj = { ...defaultProps };
6
- for (const k in props) {
7
- if (props[k] !== undefined) {
8
- newObj[k] = props[k];
4
+ function mergeProps(defaultProps, props, omitKeys) {
5
+ const merged = { ...defaultProps };
6
+ if (props) {
7
+ for (const k in props) {
8
+ if (props[k] !== undefined && (!omitKeys || !omitKeys.includes(k))) {
9
+ merged[k] = props[k];
10
+ }
9
11
  }
10
12
  }
11
- return newObj;
13
+ return merged;
12
14
  }
13
15
  //# sourceMappingURL=merge-props.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-props.js","sourceRoot":"","sources":["../../../src/utils/merge-props.ts"],"names":[],"mappings":";;AAAA,gCAUC;AAVD,SAAgB,UAAU,CAAoC,YAAe,EAAE,KAAQ;IACrF,MAAM,MAAM,GAAG,EAAE,GAAG,YAAY,EAAE,CAAA;IAElC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"merge-props.js","sourceRoot":"","sources":["../../../src/utils/merge-props.ts"],"names":[],"mappings":";;AAAA,gCAgBC;AAhBD,SAAgB,UAAU,CACxB,YAA2B,EAC3B,KAAoB,EACpB,QAAsB;IAEtB,MAAM,MAAM,GAA4B,EAAE,GAAG,YAAY,EAAE,CAAA;IAE3D,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
package/dist/esm/cv.js CHANGED
@@ -1,5 +1,5 @@
1
- import { mergeProps } from './utils/merge-props';
2
1
  import { cx } from './cx';
2
+ import { mergeProps } from './utils/merge-props';
3
3
  /**
4
4
  * Creates a class variant function that combines base classes, variants, compound variants, and default variants.
5
5
  *
@@ -37,8 +37,7 @@ export const cv = (config) => {
37
37
  return (props) => classNameResolver(base, props?.className);
38
38
  }
39
39
  return (props) => {
40
- const { className, ...rest } = props ?? {};
41
- const mergedProps = defaultVariants ? mergeProps(defaultVariants, rest) : rest;
40
+ const mergedProps = mergeProps(defaultVariants, props, ['className']);
42
41
  const classValues = [];
43
42
  for (const key in mergedProps) {
44
43
  const classValue = variants[key]?.[mergedProps[key]];
@@ -47,22 +46,25 @@ export const cv = (config) => {
47
46
  }
48
47
  }
49
48
  if (compoundVariants) {
50
- for (const { className: classValue, ...compoundVariant } of compoundVariants) {
49
+ for (let i = 0; i < compoundVariants.length; i++) {
50
+ const compound = compoundVariants[i];
51
51
  let matches = true;
52
- for (const key in compoundVariant) {
53
- const value = compoundVariant[key];
52
+ for (const key in compound) {
53
+ if (key === 'className')
54
+ continue;
55
+ const value = compound[key];
54
56
  const propValue = mergedProps[key];
55
57
  if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {
56
58
  matches = false;
57
59
  break;
58
60
  }
59
61
  }
60
- if (matches) {
61
- classValues.push(classValue);
62
+ if (matches && compound.className) {
63
+ classValues.push(compound.className);
62
64
  }
63
65
  }
64
66
  }
65
- return classNameResolver(base, classValues, className);
67
+ return classNameResolver(base, classValues, props?.className);
66
68
  };
67
69
  };
68
70
  export default cv;
@@ -1 +1 @@
1
- {"version":3,"file":"cv.js","sourceRoot":"","sources":["../../src/cv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,EAAE,EAAc,MAAM,MAAM,CAAA;AAwBrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,EAAE,GAA0B,CAAC,MAAM,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,GAAG,EAAE,EAAE,GAAG,MAAM,CAAA;IAE5F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAA;QAE1C,MAAM,WAAW,GAA4B,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEvG,MAAM,WAAW,GAAiB,EAAE,CAAA;QAEpC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAW,CAAC,CAAA;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBAC7E,IAAI,OAAO,GAAG,IAAI,CAAA;gBAClB,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAmC,CAAC,CAAA;oBAClE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC5E,OAAO,GAAG,KAAK,CAAA;wBACf,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC9B,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;IACxD,CAAC,CAAA;AACH,CAAC,CAAA;AAED,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"cv.js","sourceRoot":"","sources":["../../src/cv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAc,MAAM,MAAM,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAwBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,MAAM,EAAE,GAA0B,CAAC,MAAM,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,GAAG,EAAE,EAAE,GAAG,MAAM,CAAA;IAE5F,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC7D,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,WAAW,GAAG,UAAU,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;QAErE,MAAM,WAAW,GAAiB,EAAE,CAAA;QAEpC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAW,CAAC,CAAA;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;gBACpC,IAAI,OAAO,GAAG,IAAI,CAAA;gBAClB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,GAAG,KAAK,WAAW;wBAAE,SAAQ;oBACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAA4B,CAAC,CAAA;oBACpD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC5E,OAAO,GAAG,KAAK,CAAA;wBACf,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;oBAClC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IAC/D,CAAC,CAAA;AACH,CAAC,CAAA;AAED,eAAe,EAAE,CAAA"}
package/dist/esm/cx.js CHANGED
@@ -27,7 +27,8 @@ function toVal(input) {
27
27
  }
28
28
  for (const key in input) {
29
29
  if (input[key]) {
30
- result && (result += ' ');
30
+ if (result)
31
+ result += ' ';
31
32
  result += key;
32
33
  }
33
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cx.js","sourceRoot":"","sources":["../../src/cx.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAMzC,SAAS,KAAK,CAAC,KAAiB;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,IAAI,aAAyB,CAAA;QAC7B,IAAI,YAAoB,CAAA;QACxB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;oBAC1C,IAAI,MAAM;wBAAE,MAAM,IAAI,GAAG,CAAA;oBACzB,MAAM,IAAI,YAAY,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAA;YACzB,MAAM,IAAI,GAAG,CAAA;QACf,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,GAAG,IAAkB;IACtC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,aAAyB,CAAA;IAC7B,IAAI,YAAoB,CAAA;IAExB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;gBAC1C,IAAI,MAAM;oBAAE,MAAM,IAAI,GAAG,CAAA;gBACzB,MAAM,IAAI,YAAY,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"cx.js","sourceRoot":"","sources":["../../src/cx.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAMzC,SAAS,KAAK,CAAC,KAAiB;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,MAAM,GAAG,EAAE,CAAA;IAEf,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,CAAA;QACT,IAAI,aAAyB,CAAA;QAC7B,IAAI,YAAoB,CAAA;QACxB,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;oBAC1C,IAAI,MAAM;wBAAE,MAAM,IAAI,GAAG,CAAA;oBACzB,MAAM,IAAI,YAAY,CAAA;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,MAAM;gBAAE,MAAM,IAAI,GAAG,CAAA;YACzB,MAAM,IAAI,GAAG,CAAA;QACf,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,GAAG,IAAkB;IACtC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,aAAyB,CAAA;IAC7B,IAAI,YAAoB,CAAA;IAExB,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;gBAC1C,IAAI,MAAM;oBAAE,MAAM,IAAI,GAAG,CAAA;gBACzB,MAAM,IAAI,YAAY,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,eAAe,EAAE,CAAA"}
package/dist/esm/scv.js CHANGED
@@ -48,8 +48,7 @@ export const scv = (config) => {
48
48
  };
49
49
  }
50
50
  return (props) => {
51
- const { classNames, ...rest } = props ?? {};
52
- const mergedProps = defaultVariants ? mergeProps(defaultVariants, rest) : rest;
51
+ const mergedProps = mergeProps(defaultVariants, props, ['classNames']);
53
52
  const slotClassValues = {};
54
53
  for (const slot of slots) {
55
54
  if (base?.[slot]) {
@@ -68,26 +67,29 @@ export const scv = (config) => {
68
67
  }
69
68
  }
70
69
  if (compoundVariants) {
71
- for (const { classNames: cls, ...compoundVariant } of compoundVariants) {
70
+ for (let i = 0; i < compoundVariants.length; i++) {
71
+ const compound = compoundVariants[i];
72
72
  let matches = true;
73
- for (const key in compoundVariant) {
74
- const value = compoundVariant[key];
73
+ for (const key in compound) {
74
+ if (key === 'classNames')
75
+ continue;
76
+ const value = compound[key];
75
77
  const propValue = mergedProps[key];
76
78
  if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {
77
79
  matches = false;
78
80
  break;
79
81
  }
80
82
  }
81
- if (matches) {
82
- for (const slot in cls) {
83
- slotClassValues[slot]?.push(cls[slot]);
83
+ if (matches && compound.classNames) {
84
+ for (const slot in compound.classNames) {
85
+ slotClassValues[slot]?.push(compound.classNames[slot]);
84
86
  }
85
87
  }
86
88
  }
87
89
  }
88
- if (classNames) {
89
- for (const slot in classNames) {
90
- slotClassValues[slot]?.push(classNames[slot]);
90
+ if (props?.classNames) {
91
+ for (const slot in props.classNames) {
92
+ slotClassValues[slot]?.push(props.classNames[slot]);
91
93
  }
92
94
  }
93
95
  const result = {};
@@ -1 +1 @@
1
- {"version":3,"file":"scv.js","sourceRoot":"","sources":["../../src/scv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scv.js","sourceRoot":"","sources":["../../src/scv.ts"],"names":[],"mappings":"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"}
package/dist/esm/ssv.js CHANGED
@@ -44,8 +44,7 @@ export const ssv = (config) => {
44
44
  };
45
45
  }
46
46
  return (props) => {
47
- const { styles, ...rest } = props ?? {};
48
- const mergedProps = defaultVariants ? mergeProps(defaultVariants, rest) : rest;
47
+ const mergedProps = mergeProps(defaultVariants, props, ['styles']);
49
48
  const result = {};
50
49
  for (const slot of slots) {
51
50
  result[slot] = { ...base?.[slot] };
@@ -54,31 +53,34 @@ export const ssv = (config) => {
54
53
  const slotStyle = variants[key]?.[mergedProps[key]];
55
54
  if (slotStyle) {
56
55
  for (const slot in slotStyle) {
57
- result[slot] = { ...result[slot], ...slotStyle[slot] };
56
+ Object.assign(result[slot], slotStyle[slot]);
58
57
  }
59
58
  }
60
59
  }
61
60
  if (compoundVariants) {
62
- for (const { styles: slotStyle, ...compoundVariant } of compoundVariants) {
61
+ for (let i = 0; i < compoundVariants.length; i++) {
62
+ const compound = compoundVariants[i];
63
63
  let matches = true;
64
- for (const key in compoundVariant) {
65
- const value = compoundVariant[key];
64
+ for (const key in compound) {
65
+ if (key === 'styles')
66
+ continue;
67
+ const value = compound[key];
66
68
  const propValue = mergedProps[key];
67
69
  if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {
68
70
  matches = false;
69
71
  break;
70
72
  }
71
73
  }
72
- if (matches) {
73
- for (const slot in slotStyle) {
74
- result[slot] = { ...result[slot], ...slotStyle[slot] };
74
+ if (matches && compound.styles) {
75
+ for (const slot in compound.styles) {
76
+ Object.assign(result[slot], compound.styles[slot]);
75
77
  }
76
78
  }
77
79
  }
78
80
  }
79
- if (styles) {
80
- for (const slot in styles) {
81
- result[slot] = { ...result[slot], ...styles[slot] };
81
+ if (props?.styles) {
82
+ for (const slot in props.styles) {
83
+ Object.assign(result[slot], props.styles[slot]);
82
84
  }
83
85
  }
84
86
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"ssv.js","sourceRoot":"","sources":["../../src/ssv.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ssv.js","sourceRoot":"","sources":["../../src/ssv.ts"],"names":[],"mappings":"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"}
package/dist/esm/sv.js CHANGED
@@ -33,32 +33,37 @@ export const sv = (config) => {
33
33
  return (props) => ({ ...base, ...props?.style });
34
34
  }
35
35
  return (props) => {
36
- const { style, ...rest } = props ?? {};
37
- let result = { ...base };
38
- const mergedProps = defaultVariants ? mergeProps(defaultVariants, rest) : rest;
36
+ const result = { ...base };
37
+ const mergedProps = mergeProps(defaultVariants, props, ['style']);
39
38
  for (const key in mergedProps) {
40
39
  const styleValue = variants[key]?.[mergedProps[key]];
41
40
  if (styleValue) {
42
- result = { ...result, ...styleValue };
41
+ Object.assign(result, styleValue);
43
42
  }
44
43
  }
45
44
  if (compoundVariants) {
46
- for (const { style: styleValue, ...compoundVariant } of compoundVariants) {
45
+ for (let i = 0; i < compoundVariants.length; i++) {
46
+ const compound = compoundVariants[i];
47
47
  let matches = true;
48
- for (const key in compoundVariant) {
49
- const value = compoundVariant[key];
48
+ for (const key in compound) {
49
+ if (key === 'style')
50
+ continue;
51
+ const value = compound[key];
50
52
  const propValue = mergedProps[key];
51
53
  if (Array.isArray(value) ? !value.includes(propValue) : value !== propValue) {
52
54
  matches = false;
53
55
  break;
54
56
  }
55
57
  }
56
- if (matches) {
57
- result = { ...result, ...styleValue };
58
+ if (matches && compound.style) {
59
+ Object.assign(result, compound.style);
58
60
  }
59
61
  }
60
62
  }
61
- return { ...result, ...style };
63
+ if (props?.style) {
64
+ Object.assign(result, props.style);
65
+ }
66
+ return result;
62
67
  };
63
68
  };
64
69
  export default sv;
@@ -1 +1 @@
1
- {"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAuBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,EAAE,GAA0B,CAAC,MAAM,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;IAEpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,CAAA;QAEtC,IAAI,MAAM,GAAkB,EAAE,GAAG,IAAI,EAAE,CAAA;QAEvC,MAAM,WAAW,GAA4B,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEvG,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAW,CAAC,CAAA;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;YACvC,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBACzE,IAAI,OAAO,GAAG,IAAI,CAAA;gBAClB,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;oBAClC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAmC,CAAC,CAAA;oBAClE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC5E,OAAO,GAAG,KAAK,CAAA;wBACf,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,EAAE,CAAA;IAChC,CAAC,CAAA;AACH,CAAC,CAAA;AAED,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"sv.js","sourceRoot":"","sources":["../../src/sv.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAuBhD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,EAAE,GAA0B,CAAC,MAAM,EAAE,EAAE;IAClD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;IAEpE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAClD,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,MAAM,GAAkB,EAAE,GAAG,IAAI,EAAE,CAAA;QAEzC,MAAM,WAAW,GAAG,UAAU,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAA;QAEjE,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAW,CAAC,CAAA;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;QAED,IAAI,gBAAgB,EAAE,CAAC;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;gBACpC,IAAI,OAAO,GAAG,IAAI,CAAA;gBAClB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;oBAC3B,IAAI,GAAG,KAAK,OAAO;wBAAE,SAAQ;oBAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,GAA4B,CAAC,CAAA;oBACpD,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;wBAC5E,OAAO,GAAG,KAAK,CAAA;wBACf,MAAK;oBACP,CAAC;gBACH,CAAC;gBACD,IAAI,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBAC9B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,KAAK,EAAE,KAAK,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;QACpC,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC,CAAA;AACH,CAAC,CAAA;AAED,eAAe,EAAE,CAAA"}
@@ -1 +1 @@
1
- export declare function mergeProps<T extends Record<string, unknown>>(defaultProps: T, props: T): T;
1
+ export declare function mergeProps<T extends Record<string, unknown>, P extends Record<string, unknown>>(defaultProps: T | undefined, props: P | undefined, omitKeys?: (keyof P)[]): Record<string, unknown>;
@@ -1,10 +1,12 @@
1
- export function mergeProps(defaultProps, props) {
2
- const newObj = { ...defaultProps };
3
- for (const k in props) {
4
- if (props[k] !== undefined) {
5
- newObj[k] = props[k];
1
+ export function mergeProps(defaultProps, props, omitKeys) {
2
+ const merged = { ...defaultProps };
3
+ if (props) {
4
+ for (const k in props) {
5
+ if (props[k] !== undefined && (!omitKeys || !omitKeys.includes(k))) {
6
+ merged[k] = props[k];
7
+ }
6
8
  }
7
9
  }
8
- return newObj;
10
+ return merged;
9
11
  }
10
12
  //# sourceMappingURL=merge-props.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-props.js","sourceRoot":"","sources":["../../../src/utils/merge-props.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAoC,YAAe,EAAE,KAAQ;IACrF,MAAM,MAAM,GAAG,EAAE,GAAG,YAAY,EAAE,CAAA;IAElC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"merge-props.js","sourceRoot":"","sources":["../../../src/utils/merge-props.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CACxB,YAA2B,EAC3B,KAAoB,EACpB,QAAsB;IAEtB,MAAM,MAAM,GAA4B,EAAE,GAAG,YAAY,EAAE,CAAA;IAE3D,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "css-variants",
3
- "version": "2.1.2",
3
+ "version": "2.2.1",
4
4
  "description": "Lightweight helpers to compose class names and inline styles using variants. Zero runtime deps, small bundle, and first-class TypeScript support.",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -21,7 +21,9 @@
21
21
  "scripts": {
22
22
  "lint": "eslint .",
23
23
  "test": "vitest run --coverage",
24
- "bench": "vitest bench",
24
+ "bench": "vitest bench ./src",
25
+ "bench:cva": "yarn add class-variance-authority --no-save && vitest bench ./benchmark/cva.bench.ts --outputJson ./benchmark/cva.bench.json --run",
26
+ "bench:tailwind-variants": "yarn add tailwind-variants --no-save && vitest bench ./benchmark/tailwind-variants.bench.ts --outputJson ./benchmark/tailwind-variants.bench.json --run",
25
27
  "build:cjs": "tsc --project tsconfig.cjs.json",
26
28
  "build:esm": "tsc --project tsconfig.esm.json",
27
29
  "build": "rimraf ./dist && yarn build:cjs && yarn build:esm"
@@ -54,18 +56,20 @@
54
56
  ],
55
57
  "license": "MIT",
56
58
  "devDependencies": {
57
- "@eslint/js": "^9.17.0",
58
- "@types/eslint__js": "^8.42.3",
59
+ "@eslint/js": "^9.39.1",
59
60
  "@types/node": "^20.12.12",
60
- "@vitest/coverage-v8": "^2.1.8",
61
+ "@vitest/coverage-v8": "^4.0.15",
61
62
  "csstype": "^3.1.3",
62
- "eslint": "^9.17.0",
63
- "eslint-config-prettier": "^9.1.0",
64
- "eslint-plugin-prettier": "^5.2.1",
65
- "prettier": "^3.4.2",
63
+ "eslint": "^9.39.1",
64
+ "eslint-config-prettier": "^10.1.8",
65
+ "eslint-plugin-prettier": "^5.5.4",
66
+ "prettier": "^3.7.4",
66
67
  "rimraf": "^5.0.7",
67
- "typescript": "^5.4.5",
68
- "typescript-eslint": "^7.16.1",
69
- "vitest": "^2.1.8"
68
+ "typescript": "^5.9.3",
69
+ "typescript-eslint": "^8.49.0",
70
+ "vitest": "^4.0.15"
71
+ },
72
+ "dependencies": {
73
+ "tailwind-variants": "^3.2.2"
70
74
  }
71
75
  }