clava 0.0.2 → 0.1.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/src/types.ts CHANGED
@@ -69,335 +69,137 @@ type SourceDefaults<S> = S extends { getVariants: () => infer Defaults }
69
69
  type SourceResult<T, S> = Pick<T, Extract<keyof T, SourceKeys<S>>> &
70
70
  Omit<SourceDefaults<S>, keyof T>;
71
71
 
72
- // Self result with defaults
73
- type SelfResult<T, Keys, Defaults> = Pick<T, Extract<keyof T, Keys>> &
74
- Omit<Defaults, keyof T>;
75
-
76
- // All possible keys from ComponentResult (class, className, style)
77
- type ComponentResultKeys =
78
- | keyof JSXProps
79
- | keyof HTMLProps
80
- | keyof HTMLObjProps;
81
-
82
- // Build result tuple based on number of sources
83
- type SplitPropsResult<
72
+ // Standalone splitProps function type - first source is required
73
+ export type SplitPropsFunction = <
84
74
  T,
85
- V,
86
- D,
87
- Sources extends readonly KeySource[],
88
- > = Sources extends readonly []
89
- ? [
90
- SelfResult<T, keyof V | ComponentResultKeys, D>,
91
- Omit<T, keyof V | ComponentResultKeys>,
92
- ]
93
- : Sources extends readonly [infer S1 extends KeySource]
94
- ? [
95
- SelfResult<T, keyof V | ComponentResultKeys, D>,
96
- SourceResult<T, S1>,
97
- Omit<T, keyof V | ComponentResultKeys | SourceKeys<S1>>,
98
- ]
99
- : Sources extends readonly [
100
- infer S1 extends KeySource,
101
- infer S2 extends KeySource,
102
- ]
103
- ? [
104
- SelfResult<T, keyof V | ComponentResultKeys, D>,
105
- SourceResult<T, S1>,
106
- SourceResult<T, S2>,
107
- Omit<
108
- T,
109
- keyof V | ComponentResultKeys | SourceKeys<S1> | SourceKeys<S2>
110
- >,
111
- ]
112
- : Sources extends readonly [
113
- infer S1 extends KeySource,
114
- infer S2 extends KeySource,
115
- infer S3 extends KeySource,
116
- ]
117
- ? [
118
- SelfResult<T, keyof V | ComponentResultKeys, D>,
119
- SourceResult<T, S1>,
120
- SourceResult<T, S2>,
121
- SourceResult<T, S3>,
122
- Omit<
123
- T,
124
- | keyof V
125
- | ComponentResultKeys
126
- | SourceKeys<S1>
127
- | SourceKeys<S2>
128
- | SourceKeys<S3>
129
- >,
130
- ]
131
- : Sources extends readonly [
132
- infer S1 extends KeySource,
133
- infer S2 extends KeySource,
134
- infer S3 extends KeySource,
135
- infer S4 extends KeySource,
136
- ]
137
- ? [
138
- SelfResult<T, keyof V | ComponentResultKeys, D>,
139
- SourceResult<T, S1>,
140
- SourceResult<T, S2>,
141
- SourceResult<T, S3>,
142
- SourceResult<T, S4>,
143
- Omit<
144
- T,
145
- | keyof V
146
- | ComponentResultKeys
147
- | SourceKeys<S1>
148
- | SourceKeys<S2>
149
- | SourceKeys<S3>
150
- | SourceKeys<S4>
151
- >,
152
- ]
153
- : Sources extends readonly [
154
- infer S1 extends KeySource,
155
- infer S2 extends KeySource,
156
- infer S3 extends KeySource,
157
- infer S4 extends KeySource,
158
- infer S5 extends KeySource,
159
- ]
160
- ? [
161
- SelfResult<T, keyof V | ComponentResultKeys, D>,
162
- SourceResult<T, S1>,
163
- SourceResult<T, S2>,
164
- SourceResult<T, S3>,
165
- SourceResult<T, S4>,
166
- SourceResult<T, S5>,
167
- Omit<
168
- T,
169
- | keyof V
170
- | ComponentResultKeys
171
- | SourceKeys<S1>
172
- | SourceKeys<S2>
173
- | SourceKeys<S3>
174
- | SourceKeys<S4>
175
- | SourceKeys<S5>
176
- >,
177
- ]
178
- : Sources extends readonly [
179
- infer S1 extends KeySource,
180
- infer S2 extends KeySource,
181
- infer S3 extends KeySource,
182
- infer S4 extends KeySource,
183
- infer S5 extends KeySource,
184
- infer S6 extends KeySource,
185
- ]
186
- ? [
187
- SelfResult<T, keyof V | ComponentResultKeys, D>,
188
- SourceResult<T, S1>,
189
- SourceResult<T, S2>,
190
- SourceResult<T, S3>,
191
- SourceResult<T, S4>,
192
- SourceResult<T, S5>,
193
- SourceResult<T, S6>,
194
- Omit<
195
- T,
196
- | keyof V
197
- | ComponentResultKeys
198
- | SourceKeys<S1>
199
- | SourceKeys<S2>
200
- | SourceKeys<S3>
201
- | SourceKeys<S4>
202
- | SourceKeys<S5>
203
- | SourceKeys<S6>
204
- >,
205
- ]
206
- : Sources extends readonly [
207
- infer S1 extends KeySource,
208
- infer S2 extends KeySource,
209
- infer S3 extends KeySource,
210
- infer S4 extends KeySource,
211
- infer S5 extends KeySource,
212
- infer S6 extends KeySource,
213
- infer S7 extends KeySource,
214
- ]
215
- ? [
216
- SelfResult<T, keyof V | ComponentResultKeys, D>,
217
- SourceResult<T, S1>,
218
- SourceResult<T, S2>,
219
- SourceResult<T, S3>,
220
- SourceResult<T, S4>,
221
- SourceResult<T, S5>,
222
- SourceResult<T, S6>,
223
- SourceResult<T, S7>,
224
- Omit<
225
- T,
226
- | keyof V
227
- | ComponentResultKeys
228
- | SourceKeys<S1>
229
- | SourceKeys<S2>
230
- | SourceKeys<S3>
231
- | SourceKeys<S4>
232
- | SourceKeys<S5>
233
- | SourceKeys<S6>
234
- | SourceKeys<S7>
235
- >,
236
- ]
237
- : Sources extends readonly [
238
- infer S1 extends KeySource,
239
- infer S2 extends KeySource,
240
- infer S3 extends KeySource,
241
- infer S4 extends KeySource,
242
- infer S5 extends KeySource,
243
- infer S6 extends KeySource,
244
- infer S7 extends KeySource,
245
- infer S8 extends KeySource,
246
- ]
247
- ? [
248
- SelfResult<T, keyof V | ComponentResultKeys, D>,
249
- SourceResult<T, S1>,
250
- SourceResult<T, S2>,
251
- SourceResult<T, S3>,
252
- SourceResult<T, S4>,
253
- SourceResult<T, S5>,
254
- SourceResult<T, S6>,
255
- SourceResult<T, S7>,
256
- SourceResult<T, S8>,
257
- Omit<
258
- T,
259
- | keyof V
260
- | ComponentResultKeys
261
- | SourceKeys<S1>
262
- | SourceKeys<S2>
263
- | SourceKeys<S3>
264
- | SourceKeys<S4>
265
- | SourceKeys<S5>
266
- | SourceKeys<S6>
267
- | SourceKeys<S7>
268
- | SourceKeys<S8>
269
- >,
270
- ]
271
- : unknown[];
272
-
273
- // SplitProps as a single generic function type
274
- export type SplitProps<V, D, _R extends ComponentResult> = <
275
- const T extends Record<string, unknown>,
75
+ const S1 extends KeySource,
276
76
  const Sources extends readonly KeySource[],
