@enadhq/enad-react-sdk 1.1.0 → 1.2.0

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.
Files changed (157) hide show
  1. package/dist/client/cart/components/cart-drawer.mjs +3 -3
  2. package/dist/client/cart/components/cart-drawer.mjs.map +1 -1
  3. package/dist/client/cart/components/cart-trigger.mjs +1 -1
  4. package/dist/client/cart/components/cart-trigger.mjs.map +1 -1
  5. package/dist/client/storefront/checkout/cart-summary.mjs +1 -1
  6. package/dist/client/storefront/checkout/cart-summary.mjs.map +1 -1
  7. package/dist/client/storefront/components/language-selector.d.ts.map +1 -1
  8. package/dist/client/storefront/components/language-selector.mjs +1 -1
  9. package/dist/client/storefront/components/language-selector.mjs.map +1 -1
  10. package/dist/client/storefront/filters/filter-chip.mjs +1 -1
  11. package/dist/client/storefront/filters/filter-chip.mjs.map +1 -1
  12. package/dist/client/storefront/filters/filter-panel.mjs +1 -1
  13. package/dist/client/storefront/filters/filter-panel.mjs.map +1 -1
  14. package/dist/client/storefront/filters/toggle-list-view.mjs +1 -1
  15. package/dist/client/storefront/filters/toggle-list-view.mjs.map +1 -1
  16. package/dist/client/storefront/layout/promotion-bar.d.ts.map +1 -1
  17. package/dist/client/storefront/layout/promotion-bar.mjs +3 -3
  18. package/dist/client/storefront/layout/promotion-bar.mjs.map +1 -1
  19. package/dist/client/storefront/primitives/button.d.ts +2 -2
  20. package/dist/client/storefront/primitives/button.d.ts.map +1 -1
  21. package/dist/client/storefront/primitives/button.mjs +4 -4
  22. package/dist/client/storefront/primitives/button.mjs.map +1 -1
  23. package/dist/client/storefront/primitives/input.d.ts +1 -1
  24. package/dist/client/storefront/primitives/input.mjs.map +1 -1
  25. package/dist/client/storefront/primitives/pagination.mjs +2 -2
  26. package/dist/client/storefront/primitives/pagination.mjs.map +1 -1
  27. package/dist/client/storefront/product/quantity-picker.mjs +2 -2
  28. package/dist/client/storefront/product/quantity-picker.mjs.map +1 -1
  29. package/dist/client/storefront/types.d.ts +1 -1
  30. package/dist/client/storefront/types.d.ts.map +1 -1
  31. package/dist/client/storefront/types.mjs.map +1 -1
  32. package/dist/client/ui/accordion.d.ts +12 -1
  33. package/dist/client/ui/accordion.d.ts.map +1 -1
  34. package/dist/client/ui/accordion.mjs +23 -5
  35. package/dist/client/ui/accordion.mjs.map +1 -1
  36. package/dist/client/ui/alert.d.ts +16 -7
  37. package/dist/client/ui/alert.d.ts.map +1 -1
  38. package/dist/client/ui/alert.mjs +21 -8
  39. package/dist/client/ui/alert.mjs.map +1 -1
  40. package/dist/client/ui/avatar.d.ts +10 -1
  41. package/dist/client/ui/avatar.d.ts.map +1 -1
  42. package/dist/client/ui/avatar.mjs +18 -4
  43. package/dist/client/ui/avatar.mjs.map +1 -1
  44. package/dist/client/ui/breadcrumb.d.ts +13 -1
  45. package/dist/client/ui/breadcrumb.d.ts.map +1 -1
  46. package/dist/client/ui/breadcrumb.mjs +27 -7
  47. package/dist/client/ui/breadcrumb.mjs.map +1 -1
  48. package/dist/client/ui/button.d.ts +28 -10
  49. package/dist/client/ui/button.d.ts.map +1 -1
  50. package/dist/client/ui/button.mjs +45 -20
  51. package/dist/client/ui/button.mjs.map +1 -1
  52. package/dist/client/ui/card.d.ts +20 -1
  53. package/dist/client/ui/card.d.ts.map +1 -1
  54. package/dist/client/ui/card.mjs +36 -8
  55. package/dist/client/ui/card.mjs.map +1 -1
  56. package/dist/client/ui/carousel.d.ts.map +1 -1
  57. package/dist/client/ui/carousel.mjs +2 -2
  58. package/dist/client/ui/carousel.mjs.map +1 -1
  59. package/dist/client/ui/checkbox.d.ts +9 -1
  60. package/dist/client/ui/checkbox.d.ts.map +1 -1
  61. package/dist/client/ui/checkbox.mjs +12 -3
  62. package/dist/client/ui/checkbox.mjs.map +1 -1
  63. package/dist/client/ui/dialog.d.ts +13 -1
  64. package/dist/client/ui/dialog.d.ts.map +1 -1
  65. package/dist/client/ui/dialog.mjs +27 -7
  66. package/dist/client/ui/dialog.mjs.map +1 -1
  67. package/dist/client/ui/hover-card.d.ts +6 -1
  68. package/dist/client/ui/hover-card.d.ts.map +1 -1
  69. package/dist/client/ui/hover-card.mjs +4 -2
  70. package/dist/client/ui/hover-card.mjs.map +1 -1
  71. package/dist/client/ui/input.d.ts +20 -7
  72. package/dist/client/ui/input.d.ts.map +1 -1
  73. package/dist/client/ui/input.mjs +33 -9
  74. package/dist/client/ui/input.mjs.map +1 -1
  75. package/dist/client/ui/label.d.ts +6 -1
  76. package/dist/client/ui/label.d.ts.map +1 -1
  77. package/dist/client/ui/label.mjs +4 -2
  78. package/dist/client/ui/label.mjs.map +1 -1
  79. package/dist/client/ui/navigation-menu.d.ts +20 -3
  80. package/dist/client/ui/navigation-menu.d.ts.map +1 -1
  81. package/dist/client/ui/navigation-menu.mjs +34 -12
  82. package/dist/client/ui/navigation-menu.mjs.map +1 -1
  83. package/dist/client/ui/pagination.d.ts.map +1 -1
  84. package/dist/client/ui/pagination.mjs +3 -3
  85. package/dist/client/ui/pagination.mjs.map +1 -1
  86. package/dist/client/ui/popover.d.ts +11 -1
  87. package/dist/client/ui/popover.d.ts.map +1 -1
  88. package/dist/client/ui/popover.mjs +21 -5
  89. package/dist/client/ui/popover.mjs.map +1 -1
  90. package/dist/client/ui/progress.d.ts +9 -1
  91. package/dist/client/ui/progress.d.ts.map +1 -1
  92. package/dist/client/ui/progress.mjs +12 -3
  93. package/dist/client/ui/progress.mjs.map +1 -1
  94. package/dist/client/ui/select.d.ts +14 -2
  95. package/dist/client/ui/select.d.ts.map +1 -1
  96. package/dist/client/ui/select.mjs +35 -9
  97. package/dist/client/ui/select.mjs.map +1 -1
  98. package/dist/client/ui/separator.d.ts +6 -1
  99. package/dist/client/ui/separator.d.ts.map +1 -1
  100. package/dist/client/ui/separator.mjs +4 -2
  101. package/dist/client/ui/separator.mjs.map +1 -1
  102. package/dist/client/ui/sheet.d.ts +13 -1
  103. package/dist/client/ui/sheet.d.ts.map +1 -1
  104. package/dist/client/ui/sheet.mjs +35 -7
  105. package/dist/client/ui/sheet.mjs.map +1 -1
  106. package/dist/client/ui/slot-wrapper.d.ts +28 -0
  107. package/dist/client/ui/slot-wrapper.d.ts.map +1 -0
  108. package/dist/client/ui/slot-wrapper.mjs +38 -0
  109. package/dist/client/ui/slot-wrapper.mjs.map +1 -0
  110. package/dist/client/ui/tabs.d.ts +11 -1
  111. package/dist/client/ui/tabs.d.ts.map +1 -1
  112. package/dist/client/ui/tabs.mjs +21 -5
  113. package/dist/client/ui/tabs.mjs.map +1 -1
  114. package/dist/client/ui/toggle-group.d.ts +7 -4
  115. package/dist/client/ui/toggle-group.d.ts.map +1 -1
  116. package/dist/client/ui/toggle-group.mjs +4 -4
  117. package/dist/client/ui/toggle-group.mjs.map +1 -1
  118. package/dist/client/ui/toggle.d.ts +17 -8
  119. package/dist/client/ui/toggle.d.ts.map +1 -1
  120. package/dist/client/ui/toggle.mjs +11 -9
  121. package/dist/client/ui/toggle.mjs.map +1 -1
  122. package/dist/client/ui/tooltip.d.ts +6 -1
  123. package/dist/client/ui/tooltip.d.ts.map +1 -1
  124. package/dist/client/ui/tooltip.mjs +4 -2
  125. package/dist/client/ui/tooltip.mjs.map +1 -1
  126. package/dist/client/ui-resolver/button.d.ts +3 -4
  127. package/dist/client/ui-resolver/button.d.ts.map +1 -1
  128. package/dist/client/ui-resolver/button.mjs +2 -2
  129. package/dist/client/ui-resolver/button.mjs.map +1 -1
  130. package/dist/client/ui-resolver/card.d.ts +14 -1
  131. package/dist/client/ui-resolver/card.d.ts.map +1 -1
  132. package/dist/client/ui-resolver/card.mjs +3 -2
  133. package/dist/client/ui-resolver/card.mjs.map +1 -1
  134. package/dist/client/ui-resolver/context.mjs +1 -1
  135. package/dist/client/ui-resolver/context.mjs.map +1 -1
  136. package/dist/client/ui-resolver/index.d.ts +7 -4
  137. package/dist/client/ui-resolver/index.mjs +6 -4
  138. package/dist/client/ui-resolver/input.d.ts +3 -4
  139. package/dist/client/ui-resolver/input.d.ts.map +1 -1
  140. package/dist/client/ui-resolver/input.mjs +2 -2
  141. package/dist/client/ui-resolver/input.mjs.map +1 -1
  142. package/dist/client/ui-resolver/navigation-menu.d.ts +1 -2
  143. package/dist/client/ui-resolver/navigation-menu.d.ts.map +1 -1
  144. package/dist/client/ui-resolver/recipe.d.ts +95 -0
  145. package/dist/client/ui-resolver/recipe.d.ts.map +1 -0
  146. package/dist/client/ui-resolver/recipe.mjs +134 -0
  147. package/dist/client/ui-resolver/recipe.mjs.map +1 -0
  148. package/dist/client/ui-resolver/toggle.d.ts +2 -2
  149. package/dist/client/ui-resolver/toggle.mjs +2 -2
  150. package/dist/client/ui-resolver/toggle.mjs.map +1 -1
  151. package/dist/client/ui-resolver/types.d.ts +14 -0
  152. package/dist/client/ui-resolver/types.d.ts.map +1 -0
  153. package/dist/client/ui-resolver/types.mjs +1 -0
  154. package/dist/client/wishlist/wishlist-drawer.mjs +4 -4
  155. package/dist/client/wishlist/wishlist-drawer.mjs.map +1 -1
  156. package/dist/styles.css +1 -1
  157. package/package.json +2 -2
