@caffeinebounce/ui 0.62.2

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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +39 -0
  3. package/dist/FinancialStatementTable-BNUrdTU4.d.cts +249 -0
  4. package/dist/FinancialStatementTable-BNUrdTU4.d.ts +249 -0
  5. package/dist/NewsletterSignup-BPreFi5W.d.cts +37 -0
  6. package/dist/NewsletterSignup-BPreFi5W.d.ts +37 -0
  7. package/dist/TestimonialsSection-DtPu2OeR.d.ts +736 -0
  8. package/dist/TestimonialsSection-z-yotRfv.d.cts +736 -0
  9. package/dist/UnifiedTableControls-CG299y9h.d.ts +1233 -0
  10. package/dist/UnifiedTableControls-CIjRpNhy.d.cts +1233 -0
  11. package/dist/blog.d.cts +99 -0
  12. package/dist/blog.d.ts +99 -0
  13. package/dist/blog.js +292 -0
  14. package/dist/blog.mjs +279 -0
  15. package/dist/button-BHnoRUkF.d.cts +34 -0
  16. package/dist/button-BHnoRUkF.d.ts +34 -0
  17. package/dist/charts.d.cts +80 -0
  18. package/dist/charts.d.ts +80 -0
  19. package/dist/charts.js +19 -0
  20. package/dist/charts.mjs +2 -0
  21. package/dist/chunk-33JR5SYE.js +44 -0
  22. package/dist/chunk-3NDB4YPC.js +247 -0
  23. package/dist/chunk-5RW4PYZ6.js +1504 -0
  24. package/dist/chunk-5THF4YP6.mjs +155 -0
  25. package/dist/chunk-6BUBNZPG.mjs +164 -0
  26. package/dist/chunk-6DVWMJ3H.mjs +7029 -0
  27. package/dist/chunk-6TGV2DNP.js +120 -0
  28. package/dist/chunk-72JGQ7IJ.mjs +1498 -0
  29. package/dist/chunk-7DHKQODW.mjs +2932 -0
  30. package/dist/chunk-7IKHZKAC.js +160 -0
  31. package/dist/chunk-ADIDI7AJ.js +11 -0
  32. package/dist/chunk-BFWX5GJZ.mjs +940 -0
  33. package/dist/chunk-BMFQG6RA.mjs +5537 -0
  34. package/dist/chunk-C4UT5V3P.js +65 -0
  35. package/dist/chunk-CC4KUIKC.js +2004 -0
  36. package/dist/chunk-D3QXPL47.mjs +1814 -0
  37. package/dist/chunk-DQWHYBV2.js +36 -0
  38. package/dist/chunk-E42B4GSB.js +993 -0
  39. package/dist/chunk-ESZ7CBA2.js +1007 -0
  40. package/dist/chunk-EYJJQVV4.js +111 -0
  41. package/dist/chunk-FRRS2YZH.mjs +129 -0
  42. package/dist/chunk-G5TQWWQA.mjs +37 -0
  43. package/dist/chunk-GAIQJCAZ.js +5612 -0
  44. package/dist/chunk-GMBGWOCR.mjs +48 -0
  45. package/dist/chunk-GUSTCU2W.mjs +105 -0
  46. package/dist/chunk-HBLKVQIQ.mjs +23 -0
  47. package/dist/chunk-HMAMMC72.js +26 -0
  48. package/dist/chunk-IMKLN273.mjs +9 -0
  49. package/dist/chunk-J6OLBSZR.js +250 -0
  50. package/dist/chunk-JAE45W2T.js +28 -0
  51. package/dist/chunk-JORVSG52.js +606 -0
  52. package/dist/chunk-KB7UXIQZ.mjs +984 -0
  53. package/dist/chunk-KGGQ5NZV.js +186 -0
  54. package/dist/chunk-KHCC5UKW.mjs +22 -0
  55. package/dist/chunk-KRRIRS6A.mjs +1945 -0
  56. package/dist/chunk-LQCVRWVF.js +48 -0
  57. package/dist/chunk-MHZXUOGN.mjs +168 -0
  58. package/dist/chunk-MPZFPU4X.js +349 -0
  59. package/dist/chunk-MVYRNJA6.js +74 -0
  60. package/dist/chunk-N6AFNFZR.mjs +565 -0
  61. package/dist/chunk-OFQLWSUR.mjs +214 -0
  62. package/dist/chunk-OLAAXLXY.mjs +219 -0
  63. package/dist/chunk-OZZWDIOY.js +1859 -0
  64. package/dist/chunk-PZRI43EZ.js +111 -0
  65. package/dist/chunk-Q256HRYD.js +176 -0
  66. package/dist/chunk-Q52ZEL62.mjs +223 -0
  67. package/dist/chunk-R26Y7LGJ.js +142 -0
  68. package/dist/chunk-RBUYW6QQ.js +39 -0
  69. package/dist/chunk-RVEFPVZF.mjs +43 -0
  70. package/dist/chunk-SORWLKOK.js +96 -0
  71. package/dist/chunk-STEP6C4C.mjs +33 -0
  72. package/dist/chunk-T5R6HUDG.mjs +22 -0
  73. package/dist/chunk-T6ZBA6VJ.js +7109 -0
  74. package/dist/chunk-UM7WMXIU.js +2995 -0
  75. package/dist/chunk-VBD4Q5LL.mjs +117 -0
  76. package/dist/chunk-WOITB4JL.js +195 -0
  77. package/dist/chunk-YKZEKJMZ.mjs +71 -0
  78. package/dist/chunk-YL7RZRHM.mjs +103 -0
  79. package/dist/chunk-YSLD2HLP.mjs +346 -0
  80. package/dist/chunk-ZFLZA7UP.mjs +140 -0
  81. package/dist/chunk-ZKUIUE7W.mjs +26 -0
  82. package/dist/chunk-ZOA7B32D.js +248 -0
  83. package/dist/data-table.d.cts +46 -0
  84. package/dist/data-table.d.ts +46 -0
  85. package/dist/data-table.js +270 -0
  86. package/dist/data-table.mjs +13 -0
  87. package/dist/editor.d.cts +89 -0
  88. package/dist/editor.d.ts +89 -0
  89. package/dist/editor.js +10 -0
  90. package/dist/editor.mjs +1 -0
  91. package/dist/forms.d.cts +142 -0
  92. package/dist/forms.d.ts +142 -0
  93. package/dist/forms.js +24 -0
  94. package/dist/forms.mjs +11 -0
  95. package/dist/hooks-8ORd7T1A.d.cts +751 -0
  96. package/dist/hooks-B2jU1GVT.d.ts +751 -0
  97. package/dist/hooks.d.cts +6 -0
  98. package/dist/hooks.d.ts +6 -0
  99. package/dist/hooks.js +99 -0
  100. package/dist/hooks.mjs +10 -0
  101. package/dist/index.d.cts +3141 -0
  102. package/dist/index.d.ts +3141 -0
  103. package/dist/index.js +7332 -0
  104. package/dist/index.mjs +5876 -0
  105. package/dist/layouts-DPfDDF53.d.cts +1001 -0
  106. package/dist/layouts-DPfDDF53.d.ts +1001 -0
  107. package/dist/layouts.d.cts +4 -0
  108. package/dist/layouts.d.ts +4 -0
  109. package/dist/layouts.js +100 -0
  110. package/dist/layouts.mjs +11 -0
  111. package/dist/marketing-3d.d.cts +51 -0
  112. package/dist/marketing-3d.d.ts +51 -0
  113. package/dist/marketing-3d.js +553 -0
  114. package/dist/marketing-3d.mjs +526 -0
  115. package/dist/marketing.d.cts +583 -0
  116. package/dist/marketing.d.ts +583 -0
  117. package/dist/marketing.js +299 -0
  118. package/dist/marketing.mjs +10 -0
  119. package/dist/media.d.cts +29 -0
  120. package/dist/media.d.ts +29 -0
  121. package/dist/media.js +189 -0
  122. package/dist/media.mjs +182 -0
  123. package/dist/navigation.d.cts +591 -0
  124. package/dist/navigation.d.ts +591 -0
  125. package/dist/navigation.js +108 -0
  126. package/dist/navigation.mjs +15 -0
  127. package/dist/portal.d.cts +58 -0
  128. package/dist/portal.d.ts +58 -0
  129. package/dist/portal.js +403 -0
  130. package/dist/portal.mjs +395 -0
  131. package/dist/primitives.d.cts +508 -0
  132. package/dist/primitives.d.ts +508 -0
  133. package/dist/primitives.js +295 -0
  134. package/dist/primitives.mjs +14 -0
  135. package/dist/settings.d.cts +216 -0
  136. package/dist/settings.d.ts +216 -0
  137. package/dist/settings.js +34 -0
  138. package/dist/settings.mjs +9 -0
  139. package/dist/shared-Dqn36QHZ.d.cts +4 -0
  140. package/dist/shared-Dqn36QHZ.d.ts +4 -0
  141. package/dist/styles.css +1213 -0
  142. package/package.json +189 -0
  143. package/styles.css +1 -0