277
77
  >(
278
78
  props: T,
79
+ source1: S1,
279
80
  ...sources: Sources
280
- ) => SplitPropsResult<T, V, D, Sources>;
81
+ ) => SplitPropsFunctionResult<T, S1, Sources>;
281
82
 
282
- // Build result tuple for OnlyVariants based on number of sources
283
- type OnlyVariantsSplitPropsResult<
83
+ // Result type for standalone splitProps function
84
+ type SplitPropsFunctionResult<
284
85
  T,
285
- V,
286
- D,
86
+ S1 extends KeySource,
287
87
  Sources extends readonly KeySource[],
288
88
  > = Sources extends readonly []
289
- ? [SelfResult<T, keyof V, D>, Omit<T, keyof V>]
290
- : Sources extends readonly [infer S1 extends KeySource]
89
+ ? [SourceResult<T, S1>, Omit<T, SourceKeys<S1>>]
90
+ : Sources extends readonly [infer S2 extends KeySource]
291
91
  ? [
292
- SelfResult<T, keyof V, D>,
293
92
  SourceResult<T, S1>,
294
- Omit<T, keyof V | SourceKeys<S1>>,
93
+ SourceResult<T, S2>,
94
+ Omit<T, SourceKeys<S1> | SourceKeys<S2>>,
295
95
  ]
