@epicbagel/saas-kit 1.32.0 → 1.34.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 (228) hide show
  1. package/README.md +67 -0
  2. package/THIRD_PARTY_NOTICES.md +6 -5
  3. package/dist/chunk-2BNEE3U6.cjs +36 -0
  4. package/dist/chunk-2DCJ2SFU.js +20 -0
  5. package/dist/chunk-5GFMSK27.js +489 -0
  6. package/dist/chunk-5PHOKJCT.cjs +42 -0
  7. package/dist/chunk-B54ZEKBG.cjs +63 -0
  8. package/dist/chunk-BB7PO2BW.js +67 -0
  9. package/dist/chunk-BOMVE7QO.cjs +47 -0
  10. package/dist/{chunk-FPOJ2NGG.js → chunk-C3VZMTVB.js} +1 -1
  11. package/dist/chunk-CXAFTEEP.cjs +20 -0
  12. package/dist/chunk-EXHF3QUY.js +36 -0
  13. package/dist/chunk-FYNHRHVY.cjs +47 -0
  14. package/dist/chunk-HTTRUJQU.cjs +60 -0
  15. package/dist/chunk-I3GBXIFL.cjs +67 -0
  16. package/dist/chunk-O3G3TVPU.js +27 -0
  17. package/dist/{chunk-JS6BLIWL.js → chunk-ROUWBWEQ.js} +7 -7
  18. package/dist/chunk-TDCVZKMX.cjs +27 -0
  19. package/dist/{chunk-E2UVQXBO.cjs → chunk-TP74SBRH.cjs} +6 -6
  20. package/dist/chunk-TUQVHPSI.js +60 -0
  21. package/dist/chunk-UKYUWSF2.cjs +489 -0
  22. package/dist/{chunk-MOJHETNO.cjs → chunk-VUMLLKWY.cjs} +5 -5
  23. package/dist/chunk-VWOWPNKT.js +73 -0
  24. package/dist/chunk-W5L6LQI3.js +42 -0
  25. package/dist/chunk-WMTCL463.js +47 -0
  26. package/dist/chunk-WTVL2FK7.js +47 -0
  27. package/dist/chunk-XH2I3YJ6.js +63 -0
  28. package/dist/chunk-Y6X6XDHE.cjs +73 -0
  29. package/dist/primitives/accent-theme.cjs +7 -0
  30. package/dist/primitives/accent-theme.d.cts +32 -0
  31. package/dist/primitives/accent-theme.d.ts +32 -0
  32. package/dist/primitives/accent-theme.js +7 -0
  33. package/dist/primitives/activity-feed.cjs +3 -3
  34. package/dist/primitives/activity-feed.js +4 -4
  35. package/dist/primitives/anchor.cjs +3 -30
  36. package/dist/primitives/anchor.js +3 -30
  37. package/dist/primitives/app-layout.cjs +114 -0
  38. package/dist/primitives/app-layout.d.cts +47 -0
  39. package/dist/primitives/app-layout.d.ts +47 -0
  40. package/dist/primitives/app-layout.js +114 -0
  41. package/dist/primitives/app-sidebar.cjs +52 -0
  42. package/dist/primitives/app-sidebar.d.cts +105 -0
  43. package/dist/primitives/app-sidebar.d.ts +105 -0
  44. package/dist/primitives/app-sidebar.js +52 -0
  45. package/dist/primitives/back-bar.cjs +37 -0
  46. package/dist/primitives/back-bar.d.cts +31 -0
  47. package/dist/primitives/back-bar.d.ts +31 -0
  48. package/dist/primitives/back-bar.js +37 -0
  49. package/dist/primitives/batch-action-bar.cjs +134 -0
  50. package/dist/primitives/batch-action-bar.d.cts +27 -0
  51. package/dist/primitives/batch-action-bar.d.ts +27 -0
  52. package/dist/primitives/batch-action-bar.js +134 -0
  53. package/dist/primitives/board-view.cjs +7 -7
  54. package/dist/primitives/board-view.js +6 -6
  55. package/dist/primitives/brand-mark.cjs +8 -0
  56. package/dist/primitives/brand-mark.d.cts +10 -0
  57. package/dist/primitives/brand-mark.d.ts +10 -0
  58. package/dist/primitives/brand-mark.js +8 -0
  59. package/dist/primitives/branded-page.cjs +201 -0
  60. package/dist/primitives/branded-page.d.cts +118 -0
  61. package/dist/primitives/branded-page.d.ts +118 -0
  62. package/dist/primitives/branded-page.js +201 -0
  63. package/dist/primitives/call-card.cjs +2 -2
  64. package/dist/primitives/call-card.js +3 -3
  65. package/dist/primitives/chat.cjs +21 -21
  66. package/dist/primitives/chat.js +17 -17
  67. package/dist/primitives/command.cjs +129 -0
  68. package/dist/primitives/command.d.cts +60 -0
  69. package/dist/primitives/command.d.ts +60 -0
  70. package/dist/primitives/command.js +129 -0
  71. package/dist/primitives/compact-list.cjs +24 -0
  72. package/dist/primitives/compact-list.d.cts +18 -0
  73. package/dist/primitives/compact-list.d.ts +18 -0
  74. package/dist/primitives/compact-list.js +24 -0
  75. package/dist/primitives/connection.cjs +2 -2
  76. package/dist/primitives/connection.js +2 -2
  77. package/dist/primitives/context-bar.cjs +57 -0
  78. package/dist/primitives/context-bar.d.cts +50 -0
  79. package/dist/primitives/context-bar.d.ts +50 -0
  80. package/dist/primitives/context-bar.js +57 -0
  81. package/dist/primitives/cycling-prompt.cjs +102 -0
  82. package/dist/primitives/cycling-prompt.d.cts +24 -0
  83. package/dist/primitives/cycling-prompt.d.ts +24 -0
  84. package/dist/primitives/cycling-prompt.js +102 -0
  85. package/dist/primitives/dialog.d.cts +9 -9
  86. package/dist/primitives/dialog.d.ts +9 -9
  87. package/dist/primitives/document-preview.cjs +5 -5
  88. package/dist/primitives/document-preview.js +3 -3
  89. package/dist/primitives/dotted-list.cjs +41 -0
  90. package/dist/primitives/dotted-list.d.cts +28 -0
  91. package/dist/primitives/dotted-list.d.ts +28 -0
  92. package/dist/primitives/dotted-list.js +41 -0
  93. package/dist/primitives/drawer.d.cts +6 -6
  94. package/dist/primitives/drawer.d.ts +6 -6
  95. package/dist/primitives/field.cjs +3 -3
  96. package/dist/primitives/field.js +2 -2
  97. package/dist/primitives/file-dropzone.cjs +3 -3
  98. package/dist/primitives/file-dropzone.js +2 -2
  99. package/dist/primitives/file-preview-internals.cjs +4 -4
  100. package/dist/primitives/file-preview-internals.js +3 -3
  101. package/dist/primitives/file-preview.cjs +12 -12
  102. package/dist/primitives/file-preview.js +3 -3
  103. package/dist/primitives/filter-bar.cjs +4 -4
  104. package/dist/primitives/filter-bar.js +3 -3
  105. package/dist/primitives/fixed-action-bar.cjs +9 -0
  106. package/dist/primitives/fixed-action-bar.d.cts +15 -0
  107. package/dist/primitives/fixed-action-bar.d.ts +15 -0
  108. package/dist/primitives/fixed-action-bar.js +9 -0
  109. package/dist/primitives/floating-action-button.cjs +65 -0
  110. package/dist/primitives/floating-action-button.d.cts +52 -0
  111. package/dist/primitives/floating-action-button.d.ts +52 -0
  112. package/dist/primitives/floating-action-button.js +65 -0
  113. package/dist/primitives/form-section.cjs +38 -0
  114. package/dist/primitives/form-section.d.cts +43 -0
  115. package/dist/primitives/form-section.d.ts +43 -0
  116. package/dist/primitives/form-section.js +38 -0
  117. package/dist/primitives/key-value-grid.cjs +52 -0
  118. package/dist/primitives/key-value-grid.d.cts +20 -0
  119. package/dist/primitives/key-value-grid.d.ts +20 -0
  120. package/dist/primitives/key-value-grid.js +52 -0
  121. package/dist/primitives/marketing-footer.cjs +34 -0
  122. package/dist/primitives/marketing-footer.d.cts +29 -0
  123. package/dist/primitives/marketing-footer.d.ts +29 -0
  124. package/dist/primitives/marketing-footer.js +34 -0
  125. package/dist/primitives/marketing-header.cjs +8 -0
  126. package/dist/primitives/marketing-header.d.cts +31 -0
  127. package/dist/primitives/marketing-header.d.ts +31 -0
  128. package/dist/primitives/marketing-header.js +8 -0
  129. package/dist/primitives/marketing-section.cjs +8 -0
  130. package/dist/primitives/marketing-section.d.cts +35 -0
  131. package/dist/primitives/marketing-section.d.ts +35 -0
  132. package/dist/primitives/marketing-section.js +8 -0
  133. package/dist/primitives/marketing-shell.cjs +28 -0
  134. package/dist/primitives/marketing-shell.d.cts +14 -0
  135. package/dist/primitives/marketing-shell.d.ts +14 -0
  136. package/dist/primitives/marketing-shell.js +28 -0
  137. package/dist/primitives/notes.cjs +3 -3
  138. package/dist/primitives/notes.js +3 -3
  139. package/dist/primitives/page-header.cjs +3 -67
  140. package/dist/primitives/page-header.js +3 -67
  141. package/dist/primitives/page-shell.cjs +3 -41
  142. package/dist/primitives/page-shell.js +3 -41
  143. package/dist/primitives/page-tabs.cjs +4 -57
  144. package/dist/primitives/page-tabs.js +4 -57
  145. package/dist/primitives/pager.cjs +85 -0
  146. package/dist/primitives/pager.d.cts +39 -0
  147. package/dist/primitives/pager.d.ts +39 -0
  148. package/dist/primitives/pager.js +85 -0
  149. package/dist/primitives/pagination.cjs +119 -0
  150. package/dist/primitives/pagination.d.cts +41 -0
  151. package/dist/primitives/pagination.d.ts +41 -0
  152. package/dist/primitives/pagination.js +119 -0
  153. package/dist/primitives/poster.cjs +11 -1
  154. package/dist/primitives/poster.d.cts +12 -1
  155. package/dist/primitives/poster.d.ts +12 -1
  156. package/dist/primitives/poster.js +10 -0
  157. package/dist/primitives/resource-list.cjs +7 -7
  158. package/dist/primitives/resource-list.js +6 -6
  159. package/dist/primitives/responsive-dialog.cjs +3 -3
  160. package/dist/primitives/responsive-dialog.js +2 -2
  161. package/dist/primitives/responsive-embed.cjs +29 -0
  162. package/dist/primitives/responsive-embed.d.cts +14 -0
  163. package/dist/primitives/responsive-embed.d.ts +14 -0
  164. package/dist/primitives/responsive-embed.js +29 -0
  165. package/dist/primitives/save-bar.cjs +91 -0
  166. package/dist/primitives/save-bar.d.cts +55 -0
  167. package/dist/primitives/save-bar.d.ts +55 -0
  168. package/dist/primitives/save-bar.js +91 -0
  169. package/dist/primitives/section.cjs +2 -2
  170. package/dist/primitives/section.js +3 -3
  171. package/dist/primitives/settings-list.cjs +10 -0
  172. package/dist/primitives/settings-list.d.cts +31 -0
  173. package/dist/primitives/settings-list.d.ts +31 -0
  174. package/dist/primitives/settings-list.js +10 -0
  175. package/dist/primitives/settings-section.cjs +34 -0
  176. package/dist/primitives/settings-section.d.cts +44 -0
  177. package/dist/primitives/settings-section.d.ts +44 -0
  178. package/dist/primitives/settings-section.js +34 -0
  179. package/dist/primitives/sheet.d.cts +9 -9
  180. package/dist/primitives/sheet.d.ts +9 -9
  181. package/dist/primitives/short-video.cjs +110 -0
  182. package/dist/primitives/short-video.d.cts +30 -0
  183. package/dist/primitives/short-video.d.ts +30 -0
  184. package/dist/primitives/short-video.js +110 -0
  185. package/dist/primitives/stats-card.cjs +46 -0
  186. package/dist/primitives/stats-card.d.cts +19 -0
  187. package/dist/primitives/stats-card.d.ts +19 -0
  188. package/dist/primitives/stats-card.js +46 -0
  189. package/dist/primitives/stats-strip.cjs +38 -0
  190. package/dist/primitives/stats-strip.d.cts +24 -0
  191. package/dist/primitives/stats-strip.d.ts +24 -0
  192. package/dist/primitives/stats-strip.js +38 -0
  193. package/dist/primitives/step-list.cjs +32 -0
  194. package/dist/primitives/step-list.d.cts +19 -0
  195. package/dist/primitives/step-list.d.ts +19 -0
  196. package/dist/primitives/step-list.js +32 -0
  197. package/dist/primitives/steps.cjs +77 -0
  198. package/dist/primitives/steps.d.cts +35 -0
  199. package/dist/primitives/steps.d.ts +35 -0
  200. package/dist/primitives/steps.js +77 -0
  201. package/dist/primitives/switch-field.cjs +3 -3
  202. package/dist/primitives/switch-field.js +3 -3
  203. package/dist/primitives/tabbed-page-header.cjs +53 -0
  204. package/dist/primitives/tabbed-page-header.d.cts +26 -0
  205. package/dist/primitives/tabbed-page-header.d.ts +26 -0
  206. package/dist/primitives/tabbed-page-header.js +53 -0
  207. package/dist/primitives/theme-selector.cjs +15 -15
  208. package/dist/primitives/theme-selector.js +2 -2
  209. package/dist/primitives/voice-dictation-button.cjs +3 -3
  210. package/dist/primitives/voice-dictation-button.js +2 -2
  211. package/dist/primitives/voice-session-controls.cjs +3 -3
  212. package/dist/primitives/voice-session-controls.js +2 -2
  213. package/dist/primitives/workflow-assistant.cjs +4 -4
  214. package/dist/primitives/workflow-assistant.js +2 -2
  215. package/package.json +322 -1
  216. package/src/styles/components/poster.css +42 -1
  217. package/dist/{chunk-PH2TV7XI.cjs → chunk-2YW5VA2V.cjs} +2 -2
  218. package/dist/{chunk-UFFHGKI7.js → chunk-6LB37JWO.js} +8 -8
  219. package/dist/{chunk-AO56ET4F.cjs → chunk-BTHYGHOH.cjs} +2 -2
  220. package/dist/{chunk-WHDHUYS6.js → chunk-HBRVOGLA.js} +3 -3
  221. package/dist/{chunk-6O3DUMF7.js → chunk-HTUYUMAH.js} +3 -3
  222. package/dist/{chunk-PNI354BY.cjs → chunk-JMNDFISN.cjs} +2 -2
  223. package/dist/{chunk-CRZ4INEJ.js → chunk-JTI4244T.js} +10 -10
  224. package/dist/{chunk-ZGTPNSR7.js → chunk-NNEV5RHQ.js} +3 -3
  225. package/dist/{chunk-TWCJMFST.js → chunk-O42YC6ZQ.js} +3 -3
  226. package/dist/{chunk-MW67PHAQ.cjs → chunk-S2IMM37Q.cjs} +6 -6
  227. package/dist/{chunk-ZJFYOXSM.cjs → chunk-SRVRNHCX.cjs} +2 -2
  228. package/dist/{chunk-ZLEM2SAU.cjs → chunk-Z3JJSNR5.cjs} +2 -2
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import {
3
+ SettingsListContext
4
+ } from "../chunk-2DCJ2SFU.js";
5
+ import {
6
+ cn
7
+ } from "../chunk-G6SRSWXB.js";
8
+
9
+ // src/primitives/settings-section.tsx
10
+ import { useContext } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ function SettingsSection({
13
+ heading,
14
+ description,
15
+ action,
16
+ children,
17
+ className
18
+ }) {
19
+ const { single } = useContext(SettingsListContext);
20
+ const showHeader = !single && (heading || action || description);
21
+ return /* @__PURE__ */ jsxs("section", { className: cn("space-y-4", className), children: [
22
+ showHeader && /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
23
+ (heading || action) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
24
+ heading && /* @__PURE__ */ jsx("h2", { className: "text-lg font-medium tracking-tight min-w-0", children: heading }),
25
+ action && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: action })
26
+ ] }),
27
+ description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description })
28
+ ] }),
29
+ /* @__PURE__ */ jsx("div", { children })
30
+ ] });
31
+ }
32
+ export {
33
+ SettingsSection
34
+ };
@@ -1,18 +1,18 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as class_variance_authority_types from 'class-variance-authority/types';
3
- import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ import * as SheetPrimitive from '@radix-ui/react-dialog';
4
4
  import { VariantProps } from 'class-variance-authority';