@@ -1,22 +1,40 @@
1
+ import { SemanticColor, Variant } from "../ui-resolver/types.js";
1
2
  import * as React$1 from "react";
2
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
- import { VariantProps } from "class-variance-authority";
4
- import * as class_variance_authority_types0 from "class-variance-authority/types";
5
4
 
6
5
  //#region src/client/ui/button.d.ts
7
- declare const buttonVariants: (props?: ({
8
- variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "soft" | "inverse" | "link" | null | undefined;
9
- size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
10
- } & class_variance_authority_types0.ClassProp) | undefined) => string;
6
+ declare const buttonRecipe: (props?: ({
7
+ variant?: "destructive" | "link" | "solid" | "soft" | "outlined" | "plain" | "secondary" | "inverse" | undefined;
8
+ size?: "xs" | "sm" | "md" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | undefined;
9
+ } & {
10
+ className?: string;
11
+ }) | undefined) => string;
12
+ type ButtonVariant = Variant | "destructive" | "secondary" | "inverse" | "link";
13
+ type ButtonSize = "xs" | "sm" | "md" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg";
14
+ interface ButtonProps extends Omit<React$1.ComponentProps<"button">, "color"> {
15
+ variant?: ButtonVariant;
16
+ size?: ButtonSize;
17
+ color?: SemanticColor;
18
+ asChild?: boolean;
19
+ startSlot?: React$1.ReactNode;
20
+ endSlot?: React$1.ReactNode;
21
+ }
11
22
  declare function Button({
12
23
  className,
13
24
  variant,
14
25
  size,
15
26
  asChild,
27
+ startSlot,
28
+ endSlot,
29
+ children,
16
30
  ...props
17
- }: React$1.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
18
- asChild?: boolean;
19
- }): react_jsx_runtime0.JSX.Element;
31
+ }: ButtonProps): react_jsx_runtime0.JSX.Element;
32
+ declare const buttonVariants: (props?: ({
33
+ variant?: "destructive" | "link" | "solid" | "soft" | "outlined" | "plain" | "secondary" | "inverse" | undefined;
34
+ size?: "xs" | "sm" | "md" | "lg" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | undefined;
35
+ } & {
36
+ className?: string;
37
+ }) | undefined) => string;
20
38
  //#endregion