296
96
  : Sources extends readonly [
297
- infer S1 extends KeySource,
298
97
  infer S2 extends KeySource,
98
+ infer S3 extends KeySource,
299
99
  ]
300
100
  ? [
301
- SelfResult<T, keyof V, D>,
302
101
  SourceResult<T, S1>,
303
102
  SourceResult<T, S2>,
304
- Omit<T, keyof V | SourceKeys<S1> | SourceKeys<S2>>,
103
+ SourceResult<T, S3>,
104
+ Omit<T, SourceKeys<S1> | SourceKeys<S2> | SourceKeys<S3>>,
305
105
  ]
306
106
  : Sources extends readonly [
307
- infer S1 extends KeySource,
308
107
  infer S2 extends KeySource,
309
108
  infer S3 extends KeySource,
109
+ infer S4 extends KeySource,
310
110
  ]
311
111
  ? [
312
- SelfResult<T, keyof V, D>,
313
112
  SourceResult<T, S1>,
314
113
  SourceResult<T, S2>,
315
114
  SourceResult<T, S3>,
316
- Omit<T, keyof V | SourceKeys<S1> | SourceKeys<S2> | SourceKeys<S3>>,
115
+ SourceResult<T, S4>,
116
+ Omit<
117
+ T,
118
+ SourceKeys<S1> | SourceKeys<S2> | SourceKeys<S3> | SourceKeys<S4>
119
+ >,
317
120
  ]
318
121
  : Sources extends readonly [
319
- infer S1 extends KeySource,
320
122
  infer S2 extends KeySource,
321
123
  infer S3 extends KeySource,
322
124
  infer S4 extends KeySource,
125
+ infer S5 extends KeySource,
323
126
  ]
324
127
  ? [
325
- SelfResult<T, keyof V, D>,
326
128
  SourceResult<T, S1>,
327
129
  SourceResult<T, S2>,
328
130
  SourceResult<T, S3>,
329
131
  SourceResult<T, S4>,
132
+ SourceResult<T, S5>,
330
133
  Omit<
331
134
  T,
332
- | keyof V
333
135
  | SourceKeys<S1>
334
136
  | SourceKeys<S2>
335
137
  | SourceKeys<S3>
336
138
  | SourceKeys<S4>
139
+ | SourceKeys<S5>
337
140
  >,
338
141
  ]