5
5
  import * as React from 'react';
6
6
 
7
- declare const Sheet: React.FC<DialogPrimitive.DialogProps>;
8
- declare const SheetTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
9
- declare const SheetClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
10
- declare const SheetPortal: React.FC<DialogPrimitive.DialogPortalProps>;
11
- declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const Sheet: React.FC<SheetPrimitive.DialogProps>;
8
+ declare const SheetTrigger: React.ForwardRefExoticComponent<SheetPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
9
+ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
10
+ declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
11
+ declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
12
  declare const sheetVariants: (props?: ({
13
13
  side?: "left" | "right" | "bottom" | "top" | null | undefined;
14
14
  } & class_variance_authority_types.ClassProp) | undefined) => string;
15
- interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
15
+ interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
16
16
  /**
17
17
  * Suppress the default top-right close (×) button. Useful when the
18
18
  * consumer renders its own close affordance or relies on overlay-tap /
@@ -39,10 +39,10 @@ declare const SheetFooter: {
39
39
  ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
40
40
  displayName: string;
41
41
  };
42
- interface SheetTitleProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> {
42
+ interface SheetTitleProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title> {
43
43
  display?: "block" | "inline-flex";
44
44
  }
45
45
  declare const SheetTitle: React.ForwardRefExoticComponent<SheetTitleProps & React.RefAttributes<HTMLHeadingElement>>;
46
- declare const SheetDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
46
+ declare const SheetDescription: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
47
47
 
48
48
  export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, type SheetHeaderProps, SheetOverlay, SheetPortal, SheetTitle, type SheetTitleProps, SheetTrigger };
@@ -1,18 +1,18 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import * as class_variance_authority_types from 'class-variance-authority/types';
3
- import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ import * as SheetPrimitive from '@radix-ui/react-dialog';
4
4
  import { VariantProps } from 'class-variance-authority';
5
5
  import * as React from 'react';
6
6
 
7
- declare const Sheet: React.FC<DialogPrimitive.DialogProps>;
8
- declare const SheetTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
9
- declare const SheetClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
10
- declare const SheetPortal: React.FC<DialogPrimitive.DialogPortalProps>;
11
- declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const Sheet: React.FC<SheetPrimitive.DialogProps>;
8
+ declare const SheetTrigger: React.ForwardRefExoticComponent<SheetPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
9
+ declare const SheetClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
10
+ declare const SheetPortal: React.FC<SheetPrimitive.DialogPortalProps>;
11
+ declare const SheetOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
12
  declare const sheetVariants: (props?: ({
13
13
  side?: "left" | "right" | "bottom" | "top" | null | undefined;
14
14
  } & class_variance_authority_types.ClassProp) | undefined) => string;
15
- interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content>, VariantProps<typeof sheetVariants> {
15
+ interface SheetContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>, VariantProps<typeof sheetVariants> {
16
16
  /**
17
17
  * Suppress the default top-right close (×) button. Useful when the
18
18
  * consumer renders its own close affordance or relies on overlay-tap /
@@ -39,10 +39,10 @@ declare const SheetFooter: {
39
39
  ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
40
40
  displayName: string;
41
41
  };
42
- interface SheetTitleProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title> {
42
+ interface SheetTitleProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title> {
43
43
  display?: "block" | "inline-flex";
44
44
  }
45
45
  declare const SheetTitle: React.ForwardRefExoticComponent<SheetTitleProps & React.RefAttributes<HTMLHeadingElement>>;
46
- declare const SheetDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
46
+ declare const SheetDescription: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
47
47
 
48
48
  export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, type SheetHeaderProps, SheetOverlay, SheetPortal, SheetTitle, type SheetTitleProps, SheetTrigger };
@@ -0,0 +1,110 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+ "use client";
3
+
4
+
5
+ var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
6
+
7
+ // src/primitives/short-video.tsx
8
+ var _react = require('react');
9
+ var _lucidereact = require('lucide-react');
10
+ var _jsxruntime = require('react/jsx-runtime');
11
+ function formatDuration(sec) {
12
+ const m = Math.floor(sec / 60);
13
+ const s = Math.floor(sec % 60);
14
+ return `${m}:${s.toString().padStart(2, "0")}`;
15
+ }
16
+ function ShortVideo({
17
+ src,
18
+ poster,
19
+ durationSec,
20
+ orientation = "portrait",
21
+ caption,
22
+ maxWidth = 320,
23
+ className
24
+ }) {
25
+ const videoRef = _react.useRef.call(void 0, null);
26
+ const [playing, setPlaying] = _react.useState.call(void 0, false);
27
+ const [muted, setMuted] = _react.useState.call(void 0, false);
28
+ const [started, setStarted] = _react.useState.call(void 0, false);
29
+ const togglePlay = () => {
30
+ const el = videoRef.current;
31
+ if (!el) return;
32
+ if (el.paused) {
33
+ void el.play();
34
+ setStarted(true);
35
+ } else {
36
+ el.pause();
37
+ }
38
+ };
39
+ const toggleMute = () => {
40
+ const el = videoRef.current;
41
+ if (!el) return;
42
+ el.muted = !el.muted;
43
+ setMuted(el.muted);
44
+ };
45
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "figure", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "flex flex-col gap-2", className), style: { maxWidth }, children: [
46
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
47
+ "div",
48
+ {
49
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
50
+ "group relative overflow-hidden rounded-2xl border bg-muted",
51
+ orientation === "portrait" ? "aspect-[9/16]" : "aspect-video"
52
+ ),
53
+ children: [
54
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
55
+ "video",
56
+ {
57
+ ref: videoRef,
58
+ src,
59
+ poster,
60
+ preload: "metadata",
61
+ playsInline: true,
62
+ className: "h-full w-full object-cover",
63
+ onPlay: () => setPlaying(true),
64
+ onPause: () => setPlaying(false),
65
+ onEnded: () => setPlaying(false),
66
+ onClick: togglePlay
67
+ }
68
+ ),
69
+ !started && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
70
+ "button",
71
+ {
72
+ type: "button",
73
+ onClick: togglePlay,
74
+ "aria-label": "Play video",
75
+ className: "absolute inset-0 flex items-center justify-center bg-black/20 transition-colors hover:bg-black/30",
76
+ children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex size-16 items-center justify-center rounded-full bg-background/90 shadow-lg backdrop-blur-sm transition-transform group-hover:scale-105", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Play, { className: "ml-1 size-7 text-foreground" }) })
77
+ }
78
+ ),
79
+ !started && durationSec ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "absolute bottom-3 right-3 rounded-full bg-black/60 px-2 py-0.5 font-mono text-[11px] font-medium text-white", children: formatDuration(durationSec) }) : null,
80
+ started && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "absolute inset-x-0 bottom-0 flex items-center justify-between gap-2 bg-gradient-to-t from-black/60 to-transparent p-3 opacity-0 transition-opacity group-hover:opacity-100", children: [
81
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
82
+ "button",
83
+ {
84
+ type: "button",
85
+ onClick: togglePlay,
86
+ "aria-label": playing ? "Pause" : "Play",
87
+ className: "flex size-9 items-center justify-center rounded-full bg-background/90 text-foreground",
88
+ children: playing ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Pause, { className: "size-4" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Play, { className: "ml-0.5 size-4" })
89
+ }
90
+ ),
91
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
92
+ "button",
93
+ {
94
+ type: "button",
95
+ onClick: toggleMute,
96
+ "aria-label": muted ? "Unmute" : "Mute",
97
+ className: "flex size-9 items-center justify-center rounded-full bg-background/90 text-foreground",
98
+ children: muted ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.VolumeX, { className: "size-4" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Volume2, { className: "size-4" })
99
+ }
100
+ )
101
+ ] })
102
+ ]
103
+ }
104
+ ),
105
+ caption && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "figcaption", { className: "text-sm text-muted-foreground", children: caption })
106
+ ] });
107
+ }
108
+
109
+
110
+ exports.ShortVideo = ShortVideo;
@@ -0,0 +1,30 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface ShortVideoProps {
5
+ /** Video source (mp4/webm). */
6
+ src: string;
7
+ /** Poster frame shown before play. */
8
+ poster?: string;
9
+ /** Duration in seconds — rendered as a small badge. */
10
+ durationSec?: number;
11
+ /** 9:16 by default; "landscape" switches to 16:9. */
12
+ orientation?: "portrait" | "landscape";
13
+ /** Optional caption under the player. */
14
+ caption?: ReactNode;
15
+ /** Constrain width (portrait videos get tall fast). Default 320px. */
16
+ maxWidth?: number;
17
+ className?: string;
18
+ }
19
+ /**
20
+ * ShortVideo — an inline, vertical-first video player for marketing /
21
+ * portal feeds (the "Shorts-style" clip). Tap-to-play with a poster
22
+ * frame, a play/pause affordance and a mute toggle. Lazy (preload
23
+ * metadata only) so a feed of these stays light. Portrait by default;
24
+ * pass orientation="landscape" for 16:9.
25
+ *
26
+ * Caller owns the source + poster; render captions via `caption`.
27
+ */
28
+ declare function ShortVideo({ src, poster, durationSec, orientation, caption, maxWidth, className, }: ShortVideoProps): react_jsx_runtime.JSX.Element;
29
+
30
+ export { ShortVideo, type ShortVideoProps };
@@ -0,0 +1,30 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface ShortVideoProps {
5
+ /** Video source (mp4/webm). */
6
+ src: string;
7
+ /** Poster frame shown before play. */
8
+ poster?: string;
9
+ /** Duration in seconds — rendered as a small badge. */
10
+ durationSec?: number;
11
+ /** 9:16 by default; "landscape" switches to 16:9. */
12
+ orientation?: "portrait" | "landscape";
13
+ /** Optional caption under the player. */
14
+ caption?: ReactNode;
15
+ /** Constrain width (portrait videos get tall fast). Default 320px. */
16
+ maxWidth?: number;
17
+ className?: string;
18
+ }
19
+ /**
20
+ * ShortVideo — an inline, vertical-first video player for marketing /
21
+ * portal feeds (the "Shorts-style" clip). Tap-to-play with a poster
22
+ * frame, a play/pause affordance and a mute toggle. Lazy (preload
23
+ * metadata only) so a feed of these stays light. Portrait by default;
24
+ * pass orientation="landscape" for 16:9.
25
+ *
26
+ * Caller owns the source + poster; render captions via `caption`.
27
+ */
28
+ declare function ShortVideo({ src, poster, durationSec, orientation, caption, maxWidth, className, }: ShortVideoProps): react_jsx_runtime.JSX.Element;
29
+
30
+ export { ShortVideo, type ShortVideoProps };
@@ -0,0 +1,110 @@
1
+ "use client";
2
+ "use client";
3
+ import {
4
+ cn
5
+ } from "../chunk-G6SRSWXB.js";
6
+
7
+ // src/primitives/short-video.tsx
8
+ import { useRef, useState } from "react";
9
+ import { Play, Pause, Volume2, VolumeX } from "lucide-react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ function formatDuration(sec) {
12
+ const m = Math.floor(sec / 60);
13
+ const s = Math.floor(sec % 60);
14
+ return `${m}:${s.toString().padStart(2, "0")}`;
15
+ }
16
+ function ShortVideo({
17
+ src,
18
+ poster,
19
+ durationSec,
20
+ orientation = "portrait",
21
+ caption,
22
+ maxWidth = 320,
23
+ className
24
+ }) {
25
+ const videoRef = useRef(null);
26
+ const [playing, setPlaying] = useState(false);
27
+ const [muted, setMuted] = useState(false);
28
+ const [started, setStarted] = useState(false);
29
+ const togglePlay = () => {
30
+ const el = videoRef.current;
31
+ if (!el) return;
32
+ if (el.paused) {
33
+ void el.play();
34
+ setStarted(true);
35
+ } else {
36
+ el.pause();
37
+ }
38
+ };
39
+ const toggleMute = () => {
40
+ const el = videoRef.current;
41
+ if (!el) return;
42
+ el.muted = !el.muted;
43
+ setMuted(el.muted);
44
+ };
45
+ return /* @__PURE__ */ jsxs("figure", { className: cn("flex flex-col gap-2", className), style: { maxWidth }, children: [
46
+ /* @__PURE__ */ jsxs(
47
+ "div",
48
+ {
49
+ className: cn(
50
+ "group relative overflow-hidden rounded-2xl border bg-muted",
51
+ orientation === "portrait" ? "aspect-[9/16]" : "aspect-video"
52
+ ),
53
+ children: [
54
+ /* @__PURE__ */ jsx(
55
+ "video",
56
+ {
57
+ ref: videoRef,
58
+ src,
59
+ poster,
60
+ preload: "metadata",
61
+ playsInline: true,
62
+ className: "h-full w-full object-cover",
63
+ onPlay: () => setPlaying(true),
64
+ onPause: () => setPlaying(false),
65
+ onEnded: () => setPlaying(false),
66
+ onClick: togglePlay
67
+ }
68
+ ),
69
+ !started && /* @__PURE__ */ jsx(
70
+ "button",
71
+ {
72
+ type: "button",
73
+ onClick: togglePlay,
74
+ "aria-label": "Play video",
75
+ className: "absolute inset-0 flex items-center justify-center bg-black/20 transition-colors hover:bg-black/30",
76
+ children: /* @__PURE__ */ jsx("span", { className: "flex size-16 items-center justify-center rounded-full bg-background/90 shadow-lg backdrop-blur-sm transition-transform group-hover:scale-105", children: /* @__PURE__ */ jsx(Play, { className: "ml-1 size-7 text-foreground" }) })
77
+ }
78
+ ),
79
+ !started && durationSec ? /* @__PURE__ */ jsx("span", { className: "absolute bottom-3 right-3 rounded-full bg-black/60 px-2 py-0.5 font-mono text-[11px] font-medium text-white", children: formatDuration(durationSec) }) : null,
80
+ started && /* @__PURE__ */ jsxs("div", { className: "absolute inset-x-0 bottom-0 flex items-center justify-between gap-2 bg-gradient-to-t from-black/60 to-transparent p-3 opacity-0 transition-opacity group-hover:opacity-100", children: [
81
+ /* @__PURE__ */ jsx(
82
+ "button",
83
+ {
84
+ type: "button",
85
+ onClick: togglePlay,
86
+ "aria-label": playing ? "Pause" : "Play",
87
+ className: "flex size-9 items-center justify-center rounded-full bg-background/90 text-foreground",
88
+ children: playing ? /* @__PURE__ */ jsx(Pause, { className: "size-4" }) : /* @__PURE__ */ jsx(Play, { className: "ml-0.5 size-4" })
89
+ }
90
+ ),
91
+ /* @__PURE__ */ jsx(
92
+ "button",
93
+ {
94
+ type: "button",
95
+ onClick: toggleMute,
96
+ "aria-label": muted ? "Unmute" : "Mute",
97
+ className: "flex size-9 items-center justify-center rounded-full bg-background/90 text-foreground",
98
+ children: muted ? /* @__PURE__ */ jsx(VolumeX, { className: "size-4" }) : /* @__PURE__ */ jsx(Volume2, { className: "size-4" })
99
+ }
100
+ )
101
+ ] })
102
+ ]
103
+ }
104
+ ),
105
+ caption && /* @__PURE__ */ jsx("figcaption", { className: "text-sm text-muted-foreground", children: caption })
106
+ ] });
107
+ }
108
+ export {
109
+ ShortVideo
110
+ };
@@ -0,0 +1,46 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+
5
+
6
+
7
+ var _chunkR3DQS6U4cjs = require('../chunk-R3DQS6U4.cjs');
8
+ require('../chunk-KWLSBTB2.cjs');
9
+
10
+ // src/primitives/stats-card.tsx
11
+ var _react = require('react');
12
+ var _jsxruntime = require('react/jsx-runtime');
13
+ function StatsCard({
14
+ title,
15
+ value,
16
+ icon,
17
+ change,
18
+ changeType
19
+ }) {
20
+ const iconNode = _react.isValidElement.call(void 0, icon) ? icon : /* @__PURE__ */ (() => {
21
+ const Icon = icon;
22
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Icon, { className: "h-4 w-4 text-muted-foreground" });
23
+ })();
24
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkR3DQS6U4cjs.Card, { children: [
25
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkR3DQS6U4cjs.CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
26
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkR3DQS6U4cjs.CardTitle, { className: "text-sm font-medium", children: title }),
27
+ iconNode
28
+ ] }),
29
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkR3DQS6U4cjs.CardContent, { children: [
30
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-2xl font-bold", children: value }),
31
+ change && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
32
+ "p",
33
+ {
34
+ className: `text-xs ${changeType === "positive" ? "text-green-500" : "text-red-500"}`,
35
+ children: [
36
+ change,
37
+ " from last month"
38
+ ]
39
+ }
40
+ )
41
+ ] })
42
+ ] });
43
+ }
44
+
45
+
46
+ exports.StatsCard = StatsCard;
@@ -0,0 +1,19 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { LucideIcon } from 'lucide-react';
4
+
5
+ interface StatsCardProps {
6
+ title: string;
7
+ value: string;
8
+ /**
9
+ * Lucide component reference OR an instantiated element. Pass an
10
+ * element when calling from a server component (component references
11
+ * can't cross the server→client boundary).
12
+ */
13
+ icon: LucideIcon | ReactNode;
14
+ change?: string;
15
+ changeType?: "positive" | "negative";
16
+ }
17
+ declare function StatsCard({ title, value, icon, change, changeType, }: StatsCardProps): react_jsx_runtime.JSX.Element;
18
+
19
+ export { StatsCard };
@@ -0,0 +1,19 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { LucideIcon } from 'lucide-react';
4
+
5
+ interface StatsCardProps {
6
+ title: string;
7
+ value: string;
8
+ /**
9
+ * Lucide component reference OR an instantiated element. Pass an
10
+ * element when calling from a server component (component references
11
+ * can't cross the server→client boundary).
12
+ */
13
+ icon: LucideIcon | ReactNode;
14
+ change?: string;
15
+ changeType?: "positive" | "negative";
16
+ }
17
+ declare function StatsCard({ title, value, icon, change, changeType, }: StatsCardProps): react_jsx_runtime.JSX.Element;
18
+
19
+ export { StatsCard };
@@ -0,0 +1,46 @@
1
+ "use client";
2
+ import {
3
+ Card,
4
+ CardContent,
5
+ CardHeader,
6
+ CardTitle
7
+ } from "../chunk-35YMAIEL.js";
8
+ import "../chunk-G6SRSWXB.js";
9
+
10
+ // src/primitives/stats-card.tsx
11
+ import { isValidElement } from "react";
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+ function StatsCard({
14
+ title,
15
+ value,
16
+ icon,
17
+ change,
18
+ changeType
19
+ }) {
20
+ const iconNode = isValidElement(icon) ? icon : /* @__PURE__ */ (() => {
21
+ const Icon = icon;
22
+ return /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4 text-muted-foreground" });
23
+ })();
24
+ return /* @__PURE__ */ jsxs(Card, { children: [
25
+ /* @__PURE__ */ jsxs(CardHeader, { className: "flex flex-row items-center justify-between space-y-0 pb-2", children: [
26
+ /* @__PURE__ */ jsx(CardTitle, { className: "text-sm font-medium", children: title }),
27
+ iconNode
28
+ ] }),
29
+ /* @__PURE__ */ jsxs(CardContent, { children: [
30
+ /* @__PURE__ */ jsx("div", { className: "text-2xl font-bold", children: value }),
31
+ change && /* @__PURE__ */ jsxs(
32
+ "p",
33
+ {
34
+ className: `text-xs ${changeType === "positive" ? "text-green-500" : "text-red-500"}`,
35
+ children: [
36
+ change,
37
+ " from last month"
38
+ ]
39
+ }
40
+ )
41
+ ] })
42
+ ] });
43
+ }
44
+ export {
45
+ StatsCard
46
+ };
@@ -0,0 +1,38 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
2
+
3
+
4
+
5
+ var _chunkR3DQS6U4cjs = require('../chunk-R3DQS6U4.cjs');
6
+
7
+
8
+ var _chunkEJP2L5QVcjs = require('../chunk-EJP2L5QV.cjs');
9
+
10
+
11
+ var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
12
+
13
+ // src/primitives/stats-strip.tsx
14
+ var _jsxruntime = require('react/jsx-runtime');
15
+ var COLS = {
16
+ 3: "sm:grid-cols-3",
17
+ 4: "sm:grid-cols-4",
18
+ 5: "sm:grid-cols-5",
19
+ 6: "sm:grid-cols-6"
20
+ };
21
+ function StatsStrip({ items, columns = 5, className }) {
22
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "grid grid-cols-2 gap-2", _nullishCoalesce(COLS[columns], () => ( COLS[5])), className), children: items.map((item, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkR3DQS6U4cjs.Card, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkR3DQS6U4cjs.CardContent, { className: "py-3 px-4", children: [
23
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "text-[10px] uppercase tracking-wider text-muted-foreground", children: item.label }),
24
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
25
+ "div",
26
+ {
27
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
28
+ "text-2xl font-semibold",
29
+ item.tone ? _chunkEJP2L5QVcjs.statusColors[item.tone].icon : "text-foreground"
30
+ ),
31
+ children: item.value
32
+ }
33
+ )
34
+ ] }) }, i)) });
35
+ }
36
+
37
+
38
+ exports.StatsStrip = StatsStrip;
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { StatusColorKey } from '../lib/status-colors.cjs';
4
+
5
+ interface StatsStripItem {
6
+ label: ReactNode;
7
+ value: ReactNode;
8
+ /** Tone for the value text. Maps to the kit's standard token palette. */
9
+ tone?: StatusColorKey;
10
+ }
11
+ interface StatsStripProps {
12
+ items: StatsStripItem[];
13
+ /** Columns at the `sm:` breakpoint. Mobile is always 2 cols. */
14
+ columns?: 3 | 4 | 5 | 6;
15
+ className?: string;
16
+ }
17
+ /**
18
+ * Horizontal strip of metric cards — useful for "X total / Y this week
19
+ * / Z verified" page headers. Each card is composed of `Card` +
20
+ * `CardContent`; coloured tones map to `status-colors`.
21
+ */
22
+ declare function StatsStrip({ items, columns, className }: StatsStripProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { StatsStrip, type StatsStripItem, type StatsStripProps };
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+ import { StatusColorKey } from '../lib/status-colors.js';
4
+
5
+ interface StatsStripItem {
6
+ label: ReactNode;
7
+ value: ReactNode;
8
+ /** Tone for the value text. Maps to the kit's standard token palette. */
9
+ tone?: StatusColorKey;
10
+ }
11
+ interface StatsStripProps {
12
+ items: StatsStripItem[];
13
+ /** Columns at the `sm:` breakpoint. Mobile is always 2 cols. */
14
+ columns?: 3 | 4 | 5 | 6;
15
+ className?: string;
16
+ }
17
+ /**
18
+ * Horizontal strip of metric cards — useful for "X total / Y this week
19
+ * / Z verified" page headers. Each card is composed of `Card` +
20
+ * `CardContent`; coloured tones map to `status-colors`.
21
+ */
22
+ declare function StatsStrip({ items, columns, className }: StatsStripProps): react_jsx_runtime.JSX.Element;
23
+
24
+ export { StatsStrip, type StatsStripItem, type StatsStripProps };
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import {
3
+ Card,
4
+ CardContent
5
+ } from "../chunk-35YMAIEL.js";
6
+ import {
7
+ statusColors
8
+ } from "../chunk-F7JHSZNT.js";
9
+ import {
10
+ cn
11
+ } from "../chunk-G6SRSWXB.js";
12
+
13
+ // src/primitives/stats-strip.tsx
14
+ import { jsx, jsxs } from "react/jsx-runtime";
15
+ var COLS = {
16
+ 3: "sm:grid-cols-3",
17
+ 4: "sm:grid-cols-4",
18
+ 5: "sm:grid-cols-5",
19
+ 6: "sm:grid-cols-6"
20
+ };
21
+ function StatsStrip({ items, columns = 5, className }) {
22
+ return /* @__PURE__ */ jsx("div", { className: cn("grid grid-cols-2 gap-2", COLS[columns] ?? COLS[5], className), children: items.map((item, i) => /* @__PURE__ */ jsx(Card, { children: /* @__PURE__ */ jsxs(CardContent, { className: "py-3 px-4", children: [
23
+ /* @__PURE__ */ jsx("div", { className: "text-[10px] uppercase tracking-wider text-muted-foreground", children: item.label }),
24
+ /* @__PURE__ */ jsx(
25
+ "div",
26
+ {
27
+ className: cn(
28
+ "text-2xl font-semibold",
29
+ item.tone ? statusColors[item.tone].icon : "text-foreground"
30
+ ),
31
+ children: item.value
32
+ }
33
+ )
34
+ ] }) }, i)) });
35
+ }
36
+ export {
37
+ StatsStrip
38
+ };