21
- export { Button, buttonVariants };
39
+ export { Button, type ButtonProps, type ButtonSize, type ButtonVariant, buttonRecipe, buttonVariants };
22
40
  //# sourceMappingURL=button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","names":[],"sources":["../../../src/client/ui/button.tsx"],"mappings":";;;;;;cAMM,cAAA,GAAc,KAAA;;;IAmCnB,+BAAA,CAAA,SAAA;AAAA,iBAEQ,MAAA,CAAA;EACP,SAAA;EACA,OAAA;EACA,IAAA;EACA,OAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,aACP,YAAA,QAAoB,cAAA;EAClB,OAAA;AAAA,IACD,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"button.d.ts","names":[],"sources":["../../../src/client/ui/button.tsx"],"mappings":";;;;;cAOM,YAAA,GAAY,KAAA;;;;;;KAkCb,aAAA,GAAgB,OAAA;AAAA,KAChB,UAAA;AAAA,UAEK,WAAA,SAAoB,IAAA,CAAK,OAAA,CAAM,cAAA;EACvC,OAAA,GAAU,aAAA;EACV,IAAA,GAAO,UAAA;EACP,KAAA,GAAQ,aAAA;EACR,OAAA;EACA,SAAA,GAAY,OAAA,CAAM,SAAA;EAClB,OAAA,GAAU,OAAA,CAAM,SAAA;AAAA;AAAA,iBAGT,MAAA,CAAA;EACP,SAAA;EACA,OAAA;EACA,IAAA;EACA,OAAA;EACA,SAAA;EACA,OAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,WAAA,GAAW,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,cAsCR,cAAA,GAAc,KAAA"}
@@ -1,51 +1,76 @@
1
1
  import { cn } from "./utils.mjs";
2
+ import { defineRecipe } from "../ui-resolver/recipe.mjs";
2
3
  import "react";
3
- import { jsx } from "react/jsx-runtime";
4
- import { cva } from "class-variance-authority";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { Slot } from "radix-ui";
6
6
  //#region src/client/ui/button.tsx