339
142
  : Sources extends readonly [
340
- infer S1 extends KeySource,
341
143
  infer S2 extends KeySource,
342
144
  infer S3 extends KeySource,
343
145
  infer S4 extends KeySource,
344
146
  infer S5 extends KeySource,
147
+ infer S6 extends KeySource,
345
148
  ]
346
149
  ? [
347
- SelfResult<T, keyof V, D>,
348
150
  SourceResult<T, S1>,
349
151
  SourceResult<T, S2>,
350
152
  SourceResult<T, S3>,
351
153
  SourceResult<T, S4>,
352
154
  SourceResult<T, S5>,
155
+ SourceResult<T, S6>,
353
156
  Omit<
354
157
  T,
355
- | keyof V
356
158
  | SourceKeys<S1>
357
159
  | SourceKeys<S2>
358
160
  | SourceKeys<S3>
359
161
  | SourceKeys<S4>
360
162
  | SourceKeys<S5>
163
+ | SourceKeys<S6>
361
164
  >,
362
165
  ]
363
166
  : Sources extends readonly [
364
- infer S1 extends KeySource,
365
167
  infer S2 extends KeySource,
366
168
  infer S3 extends KeySource,
367
169
  infer S4 extends KeySource,
368
170
  infer S5 extends KeySource,
369
171
  infer S6 extends KeySource,
172
+ infer S7 extends KeySource,
370
173
  ]
371
174
  ? [
372
- SelfResult<T, keyof V, D>,
373
175
  SourceResult<T, S1>,
374
176
  SourceResult<T, S2>,
375
177
  SourceResult<T, S3>,
376
178
  SourceResult<T, S4>,
377
179
  SourceResult<T, S5>,
378
180
  SourceResult<T, S6>,
181
+ SourceResult<T, S7>,
379
182
  Omit<
380
183
  T,
381
- | keyof V
382
184
  | SourceKeys<S1>
383
185
  | SourceKeys<S2>
384
186
  | SourceKeys<S3>
385
187
  | SourceKeys<S4>
386
188
  | SourceKeys<S5>
387
189
  | SourceKeys<S6>
190
+ | SourceKeys<S7>
388
191
  >,
389
192
  ]
390
193
  : Sources extends readonly [
391
- infer S1 extends KeySource,
392
194
  infer S2 extends KeySource,
393
195
  infer S3 extends KeySource,
394
196
  infer S4 extends KeySource,
395
197
  infer S5 extends KeySource,
396
198
  infer S6 extends KeySource,
397
199
  infer S7 extends KeySource,
200
+ infer S8 extends KeySource,
398
201
  ]
399
202
  ? [
400
- SelfResult<T, keyof V, D>,
401
203
  SourceResult<T, S1>,
402
204
  SourceResult<T, S2>,
403
205
  SourceResult<T, S3>,
@@ -405,9 +207,9 @@ type OnlyVariantsSplitPropsResult<
405
207
  SourceResult<T, S5>,
406
208
  SourceResult<T, S6>,
407
209
  SourceResult<T, S7>,
210
+ SourceResult<T, S8>,
408
211
  Omit<
409
212
  T,
410
- | keyof V
411
213
  | SourceKeys<S1>
412
214
  | SourceKeys<S2>
413
215
  | SourceKeys<S3>
@@ -415,66 +217,23 @@ type OnlyVariantsSplitPropsResult<
415
217
  | SourceKeys<S5>
416
218
  | SourceKeys<S6>
417
219
  | SourceKeys<S7>
220
+ | SourceKeys<S8>
418
221
  >,
419
222
  ]
