@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,65 @@
1
+ "use client";
2
+ "use client";
3
+ import {
4
+ Button
5
+ } from "../chunk-W326GKML.js";
6
+ import {
7
+ cn
8
+ } from "../chunk-G6SRSWXB.js";
9
+
10
+ // src/primitives/floating-action-button.tsx
11
+ import { forwardRef } from "react";
12
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
+ var FloatingActionButton = forwardRef(function FloatingActionButton2({
14
+ label,
15
+ icon,
16
+ visible = true,
17
+ bottom = "bottom-6",
18
+ side = "right",
19
+ asChild = false,
20
+ children,
21
+ className,
22
+ variant = "default",
23
+ size,
24
+ ...rest
25
+ }, ref) {
26
+ const iconOnly = !asChild && label == null;
27
+ const labelNode = !iconOnly && label != null && /* @__PURE__ */ jsx("span", { className: icon ? "ml-1.5" : void 0, children: label });
28
+ return /* @__PURE__ */ jsx(
29
+ "div",
30
+ {
31
+ "aria-hidden": !visible,
32
+ className: cn(
33
+ "fixed z-40 transition-all duration-300 ease-out motion-reduce:transition-opacity",
34
+ bottom,
35
+ side === "right" && "right-6 md:right-8",
36
+ side === "left" && "left-6 md:left-8",
37
+ side === "center" && "left-1/2 -translate-x-1/2",
38
+ visible ? "opacity-100 translate-y-0 pointer-events-auto" : "opacity-0 translate-y-3 pointer-events-none"
39
+ ),
40
+ children: /* @__PURE__ */ jsx(
41
+ Button,
42
+ {
43
+ ref,
44
+ asChild,
45
+ variant,
46
+ size: size ?? (iconOnly ? "icon" : "default"),
47
+ className: cn(
48
+ "shadow-lg",
49
+ iconOnly ? "rounded-full h-14 w-14" : "rounded-full px-5 h-12",
50
+ className
51
+ ),
52
+ tabIndex: visible ? void 0 : -1,
53
+ ...rest,
54
+ children: asChild ? children : /* @__PURE__ */ jsxs(Fragment, { children: [
55
+ icon,
56
+ labelNode
57
+ ] })
58
+ }
59
+ )
60
+ }
61
+ );
62
+ });
63
+ export {
64
+ FloatingActionButton
65
+ };
@@ -0,0 +1,38 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
5
+
6
+ // src/primitives/form-section.tsx
7
+ var _react = require('react');
8
+ var _jsxruntime = require('react/jsx-runtime');
9
+ function FormSection({
10
+ label,
11
+ meta,
12
+ children,
13
+ className
14
+ }) {
15
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "section", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "space-y-3", className), children: [
16
+ (label || meta) && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-baseline justify-between gap-2", children: [
17
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h2", { className: "font-mono text-[0.65rem] uppercase tracking-[0.18em] text-muted-foreground", children: label }),
18
+ meta && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "font-mono text-[0.65rem] uppercase tracking-wider text-muted-foreground", children: meta })
19
+ ] }),
20
+ children
21
+ ] });
22
+ }
23
+ function FormSectionList({ children, className }) {
24
+ const items = _react.Children.toArray(children).filter(Boolean);
25
+ if (items.length === 0) return null;
26
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "space-y-6", className), children: items.map((child, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27
+ "div",
28
+ {
29
+ className: i === 0 ? void 0 : "border-t border-border pt-6",
30
+ children: child
31
+ },
32
+ i
33
+ )) });
34
+ }
35
+
36
+
37
+
38
+ exports.FormSection = FormSection; exports.FormSectionList = FormSectionList;
@@ -0,0 +1,43 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface FormSectionProps {
5
+ /**
6
+ * Mono uppercase tracking-wide label. Distinct from
7
+ * <SettingsSection>'s larger h2 heading — FormSection is sized for
8
+ * sub-areas inside a single pane (composer right-rail, sidebar form,
9
+ * multi-area editor) where the label reads as a field-group caption
10
+ * rather than a page heading.
11
+ */
12
+ label: ReactNode;
13
+ /**
14
+ * Right-aligned meta slot, baseline-aligned with the label. Use for
15
+ * small status hints: counts ("4 rules"), pending text ("Saving…"),
16
+ * a reset link. Heavier controls belong inside `children`.
17
+ */
18
+ meta?: ReactNode;
19
+ children: ReactNode;
20
+ className?: string;
21
+ }
22
+ /**
23
+ * Labelled section primitive for form panes. Compose inside a
24
+ * <FormSectionList> to get horizontal dividers + consistent vertical
25
+ * rhythm between adjacent sections.
26
+ */
27
+ declare function FormSection({ label, meta, children, className, }: FormSectionProps): react_jsx_runtime.JSX.Element;
28
+ interface FormSectionListProps {
29
+ children: ReactNode;
30
+ className?: string;
31
+ }
32
+ /**
33
+ * Vertical stack of <FormSection>s with a light horizontal divider
34
+ * between adjacent items — same structural cue as a settings page,
35
+ * scaled for the compact form-pane label style.
36
+ *
37
+ * Filters out null/false children, so conditional sections
38
+ * (`{condition && <FormSection .../>}`) don't produce empty divider
39
+ * rows.
40
+ */
41
+ declare function FormSectionList({ children, className }: FormSectionListProps): react_jsx_runtime.JSX.Element | null;
42
+
43
+ export { FormSection, FormSectionList, type FormSectionListProps, type FormSectionProps };
@@ -0,0 +1,43 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface FormSectionProps {
5
+ /**
6
+ * Mono uppercase tracking-wide label. Distinct from
7
+ * <SettingsSection>'s larger h2 heading — FormSection is sized for
8
+ * sub-areas inside a single pane (composer right-rail, sidebar form,
9
+ * multi-area editor) where the label reads as a field-group caption
10
+ * rather than a page heading.
11
+ */
12
+ label: ReactNode;
13
+ /**
14
+ * Right-aligned meta slot, baseline-aligned with the label. Use for
15
+ * small status hints: counts ("4 rules"), pending text ("Saving…"),
16
+ * a reset link. Heavier controls belong inside `children`.
17
+ */
18
+ meta?: ReactNode;
19
+ children: ReactNode;
20
+ className?: string;
21
+ }
22
+ /**
23
+ * Labelled section primitive for form panes. Compose inside a
24
+ * <FormSectionList> to get horizontal dividers + consistent vertical
25
+ * rhythm between adjacent sections.
26
+ */
27
+ declare function FormSection({ label, meta, children, className, }: FormSectionProps): react_jsx_runtime.JSX.Element;
28
+ interface FormSectionListProps {
29
+ children: ReactNode;
30
+ className?: string;
31
+ }
32
+ /**
33
+ * Vertical stack of <FormSection>s with a light horizontal divider
34
+ * between adjacent items — same structural cue as a settings page,
35
+ * scaled for the compact form-pane label style.
36
+ *
37
+ * Filters out null/false children, so conditional sections
38
+ * (`{condition && <FormSection .../>}`) don't produce empty divider
39
+ * rows.
40
+ */
41
+ declare function FormSectionList({ children, className }: FormSectionListProps): react_jsx_runtime.JSX.Element | null;
42
+
43
+ export { FormSection, FormSectionList, type FormSectionListProps, type FormSectionProps };
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "../chunk-G6SRSWXB.js";
5
+
6
+ // src/primitives/form-section.tsx
7
+ import { Children } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ function FormSection({
10
+ label,
11
+ meta,
12
+ children,
13
+ className
14
+ }) {
15
+ return /* @__PURE__ */ jsxs("section", { className: cn("space-y-3", className), children: [
16
+ (label || meta) && /* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between gap-2", children: [
17
+ /* @__PURE__ */ jsx("h2", { className: "font-mono text-[0.65rem] uppercase tracking-[0.18em] text-muted-foreground", children: label }),
18
+ meta && /* @__PURE__ */ jsx("div", { className: "font-mono text-[0.65rem] uppercase tracking-wider text-muted-foreground", children: meta })
19
+ ] }),
20
+ children
21
+ ] });
22
+ }
23
+ function FormSectionList({ children, className }) {
24
+ const items = Children.toArray(children).filter(Boolean);
25
+ if (items.length === 0) return null;
26
+ return /* @__PURE__ */ jsx("div", { className: cn("space-y-6", className), children: items.map((child, i) => /* @__PURE__ */ jsx(
27
+ "div",
28
+ {
29
+ className: i === 0 ? void 0 : "border-t border-border pt-6",
30
+ children: child
31
+ },
32
+ i
33
+ )) });
34
+ }
35
+ export {
36
+ FormSection,
37
+ FormSectionList
38
+ };
@@ -0,0 +1,52 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
5
+
6
+ // src/primitives/key-value-grid.tsx
7
+ var _jsxruntime = require('react/jsx-runtime');
8
+ function KeyValueGrid({
9
+ items,
10
+ columns = 2,
11
+ size = "xs",
12
+ className
13
+ }) {
14
+ const colsClass = columns === 3 ? "grid-cols-3" : "grid-cols-2";
15
+ const textClass = size === "xs" ? "text-xs" : "text-sm";
16
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17
+ "dl",
18
+ {
19
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
20
+ "grid gap-x-3 gap-y-0.5",
21
+ colsClass,
22
+ textClass,
23
+ className
24
+ ),
25
+ children: items.map((item, i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "contents", children: [
26
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27
+ "dt",
28
+ {
29
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
30
+ "text-muted-foreground",
31
+ item.emphasis && "font-medium text-foreground"
32
+ ),
33
+ children: item.label
34
+ }
35
+ ),
36
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
37
+ "dd",
38
+ {
39
+ className: _chunkKWLSBTB2cjs.cn.call(void 0,
40
+ "text-right tabular-nums",
41
+ item.emphasis && "font-medium"
42
+ ),
43
+ children: item.value
44
+ }
45
+ )
46
+ ] }, i))
47
+ }
48
+ );
49
+ }
50
+
51
+
52
+ exports.KeyValueGrid = KeyValueGrid;
@@ -0,0 +1,20 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface KeyValueGridItem {
5
+ label: ReactNode;
6
+ value: ReactNode;
7
+ /** Render with `font-medium` for a totals/summary row. */
8
+ emphasis?: boolean;
9
+ }
10
+ interface KeyValueGridProps {
11
+ items: KeyValueGridItem[];
12
+ /** Number of columns. Defaults to 2. */
13
+ columns?: 2 | 3;
14
+ /** Visual size. `xs` matches dense popovers; `sm` matches cards. */
15
+ size?: "xs" | "sm";
16
+ className?: string;
17
+ }
18
+ declare function KeyValueGrid({ items, columns, size, className, }: KeyValueGridProps): react_jsx_runtime.JSX.Element;
19
+
20
+ export { KeyValueGrid, type KeyValueGridItem, type KeyValueGridProps };
@@ -0,0 +1,20 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ interface KeyValueGridItem {
5
+ label: ReactNode;
6
+ value: ReactNode;
7
+ /** Render with `font-medium` for a totals/summary row. */
8
+ emphasis?: boolean;
9
+ }
10
+ interface KeyValueGridProps {
11
+ items: KeyValueGridItem[];
12
+ /** Number of columns. Defaults to 2. */
13
+ columns?: 2 | 3;
14
+ /** Visual size. `xs` matches dense popovers; `sm` matches cards. */
15
+ size?: "xs" | "sm";
16
+ className?: string;
17
+ }
18
+ declare function KeyValueGrid({ items, columns, size, className, }: KeyValueGridProps): react_jsx_runtime.JSX.Element;
19
+
20
+ export { KeyValueGrid, type KeyValueGridItem, type KeyValueGridProps };
@@ -0,0 +1,52 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "../chunk-G6SRSWXB.js";
5
+
6
+ // src/primitives/key-value-grid.tsx
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ function KeyValueGrid({
9
+ items,
10
+ columns = 2,
11
+ size = "xs",
12
+ className
13
+ }) {
14
+ const colsClass = columns === 3 ? "grid-cols-3" : "grid-cols-2";
15
+ const textClass = size === "xs" ? "text-xs" : "text-sm";
16
+ return /* @__PURE__ */ jsx(
17
+ "dl",
18
+ {
19
+ className: cn(
20
+ "grid gap-x-3 gap-y-0.5",
21
+ colsClass,
22
+ textClass,
23
+ className
24
+ ),
25
+ children: items.map((item, i) => /* @__PURE__ */ jsxs("div", { className: "contents", children: [
26
+ /* @__PURE__ */ jsx(
27
+ "dt",
28
+ {
29
+ className: cn(
30
+ "text-muted-foreground",
31
+ item.emphasis && "font-medium text-foreground"
32
+ ),
33
+ children: item.label
34
+ }
35
+ ),
36
+ /* @__PURE__ */ jsx(
37
+ "dd",
38
+ {
39
+ className: cn(
40
+ "text-right tabular-nums",
41
+ item.emphasis && "font-medium"
42
+ ),
43
+ children: item.value
44
+ }
45
+ )
46
+ ] }, i))
47
+ }
48
+ );
49
+ }
50
+ export {
51
+ KeyValueGrid
52
+ };
@@ -0,0 +1,34 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
5
+
6
+ // src/primitives/marketing-footer.tsx
7
+ var _jsxruntime = require('react/jsx-runtime');
8
+ function MarketingFooter({
9
+ brand,
10
+ links = [],
11
+ meta,
12
+ renderLink,
13
+ className
14
+ }) {
15
+ const cls = "transition-colors hover:text-foreground";
16
+ const link = (l) => {
17
+ if (renderLink)
18
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: renderLink({ href: l.href, children: l.label, className: cls }) }, l.href);
19
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "a", { href: l.href, className: cls, children: l.label }, l.href);
20
+ };
21
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "footer", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "border-t border-border", className), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mx-auto flex w-full max-w-5xl flex-wrap items-center justify-between gap-4 px-4 py-6 md:px-6", children: [
22
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center", children: brand }),
23
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-4 font-mono text-xs text-muted-foreground", children: [
24
+ links.map(link),
25
+ meta && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
26
+ links.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground/40", children: "\xB7" }),
27
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: meta })
28
+ ] })
29
+ ] })
30
+ ] }) });
31
+ }
32
+
33
+
34
+ exports.MarketingFooter = MarketingFooter;
@@ -0,0 +1,29 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ type MarketingFooterLink = {
5
+ href: string;
6
+ label: ReactNode;
7
+ };
8
+ type RenderLink = (props: {
9
+ href: string;
10
+ children: ReactNode;
11
+ className?: string;
12
+ }) => ReactNode;
13
+ /**
14
+ * MarketingFooter — brand on the left, a row of meta links + a meta
15
+ * note (version / copyright) on the right, in the shared mono-muted
16
+ * treatment. Routing injected via `renderLink` (falls back to <a>).
17
+ * Server-component-safe.
18
+ */
19
+ interface MarketingFooterProps {
20
+ brand?: ReactNode;
21
+ links?: MarketingFooterLink[];
22
+ /** Trailing meta — e.g. "v0.1 · beta" or "© 2026". */
23
+ meta?: ReactNode;
24
+ renderLink?: RenderLink;
25
+ className?: string;
26
+ }
27
+ declare function MarketingFooter({ brand, links, meta, renderLink, className, }: MarketingFooterProps): react_jsx_runtime.JSX.Element;
28
+
29
+ export { MarketingFooter, type MarketingFooterLink, type MarketingFooterProps };
@@ -0,0 +1,29 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ type MarketingFooterLink = {
5
+ href: string;
6
+ label: ReactNode;
7
+ };
8
+ type RenderLink = (props: {
9
+ href: string;
10
+ children: ReactNode;
11
+ className?: string;
12
+ }) => ReactNode;
13
+ /**
14
+ * MarketingFooter — brand on the left, a row of meta links + a meta
15
+ * note (version / copyright) on the right, in the shared mono-muted
16
+ * treatment. Routing injected via `renderLink` (falls back to <a>).
17
+ * Server-component-safe.
18
+ */
19
+ interface MarketingFooterProps {
20
+ brand?: ReactNode;
21
+ links?: MarketingFooterLink[];
22
+ /** Trailing meta — e.g. "v0.1 · beta" or "© 2026". */
23
+ meta?: ReactNode;
24
+ renderLink?: RenderLink;
25
+ className?: string;
26
+ }
27
+ declare function MarketingFooter({ brand, links, meta, renderLink, className, }: MarketingFooterProps): react_jsx_runtime.JSX.Element;
28
+
29
+ export { MarketingFooter, type MarketingFooterLink, type MarketingFooterProps };
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import {
3
+ cn
4
+ } from "../chunk-G6SRSWXB.js";
5
+
6
+ // src/primitives/marketing-footer.tsx
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ function MarketingFooter({
9
+ brand,
10
+ links = [],
11
+ meta,
12
+ renderLink,
13
+ className
14
+ }) {
15
+ const cls = "transition-colors hover:text-foreground";
16
+ const link = (l) => {
17
+ if (renderLink)
18
+ return /* @__PURE__ */ jsx("span", { children: renderLink({ href: l.href, children: l.label, className: cls }) }, l.href);
19
+ return /* @__PURE__ */ jsx("a", { href: l.href, className: cls, children: l.label }, l.href);
20
+ };
21
+ return /* @__PURE__ */ jsx("footer", { className: cn("border-t border-border", className), children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex w-full max-w-5xl flex-wrap items-center justify-between gap-4 px-4 py-6 md:px-6", children: [
22
+ /* @__PURE__ */ jsx("div", { className: "flex items-center", children: brand }),
23
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4 font-mono text-xs text-muted-foreground", children: [
24
+ links.map(link),
25
+ meta && /* @__PURE__ */ jsxs(Fragment, { children: [
26
+ links.length > 0 && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground/40", children: "\xB7" }),
27
+ /* @__PURE__ */ jsx("span", { children: meta })
28
+ ] })
29
+ ] })
30
+ ] }) });
31
+ }
32
+ export {
33
+ MarketingFooter
34
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunk5PHOKJCTcjs = require('../chunk-5PHOKJCT.cjs');
5
+ require('../chunk-KWLSBTB2.cjs');
6
+
7
+
8
+ exports.MarketingHeader = _chunk5PHOKJCTcjs.MarketingHeader;
@@ -0,0 +1,31 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ type MarketingNavLink = {
5
+ href: string;
6
+ label: ReactNode;
7
+ };
8
+ type RenderLink = (props: {
9
+ href: string;
10
+ children: ReactNode;
11
+ className?: string;
12
+ }) => ReactNode;
13
+ /**
14
+ * MarketingHeader — the sticky landing-page top bar: brand on the left,
15
+ * nav links + a trailing slot (theme switch, auth buttons) on the right.
16
+ * Routing is injected via `renderLink` (falls back to <a>), so the kit
17
+ * stays framework-agnostic. Server-component-safe.
18
+ */
19
+ interface MarketingHeaderProps {
20
+ brand?: ReactNode;
21
+ links?: MarketingNavLink[];
22
+ /** Right-aligned slot — e.g. <ThemeModeSwitch /> + sign-in/up buttons. */
23
+ trailing?: ReactNode;
24
+ renderLink?: RenderLink;
25
+ /** "mono" gives the editorial uppercase-mono nav treatment. */
26
+ variant?: "default" | "mono";
27
+ className?: string;
28
+ }
29
+ declare function MarketingHeader({ brand, links, trailing, renderLink, variant, className, }: MarketingHeaderProps): react_jsx_runtime.JSX.Element;
30
+
31
+ export { MarketingHeader, type MarketingHeaderProps, type MarketingNavLink };
@@ -0,0 +1,31 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { ReactNode } from 'react';
3
+
4
+ type MarketingNavLink = {
5
+ href: string;
6
+ label: ReactNode;
7
+ };
8
+ type RenderLink = (props: {
9
+ href: string;
10
+ children: ReactNode;
11
+ className?: string;
12
+ }) => ReactNode;
13
+ /**
14
+ * MarketingHeader — the sticky landing-page top bar: brand on the left,
15
+ * nav links + a trailing slot (theme switch, auth buttons) on the right.
16
+ * Routing is injected via `renderLink` (falls back to <a>), so the kit
17
+ * stays framework-agnostic. Server-component-safe.
18
+ */
19
+ interface MarketingHeaderProps {
20
+ brand?: ReactNode;
21
+ links?: MarketingNavLink[];
22
+ /** Right-aligned slot — e.g. <ThemeModeSwitch /> + sign-in/up buttons. */
23
+ trailing?: ReactNode;
24
+ renderLink?: RenderLink;
25
+ /** "mono" gives the editorial uppercase-mono nav treatment. */
26
+ variant?: "default" | "mono";
27
+ className?: string;
28
+ }
29
+ declare function MarketingHeader({ brand, links, trailing, renderLink, variant, className, }: MarketingHeaderProps): react_jsx_runtime.JSX.Element;
30
+
31
+ export { MarketingHeader, type MarketingHeaderProps, type MarketingNavLink };
@@ -0,0 +1,8 @@
1
+ "use client";
2
+ import {
3
+ MarketingHeader
4
+ } from "../chunk-W5L6LQI3.js";
5
+ import "../chunk-G6SRSWXB.js";
6
+ export {
7
+ MarketingHeader
8
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
2
+
3
+
4
+ var _chunkHTTRUJQUcjs = require('../chunk-HTTRUJQU.cjs');
5
+ require('../chunk-KWLSBTB2.cjs');
6
+
7
+
8
+ exports.MarketingSection = _chunkHTTRUJQUcjs.MarketingSection;
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import { HTMLAttributes, ElementType } from 'react';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantProps } from 'class-variance-authority';
5
+
6
+ /**
7
+ * MarketingSection — the canonical container every landing-page section
8
+ * sits in. Codifies the shared rhythm across the app portfolio: a
9
+ * centered max-width inner column, responsive horizontal padding, a
10
+ * vertical padding scale, and the three background "tones" the apps
11
+ * alternate between (default / muted band / inverted dark band).
12
+ *
13
+ * Server-safe; compose the section primitives (Hero, FeatureGrid, …)
14
+ * or arbitrary children inside it.
15
+ */
16
+ declare const sectionVariants: (props?: ({
17
+ tone?: "default" | "muted" | "inverted" | null | undefined;
18
+ padding?: "none" | "sm" | "lg" | "default" | null | undefined;
19
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
20
+ declare const widthClass: {
21
+ readonly narrow: "max-w-3xl";
22
+ readonly wide: "max-w-5xl";
23
+ readonly widest: "max-w-6xl";
24
+ };
25
+ interface MarketingSectionProps extends HTMLAttributes<HTMLElement>, VariantProps<typeof sectionVariants> {
26
+ /** Inner column max-width. narrow=prose/hero, wide=header/footer, widest=grids. */
27
+ width?: keyof typeof widthClass;
28
+ /** Override the rendered element. Defaults to <section>. */
29
+ as?: ElementType;
30
+ /** Extra classes on the centered inner column (not the full-bleed band). */
31
+ innerClassName?: string;
32
+ }
33
+ declare const MarketingSection: React.ForwardRefExoticComponent<MarketingSectionProps & React.RefAttributes<HTMLElement>>;
34
+
35
+ export { MarketingSection, type MarketingSectionProps };