7
- const buttonVariants = cva("inline-flex shrink-0 items-center justify-center gap-2 rounded-[var(--enad-button-radius)] text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
+ const buttonRecipe = defineRecipe({
8
+ base: "inline-flex shrink-0 items-center justify-center gap-[var(--enad-button-gap)] rounded-[var(--enad-button-radius)] text-[length:var(--enad-button-font-size)] font-medium whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
8
9
  variants: {
9
10
  variant: {
10
- default: "bg-primary text-primary-foreground hover:bg-primary-hover",
11
+ solid: "bg-primary text-primary-foreground hover:bg-primary-hover",
12
+ soft: "bg-muted text-foreground hover:bg-primary-hover hover:text-primary-foreground",
13
+ outlined: "border bg-background text-foreground shadow-xs hover:bg-accent-muted hover:text-accent-muted-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
14
+ plain: "hover:bg-accent-muted hover:text-accent-muted-foreground dark:hover:bg-accent-muted/50",
11
15
  destructive: "bg-destructive text-white hover:bg-destructive-hover focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",
12
- outline: "border bg-background text-foreground shadow-xs hover:bg-accent-muted hover:text-accent-muted-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
13
16
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary-hover",
14
- ghost: "hover:bg-accent-muted hover:text-accent-muted-foreground dark:hover:bg-accent-muted/50",
15
- soft: "bg-muted text-foreground hover:bg-primary-hover hover:text-primary-foreground",
16
17
  inverse: "bg-foreground text-background hover:bg-primary-hover hover:text-primary-foreground",
17
18
  link: "text-primary underline-offset-4 hover:underline"
18
19
  },
19
20
  size: {
20
- default: "h-[var(--enad-control-height)] px-4 py-2 has-[>svg]:px-3",
21
21
  xs: "h-[var(--enad-control-height-xs)] gap-1 px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",
22
22
  sm: "h-[var(--enad-control-height-sm)] gap-1.5 px-3 has-[>svg]:px-2.5",
23
+ md: "h-[var(--enad-button-height)] px-[var(--enad-button-px)] py-2 has-[>svg]:px-3",
23
24
  lg: "h-[var(--enad-control-height-lg)] px-6 has-[>svg]:px-4",
24
- icon: "size-[var(--enad-control-height)]",
25
+ icon: "size-[var(--enad-button-height)]",
25
26
  "icon-xs": "relative size-[var(--enad-control-height-xs)] hit-area-3 [&_svg:not([class*='size-'])]:size-3",
26
27
  "icon-sm": "size-[var(--enad-control-height-sm)]",
27
28
  "icon-lg": "size-[var(--enad-control-height-lg)]"
28
29
  }
29
30
  },
30
31
  defaultVariants: {
31
- variant: "default",
32
- size: "default"
32
+ variant: "solid",
33
+ size: "md"
33
34
  }
34
35
  });
35
- function Button({ className, variant = "default", size = "default", asChild = false, ...props }) {
36
- return /* @__PURE__ */ jsx(asChild ? Slot.Root : "button", {
36
+ function Button({ className, variant = "solid", size = "md", asChild = false, startSlot, endSlot, children, ...props }) {
37
+ const Comp = asChild ? Slot.Root : "button";
38
+ const classes = cn(buttonRecipe({
39
+ variant,
40
+ size,
41
+ className
42
+ }));
43
+ if (asChild) return /* @__PURE__ */ jsx(Comp, {
44
+ "data-slot": "button",
45
+ "data-variant": variant,
46
+ "data-size": size,
47
+ className: classes,
48
+ ...props,
49
+ children
50
+ });
51
+ return /* @__PURE__ */ jsxs(Comp, {
37
52
  "data-slot": "button",
38
53
  "data-variant": variant,
39
54
  "data-size": size,
40
- className: cn(buttonVariants({
41
- variant,
42
- size,
43
- className
44
- })),
45
- ...props
55
+ className: classes,
56
+ ...props,
57
+ children: [
58
+ startSlot && /* @__PURE__ */ jsx("span", {
59
+ "aria-hidden": "true",
60
+ className: "shrink-0 [&_svg]:size-[var(--slot-icon-size,1em)]",
61
+ children: startSlot
62
+ }),
63
+ children,
64
+ endSlot && /* @__PURE__ */ jsx("span", {
65
+ "aria-hidden": "true",
66
+ className: "shrink-0 [&_svg]:size-[var(--slot-icon-size,1em)]",
67
+ children: endSlot
68
+ })
69
+ ]
46
70
  });
47
71
  }
72
+ const buttonVariants = buttonRecipe;
48
73
  //#endregion
49
- export { Button, buttonVariants };
74
+ export { Button, buttonRecipe, buttonVariants };
50
75
 
51
76
  //# sourceMappingURL=button.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.mjs","names":[],"sources":["../../../src/client/ui/button.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot } from \"radix-ui\";\n\nimport { cn } from \"./utils\";\n\nconst buttonVariants = cva(\n \"inline-flex shrink-0 items-center justify-center gap-2 rounded-[var(--enad-button-radius)] text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive-hover focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n outline:\n \"border bg-background text-foreground shadow-xs hover:bg-accent-muted hover:text-accent-muted-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n ghost:\n \"hover:bg-accent-muted hover:text-accent-muted-foreground dark:hover:bg-accent-muted/50\",\n soft: \"bg-muted text-foreground hover:bg-primary-hover hover:text-primary-foreground\",\n inverse:\n \"bg-foreground text-background hover:bg-primary-hover hover:text-primary-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-[var(--enad-control-height)] px-4 py-2 has-[>svg]:px-3\",\n xs: \"h-[var(--enad-control-height-xs)] gap-1 px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-[var(--enad-control-height-sm)] gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-[var(--enad-control-height-lg)] px-6 has-[>svg]:px-4\",\n icon: \"size-[var(--enad-control-height)]\",\n \"icon-xs\":\n \"relative size-[var(--enad-control-height-xs)] hit-area-3 [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-[var(--enad-control-height-sm)]\",\n \"icon-lg\": \"size-[var(--enad-control-height-lg)]\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot.Root : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n"],"mappings":";;;;;;AAMA,MAAM,iBAAiB,IACrB,ueACA;CACE,UAAU;EACR,SAAS;GACP,SAAS;GACT,aACE;GACF,SACE;GACF,WAAW;GACX,OACE;GACF,MAAM;GACN,SACE;GACF,MAAM;GACP;EACD,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACN,WACE;GACF,WAAW;GACX,WAAW;GACZ;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CACF;AAED,SAAS,OAAO,EACd,WACA,UAAU,WACV,OAAO,WACP,UAAU,OACV,GAAG,SAIA;AAGH,QACE,oBAHW,UAAU,KAAK,OAAO,UAGjC;EACE,aAAU;EACV,gBAAc;EACd,aAAW;EACX,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;GAAW,CAAC,CAAC;EAC3D,GAAI;EACJ,CAAA"}
1
+ {"version":3,"file":"button.mjs","names":[],"sources":["../../../src/client/ui/button.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { Slot } from \"radix-ui\";\n\nimport { defineRecipe } from \"../ui-resolver/recipe\";\nimport type { SemanticColor, Variant } from \"../ui-resolver/types\";\nimport { cn } from \"./utils\";\n\nconst buttonRecipe = defineRecipe({\n base: \"inline-flex shrink-0 items-center justify-center gap-[var(--enad-button-gap)] rounded-[var(--enad-button-radius)] text-[length:var(--enad-button-font-size)] font-medium whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n variants: {\n variant: {\n solid: \"bg-primary text-primary-foreground hover:bg-primary-hover\",\n soft: \"bg-muted text-foreground hover:bg-primary-hover hover:text-primary-foreground\",\n outlined:\n \"border bg-background text-foreground shadow-xs hover:bg-accent-muted hover:text-accent-muted-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n plain:\n \"hover:bg-accent-muted hover:text-accent-muted-foreground dark:hover:bg-accent-muted/50\",\n destructive:\n \"bg-destructive text-white hover:bg-destructive-hover focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary-hover\",\n inverse: \"bg-foreground text-background hover:bg-primary-hover hover:text-primary-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n xs: \"h-[var(--enad-control-height-xs)] gap-1 px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-[var(--enad-control-height-sm)] gap-1.5 px-3 has-[>svg]:px-2.5\",\n md: \"h-[var(--enad-button-height)] px-[var(--enad-button-px)] py-2 has-[>svg]:px-3\",\n lg: \"h-[var(--enad-control-height-lg)] px-6 has-[>svg]:px-4\",\n icon: \"size-[var(--enad-button-height)]\",\n \"icon-xs\":\n \"relative size-[var(--enad-control-height-xs)] hit-area-3 [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-[var(--enad-control-height-sm)]\",\n \"icon-lg\": \"size-[var(--enad-control-height-lg)]\",\n },\n },\n defaultVariants: {\n variant: \"solid\",\n size: \"md\",\n },\n});\n\ntype ButtonVariant = Variant | \"destructive\" | \"secondary\" | \"inverse\" | \"link\";\ntype ButtonSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"icon\" | \"icon-xs\" | \"icon-sm\" | \"icon-lg\";\n\ninterface ButtonProps extends Omit<React.ComponentProps<\"button\">, \"color\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n color?: SemanticColor;\n asChild?: boolean;\n startSlot?: React.ReactNode;\n endSlot?: React.ReactNode;\n}\n\nfunction Button({\n className,\n variant = \"solid\",\n size = \"md\",\n asChild = false,\n startSlot,\n endSlot,\n children,\n ...props\n}: ButtonProps) {\n const Comp = asChild ? Slot.Root : \"button\";\n const classes = cn(buttonRecipe({ variant, size, className }));\n\n if (asChild) {\n return (\n <Comp\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={classes}\n {...props}\n >\n {children}\n </Comp>\n );\n }\n\n return (\n <Comp data-slot=\"button\" data-variant={variant} data-size={size} className={classes} {...props}>\n {startSlot && (\n <span aria-hidden=\"true\" className=\"shrink-0 [&_svg]:size-[var(--slot-icon-size,1em)]\">\n {startSlot}\n </span>\n )}\n {children}\n {endSlot && (\n <span aria-hidden=\"true\" className=\"shrink-0 [&_svg]:size-[var(--slot-icon-size,1em)]\">\n {endSlot}\n </span>\n )}\n </Comp>\n );\n}\n\nexport { Button, buttonRecipe, type ButtonProps, type ButtonVariant, type ButtonSize };\n\n// Backward compat: export buttonVariants as an alias for buttonRecipe\nconst buttonVariants = buttonRecipe;\nexport { buttonVariants };\n"],"mappings":";;;;;;AAOA,MAAM,eAAe,aAAa;CAChC,MAAM;CACN,UAAU;EACR,SAAS;GACP,OAAO;GACP,MAAM;GACN,UACE;GACF,OACE;GACF,aACE;GACF,WAAW;GACX,SAAS;GACT,MAAM;GACP;EACD,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,MAAM;GACN,WACE;GACF,WAAW;GACX,WAAW;GACZ;EACF;CACD,iBAAiB;EACf,SAAS;EACT,MAAM;EACP;CACF,CAAC;AAcF,SAAS,OAAO,EACd,WACA,UAAU,SACV,OAAO,MACP,UAAU,OACV,WACA,SACA,UACA,GAAG,SACW;CACd,MAAM,OAAO,UAAU,KAAK,OAAO;CACnC,MAAM,UAAU,GAAG,aAAa;EAAE;EAAS;EAAM;EAAW,CAAC,CAAC;AAE9D,KAAI,QACF,QACE,oBAAC,MAAD;EACE,aAAU;EACV,gBAAc;EACd,aAAW;EACX,WAAW;EACX,GAAI;EAEH;EACI,CAAA;AAIX,QACE,qBAAC,MAAD;EAAM,aAAU;EAAS,gBAAc;EAAS,aAAW;EAAM,WAAW;EAAS,GAAI;YAAzF;GACG,aACC,oBAAC,QAAD;IAAM,eAAY;IAAO,WAAU;cAChC;IACI,CAAA;GAER;GACA,WACC,oBAAC,QAAD;IAAM,eAAY;IAAO,WAAU;cAChC;IACI,CAAA;GAEJ;;;AAOX,MAAM,iBAAiB"}
@@ -2,6 +2,25 @@ import * as React$1 from "react";
2
2
  import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/client/ui/card.d.ts
5
+ /**
6
+ * Card recipe with 7 slots. Base classes produce the same output as the
7
+ * previous inline implementation. CSS variable references use the new
8
+ * component-level tokens (--enad-card-px, --enad-card-py) which fall
9
+ * back to --enad-card-padding for backward compatibility.
10
+ */
11
+ declare const cardRecipe: (props?: ({
12
+ [x: string]: string | undefined;
13
+ } & {
14
+ className?: Partial<Record<"root" | "content" | "title" | "description" | "header" | "action" | "footer", string>> | undefined;
15
+ }) | undefined) => {
16
+ root: string;
17
+ content: string;
18
+ title: string;
19
+ description: string;
20
+ header: string;
21
+ action: string;
22
+ footer: string;
23
+ };
5
24
  declare function Card({
6
25
  className,
7
26
  ...props
@@ -31,5 +50,5 @@ declare function CardFooter({
31
50
  ...props
32
51
  }: React$1.ComponentProps<"div">): react_jsx_runtime0.JSX.Element;
33
52
  //#endregion
34
- export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
53
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardRecipe };
35
54
  //# sourceMappingURL=card.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.d.ts","names":[],"sources":["../../../src/client/ui/card.tsx"],"mappings":";;;;iBAIS,IAAA,CAAA;EAAO,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAazD,UAAA,CAAA;EAAa,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAa/D,SAAA,CAAA;EAAY,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAU9D,eAAA,CAAA;EAAkB,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUpE,UAAA,CAAA;EAAa,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAU/D,WAAA,CAAA;EAAc,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUhE,UAAA,CAAA;EAAa,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"card.d.ts","names":[],"sources":["../../../src/client/ui/card.tsx"],"mappings":";;;;;;;AAA+B;;;cAWzB,UAAA,GAAU,KAAA;EAAA;;cAYd,OAAA,CAAA,MAAA;AAAA;;;;;;;;;iBAIO,IAAA,CAAA;EAAO,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAIzD,UAAA,CAAA;EAAa,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAM/D,SAAA,CAAA;EAAY,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAI9D,eAAA,CAAA;EAAkB,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUpE,UAAA,CAAA;EAAa,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAM/D,WAAA,CAAA;EAAc,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAMhE,UAAA,CAAA;EAAa,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,57 +1,85 @@
1
1
  import { cn } from "./utils.mjs";
2
+ import { defineSlotRecipe } from "../ui-resolver/recipe.mjs";
2
3
  import "react";
3
4
  import { jsx } from "react/jsx-runtime";
4
5
  //#region src/client/ui/card.tsx
6
+ /**
7
+ * Card recipe with 7 slots. Base classes produce the same output as the
8
+ * previous inline implementation. CSS variable references use the new
9
+ * component-level tokens (--enad-card-px, --enad-card-py) which fall
10
+ * back to --enad-card-padding for backward compatibility.
11
+ */
12
+ const cardRecipe = defineSlotRecipe({
13
+ slots: [
14
+ "root",
15
+ "header",
16
+ "title",
17
+ "description",
18
+ "action",
19
+ "content",
20
+ "footer"
21
+ ],
22
+ base: {
23
+ root: "flex flex-col gap-[var(--enad-card-gap)] rounded-[var(--enad-card-radius)] border bg-card py-[var(--enad-card-py)] text-card-foreground shadow-[var(--enad-shadow-sm)]",
24
+ header: "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-[var(--enad-card-header-gap)] px-[var(--enad-card-px)] has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-[var(--enad-card-py)]",
25
+ title: "leading-none font-semibold",
26
+ description: "text-sm text-muted-foreground",
27
+ action: "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
28
+ content: "px-[var(--enad-card-px)]",
29
+ footer: "flex items-center px-[var(--enad-card-px)] [.border-t]:pt-[var(--enad-card-py)]"
30
+ }
31
+ });
32
+ const defaultClasses = cardRecipe();
5
33
  function Card({ className, ...props }) {
6
34
  return /* @__PURE__ */ jsx("div", {
7
35
  "data-slot": "card",
8
- className: cn("flex flex-col gap-[var(--enad-card-gap)] rounded-[var(--enad-card-radius)] border bg-card py-[var(--enad-card-padding)] text-card-foreground shadow-[var(--enad-shadow-sm)]", className),
36
+ className: cn(defaultClasses.root, className),
9
37
  ...props
10
38
  });
11
39
  }
12
40
  function CardHeader({ className, ...props }) {
13
41
  return /* @__PURE__ */ jsx("div", {
14
42
  "data-slot": "card-header",
15
- className: cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-[var(--enad-card-header-gap)] px-[var(--enad-card-padding)] has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-[var(--enad-card-padding)]", className),
43
+ className: cn(defaultClasses.header, className),
16
44
  ...props
17
45
  });
18
46
  }
19
47
  function CardTitle({ className, ...props }) {
20
48
  return /* @__PURE__ */ jsx("div", {
21
49
  "data-slot": "card-title",
22
- className: cn("leading-none font-semibold", className),
50
+ className: cn(defaultClasses.title, className),
23
51
  ...props
24
52
  });
25
53
  }
26
54
  function CardDescription({ className, ...props }) {
27
55
  return /* @__PURE__ */ jsx("div", {
28
56
  "data-slot": "card-description",
29
- className: cn("text-sm text-muted-foreground", className),
57
+ className: cn(defaultClasses.description, className),
30
58
  ...props
31
59
  });
32
60
  }
33
61
  function CardAction({ className, ...props }) {
34
62
  return /* @__PURE__ */ jsx("div", {
35
63
  "data-slot": "card-action",
36
- className: cn("col-start-2 row-span-2 row-start-1 self-start justify-self-end", className),
64
+ className: cn(defaultClasses.action, className),
37
65
  ...props
38
66
  });
39
67
  }
40
68
  function CardContent({ className, ...props }) {
41
69
  return /* @__PURE__ */ jsx("div", {
42
70
  "data-slot": "card-content",
43
- className: cn("px-[var(--enad-card-padding)]", className),
71
+ className: cn(defaultClasses.content, className),
44
72
  ...props
45
73
  });
46
74
  }
47
75
  function CardFooter({ className, ...props }) {
48
76
  return /* @__PURE__ */ jsx("div", {
49
77
  "data-slot": "card-footer",
50
- className: cn("flex items-center px-[var(--enad-card-padding)] [.border-t]:pt-[var(--enad-card-padding)]", className),
78
+ className: cn(defaultClasses.footer, className),
51
79
  ...props
52
80
  });
53
81
  }
54
82
  //#endregion
55
- export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
83
+ export { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, cardRecipe };
56
84
 
57
85
  //# sourceMappingURL=card.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"card.mjs","names":[],"sources":["../../../src/client/ui/card.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"./utils\";\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"flex flex-col gap-[var(--enad-card-gap)] rounded-[var(--enad-card-radius)] border bg-card py-[var(--enad-card-padding)] text-card-foreground shadow-[var(--enad-shadow-sm)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-[var(--enad-card-header-gap)] px-[var(--enad-card-padding)] has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-[var(--enad-card-padding)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-sm text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\"col-start-2 row-span-2 row-start-1 self-start justify-self-end\", className)}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-[var(--enad-card-padding)]\", className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\n \"flex items-center px-[var(--enad-card-padding)] [.border-t]:pt-[var(--enad-card-padding)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };\n"],"mappings":";;;;AAIA,SAAS,KAAK,EAAE,WAAW,GAAG,SAAsC;AAClE,QACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,+KACA,UACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,0OACA,UACD;EACD,GAAI;EACJ,CAAA;;AAIN,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;AACvE,QACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,8BAA8B,UAAU;EACtD,GAAI;EACJ,CAAA;;AAIN,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;AAC7E,QACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,iCAAiC,UAAU;EACzD,GAAI;EACJ,CAAA;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,kEAAkE,UAAU;EAC1F,GAAI;EACJ,CAAA;;AAIN,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;AACzE,QACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,iCAAiC,UAAU;EACzD,GAAI;EACJ,CAAA;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,6FACA,UACD;EACD,GAAI;EACJ,CAAA"}
1
+ {"version":3,"file":"card.mjs","names":[],"sources":["../../../src/client/ui/card.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { defineSlotRecipe } from \"../ui-resolver/recipe\";\nimport { cn } from \"./utils\";\n\n/**\n * Card recipe with 7 slots. Base classes produce the same output as the\n * previous inline implementation. CSS variable references use the new\n * component-level tokens (--enad-card-px, --enad-card-py) which fall\n * back to --enad-card-padding for backward compatibility.\n */\nconst cardRecipe = defineSlotRecipe({\n slots: [\"root\", \"header\", \"title\", \"description\", \"action\", \"content\", \"footer\"] as const,\n base: {\n root: \"flex flex-col gap-[var(--enad-card-gap)] rounded-[var(--enad-card-radius)] border bg-card py-[var(--enad-card-py)] text-card-foreground shadow-[var(--enad-shadow-sm)]\",\n header:\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-[var(--enad-card-header-gap)] px-[var(--enad-card-px)] has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-[var(--enad-card-py)]\",\n title: \"leading-none font-semibold\",\n description: \"text-sm text-muted-foreground\",\n action: \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n content: \"px-[var(--enad-card-px)]\",\n footer: \"flex items-center px-[var(--enad-card-px)] [.border-t]:pt-[var(--enad-card-py)]\",\n },\n});\n\nconst defaultClasses = cardRecipe();\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card\" className={cn(defaultClasses.root, className)} {...props} />;\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"card-header\" className={cn(defaultClasses.header, className)} {...props} />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div data-slot=\"card-title\" className={cn(defaultClasses.title, className)} {...props} />;\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(defaultClasses.description, className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"card-action\" className={cn(defaultClasses.action, className)} {...props} />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"card-content\" className={cn(defaultClasses.content, className)} {...props} />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"card-footer\" className={cn(defaultClasses.footer, className)} {...props} />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n cardRecipe,\n};\n"],"mappings":";;;;;;;;;;;AAWA,MAAM,aAAa,iBAAiB;CAClC,OAAO;EAAC;EAAQ;EAAU;EAAS;EAAe;EAAU;EAAW;EAAS;CAChF,MAAM;EACJ,MAAM;EACN,QACE;EACF,OAAO;EACP,aAAa;EACb,QAAQ;EACR,SAAS;EACT,QAAQ;EACT;CACF,CAAC;AAEF,MAAM,iBAAiB,YAAY;AAEnC,SAAS,KAAK,EAAE,WAAW,GAAG,SAAsC;AAClE,QAAO,oBAAC,OAAD;EAAK,aAAU;EAAO,WAAW,GAAG,eAAe,MAAM,UAAU;EAAE,GAAI;EAAS,CAAA;;AAG3F,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC,OAAD;EAAK,aAAU;EAAc,WAAW,GAAG,eAAe,QAAQ,UAAU;EAAE,GAAI;EAAS,CAAA;;AAI/F,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;AACvE,QAAO,oBAAC,OAAD;EAAK,aAAU;EAAa,WAAW,GAAG,eAAe,OAAO,UAAU;EAAE,GAAI;EAAS,CAAA;;AAGlG,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;AAC7E,QACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,eAAe,aAAa,UAAU;EACpD,GAAI;EACJ,CAAA;;AAIN,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC,OAAD;EAAK,aAAU;EAAc,WAAW,GAAG,eAAe,QAAQ,UAAU;EAAE,GAAI;EAAS,CAAA;;AAI/F,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;AACzE,QACE,oBAAC,OAAD;EAAK,aAAU;EAAe,WAAW,GAAG,eAAe,SAAS,UAAU;EAAE,GAAI;EAAS,CAAA;;AAIjG,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,QACE,oBAAC,OAAD;EAAK,aAAU;EAAc,WAAW,GAAG,eAAe,QAAQ,UAAU;EAAE,GAAI;EAAS,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.d.ts","names":[],"sources":["../../../src/client/ui/carousel.tsx"],"mappings":";;;;;;KAWK,WAAA,GAAc,oBAAA;AAAA,KACd,qBAAA,GAAwB,UAAA,QAAkB,gBAAA;AAAA,KAC1C,eAAA,GAAkB,qBAAA;AAAA,KAClB,cAAA,GAAiB,qBAAA;AAAA,KAEjB,aAAA;EACH,IAAA,GAAO,eAAA;EACP,OAAA,GAAU,cAAA;EACV,WAAA;EACA,MAAA,IAAU,GAAA,EAAK,WAAA;AAAA;AAAA,iBAwBR,QAAA,CAAA;EACP,WAAA;EACA,IAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,UAAwB,aAAA,GAAa,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAkFrC,eAAA,CAAA;EAAkB,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAqBpE,YAAA,CAAA;EAAe,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAkBjE,gBAAA,CAAA;EACP,SAAA;EACA,OAAA;EACA,IAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,MAAA,IAAO,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBA0B7B,YAAA,CAAA;EACP,SAAA;EACA,OAAA;EACA,IAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,MAAA,IAAO,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"carousel.d.ts","names":[],"sources":["../../../src/client/ui/carousel.tsx"],"mappings":";;;;;;KASK,WAAA,GAAc,oBAAA;AAAA,KACd,qBAAA,GAAwB,UAAA,QAAkB,gBAAA;AAAA,KAC1C,eAAA,GAAkB,qBAAA;AAAA,KAClB,cAAA,GAAiB,qBAAA;AAAA,KAEjB,aAAA;EACH,IAAA,GAAO,eAAA;EACP,OAAA,GAAU,cAAA;EACV,WAAA;EACA,MAAA,IAAU,GAAA,EAAK,WAAA;AAAA;AAAA,iBAwBR,QAAA,CAAA;EACP,WAAA;EACA,IAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,UAAwB,aAAA,GAAa,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAiFrC,eAAA,CAAA;EAAkB,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAapE,YAAA,CAAA;EAAe,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAkBjE,gBAAA,CAAA;EACP,SAAA;EACA,OAAA;EACA,IAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,MAAA,IAAO,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBA0B7B,YAAA,CAAA;EACP,SAAA;EACA,OAAA;EACA,IAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,MAAA,IAAO,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -96,7 +96,7 @@ function CarouselItem({ className, ...props }) {
96
96
  ...props
97
97
  });
98
98
  }
99
- function CarouselPrevious({ className, variant = "outline", size = "icon", ...props }) {
99
+ function CarouselPrevious({ className, variant = "outlined", size = "icon", ...props }) {
100
100
  const { orientation, scrollPrev, canScrollPrev } = useCarousel();
101
101
  const ArrowLeftIcon = useIcon("arrowLeft");
102
102
  return /* @__PURE__ */ jsxs(Button, {
@@ -113,7 +113,7 @@ function CarouselPrevious({ className, variant = "outline", size = "icon", ...pr
113
113
  })]
114
114
  });
115
115
  }
116
- function CarouselNext({ className, variant = "outline", size = "icon", ...props }) {
116
+ function CarouselNext({ className, variant = "outlined", size = "icon", ...props }) {
117
117
  const { orientation, scrollNext, canScrollNext } = useCarousel();
118
118
  const ArrowRightIcon = useIcon("arrowRight");
119
119
  return /* @__PURE__ */ jsxs(Button, {
@@ -1 +1 @@
1
- {"version":3,"file":"carousel.mjs","names":["React"],"sources":["../../../src/client/ui/carousel.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { useIcon } from \"../icons/icon-context\"\n\nimport { cn } from \"./utils\"\nimport { Button } from \"./button\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) return\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) return\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n )\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel()\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n const ArrowLeftIcon = useIcon(\"arrowLeft\")\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeftIcon />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n const ArrowRightIcon = useIcon(\"arrowRight\")\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRightIcon />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"carousel.mjs","names":["React"],"sources":["../../../src/client/ui/carousel.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\nimport { useIcon } from \"../icons/icon-context\";\n\nimport { cn } from \"./utils\";\nimport { Button } from \"./button\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div\n className={cn(\"flex\", orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\", className)}\n {...props}\n />\n </div>\n );\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outlined\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n const ArrowLeftIcon = useIcon(\"arrowLeft\");\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeftIcon />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nfunction CarouselNext({\n className,\n variant = \"outlined\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n const ArrowRightIcon = useIcon(\"arrowRight\");\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRightIcon />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"],"mappings":"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"}
@@ -3,10 +3,18 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
  import { Checkbox as Checkbox$1 } from "radix-ui";
4
4
 
5
5
  //#region src/client/ui/checkbox.d.ts
6
+ declare const checkboxRecipe: (props?: ({
7
+ [x: string]: string | undefined;
8
+ } & {
9
+ className?: Partial<Record<"root" | "indicator", string>> | undefined;
10
+ }) | undefined) => {
11
+ root: string;
12
+ indicator: string;
13
+ };
6
14
  declare function Checkbox({
7
15
  className,
8
16
  ...props
9
17
  }: React$1.ComponentProps<typeof Checkbox$1.Root>): react_jsx_runtime0.JSX.Element;
10
18
  //#endregion
11
- export { Checkbox };
19
+ export { Checkbox, checkboxRecipe };
12
20
  //# sourceMappingURL=checkbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.d.ts","names":[],"sources":["../../../src/client/ui/checkbox.tsx"],"mappings":";;;;;iBAQS,QAAA,CAAA;EACP,SAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,UAAA,CAAkB,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"checkbox.d.ts","names":[],"sources":["../../../src/client/ui/checkbox.tsx"],"mappings":";;;;;cASM,cAAA,GAAc,KAAA;EAAA;;cAMlB,OAAA,CAAA,MAAA;AAAA;;;;iBAIO,QAAA,CAAA;EAAW,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,UAAA,CAAkB,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,24 +1,33 @@
1
1
  "use client";
2
2
  import { useIcon } from "../icons/icon-context.mjs";
3
3
  import { cn } from "./utils.mjs";
4
+ import { defineSlotRecipe } from "../ui-resolver/recipe.mjs";
4
5
  import "react";
5
6
  import { jsx } from "react/jsx-runtime";
6
7
  import { Checkbox as Checkbox$1 } from "radix-ui";
7
8
  //#region src/client/ui/checkbox.tsx
9
+ const checkboxRecipe = defineSlotRecipe({
10
+ slots: ["root", "indicator"],
11
+ base: {
12
+ root: "peer relative size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none hit-area-4 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary",
13
+ indicator: "grid place-content-center text-current transition-none"
14
+ }
15
+ });
16
+ const defaultClasses = checkboxRecipe();
8
17
  function Checkbox({ className, ...props }) {
9
18
  const CheckIcon = useIcon("check");
10
19
  return /* @__PURE__ */ jsx(Checkbox$1.Root, {
11
20
  "data-slot": "checkbox",
12
- className: cn("peer relative size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none hit-area-4 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary", className),
21
+ className: cn(defaultClasses.root, className),
13
22
  ...props,
14
23
  children: /* @__PURE__ */ jsx(Checkbox$1.Indicator, {
15
24
  "data-slot": "checkbox-indicator",
16
- className: "grid place-content-center text-current transition-none",
25
+ className: defaultClasses.indicator,
17
26
  children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
18
27
  })
19
28
  });
20
29
  }
21
30
  //#endregion
22
- export { Checkbox };
31
+ export { Checkbox, checkboxRecipe };
23
32
 
24
33
  //# sourceMappingURL=checkbox.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.mjs","names":["CheckboxPrimitive"],"sources":["../../../src/client/ui/checkbox.tsx"],"sourcesContent":["\"use client\"\n\nimport * as React from \"react\"\nimport { useIcon } from \"../icons/icon-context\"\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\"\n\nimport { cn } from \"./utils\"\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n const CheckIcon = useIcon(\"check\")\n\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer relative size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none hit-area-4 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n )\n}\n\nexport { Checkbox }\n"],"mappings":";;;;;;;AAQA,SAAS,SAAS,EAChB,WACA,GAAG,SACmD;CACtD,MAAM,YAAY,QAAQ,QAAQ;AAElC,QACE,oBAACA,WAAkB,MAAnB;EACE,aAAU;EACV,WAAW,GACT,mgBACA,UACD;EACD,GAAI;YAEJ,oBAACA,WAAkB,WAAnB;GACE,aAAU;GACV,WAAU;aAEV,oBAAC,WAAD,EAAW,WAAU,YAAa,CAAA;GACN,CAAA;EACP,CAAA"}
1
+ {"version":3,"file":"checkbox.mjs","names":["CheckboxPrimitive"],"sources":["../../../src/client/ui/checkbox.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useIcon } from \"../icons/icon-context\";\nimport { Checkbox as CheckboxPrimitive } from \"radix-ui\";\n\nimport { defineSlotRecipe } from \"../ui-resolver/recipe\";\nimport { cn } from \"./utils\";\n\nconst checkboxRecipe = defineSlotRecipe({\n slots: [\"root\", \"indicator\"] as const,\n base: {\n root: \"peer relative size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-shadow outline-none hit-area-4 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[state=checked]:border-primary data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-[state=checked]:bg-primary\",\n indicator: \"grid place-content-center text-current transition-none\",\n },\n});\n\nconst defaultClasses = checkboxRecipe();\n\nfunction Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n const CheckIcon = useIcon(\"check\");\n\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(defaultClasses.root, className)}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className={defaultClasses.indicator}\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox, checkboxRecipe };\n"],"mappings":";;;;;;;;AASA,MAAM,iBAAiB,iBAAiB;CACtC,OAAO,CAAC,QAAQ,YAAY;CAC5B,MAAM;EACJ,MAAM;EACN,WAAW;EACZ;CACF,CAAC;AAEF,MAAM,iBAAiB,gBAAgB;AAEvC,SAAS,SAAS,EAAE,WAAW,GAAG,SAA8D;CAC9F,MAAM,YAAY,QAAQ,QAAQ;AAElC,QACE,oBAACA,WAAkB,MAAnB;EACE,aAAU;EACV,WAAW,GAAG,eAAe,MAAM,UAAU;EAC7C,GAAI;YAEJ,oBAACA,WAAkB,WAAnB;GACE,aAAU;GACV,WAAW,eAAe;aAE1B,oBAAC,WAAD,EAAW,WAAU,YAAa,CAAA;GACN,CAAA;EACP,CAAA"}
@@ -3,6 +3,18 @@ import * as react_jsx_runtime0 from "react/jsx-runtime";
3
3
  import { Dialog as Dialog$1 } from "radix-ui";
4
4
 
5
5
  //#region src/client/ui/dialog.d.ts
6
+ declare const dialogRecipe: (props?: ({
7
+ [x: string]: string | undefined;
8
+ } & {
9
+ className?: Partial<Record<"overlay" | "content" | "title" | "description" | "header" | "footer", string>> | undefined;
10
+ }) | undefined) => {
11
+ overlay: string;
12
+ content: string;
13
+ title: string;
14
+ description: string;
15
+ header: string;
16
+ footer: string;
17
+ };
6
18
  declare function Dialog({
7
19
  ...props
8
20
  }: React$1.ComponentProps<typeof Dialog$1.Root>): react_jsx_runtime0.JSX.Element;
@@ -41,5 +53,5 @@ declare function DialogDescription({
41
53
  ...props
42
54
  }: React$1.ComponentProps<typeof Dialog$1.Description>): react_jsx_runtime0.JSX.Element;
43
55
  //#endregion
44
- export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger };
56
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, dialogRecipe };
45
57
  //# sourceMappingURL=dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","names":[],"sources":["../../../src/client/ui/dialog.tsx"],"mappings":";;;;;iBAOS,MAAA,CAAA;EAAA,GAAY;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAItE,aAAA,CAAA;EAAA,GAAmB;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,OAAA,IAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAIhF,YAAA,CAAA;EAAA,GAAkB;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,MAAA,IAAO,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAI9E,WAAA,CAAA;EAAA,GAAiB;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,KAAA,IAAM,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAI5E,aAAA,CAAA;EACP,SAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,OAAA,IAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAa9C,aAAA,CAAA;EACP,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,OAAA,IAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAkB9C,YAAA,CAAA;EAAe,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUjE,YAAA,CAAA;EAAe,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUjE,WAAA,CAAA;EAAc,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,KAAA,IAAM,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUvF,iBAAA,CAAA;EACP,SAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,WAAA,IAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"dialog.d.ts","names":[],"sources":["../../../src/client/ui/dialog.tsx"],"mappings":";;;;;cAQM,YAAA,GAAY,KAAA;EAAA;;cAYhB,OAAA,CAAA,MAAA;AAAA;;;;;;;;iBAIO,MAAA,CAAA;EAAA,GAAY;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,IAAA,IAAK,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAItE,aAAA,CAAA;EAAA,GAAmB;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,OAAA,IAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAIhF,YAAA,CAAA;EAAA,GAAkB;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,MAAA,IAAO,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAI9E,WAAA,CAAA;EAAA,GAAiB;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,KAAA,IAAM,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAI5E,aAAA,CAAA;EACP,SAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,OAAA,IAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAU9C,aAAA,CAAA;EACP,SAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,OAAA,IAAQ,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAe9C,YAAA,CAAA;EAAe,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAMjE,YAAA,CAAA;EAAe,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,UAAqB,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAMjE,WAAA,CAAA;EAAc,SAAA;EAAA,GAAc;AAAA,GAAS,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,KAAA,IAAM,kBAAA,CAAA,GAAA,CAAA,OAAA;AAAA,iBAUvF,iBAAA,CAAA;EACP,SAAA;EAAA,GACG;AAAA,GACF,OAAA,CAAM,cAAA,QAAsB,QAAA,CAAgB,WAAA,IAAY,kBAAA,CAAA,GAAA,CAAA,OAAA"}