UNPKG

37.3 kBTypeScriptView Raw
1import type { RecipeDefinition, SlotRecipeDefinition, SystemRecipeFn, SystemSlotRecipeFn } from "../recipe.types"
2import type { ConditionalValue } from "../css.types"
3
4export interface BadgeVariant {
5 /** @default "subtle" */
6 variant?: "solid" | "subtle" | "outline" | "surface" | "plain"
7 /** @default "sm" */
8 size?: "xs" | "sm" | "md" | "lg"
9}
10
11export type BadgeVariantProps = {
12 [K in keyof BadgeVariant]?: ConditionalValue<BadgeVariant[K]> | undefined
13}
14
15export type BadgeVariantMap = {
16 [K in keyof BadgeVariant]: Array<BadgeVariant[K]>
17}
18
19export interface ButtonVariant {
20 /** @default "md" */
21 size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
22 /** @default "solid" */
23 variant?: "solid" | "subtle" | "surface" | "outline" | "ghost" | "plain"
24}
25
26export type ButtonVariantProps = {
27 [K in keyof ButtonVariant]?: ConditionalValue<ButtonVariant[K]> | undefined
28}
29
30export type ButtonVariantMap = {
31 [K in keyof ButtonVariant]: Array<ButtonVariant[K]>
32}
33
34export interface CodeVariant {
35 /** @default "subtle" */
36 variant?: "solid" | "subtle" | "outline" | "surface" | "plain"
37 /** @default "sm" */
38 size?: "xs" | "sm" | "md" | "lg"
39}
40
41export type CodeVariantProps = {
42 [K in keyof CodeVariant]?: ConditionalValue<CodeVariant[K]> | undefined
43}
44
45export type CodeVariantMap = {
46 [K in keyof CodeVariant]: Array<CodeVariant[K]>
47}
48
49export interface ContainerVariant {
50 centerContent?: boolean
51 fluid?: boolean
52}
53
54export type ContainerVariantProps = {
55 [K in keyof ContainerVariant]?: ConditionalValue<ContainerVariant[K]> | undefined
56}
57
58export type ContainerVariantMap = {
59 [K in keyof ContainerVariant]: Array<ContainerVariant[K]>
60}
61
62export interface HeadingVariant {
63 /** @default "xl" */
64 size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl"
65}
66
67export type HeadingVariantProps = {
68 [K in keyof HeadingVariant]?: ConditionalValue<HeadingVariant[K]> | undefined
69}
70
71export type HeadingVariantMap = {
72 [K in keyof HeadingVariant]: Array<HeadingVariant[K]>
73}
74
75export interface InputVariant {
76 /** @default "md" */
77 size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
78 /** @default "outline" */
79 variant?: "outline" | "subtle" | "flushed"
80}
81
82export type InputVariantProps = {
83 [K in keyof InputVariant]?: ConditionalValue<InputVariant[K]> | undefined
84}
85
86export type InputVariantMap = {
87 [K in keyof InputVariant]: Array<InputVariant[K]>
88}
89
90export interface InputAddonVariant {
91 /** @default "md" */
92 size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
93 /** @default "outline" */
94 variant?: "outline" | "subtle" | "flushed"
95}
96
97export type InputAddonVariantProps = {
98 [K in keyof InputAddonVariant]?: ConditionalValue<InputAddonVariant[K]> | undefined
99}
100
101export type InputAddonVariantMap = {
102 [K in keyof InputAddonVariant]: Array<InputAddonVariant[K]>
103}
104
105export interface KbdVariant {
106 /** @default "raised" */
107 variant?: "raised" | "outline" | "subtle" | "plain"
108 /** @default "md" */
109 size?: "sm" | "md" | "lg"
110}
111
112export type KbdVariantProps = {
113 [K in keyof KbdVariant]?: ConditionalValue<KbdVariant[K]> | undefined
114}
115
116export type KbdVariantMap = {
117 [K in keyof KbdVariant]: Array<KbdVariant[K]>
118}
119
120export interface LinkVariant {
121 /** @default "plain" */
122 variant?: "underline" | "plain"
123}
124
125export type LinkVariantProps = {
126 [K in keyof LinkVariant]?: ConditionalValue<LinkVariant[K]> | undefined
127}
128
129export type LinkVariantMap = {
130 [K in keyof LinkVariant]: Array<LinkVariant[K]>
131}
132
133export interface MarkVariant {
134 variant?: "subtle" | "solid" | "text" | "plain"
135}
136
137export type MarkVariantProps = {
138 [K in keyof MarkVariant]?: ConditionalValue<MarkVariant[K]> | undefined
139}
140
141export type MarkVariantMap = {
142 [K in keyof MarkVariant]: Array<MarkVariant[K]>
143}
144
145export interface SeparatorVariant {
146 /** @default "solid" */
147 variant?: "solid" | "dashed" | "dotted"
148 /** @default "horizontal" */
149 orientation?: "vertical" | "horizontal"
150 /** @default "sm" */
151 size?: "xs" | "sm" | "md" | "lg"
152}
153
154export type SeparatorVariantProps = {
155 [K in keyof SeparatorVariant]?: ConditionalValue<SeparatorVariant[K]> | undefined
156}
157
158export type SeparatorVariantMap = {
159 [K in keyof SeparatorVariant]: Array<SeparatorVariant[K]>
160}
161
162export interface SkeletonVariant {
163 /** @default true */
164 loading?: boolean
165 /** @default "pulse" */
166 variant?: "pulse" | "shine" | "none"
167}
168
169export type SkeletonVariantProps = {
170 [K in keyof SkeletonVariant]?: ConditionalValue<SkeletonVariant[K]> | undefined
171}
172
173export type SkeletonVariantMap = {
174 [K in keyof SkeletonVariant]: Array<SkeletonVariant[K]>
175}
176
177export interface SkipNavLinkVariant {}
178
179export type SkipNavLinkVariantProps = {
180 [K in keyof SkipNavLinkVariant]?: ConditionalValue<SkipNavLinkVariant[K]> | undefined
181}
182
183export type SkipNavLinkVariantMap = {
184 [K in keyof SkipNavLinkVariant]: Array<SkipNavLinkVariant[K]>
185}
186
187export interface SpinnerVariant {
188 /** @default "md" */
189 size?: "inherit" | "xs" | "sm" | "md" | "lg" | "xl"
190}
191
192export type SpinnerVariantProps = {
193 [K in keyof SpinnerVariant]?: ConditionalValue<SpinnerVariant[K]> | undefined
194}
195
196export type SpinnerVariantMap = {
197 [K in keyof SpinnerVariant]: Array<SpinnerVariant[K]>
198}
199
200export interface TextareaVariant {
201 /** @default "md" */
202 size?: "xs" | "sm" | "md" | "lg" | "xl"
203 /** @default "outline" */
204 variant?: "outline" | "subtle" | "flushed"
205}
206
207export type TextareaVariantProps = {
208 [K in keyof TextareaVariant]?: ConditionalValue<TextareaVariant[K]> | undefined
209}
210
211export type TextareaVariantMap = {
212 [K in keyof TextareaVariant]: Array<TextareaVariant[K]>
213}
214
215export interface IconVariant {
216 /** @default "inherit" */
217 size?: "inherit" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
218}
219
220export type IconVariantProps = {
221 [K in keyof IconVariant]?: ConditionalValue<IconVariant[K]> | undefined
222}
223
224export type IconVariantMap = {
225 [K in keyof IconVariant]: Array<IconVariant[K]>
226}
227
228export interface CheckmarkVariant {
229 /** @default "md" */
230 size?: "xs" | "sm" | "md" | "lg"
231 /** @default "solid" */
232 variant?: "solid" | "outline" | "subtle" | "plain" | "inverted"
233}
234
235export type CheckmarkVariantProps = {
236 [K in keyof CheckmarkVariant]?: ConditionalValue<CheckmarkVariant[K]> | undefined
237}
238
239export type CheckmarkVariantMap = {
240 [K in keyof CheckmarkVariant]: Array<CheckmarkVariant[K]>
241}
242
243export interface RadiomarkVariant {
244 /** @default "solid" */
245 variant?: "solid" | "subtle" | "outline" | "inverted"
246 /** @default "md" */
247 size?: "xs" | "sm" | "md" | "lg"
248}
249
250export type RadiomarkVariantProps = {
251 [K in keyof RadiomarkVariant]?: ConditionalValue<RadiomarkVariant[K]> | undefined
252}
253
254export type RadiomarkVariantMap = {
255 [K in keyof RadiomarkVariant]: Array<RadiomarkVariant[K]>
256}
257
258export interface ColorSwatchVariant {
259 /** @default "md" */
260 size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "inherit" | "full"
261 /** @default "rounded" */
262 shape?: "square" | "circle" | "rounded"
263}
264
265export type ColorSwatchVariantProps = {
266 [K in keyof ColorSwatchVariant]?: ConditionalValue<ColorSwatchVariant[K]> | undefined
267}
268
269export type ColorSwatchVariantMap = {
270 [K in keyof ColorSwatchVariant]: Array<ColorSwatchVariant[K]>
271}
272
273export interface ConfigRecipes {
274 badge: SystemRecipeFn<BadgeVariantProps, BadgeVariantMap>
275 button: SystemRecipeFn<ButtonVariantProps, ButtonVariantMap>
276 code: SystemRecipeFn<CodeVariantProps, CodeVariantMap>
277 container: SystemRecipeFn<ContainerVariantProps, ContainerVariantMap>
278 heading: SystemRecipeFn<HeadingVariantProps, HeadingVariantMap>
279 input: SystemRecipeFn<InputVariantProps, InputVariantMap>
280 inputAddon: SystemRecipeFn<InputAddonVariantProps, InputAddonVariantMap>
281 kbd: SystemRecipeFn<KbdVariantProps, KbdVariantMap>
282 link: SystemRecipeFn<LinkVariantProps, LinkVariantMap>
283 mark: SystemRecipeFn<MarkVariantProps, MarkVariantMap>
284 separator: SystemRecipeFn<SeparatorVariantProps, SeparatorVariantMap>
285 skeleton: SystemRecipeFn<SkeletonVariantProps, SkeletonVariantMap>
286 skipNavLink: SystemRecipeFn<SkipNavLinkVariantProps, SkipNavLinkVariantMap>
287 spinner: SystemRecipeFn<SpinnerVariantProps, SpinnerVariantMap>
288 textarea: SystemRecipeFn<TextareaVariantProps, TextareaVariantMap>
289 icon: SystemRecipeFn<IconVariantProps, IconVariantMap>
290 checkmark: SystemRecipeFn<CheckmarkVariantProps, CheckmarkVariantMap>
291 radiomark: SystemRecipeFn<RadiomarkVariantProps, RadiomarkVariantMap>
292 colorSwatch: SystemRecipeFn<ColorSwatchVariantProps, ColorSwatchVariantMap>
293}
294
295// Accordion
296
297export type AccordionSlot = "root" | "item" | "itemTrigger" | "itemContent" | "itemIndicator" | "itemBody"
298
299export interface AccordionVariant {
300 /** @default "outline" */
301 variant?: "outline" | "subtle" | "enclosed" | "plain"
302 /** @default "md" */
303 size?: "sm" | "md" | "lg"
304}
305
306export type AccordionVariantProps = {
307 [K in keyof AccordionVariant]?: ConditionalValue<AccordionVariant[K]> | undefined
308}
309
310export type AccordionVariantMap = {
311 [K in keyof AccordionVariant]: Array<AccordionVariant[K]>
312}
313
314// ActionBar
315
316export type ActionBarSlot = "positioner" | "content" | "separator" | "selectionTrigger" | "closeTrigger"
317
318export interface ActionBarVariant {}
319
320export type ActionBarVariantProps = {
321 [K in keyof ActionBarVariant]?: ConditionalValue<ActionBarVariant[K]> | undefined
322}
323
324export type ActionBarVariantMap = {
325 [K in keyof ActionBarVariant]: Array<ActionBarVariant[K]>
326}
327
328// Alert
329
330export type AlertSlot = "title" | "description" | "root" | "indicator" | "content"
331
332export interface AlertVariant {
333 /** @default "info" */
334 status?: "info" | "warning" | "success" | "error" | "neutral"
335 inline?: boolean
336 /** @default "subtle" */
337 variant?: "subtle" | "surface" | "outline" | "solid"
338 /** @default "md" */
339 size?: "sm" | "md" | "lg"
340}
341
342export type AlertVariantProps = {
343 [K in keyof AlertVariant]?: ConditionalValue<AlertVariant[K]> | undefined
344}
345
346export type AlertVariantMap = {
347 [K in keyof AlertVariant]: Array<AlertVariant[K]>
348}
349
350// Avatar
351
352export type AvatarSlot = "root" | "image" | "fallback"
353
354export interface AvatarVariant {
355 /** @default "md" */
356 size?: "full" | "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
357 /** @default "subtle" */
358 variant?: "solid" | "subtle" | "outline"
359 /** @default "full" */
360 shape?: "square" | "rounded" | "full"
361 borderless?: boolean
362}
363
364export type AvatarVariantProps = {
365 [K in keyof AvatarVariant]?: ConditionalValue<AvatarVariant[K]> | undefined
366}
367
368export type AvatarVariantMap = {
369 [K in keyof AvatarVariant]: Array<AvatarVariant[K]>
370}
371
372// Blockquote
373
374export type BlockquoteSlot = "root" | "icon" | "content" | "caption"
375
376export interface BlockquoteVariant {
377 /** @default "start" */
378 justify?: "start" | "center" | "end"
379 /** @default "subtle" */
380 variant?: "subtle" | "solid" | "plain"
381}
382
383export type BlockquoteVariantProps = {
384 [K in keyof BlockquoteVariant]?: ConditionalValue<BlockquoteVariant[K]> | undefined
385}
386
387export type BlockquoteVariantMap = {
388 [K in keyof BlockquoteVariant]: Array<BlockquoteVariant[K]>
389}
390
391// Breadcrumb
392
393export type BreadcrumbSlot = "link" | "currentLink" | "item" | "list" | "root" | "ellipsis" | "separator"
394
395export interface BreadcrumbVariant {
396 /** @default "plain" */
397 variant?: "underline" | "plain"
398 /** @default "md" */
399 size?: "sm" | "md" | "lg"
400}
401
402export type BreadcrumbVariantProps = {
403 [K in keyof BreadcrumbVariant]?: ConditionalValue<BreadcrumbVariant[K]> | undefined
404}
405
406export type BreadcrumbVariantMap = {
407 [K in keyof BreadcrumbVariant]: Array<BreadcrumbVariant[K]>
408}
409
410// Card
411
412export type CardSlot = "root" | "header" | "body" | "footer" | "title" | "description"
413
414export interface CardVariant {
415 /** @default "md" */
416 size?: "sm" | "md" | "lg"
417 /** @default "outline" */
418 variant?: "elevated" | "outline" | "subtle"
419}
420
421export type CardVariantProps = {
422 [K in keyof CardVariant]?: ConditionalValue<CardVariant[K]> | undefined
423}
424
425export type CardVariantMap = {
426 [K in keyof CardVariant]: Array<CardVariant[K]>
427}
428
429// Checkbox
430
431export type CheckboxSlot = "root" | "label" | "control" | "indicator" | "group"
432
433export interface CheckboxVariant {
434 /** @default "md" */
435 size?: "xs" | "sm" | "md" | "lg"
436 /** @default "solid" */
437 variant?: "outline" | "solid" | "subtle"
438}
439
440export type CheckboxVariantProps = {
441 [K in keyof CheckboxVariant]?: ConditionalValue<CheckboxVariant[K]> | undefined
442}
443
444export type CheckboxVariantMap = {
445 [K in keyof CheckboxVariant]: Array<CheckboxVariant[K]>
446}
447
448// CheckboxCard
449
450export type CheckboxCardSlot = "root" | "control" | "label" | "description" | "addon" | "indicator" | "content"
451
452export interface CheckboxCardVariant {
453 /** @default "md" */
454 size?: "sm" | "md" | "lg"
455 /** @default "outline" */
456 variant?: "surface" | "subtle" | "outline" | "solid"
457 justify?: "start" | "end" | "center"
458 /** @default "start" */
459 align?: "start" | "end" | "center"
460 /** @default "horizontal" */
461 orientation?: "vertical" | "horizontal"
462}
463
464export type CheckboxCardVariantProps = {
465 [K in keyof CheckboxCardVariant]?: ConditionalValue<CheckboxCardVariant[K]> | undefined
466}
467
468export type CheckboxCardVariantMap = {
469 [K in keyof CheckboxCardVariant]: Array<CheckboxCardVariant[K]>
470}
471
472// Collapsible
473
474export type CollapsibleSlot = "root" | "trigger" | "content"
475
476export interface CollapsibleVariant {}
477
478export type CollapsibleVariantProps = {
479 [K in keyof CollapsibleVariant]?: ConditionalValue<CollapsibleVariant[K]> | undefined
480}
481
482export type CollapsibleVariantMap = {
483 [K in keyof CollapsibleVariant]: Array<CollapsibleVariant[K]>
484}
485
486// DataList
487
488export type DataListSlot = "root" | "item" | "itemLabel" | "itemValue"
489
490export interface DataListVariant {
491 /** @default "vertical" */
492 orientation?: "horizontal" | "vertical"
493 /** @default "md" */
494 size?: "sm" | "md" | "lg"
495 /** @default "subtle" */
496 variant?: "subtle" | "bold"
497}
498
499export type DataListVariantProps = {
500 [K in keyof DataListVariant]?: ConditionalValue<DataListVariant[K]> | undefined
501}
502
503export type DataListVariantMap = {
504 [K in keyof DataListVariant]: Array<DataListVariant[K]>
505}
506
507// Dialog
508
509export type DialogSlot =
510 | "trigger"
511 | "backdrop"
512 | "positioner"
513 | "content"
514 | "title"
515 | "description"
516 | "closeTrigger"
517 | "header"
518 | "body"
519 | "footer"
520 | "backdrop"
521
522export interface DialogVariant {
523 /** @default "top" */
524 placement?: "center" | "top" | "bottom"
525 /** @default "outside" */
526 scrollBehavior?: "inside" | "outside"
527 /** @default "md" */
528 size?: "xs" | "sm" | "md" | "lg" | "xl" | "cover" | "full"
529 /** @default "scale" */
530 motionPreset?: "scale" | "slide-in-bottom" | "slide-in-top" | "slide-in-left" | "slide-in-right" | "none"
531}
532
533export type DialogVariantProps = {
534 [K in keyof DialogVariant]?: ConditionalValue<DialogVariant[K]> | undefined
535}
536
537export type DialogVariantMap = {
538 [K in keyof DialogVariant]: Array<DialogVariant[K]>
539}
540
541// Drawer
542
543export type DrawerSlot =
544 | "trigger"
545 | "backdrop"
546 | "positioner"
547 | "content"
548 | "title"
549 | "description"
550 | "closeTrigger"
551 | "header"
552 | "body"
553 | "footer"
554 | "backdrop"
555
556export interface DrawerVariant {
557 /** @default "xs" */
558 size?: "xs" | "sm" | "md" | "lg" | "xl" | "full"
559 /** @default "end" */
560 placement?: "start" | "end" | "top" | "bottom"
561 contained?: boolean
562}
563
564export type DrawerVariantProps = {
565 [K in keyof DrawerVariant]?: ConditionalValue<DrawerVariant[K]> | undefined
566}
567
568export type DrawerVariantMap = {
569 [K in keyof DrawerVariant]: Array<DrawerVariant[K]>
570}
571
572// Editable
573
574export type EditableSlot = "root" | "area" | "label" | "preview" | "input" | "editTrigger" | "submitTrigger" | "cancelTrigger" | "control" | "textarea"
575
576export interface EditableVariant {
577 /** @default "md" */
578 size?: "sm" | "md" | "lg"
579}
580
581export type EditableVariantProps = {
582 [K in keyof EditableVariant]?: ConditionalValue<EditableVariant[K]> | undefined
583}
584
585export type EditableVariantMap = {
586 [K in keyof EditableVariant]: Array<EditableVariant[K]>
587}
588
589// EmptyState
590
591export type EmptyStateSlot = "root" | "content" | "indicator" | "title" | "description"
592
593export interface EmptyStateVariant {
594 /** @default "md" */
595 size?: "sm" | "md" | "lg"
596}
597
598export type EmptyStateVariantProps = {
599 [K in keyof EmptyStateVariant]?: ConditionalValue<EmptyStateVariant[K]> | undefined
600}
601
602export type EmptyStateVariantMap = {
603 [K in keyof EmptyStateVariant]: Array<EmptyStateVariant[K]>
604}
605
606// Field
607
608export type FieldSlot = "root" | "errorText" | "helperText" | "input" | "label" | "select" | "textarea" | "requiredIndicator" | "requiredIndicator"
609
610export interface FieldVariant {
611 /** @default "vertical" */
612 orientation?: "vertical" | "horizontal"
613}
614
615export type FieldVariantProps = {
616 [K in keyof FieldVariant]?: ConditionalValue<FieldVariant[K]> | undefined
617}
618
619export type FieldVariantMap = {
620 [K in keyof FieldVariant]: Array<FieldVariant[K]>
621}
622
623// Fieldset
624
625export type FieldsetSlot = "root" | "errorText" | "helperText" | "legend" | "content"
626
627export interface FieldsetVariant {
628 /** @default "md" */
629 size?: "sm" | "md" | "lg"
630}
631
632export type FieldsetVariantProps = {
633 [K in keyof FieldsetVariant]?: ConditionalValue<FieldsetVariant[K]> | undefined
634}
635
636export type FieldsetVariantMap = {
637 [K in keyof FieldsetVariant]: Array<FieldsetVariant[K]>
638}
639
640// FileUpload
641
642export type FileUploadSlot =
643 | "root"
644 | "dropzone"
645 | "item"
646 | "itemDeleteTrigger"
647 | "itemGroup"
648 | "itemName"
649 | "itemPreview"
650 | "itemPreviewImage"
651 | "itemSizeText"
652 | "label"
653 | "trigger"
654 | "clearTrigger"
655 | "itemContent"
656 | "dropzoneContent"
657
658export interface FileUploadVariant {}
659
660export type FileUploadVariantProps = {
661 [K in keyof FileUploadVariant]?: ConditionalValue<FileUploadVariant[K]> | undefined
662}
663
664export type FileUploadVariantMap = {
665 [K in keyof FileUploadVariant]: Array<FileUploadVariant[K]>
666}
667
668// HoverCard
669
670export type HoverCardSlot = "arrow" | "arrowTip" | "trigger" | "positioner" | "content"
671
672export interface HoverCardVariant {
673 /** @default "md" */
674 size?: "xs" | "sm" | "md" | "lg"
675}
676
677export type HoverCardVariantProps = {
678 [K in keyof HoverCardVariant]?: ConditionalValue<HoverCardVariant[K]> | undefined
679}
680
681export type HoverCardVariantMap = {
682 [K in keyof HoverCardVariant]: Array<HoverCardVariant[K]>
683}
684
685// List
686
687export type ListSlot = "root" | "item" | "indicator"
688
689export interface ListVariant {
690 /** @default "marker" */
691 variant?: "marker" | "plain"
692 align?: "center" | "start" | "end"
693}
694
695export type ListVariantProps = {
696 [K in keyof ListVariant]?: ConditionalValue<ListVariant[K]> | undefined
697}
698
699export type ListVariantMap = {
700 [K in keyof ListVariant]: Array<ListVariant[K]>
701}
702
703// Menu
704
705export type MenuSlot =
706 | "arrow"
707 | "arrowTip"
708 | "content"
709 | "contextTrigger"
710 | "indicator"
711 | "item"
712 | "itemGroup"
713 | "itemGroupLabel"
714 | "itemIndicator"
715 | "itemText"
716 | "positioner"
717 | "separator"
718 | "trigger"
719 | "triggerItem"
720 | "itemCommand"
721
722export interface MenuVariant {
723 /** @default "subtle" */
724 variant?: "subtle" | "solid"
725 /** @default "md" */
726 size?: "sm" | "md"
727}
728
729export type MenuVariantProps = {
730 [K in keyof MenuVariant]?: ConditionalValue<MenuVariant[K]> | undefined
731}
732
733export type MenuVariantMap = {
734 [K in keyof MenuVariant]: Array<MenuVariant[K]>
735}
736
737// NativeSelect
738
739export type NativeSelectSlot = "root" | "field" | "indicator"
740
741export interface NativeSelectVariant {
742 /** @default "outline" */
743 variant?: "outline" | "subtle" | "plain"
744 /** @default "md" */
745 size?: "xs" | "sm" | "md" | "lg" | "xl"
746}
747
748export type NativeSelectVariantProps = {
749 [K in keyof NativeSelectVariant]?: ConditionalValue<NativeSelectVariant[K]> | undefined
750}
751
752export type NativeSelectVariantMap = {
753 [K in keyof NativeSelectVariant]: Array<NativeSelectVariant[K]>
754}
755
756// NumberInput
757
758export type NumberInputSlot = "root" | "label" | "input" | "control" | "valueText" | "incrementTrigger" | "decrementTrigger" | "scrubber"
759
760export interface NumberInputVariant {
761 /** @default "md" */
762 size?: "xs" | "sm" | "md" | "lg"
763 /** @default "outline" */
764 variant?: "outline" | "subtle" | "flushed"
765}
766
767export type NumberInputVariantProps = {
768 [K in keyof NumberInputVariant]?: ConditionalValue<NumberInputVariant[K]> | undefined
769}
770
771export type NumberInputVariantMap = {
772 [K in keyof NumberInputVariant]: Array<NumberInputVariant[K]>
773}
774
775// PinInput
776
777export type PinInputSlot = "root" | "label" | "input" | "control"
778
779export interface PinInputVariant {
780 /** @default "md" */
781 size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
782 /** @default "outline" */
783 variant?: "outline" | "subtle" | "flushed"
784}
785
786export type PinInputVariantProps = {
787 [K in keyof PinInputVariant]?: ConditionalValue<PinInputVariant[K]> | undefined
788}
789
790export type PinInputVariantMap = {
791 [K in keyof PinInputVariant]: Array<PinInputVariant[K]>
792}
793
794// Popover
795
796export type PopoverSlot =
797 | "arrow"
798 | "arrowTip"
799 | "anchor"
800 | "trigger"
801 | "indicator"
802 | "positioner"
803 | "content"
804 | "title"
805 | "description"
806 | "closeTrigger"
807 | "header"
808 | "body"
809 | "footer"
810
811export interface PopoverVariant {
812 /** @default "md" */
813 size?: "xs" | "sm" | "md" | "lg"
814}
815
816export type PopoverVariantProps = {
817 [K in keyof PopoverVariant]?: ConditionalValue<PopoverVariant[K]> | undefined
818}
819
820export type PopoverVariantMap = {
821 [K in keyof PopoverVariant]: Array<PopoverVariant[K]>
822}
823
824// Progress
825
826export type ProgressSlot = "root" | "label" | "track" | "range" | "valueText" | "view" | "circle" | "circleTrack" | "circleRange"
827
828export interface ProgressVariant {
829 /** @default "outline" */
830 variant?: "outline" | "subtle"
831 /** @default "rounded" */
832 shape?: "square" | "rounded" | "full"
833 striped?: boolean
834 animated?: boolean
835 /** @default "md" */
836 size?: "xs" | "sm" | "md" | "lg" | "xl"
837}
838
839export type ProgressVariantProps = {
840 [K in keyof ProgressVariant]?: ConditionalValue<ProgressVariant[K]> | undefined
841}
842
843export type ProgressVariantMap = {
844 [K in keyof ProgressVariant]: Array<ProgressVariant[K]>
845}
846
847// ProgressCircle
848
849export type ProgressCircleSlot = "root" | "label" | "track" | "range" | "valueText" | "view" | "circle" | "circleTrack" | "circleRange"
850
851export interface ProgressCircleVariant {
852 /** @default "md" */
853 size?: "xs" | "sm" | "md" | "lg" | "xl"
854}
855
856export type ProgressCircleVariantProps = {
857 [K in keyof ProgressCircleVariant]?: ConditionalValue<ProgressCircleVariant[K]> | undefined
858}
859
860export type ProgressCircleVariantMap = {
861 [K in keyof ProgressCircleVariant]: Array<ProgressCircleVariant[K]>
862}
863
864// RadioCard
865
866export type RadioCardSlot =
867 | "root"
868 | "label"
869 | "item"
870 | "itemText"
871 | "itemControl"
872 | "indicator"
873 | "itemAddon"
874 | "itemIndicator"
875 | "itemContent"
876 | "itemDescription"
877
878export interface RadioCardVariant {
879 /** @default "md" */
880 size?: "sm" | "md" | "lg"
881 /** @default "outline" */
882 variant?: "surface" | "subtle" | "outline" | "solid"
883 justify?: "start" | "end" | "center"
884 /** @default "start" */
885 align?: "start" | "end" | "center"
886 /** @default "horizontal" */
887 orientation?: "vertical" | "horizontal"
888}
889
890export type RadioCardVariantProps = {
891 [K in keyof RadioCardVariant]?: ConditionalValue<RadioCardVariant[K]> | undefined
892}
893
894export type RadioCardVariantMap = {
895 [K in keyof RadioCardVariant]: Array<RadioCardVariant[K]>
896}
897
898// RadioGroup
899
900export type RadioGroupSlot = "root" | "label" | "item" | "itemText" | "itemControl" | "indicator" | "itemAddon" | "itemIndicator"
901
902export interface RadioGroupVariant {
903 /** @default "solid" */
904 variant?: "outline" | "subtle" | "solid"
905 /** @default "md" */
906 size?: "xs" | "sm" | "md" | "lg"
907}
908
909export type RadioGroupVariantProps = {
910 [K in keyof RadioGroupVariant]?: ConditionalValue<RadioGroupVariant[K]> | undefined
911}
912
913export type RadioGroupVariantMap = {
914 [K in keyof RadioGroupVariant]: Array<RadioGroupVariant[K]>
915}
916
917// RatingGroup
918
919export type RatingGroupSlot = "root" | "label" | "item" | "control" | "itemIndicator"
920
921export interface RatingGroupVariant {
922 /** @default "md" */
923 size?: "xs" | "sm" | "md" | "lg"
924}
925
926export type RatingGroupVariantProps = {
927 [K in keyof RatingGroupVariant]?: ConditionalValue<RatingGroupVariant[K]> | undefined
928}
929
930export type RatingGroupVariantMap = {
931 [K in keyof RatingGroupVariant]: Array<RatingGroupVariant[K]>
932}
933
934// SegmentGroup
935
936export type SegmentGroupSlot = "root" | "label" | "item" | "itemText" | "itemControl" | "indicator"
937
938export interface SegmentGroupVariant {
939 /** @default "md" */
940 size?: "xs" | "sm" | "md" | "lg"
941}
942
943export type SegmentGroupVariantProps = {
944 [K in keyof SegmentGroupVariant]?: ConditionalValue<SegmentGroupVariant[K]> | undefined
945}
946
947export type SegmentGroupVariantMap = {
948 [K in keyof SegmentGroupVariant]: Array<SegmentGroupVariant[K]>
949}
950
951// Select
952
953export type SelectSlot =
954 | "label"
955 | "positioner"
956 | "trigger"
957 | "indicator"
958 | "clearTrigger"
959 | "item"
960 | "itemText"
961 | "itemIndicator"
962 | "itemGroup"
963 | "itemGroupLabel"
964 | "list"
965 | "content"
966 | "root"
967 | "control"
968 | "valueText"
969 | "indicatorGroup"
970
971export interface SelectVariant {
972 /** @default "outline" */
973 variant?: "outline" | "subtle"
974 /** @default "md" */
975 size?: "xs" | "sm" | "md" | "lg"
976}
977
978export type SelectVariantProps = {
979 [K in keyof SelectVariant]?: ConditionalValue<SelectVariant[K]> | undefined
980}
981
982export type SelectVariantMap = {
983 [K in keyof SelectVariant]: Array<SelectVariant[K]>
984}
985
986// Slider
987
988export type SliderSlot =
989 | "root"
990 | "label"
991 | "thumb"
992 | "valueText"
993 | "track"
994 | "range"
995 | "control"
996 | "markerGroup"
997 | "marker"
998 | "draggingIndicator"
999 | "markerIndicator"
1000
1001export interface SliderVariant {
1002 /** @default "md" */
1003 size?: "sm" | "md" | "lg"
1004 /** @default "outline" */
1005 variant?: "outline" | "solid"
1006 /** @default "horizontal" */
1007 orientation?: "vertical" | "horizontal"
1008}
1009
1010export type SliderVariantProps = {
1011 [K in keyof SliderVariant]?: ConditionalValue<SliderVariant[K]> | undefined
1012}
1013
1014export type SliderVariantMap = {
1015 [K in keyof SliderVariant]: Array<SliderVariant[K]>
1016}
1017
1018// Stat
1019
1020export type StatSlot = "root" | "label" | "helpText" | "valueText" | "valueUnit" | "indicator"
1021
1022export interface StatVariant {
1023 /** @default "md" */
1024 size?: "sm" | "md" | "lg"
1025}
1026
1027export type StatVariantProps = {
1028 [K in keyof StatVariant]?: ConditionalValue<StatVariant[K]> | undefined
1029}
1030
1031export type StatVariantMap = {
1032 [K in keyof StatVariant]: Array<StatVariant[K]>
1033}
1034
1035// Steps
1036
1037export type StepsSlot =
1038 | "root"
1039 | "list"
1040 | "item"
1041 | "trigger"
1042 | "indicator"
1043 | "separator"
1044 | "content"
1045 | "title"
1046 | "description"
1047 | "nextTrigger"
1048 | "prevTrigger"
1049 | "progress"
1050
1051export interface StepsVariant {
1052 /** @default "horizontal" */
1053 orientation?: "vertical" | "horizontal"
1054 /** @default "solid" */
1055 variant?: "solid" | "subtle"
1056 /** @default "md" */
1057 size?: "xs" | "sm" | "md" | "lg"
1058}
1059
1060export type StepsVariantProps = {
1061 [K in keyof StepsVariant]?: ConditionalValue<StepsVariant[K]> | undefined
1062}
1063
1064export type StepsVariantMap = {
1065 [K in keyof StepsVariant]: Array<StepsVariant[K]>
1066}
1067
1068// Switch
1069
1070export type SwitchSlot = "root" | "label" | "control" | "thumb" | "indicator"
1071
1072export interface SwitchVariant {
1073 /** @default "solid" */
1074 variant?: "solid" | "raised"
1075 /** @default "md" */
1076 size?: "xs" | "sm" | "md" | "lg"
1077}
1078
1079export type SwitchVariantProps = {
1080 [K in keyof SwitchVariant]?: ConditionalValue<SwitchVariant[K]> | undefined
1081}
1082
1083export type SwitchVariantMap = {
1084 [K in keyof SwitchVariant]: Array<SwitchVariant[K]>
1085}
1086
1087// Table
1088
1089export type TableSlot = "root" | "header" | "body" | "row" | "columnHeader" | "cell" | "footer" | "caption"
1090
1091export interface TableVariant {
1092 interactive?: boolean
1093 stickyHeader?: boolean
1094 striped?: boolean
1095 showColumnBorder?: boolean
1096 /** @default "line" */
1097 variant?: "line" | "outline"
1098 /** @default "md" */
1099 size?: "sm" | "md" | "lg"
1100}
1101
1102export type TableVariantProps = {
1103 [K in keyof TableVariant]?: ConditionalValue<TableVariant[K]> | undefined
1104}
1105
1106export type TableVariantMap = {
1107 [K in keyof TableVariant]: Array<TableVariant[K]>
1108}
1109
1110// Tabs
1111
1112export type TabsSlot = "root" | "trigger" | "list" | "content" | "contentGroup" | "indicator"
1113
1114export interface TabsVariant {
1115 fitted?: boolean
1116 justify?: "start" | "center" | "end"
1117 /** @default "md" */
1118 size?: "sm" | "md" | "lg"
1119 /** @default "line" */
1120 variant?: "line" | "subtle" | "enclosed" | "outline" | "plain"
1121}
1122
1123export type TabsVariantProps = {
1124 [K in keyof TabsVariant]?: ConditionalValue<TabsVariant[K]> | undefined
1125}
1126
1127export type TabsVariantMap = {
1128 [K in keyof TabsVariant]: Array<TabsVariant[K]>
1129}
1130
1131// Tag
1132
1133export type TagSlot = "root" | "label" | "closeTrigger" | "startElement" | "endElement"
1134
1135export interface TagVariant {
1136 /** @default "md" */
1137 size?: "sm" | "md" | "lg" | "xl"
1138 /** @default "surface" */
1139 variant?: "subtle" | "solid" | "outline" | "surface"
1140}
1141
1142export type TagVariantProps = {
1143 [K in keyof TagVariant]?: ConditionalValue<TagVariant[K]> | undefined
1144}
1145
1146export type TagVariantMap = {
1147 [K in keyof TagVariant]: Array<TagVariant[K]>
1148}
1149
1150// Toast
1151
1152export type ToastSlot = "root" | "title" | "description" | "indicator" | "closeTrigger" | "actionTrigger"
1153
1154export interface ToastVariant {}
1155
1156export type ToastVariantProps = {
1157 [K in keyof ToastVariant]?: ConditionalValue<ToastVariant[K]> | undefined
1158}
1159
1160export type ToastVariantMap = {
1161 [K in keyof ToastVariant]: Array<ToastVariant[K]>
1162}
1163
1164// Tooltip
1165
1166export type TooltipSlot = "trigger" | "arrow" | "arrowTip" | "positioner" | "content"
1167
1168export interface TooltipVariant {}
1169
1170export type TooltipVariantProps = {
1171 [K in keyof TooltipVariant]?: ConditionalValue<TooltipVariant[K]> | undefined
1172}
1173
1174export type TooltipVariantMap = {
1175 [K in keyof TooltipVariant]: Array<TooltipVariant[K]>
1176}
1177
1178// Status
1179
1180export type StatusSlot = "root" | "indicator"
1181
1182export interface StatusVariant {
1183 /** @default "md" */
1184 size?: "sm" | "md" | "lg"
1185}
1186
1187export type StatusVariantProps = {
1188 [K in keyof StatusVariant]?: ConditionalValue<StatusVariant[K]> | undefined
1189}
1190
1191export type StatusVariantMap = {
1192 [K in keyof StatusVariant]: Array<StatusVariant[K]>
1193}
1194
1195// Timeline
1196
1197export type TimelineSlot = "root" | "item" | "content" | "separator" | "indicator" | "connector" | "title" | "description"
1198
1199export interface TimelineVariant {
1200 /** @default "solid" */
1201 variant?: "subtle" | "solid" | "outline" | "plain"
1202 /** @default "md" */
1203 size?: "sm" | "md" | "lg" | "xl"
1204}
1205
1206export type TimelineVariantProps = {
1207 [K in keyof TimelineVariant]?: ConditionalValue<TimelineVariant[K]> | undefined
1208}
1209
1210export type TimelineVariantMap = {
1211 [K in keyof TimelineVariant]: Array<TimelineVariant[K]>
1212}
1213
1214// ColorPicker
1215
1216export type ColorPickerSlot =
1217 | "root"
1218 | "label"
1219 | "control"
1220 | "trigger"
1221 | "positioner"
1222 | "content"
1223 | "area"
1224 | "areaThumb"
1225 | "valueText"
1226 | "areaBackground"
1227 | "channelSlider"
1228 | "channelSliderLabel"
1229 | "channelSliderTrack"
1230 | "channelSliderThumb"
1231 | "channelSliderValueText"
1232 | "channelInput"
1233 | "transparencyGrid"
1234 | "swatchGroup"
1235 | "swatchTrigger"
1236 | "swatchIndicator"
1237 | "swatch"
1238 | "eyeDropperTrigger"
1239 | "formatTrigger"
1240 | "formatSelect"
1241 | "view"
1242
1243export interface ColorPickerVariant {
1244 /** @default "md" */
1245 size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
1246 /** @default "outline" */
1247 variant?: "outline" | "subtle"
1248}
1249
1250export type ColorPickerVariantProps = {
1251 [K in keyof ColorPickerVariant]?: ConditionalValue<ColorPickerVariant[K]> | undefined
1252}
1253
1254export type ColorPickerVariantMap = {
1255 [K in keyof ColorPickerVariant]: Array<ColorPickerVariant[K]>
1256}
1257
1258// QrCode
1259
1260export type QrCodeSlot = "root" | "frame" | "pattern" | "overlay" | "downloadTrigger"
1261
1262export interface QrCodeVariant {
1263 /** @default "md" */
1264 size?: "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "full"
1265}
1266
1267export type QrCodeVariantProps = {
1268 [K in keyof QrCodeVariant]?: ConditionalValue<QrCodeVariant[K]> | undefined
1269}
1270
1271export type QrCodeVariantMap = {
1272 [K in keyof QrCodeVariant]: Array<QrCodeVariant[K]>
1273}
1274
1275export interface ConfigSlotRecipes {
1276 accordion: SystemSlotRecipeFn<AccordionSlot, AccordionVariantProps, AccordionVariantMap>
1277 actionBar: SystemSlotRecipeFn<ActionBarSlot, ActionBarVariantProps, ActionBarVariantMap>
1278 alert: SystemSlotRecipeFn<AlertSlot, AlertVariantProps, AlertVariantMap>
1279 avatar: SystemSlotRecipeFn<AvatarSlot, AvatarVariantProps, AvatarVariantMap>
1280 blockquote: SystemSlotRecipeFn<BlockquoteSlot, BlockquoteVariantProps, BlockquoteVariantMap>
1281 breadcrumb: SystemSlotRecipeFn<BreadcrumbSlot, BreadcrumbVariantProps, BreadcrumbVariantMap>
1282 card: SystemSlotRecipeFn<CardSlot, CardVariantProps, CardVariantMap>
1283 checkbox: SystemSlotRecipeFn<CheckboxSlot, CheckboxVariantProps, CheckboxVariantMap>
1284 checkboxCard: SystemSlotRecipeFn<CheckboxCardSlot, CheckboxCardVariantProps, CheckboxCardVariantMap>
1285 collapsible: SystemSlotRecipeFn<CollapsibleSlot, CollapsibleVariantProps, CollapsibleVariantMap>
1286 dataList: SystemSlotRecipeFn<DataListSlot, DataListVariantProps, DataListVariantMap>
1287 dialog: SystemSlotRecipeFn<DialogSlot, DialogVariantProps, DialogVariantMap>
1288 drawer: SystemSlotRecipeFn<DrawerSlot, DrawerVariantProps, DrawerVariantMap>
1289 editable: SystemSlotRecipeFn<EditableSlot, EditableVariantProps, EditableVariantMap>
1290 emptyState: SystemSlotRecipeFn<EmptyStateSlot, EmptyStateVariantProps, EmptyStateVariantMap>
1291 field: SystemSlotRecipeFn<FieldSlot, FieldVariantProps, FieldVariantMap>
1292 fieldset: SystemSlotRecipeFn<FieldsetSlot, FieldsetVariantProps, FieldsetVariantMap>
1293 fileUpload: SystemSlotRecipeFn<FileUploadSlot, FileUploadVariantProps, FileUploadVariantMap>
1294 hoverCard: SystemSlotRecipeFn<HoverCardSlot, HoverCardVariantProps, HoverCardVariantMap>
1295 list: SystemSlotRecipeFn<ListSlot, ListVariantProps, ListVariantMap>
1296 menu: SystemSlotRecipeFn<MenuSlot, MenuVariantProps, MenuVariantMap>
1297 nativeSelect: SystemSlotRecipeFn<NativeSelectSlot, NativeSelectVariantProps, NativeSelectVariantMap>
1298 numberInput: SystemSlotRecipeFn<NumberInputSlot, NumberInputVariantProps, NumberInputVariantMap>
1299 pinInput: SystemSlotRecipeFn<PinInputSlot, PinInputVariantProps, PinInputVariantMap>
1300 popover: SystemSlotRecipeFn<PopoverSlot, PopoverVariantProps, PopoverVariantMap>
1301 progress: SystemSlotRecipeFn<ProgressSlot, ProgressVariantProps, ProgressVariantMap>
1302 progressCircle: SystemSlotRecipeFn<ProgressCircleSlot, ProgressCircleVariantProps, ProgressCircleVariantMap>
1303 radioCard: SystemSlotRecipeFn<RadioCardSlot, RadioCardVariantProps, RadioCardVariantMap>
1304 radioGroup: SystemSlotRecipeFn<RadioGroupSlot, RadioGroupVariantProps, RadioGroupVariantMap>
1305 ratingGroup: SystemSlotRecipeFn<RatingGroupSlot, RatingGroupVariantProps, RatingGroupVariantMap>
1306 segmentGroup: SystemSlotRecipeFn<SegmentGroupSlot, SegmentGroupVariantProps, SegmentGroupVariantMap>
1307 select: SystemSlotRecipeFn<SelectSlot, SelectVariantProps, SelectVariantMap>
1308 slider: SystemSlotRecipeFn<SliderSlot, SliderVariantProps, SliderVariantMap>
1309 stat: SystemSlotRecipeFn<StatSlot, StatVariantProps, StatVariantMap>
1310 steps: SystemSlotRecipeFn<StepsSlot, StepsVariantProps, StepsVariantMap>
1311 switch: SystemSlotRecipeFn<SwitchSlot, SwitchVariantProps, SwitchVariantMap>
1312 table: SystemSlotRecipeFn<TableSlot, TableVariantProps, TableVariantMap>
1313 tabs: SystemSlotRecipeFn<TabsSlot, TabsVariantProps, TabsVariantMap>
1314 tag: SystemSlotRecipeFn<TagSlot, TagVariantProps, TagVariantMap>
1315 toast: SystemSlotRecipeFn<ToastSlot, ToastVariantProps, ToastVariantMap>
1316 tooltip: SystemSlotRecipeFn<TooltipSlot, TooltipVariantProps, TooltipVariantMap>
1317 status: SystemSlotRecipeFn<StatusSlot, StatusVariantProps, StatusVariantMap>
1318 timeline: SystemSlotRecipeFn<TimelineSlot, TimelineVariantProps, TimelineVariantMap>
1319 colorPicker: SystemSlotRecipeFn<ColorPickerSlot, ColorPickerVariantProps, ColorPickerVariantMap>
1320 qrCode: SystemSlotRecipeFn<QrCodeSlot, QrCodeVariantProps, QrCodeVariantMap>
1321}
1322
1323export interface ConfigRecipeSlots {
1324 accordion: AccordionSlot
1325 actionBar: ActionBarSlot
1326 alert: AlertSlot
1327 avatar: AvatarSlot
1328 blockquote: BlockquoteSlot
1329 breadcrumb: BreadcrumbSlot
1330 card: CardSlot
1331 checkbox: CheckboxSlot
1332 checkboxCard: CheckboxCardSlot
1333 collapsible: CollapsibleSlot
1334 dataList: DataListSlot
1335 dialog: DialogSlot
1336 drawer: DrawerSlot
1337 editable: EditableSlot
1338 emptyState: EmptyStateSlot
1339 field: FieldSlot
1340 fieldset: FieldsetSlot
1341 fileUpload: FileUploadSlot
1342 hoverCard: HoverCardSlot
1343 list: ListSlot
1344 menu: MenuSlot
1345 nativeSelect: NativeSelectSlot
1346 numberInput: NumberInputSlot
1347 pinInput: PinInputSlot
1348 popover: PopoverSlot
1349 progress: ProgressSlot
1350 progressCircle: ProgressCircleSlot
1351 radioCard: RadioCardSlot
1352 radioGroup: RadioGroupSlot
1353 ratingGroup: RatingGroupSlot
1354 segmentGroup: SegmentGroupSlot
1355 select: SelectSlot
1356 slider: SliderSlot
1357 stat: StatSlot
1358 steps: StepsSlot
1359 switch: SwitchSlot
1360 table: TableSlot
1361 tabs: TabsSlot
1362 tag: TagSlot
1363 toast: ToastSlot
1364 tooltip: TooltipSlot
1365 status: StatusSlot
1366 timeline: TimelineSlot
1367 colorPicker: ColorPickerSlot
1368 qrCode: QrCodeSlot
1369}
1370
1371export type SlotRecipeRecord<T, K> = T extends keyof ConfigRecipeSlots ? Record<ConfigRecipeSlots[T], K> : Record<string, K>
1372
1373export type SlotRecipeProps<T> = T extends keyof ConfigSlotRecipes
1374 ? ConfigSlotRecipes[T]["__type"] & { recipe?: SlotRecipeDefinition }
1375 : { recipe?: SlotRecipeDefinition }
1376
1377export type RecipeProps<T> = T extends keyof ConfigRecipes ? ConfigRecipes[T]["__type"] & { recipe?: RecipeDefinition } : { recipe?: RecipeDefinition }