@@ -0,0 +1,214 @@
1
+ import { cn } from './chunk-IMKLN273.mjs';
2
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
3
+ import { CheckIcon, CircleIcon, ChevronRightIcon } from 'lucide-react';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ function DropdownMenu({
7
+ ...props
8
+ }) {
9
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
10
+ }
11
+ function DropdownMenuPortal({
12
+ ...props
13
+ }) {
14
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { "data-slot": "dropdown-menu-portal", ...props });
15
+ }
16
+ function DropdownMenuTrigger({
17
+ ...props
18
+ }) {
19
+ return /* @__PURE__ */ jsx(
20
+ DropdownMenuPrimitive.Trigger,
21
+ {
22
+ "data-slot": "dropdown-menu-trigger",
23
+ ...props
24
+ }
25
+ );
26
+ }
27
+ function DropdownMenuContent({
28
+ className,
29
+ sideOffset = 4,
30
+ ...props
31
+ }) {
32
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
33
+ DropdownMenuPrimitive.Content,
34
+ {
35
+ "data-slot": "dropdown-menu-content",
36
+ sideOffset,
37
+ className: cn(
38
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-box border p-1 shadow-md",
39
+ className
40
+ ),
41
+ ...props
42
+ }
43
+ ) });
44
+ }
45
+ function DropdownMenuItem({
46
+ className,
47
+ inset,
48
+ variant = "default",
49
+ ...props
50
+ }) {
51
+ return /* @__PURE__ */ jsx(
52
+ DropdownMenuPrimitive.Item,
53
+ {
54
+ "data-slot": "dropdown-menu-item",
55
+ "data-inset": inset,
56
+ "data-variant": variant,
57
+ className: cn(
58
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
59
+ className
60
+ ),
61
+ ...props
62
+ }
63
+ );
64
+ }
65
+ function DropdownMenuCheckboxItem({
66
+ className,
67
+ children,
68
+ checked,
69
+ ...props
70
+ }) {
71
+ return /* @__PURE__ */ jsxs(
72
+ DropdownMenuPrimitive.CheckboxItem,
73
+ {
74
+ "data-slot": "dropdown-menu-checkbox-item",
75
+ className: cn(
76
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-disabled:pointer-events-none data-disabled:opacity-50",
77
+ className
78
+ ),
79
+ checked,
80
+ ...props,
81
+ children: [
82
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" }) }) }),
83
+ children
84
+ ]
85
+ }
86
+ );
87
+ }
88
+ function DropdownMenuRadioItem({
89
+ className,
90
+ children,
91
+ ...props
92
+ }) {
93
+ return /* @__PURE__ */ jsxs(
94
+ DropdownMenuPrimitive.RadioItem,
95
+ {
96
+ "data-slot": "dropdown-menu-radio-item",
97
+ className: cn(
98
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors data-disabled:pointer-events-none data-disabled:opacity-50",
99
+ className
100
+ ),
101
+ ...props,
102
+ children: [
103
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(CircleIcon, { className: "size-2 fill-current" }) }) }),
104
+ children
105
+ ]
106
+ }
107
+ );
108
+ }
109
+ function DropdownMenuLabel({
110
+ className,
111
+ inset,
112
+ ...props
113
+ }) {
114
+ return /* @__PURE__ */ jsx(
115
+ DropdownMenuPrimitive.Label,
116
+ {
117
+ "data-slot": "dropdown-menu-label",
118
+ className: cn(
119
+ "px-2 py-1.5 text-sm font-semibold",
120
+ inset && "pl-8",
121
+ className
122
+ ),
123
+ ...props
124
+ }
125
+ );
126
+ }
127
+ function DropdownMenuSeparator({
128
+ className,
129
+ ...props
130
+ }) {
131
+ return /* @__PURE__ */ jsx(
132
+ DropdownMenuPrimitive.Separator,
133
+ {
134
+ "data-slot": "dropdown-menu-separator",
135
+ className: cn("bg-muted -mx-1 my-1 h-px", className),
136
+ ...props
137
+ }
138
+ );
139
+ }
140
+ function DropdownMenuGroup({
141
+ ...props
142
+ }) {
143
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props });
144
+ }
145
+ function DropdownMenuRadioGroup({
146
+ ...props
147
+ }) {
148
+ return /* @__PURE__ */ jsx(
149
+ DropdownMenuPrimitive.RadioGroup,
150
+ {
151
+ "data-slot": "dropdown-menu-radio-group",
152
+ ...props
153
+ }
154
+ );
155
+ }
156
+ function DropdownMenuSub({
157
+ ...props
158
+ }) {
159
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Sub, { "data-slot": "dropdown-menu-sub", ...props });
160
+ }
161
+ function DropdownMenuSubTrigger({
162
+ className,
163
+ inset,
164
+ children,
165
+ ...props
166
+ }) {
167
+ return /* @__PURE__ */ jsxs(
168
+ DropdownMenuPrimitive.SubTrigger,
169
+ {
170
+ "data-slot": "dropdown-menu-sub-trigger",
171
+ className: cn(
172
+ "focus:bg-accent data-[state=open]:bg-accent flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none",
173
+ inset && "pl-8",
174
+ className
175
+ ),
176
+ ...props,
177
+ children: [
178
+ children,
179
+ /* @__PURE__ */ jsx(ChevronRightIcon, { className: "ml-auto size-4" })
180
+ ]
181
+ }
182
+ );
183
+ }
184
+ function DropdownMenuSubContent({
185
+ className,
186
+ ...props
187
+ }) {
188
+ return /* @__PURE__ */ jsx(
189
+ DropdownMenuPrimitive.SubContent,
190
+ {
191
+ "data-slot": "dropdown-menu-sub-content",
192
+ className: cn(
193
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-32 overflow-hidden rounded-box border p-1 shadow-lg",
194
+ className
195
+ ),
196
+ ...props
197
+ }
198
+ );
199
+ }
200
+ function DropdownMenuShortcut({
201
+ className,
202
+ ...props
203
+ }) {
204
+ return /* @__PURE__ */ jsx(
205
+ "span",
206
+ {
207
+ "data-slot": "dropdown-menu-shortcut",
208
+ className: cn("ml-auto text-xs tracking-widest opacity-60", className),
209
+ ...props
210
+ }
211
+ );
212
+ }
213
+
214
+ export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger };
@@ -0,0 +1,219 @@
1
+ import { Card, CardHeader, CardTitle, CardDescription, CardContent } from './chunk-YL7RZRHM.mjs';
2
+ import { Label } from './chunk-KHCC5UKW.mjs';
3
+ import { TabsContent, Tabs, TabsList, TabsTrigger } from './chunk-GMBGWOCR.mjs';
4
+ import { Container } from './chunk-RVEFPVZF.mjs';
5
+ import { Spinner } from './chunk-HBLKVQIQ.mjs';
6
+ import { Button } from './chunk-VBD4Q5LL.mjs';
7
+ import { cn } from './chunk-IMKLN273.mjs';
8
+ import { ArrowLeft } from 'lucide-react';
9
+ import Link from 'next/link';
10
+ import * as React from 'react';
11
+ import { useEffect, useState } from 'react';
12
+ import { jsxs, jsx } from 'react/jsx-runtime';
13
+
14
+ var PageHeader = React.forwardRef(
15
+ ({
16
+ className,
17
+ title,
18
+ description,
19
+ actions,
20
+ bordered = false,
21
+ backHref,
22
+ backLabel = "Back",
23
+ ...props
24
+ }, ref) => {
25
+ return /* @__PURE__ */ jsxs(
26
+ "div",
27
+ {
28
+ ref,
29
+ className: cn(
30
+ "mb-6",
31
+ bordered && "border-b border-border pb-6",
32
+ className
33
+ ),
34
+ ...props,
35
+ children: [
36
+ backHref && /* @__PURE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx(Link, { href: backHref, children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "-ml-2", children: [
37
+ /* @__PURE__ */ jsx(ArrowLeft, { className: "w-4 h-4 mr-2" }),
38
+ backLabel
39
+ ] }) }) }),
40
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between", children: [
41
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
42
+ /* @__PURE__ */ jsx("h1", { className: "text-3xl font-semibold tracking-tight", children: title }),
43
+ description && /* @__PURE__ */ jsx("p", { className: "text-muted-foreground", children: description })
44
+ ] }),
45
+ actions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 mt-4 sm:mt-0", children: actions })
46
+ ] })
47
+ ]
48
+ }
49
+ );
50
+ }
51
+ );
52
+ PageHeader.displayName = "PageHeader";
53
+ function SettingsTabContent({
54
+ tabId,
55
+ loading = false,
56
+ children
57
+ }) {
58
+ if (loading) {
59
+ return /* @__PURE__ */ jsx(TabsContent, { value: tabId, children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center min-h-[300px]", children: /* @__PURE__ */ jsx(Spinner, { size: "lg" }) }) });
60
+ }
61
+ return /* @__PURE__ */ jsx(TabsContent, { value: tabId, children });
62
+ }
63
+ function SettingsTabs({
64
+ tabs,
65
+ activeTab,
66
+ onTabChange,
67
+ children,
68
+ syncWithHash = false,
69
+ orientation = "horizontal",
70
+ className
71
+ }) {
72
+ useEffect(() => {
73
+ if (!syncWithHash) return;
74
+ const handleHashChange = () => {
75
+ const hash = window.location.hash.slice(1);
76
+ const tabIds = tabs.map((tab) => tab.id);
77
+ if (hash && tabIds.includes(hash)) {
78
+ onTabChange(hash);
79
+ }
80
+ };
81
+ handleHashChange();
82
+ window.addEventListener("hashchange", handleHashChange);
83
+ return () => window.removeEventListener("hashchange", handleHashChange);
84
+ }, [syncWithHash, tabs, onTabChange]);
85
+ const handleTabChange = (value) => {
86
+ onTabChange(value);
87
+ if (syncWithHash) {
88
+ const isValidTab = tabs.some((tab) => tab.id === value);
89
+ if (isValidTab) {
90
+ window.history.replaceState(null, "", `#${value}`);
91
+ }
92
+ }
93
+ };
94
+ return /* @__PURE__ */ jsxs(
95
+ Tabs,
96
+ {
97
+ value: activeTab,
98
+ onValueChange: handleTabChange,
99
+ orientation,
100
+ className: cn("space-y-6", className),
101
+ children: [
102
+ /* @__PURE__ */ jsx(
103
+ TabsList,
104
+ {
105
+ className: cn(
106
+ orientation === "vertical" && "flex-col h-auto items-stretch justify-start"
107
+ ),
108
+ children: tabs.map((tab) => {
109
+ const Icon = tab.icon;
110
+ return /* @__PURE__ */ jsxs(
111
+ TabsTrigger,
112
+ {
113
+ value: tab.id,
114
+ className: cn("gap-2", orientation === "vertical" && "w-full"),
115
+ children: [
116
+ Icon && /* @__PURE__ */ jsx(Icon, { className: "h-4 w-4" }),
117
+ tab.label
118
+ ]
119
+ },
120
+ tab.id
121
+ );
122
+ })
123
+ }
124
+ ),
125
+ children
126
+ ]
127
+ }
128
+ );
129
+ }
130
+ function SettingsLayout({
131
+ title = "Settings",
132
+ description,
133
+ pages,
134
+ defaultPage,
135
+ syncWithHash = false,
136
+ orientation = "horizontal",
137
+ className,
138
+ containerSize = "default"
139
+ }) {
140
+ const [activeTab, setActiveTab] = useState(defaultPage || pages[0]?.id || "");
141
+ const tabs = pages.map((page) => ({
142
+ id: page.id,
143
+ label: page.label,
144
+ icon: page.icon
145
+ }));
146
+ return /* @__PURE__ */ jsxs(Container, { size: containerSize, className, children: [
147
+ (title || description) && /* @__PURE__ */ jsx(PageHeader, { title, description, className: "mb-6" }),
148
+ /* @__PURE__ */ jsx(
149
+ SettingsTabs,
150
+ {
151
+ tabs,
152
+ activeTab,
153
+ onTabChange: setActiveTab,
154
+ syncWithHash,
155
+ orientation,
156
+ children: pages.map((page) => /* @__PURE__ */ jsx(
157
+ SettingsTabContent,
158
+ {
159
+ tabId: page.id,
160
+ loading: page.loading,
161
+ children: /* @__PURE__ */ jsx("div", { className: "space-y-6", children: page.content })
162
+ },
163
+ page.id
164
+ ))
165
+ }
166
+ )
167
+ ] });
168
+ }
169
+ function SettingsRow({
170
+ label,
171
+ description,
172
+ children,
173
+ htmlFor,
174
+ className,
175
+ layout = "horizontal"
176
+ }) {
177
+ if (layout === "vertical") {
178
+ return /* @__PURE__ */ jsxs("div", { className: cn("space-y-2", className), children: [
179
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
180
+ /* @__PURE__ */ jsx(Label, { htmlFor, className: "text-base", children: label }),
181
+ description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description })
182
+ ] }),
183
+ children
184
+ ] });
185
+ }
186
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center justify-between", className), children: [
187
+ /* @__PURE__ */ jsxs("div", { className: "space-y-0.5", children: [
188
+ /* @__PURE__ */ jsx(Label, { htmlFor, className: "text-base", children: label }),
189
+ description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description })
190
+ ] }),
191
+ children
192
+ ] });
193
+ }
194
+ function SettingsSection({
195
+ title,
196
+ description,
197
+ children,
198
+ className,
199
+ card = true
200
+ }) {
201
+ if (card) {
202
+ return /* @__PURE__ */ jsxs(Card, { className, children: [
203
+ /* @__PURE__ */ jsxs(CardHeader, { children: [
204
+ /* @__PURE__ */ jsx(CardTitle, { children: title }),
205
+ description && /* @__PURE__ */ jsx(CardDescription, { children: description })
206
+ ] }),
207
+ /* @__PURE__ */ jsx(CardContent, { className: "space-y-6", children })
208
+ ] });
209
+ }
210
+ return /* @__PURE__ */ jsxs("div", { className: cn("space-y-4", className), children: [
211
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
212
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-medium", children: title }),
213
+ description && /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description })
214
+ ] }),
215
+ /* @__PURE__ */ jsx("div", { className: "space-y-6", children })
216
+ ] });
217
+ }
218
+
219
+ export { PageHeader, SettingsLayout, SettingsRow, SettingsSection, SettingsTabContent, SettingsTabs };