420
- : Sources extends readonly [
421
- infer S1 extends KeySource,
422
- infer S2 extends KeySource,
423
- infer S3 extends KeySource,
424
- infer S4 extends KeySource,
425
- infer S5 extends KeySource,
426
- infer S6 extends KeySource,
427
- infer S7 extends KeySource,
428
- infer S8 extends KeySource,
429
- ]
430
- ? [
431
- SelfResult<T, keyof V, D>,
432
- SourceResult<T, S1>,
433
- SourceResult<T, S2>,
434
- SourceResult<T, S3>,
435
- SourceResult<T, S4>,
436
- SourceResult<T, S5>,
437
- SourceResult<T, S6>,
438
- SourceResult<T, S7>,
439
- SourceResult<T, S8>,
440
- Omit<
441
- T,
442
- | keyof V
443
- | SourceKeys<S1>
444
- | SourceKeys<S2>
445
- | SourceKeys<S3>
446
- | SourceKeys<S4>
447
- | SourceKeys<S5>
448
- | SourceKeys<S6>
449
- | SourceKeys<S7>
450
- | SourceKeys<S8>
451
- >,
452
- ]
453
- : unknown[];
454
-
455
- // OnlyVariantsSplitProps as a single generic function type
456
- export type OnlyVariantsSplitProps<V, D> = <
457
- const T extends Record<string, unknown>,
458
- const Sources extends readonly KeySource[],
459
- >(
460
- props: T,
461
- ...sources: Sources
462
- ) => OnlyVariantsSplitPropsResult<T, V, D, Sources>;
223
+ : unknown[];
463
224
 
464
- export interface OnlyVariantsComponent<V, D> {
465
- splitProps: OnlyVariantsSplitProps<V, D>;
225
+ export interface OnlyVariantsComponent<V> {
466
226
  getVariants: GetVariants<V>;
467
227
  keys: (keyof V)[];
468
228
  }
469
229
 
470
- export interface ModalComponent<V, D, R extends ComponentResult> {
230
+ export interface ModalComponent<V, R extends ComponentResult> {
471
231
  (props?: ComponentProps<V>): R;
472
232
  class: (props?: ComponentProps<V>) => string;
473
233
  style: (props?: ComponentProps<V>) => R["style"];
474
- splitProps: SplitProps<V, D, R>;
475
234
  getVariants: GetVariants<V>;
476
235
  keys: (keyof V | keyof R)[];
477
- onlyVariants: OnlyVariantsComponent<V, D>;
236
+ onlyVariants: OnlyVariantsComponent<V>;
478
237
  /** @internal Base class without variants */
479
238
  _baseClass: string;
480
239
  }
@@ -484,16 +243,15 @@ export interface Component<
484
243
  CV extends ComputedVariants = {},
485
244
  E extends AnyComponent[] = [],
486
245
  R extends ComponentResult = ComponentResult,
487
- D = VariantValues<MergeVariants<V, CV, E>>,
488
- > extends ModalComponent<MergeVariants<V, CV, E>, D, R> {
489
- jsx: ModalComponent<MergeVariants<V, CV, E>, D, JSXProps>;
490
- html: ModalComponent<MergeVariants<V, CV, E>, D, HTMLProps>;
491
- htmlObj: ModalComponent<MergeVariants<V, CV, E>, D, HTMLObjProps>;
246
+ > extends ModalComponent<MergeVariants<V, CV, E>, R> {
247
+ jsx: ModalComponent<MergeVariants<V, CV, E>, JSXProps>;
248
+ html: ModalComponent<MergeVariants<V, CV, E>, HTMLProps>;
249
+ htmlObj: ModalComponent<MergeVariants<V, CV, E>, HTMLObjProps>;
492
250
  }
493
251
 
494
252
  export type AnyComponent =
495
- | Component<any, any, any, any, any>
496
- | ModalComponent<any, any, any>;
253
+ | Component<any, any, any, any>
254
+ | ModalComponent<any, any>;
497
255
 
498
256
  type MergeExtendedVariants<T> = T extends readonly [infer First, ...infer Rest]
499
257
  ? ExtractVariants<First> & MergeExtendedVariants<Rest>
package/src/utils.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  import type * as CSS from "csstype";
2
-
3
2
  import type {
4
3
  StyleValue,
5
4
  JSXCSSProperties,