@augmenting-integrations/ui 0.2.1 → 1.0.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 (165) hide show
  1. package/dist/components/chrome/Logo.cjs +52 -0
  2. package/dist/components/chrome/Logo.cjs.map +1 -0
  3. package/dist/components/chrome/Logo.js +28 -0
  4. package/dist/components/chrome/Logo.js.map +1 -0
  5. package/dist/components/chrome/RoleSwitcher.cjs +98 -0
  6. package/dist/components/chrome/RoleSwitcher.cjs.map +1 -0
  7. package/dist/components/chrome/RoleSwitcher.js +64 -0
  8. package/dist/components/chrome/RoleSwitcher.js.map +1 -0
  9. package/dist/components/chrome/ThemeSwitcher.cjs +129 -0
  10. package/dist/components/chrome/ThemeSwitcher.cjs.map +1 -0
  11. package/dist/components/chrome/ThemeSwitcher.js +100 -0
  12. package/dist/components/chrome/ThemeSwitcher.js.map +1 -0
  13. package/dist/components/shells/AppShell.cjs +128 -0
  14. package/dist/components/shells/AppShell.cjs.map +1 -0
  15. package/dist/components/shells/AppShell.d.ts +1 -7
  16. package/dist/components/shells/AppShell.d.ts.map +1 -1
  17. package/dist/components/shells/AppShell.js +94 -0
  18. package/dist/components/shells/AppShell.js.map +1 -0
  19. package/dist/components/shells/PublicShell.cjs +87 -0
  20. package/dist/components/shells/PublicShell.cjs.map +1 -0
  21. package/dist/components/shells/PublicShell.d.ts +1 -11
  22. package/dist/components/shells/PublicShell.d.ts.map +1 -1
  23. package/dist/components/shells/PublicShell.js +53 -0
  24. package/dist/components/shells/PublicShell.js.map +1 -0
  25. package/dist/components/shells/StudioShell.cjs +49 -0
  26. package/dist/components/shells/StudioShell.cjs.map +1 -0
  27. package/dist/components/shells/StudioShell.js +25 -0
  28. package/dist/components/shells/StudioShell.js.map +1 -0
  29. package/dist/components/ui/avatar.cjs +131 -0
  30. package/dist/components/ui/avatar.cjs.map +1 -0
  31. package/dist/components/ui/avatar.js +102 -0
  32. package/dist/components/ui/avatar.js.map +1 -0
  33. package/dist/components/ui/badge.cjs +69 -0
  34. package/dist/components/ui/badge.cjs.map +1 -0
  35. package/dist/components/ui/badge.js +44 -0
  36. package/dist/components/ui/badge.js.map +1 -0
  37. package/dist/components/ui/button.cjs +82 -0
  38. package/dist/components/ui/button.cjs.map +1 -0
  39. package/dist/components/ui/button.js +57 -0
  40. package/dist/components/ui/button.js.map +1 -0
  41. package/dist/components/ui/card.cjs +114 -0
  42. package/dist/components/ui/card.cjs.map +1 -0
  43. package/dist/components/ui/card.js +84 -0
  44. package/dist/components/ui/card.js.map +1 -0
  45. package/dist/components/ui/checkbox.cjs +57 -0
  46. package/dist/components/ui/checkbox.cjs.map +1 -0
  47. package/dist/components/ui/checkbox.js +33 -0
  48. package/dist/components/ui/checkbox.js.map +1 -0
  49. package/dist/components/ui/dialog.cjs +172 -0
  50. package/dist/components/ui/dialog.cjs.map +1 -0
  51. package/dist/components/ui/dialog.js +139 -0
  52. package/dist/components/ui/dialog.js.map +1 -0
  53. package/dist/components/ui/dropdown-menu.cjs +250 -0
  54. package/dist/components/ui/dropdown-menu.cjs.map +1 -0
  55. package/dist/components/ui/dropdown-menu.js +212 -0
  56. package/dist/components/ui/dropdown-menu.js.map +1 -0
  57. package/dist/components/ui/input.cjs +46 -0
  58. package/dist/components/ui/input.cjs.map +1 -0
  59. package/dist/components/ui/input.js +22 -0
  60. package/dist/components/ui/input.js.map +1 -0
  61. package/dist/components/ui/label.cjs +48 -0
  62. package/dist/components/ui/label.cjs.map +1 -0
  63. package/dist/components/ui/label.js +24 -0
  64. package/dist/components/ui/label.js.map +1 -0
  65. package/dist/components/ui/select.cjs +201 -0
  66. package/dist/components/ui/select.cjs.map +1 -0
  67. package/dist/components/ui/select.js +168 -0
  68. package/dist/components/ui/select.js.map +1 -0
  69. package/dist/components/ui/separator.cjs +52 -0
  70. package/dist/components/ui/separator.cjs.map +1 -0
  71. package/dist/components/ui/separator.js +28 -0
  72. package/dist/components/ui/separator.js.map +1 -0
  73. package/dist/components/ui/sheet.cjs +154 -0
  74. package/dist/components/ui/sheet.cjs.map +1 -0
  75. package/dist/components/ui/sheet.js +123 -0
  76. package/dist/components/ui/sheet.js.map +1 -0
  77. package/dist/components/ui/table.cjs +134 -0
  78. package/dist/components/ui/table.cjs.map +1 -0
  79. package/dist/components/ui/table.js +103 -0
  80. package/dist/components/ui/table.js.map +1 -0
  81. package/dist/components/ui/tabs.cjs +121 -0
  82. package/dist/components/ui/tabs.cjs.map +1 -0
  83. package/dist/components/ui/tabs.js +93 -0
  84. package/dist/components/ui/tabs.js.map +1 -0
  85. package/dist/components/ui/textarea.cjs +43 -0
  86. package/dist/components/ui/textarea.cjs.map +1 -0
  87. package/dist/components/ui/textarea.js +19 -0
  88. package/dist/components/ui/textarea.js.map +1 -0
  89. package/dist/index.cjs +92 -0
  90. package/dist/index.cjs.map +1 -0
  91. package/dist/index.js +25 -16
  92. package/dist/index.js.map +1 -1
  93. package/dist/lib/utils.cjs +33 -0
  94. package/dist/lib/utils.cjs.map +1 -0
  95. package/dist/lib/utils.js +5 -2
  96. package/dist/lib/utils.js.map +1 -1
  97. package/dist/providers/MockProvider.cjs +83 -0
  98. package/dist/providers/MockProvider.cjs.map +1 -0
  99. package/dist/providers/MockProvider.js +49 -0
  100. package/dist/providers/MockProvider.js.map +1 -0
  101. package/dist/providers/QueryProvider.cjs +52 -0
  102. package/dist/providers/QueryProvider.cjs.map +1 -0
  103. package/dist/providers/QueryProvider.js +18 -0
  104. package/dist/providers/QueryProvider.js.map +1 -0
  105. package/dist/providers/SessionProvider.cjs +37 -0
  106. package/dist/providers/SessionProvider.cjs.map +1 -0
  107. package/dist/providers/SessionProvider.js +13 -0
  108. package/dist/providers/SessionProvider.js.map +1 -0
  109. package/dist/providers/ThemeProvider.cjs +92 -0
  110. package/dist/providers/ThemeProvider.cjs.map +1 -0
  111. package/dist/providers/ThemeProvider.js +57 -0
  112. package/dist/providers/ThemeProvider.js.map +1 -0
  113. package/package.json +7 -5
  114. package/dist/components/chrome/Logo.jsx +0 -19
  115. package/dist/components/chrome/Logo.jsx.map +0 -1
  116. package/dist/components/chrome/RoleSwitcher.jsx +0 -32
  117. package/dist/components/chrome/RoleSwitcher.jsx.map +0 -1
  118. package/dist/components/chrome/ThemeSwitcher.jsx +0 -43
  119. package/dist/components/chrome/ThemeSwitcher.jsx.map +0 -1
  120. package/dist/components/shells/AppShell.jsx +0 -67
  121. package/dist/components/shells/AppShell.jsx.map +0 -1
  122. package/dist/components/shells/PublicShell.jsx +0 -42
  123. package/dist/components/shells/PublicShell.jsx.map +0 -1
  124. package/dist/components/shells/StudioShell.jsx +0 -20
  125. package/dist/components/shells/StudioShell.jsx.map +0 -1
  126. package/dist/components/ui/avatar.jsx +0 -24
  127. package/dist/components/ui/avatar.jsx.map +0 -1
  128. package/dist/components/ui/badge.jsx +0 -25
  129. package/dist/components/ui/badge.jsx.map +0 -1
  130. package/dist/components/ui/button.jsx +0 -36
  131. package/dist/components/ui/button.jsx.map +0 -1
  132. package/dist/components/ui/card.jsx +0 -25
  133. package/dist/components/ui/card.jsx.map +0 -1
  134. package/dist/components/ui/checkbox.jsx +0 -14
  135. package/dist/components/ui/checkbox.jsx.map +0 -1
  136. package/dist/components/ui/dialog.jsx +0 -52
  137. package/dist/components/ui/dialog.jsx.map +0 -1
  138. package/dist/components/ui/dropdown-menu.jsx +0 -71
  139. package/dist/components/ui/dropdown-menu.jsx.map +0 -1
  140. package/dist/components/ui/input.jsx +0 -7
  141. package/dist/components/ui/input.jsx.map +0 -1
  142. package/dist/components/ui/label.jsx +0 -9
  143. package/dist/components/ui/label.jsx.map +0 -1
  144. package/dist/components/ui/select.jsx +0 -63
  145. package/dist/components/ui/select.jsx.map +0 -1
  146. package/dist/components/ui/separator.jsx +0 -9
  147. package/dist/components/ui/separator.jsx.map +0 -1
  148. package/dist/components/ui/sheet.jsx +0 -50
  149. package/dist/components/ui/sheet.jsx.map +0 -1
  150. package/dist/components/ui/table.jsx +0 -31
  151. package/dist/components/ui/table.jsx.map +0 -1
  152. package/dist/components/ui/tabs.jsx +0 -30
  153. package/dist/components/ui/tabs.jsx.map +0 -1
  154. package/dist/components/ui/textarea.jsx +0 -7
  155. package/dist/components/ui/textarea.jsx.map +0 -1
  156. package/dist/index.mjs +0 -1562
  157. package/dist/index.mjs.map +0 -1
  158. package/dist/providers/MockProvider.jsx +0 -59
  159. package/dist/providers/MockProvider.jsx.map +0 -1
  160. package/dist/providers/QueryProvider.jsx +0 -12
  161. package/dist/providers/QueryProvider.jsx.map +0 -1
  162. package/dist/providers/SessionProvider.jsx +0 -6
  163. package/dist/providers/SessionProvider.jsx.map +0 -1
  164. package/dist/providers/ThemeProvider.jsx +0 -44
  165. package/dist/providers/ThemeProvider.jsx.map +0 -1
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var AppShell_exports = {};
31
+ __export(AppShell_exports, {
32
+ AppShell: () => AppShell
33
+ });
34
+ module.exports = __toCommonJS(AppShell_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var React = __toESM(require("react"));
37
+ var import_link = __toESM(require("next/link"));
38
+ var import_lucide_react = require("lucide-react");
39
+ var import_Logo = require("../chrome/Logo.js");
40
+ var import_ThemeSwitcher = require("../chrome/ThemeSwitcher.js");
41
+ var import_RoleSwitcher = require("../chrome/RoleSwitcher.js");
42
+ var import_utils = require("../../lib/utils.js");
43
+ function NavGroup({ group, pathname }) {
44
+ if (group.items.length === 0) return null;
45
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-1", children: [
46
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "px-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: group.label }),
47
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { className: "space-y-0.5", children: group.items.map((item) => {
48
+ const active = pathname === item.href || pathname.startsWith(`${item.href}/`);
49
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
50
+ import_link.default,
51
+ {
52
+ href: item.href,
53
+ className: (0, import_utils.cn)(
54
+ "flex items-center gap-3 rounded-md px-3 py-2 text-sm transition",
55
+ active ? "bg-sidebar-accent text-sidebar-accent-foreground" : "text-sidebar-foreground hover:bg-sidebar-accent/60"
56
+ ),
57
+ children: [
58
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(item.icon, { className: "h-4 w-4 shrink-0" }),
59
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: item.label })
60
+ ]
61
+ }
62
+ ) }, item.href);
63
+ }) })
64
+ ] });
65
+ }
66
+ function AppShell({
67
+ children,
68
+ pathname,
69
+ navGroups,
70
+ homeHref = "/",
71
+ showRoleSwitcher = true
72
+ }) {
73
+ const [mobileOpen, setMobileOpen] = React.useState(false);
74
+ const sidebarContent = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex h-full flex-col gap-6 px-3 py-4", children: [
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: homeHref, className: "px-2", "aria-label": "Home", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Logo.Logo, {}) }),
76
+ navGroups.map((g) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NavGroup, { group: g, pathname }, g.label))
77
+ ] });
78
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex min-h-svh bg-background text-foreground", children: [
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("aside", { className: "hidden w-64 shrink-0 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:block", children: sidebarContent }),
80
+ mobileOpen ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "fixed inset-0 z-50 flex md:hidden", children: [
81
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
82
+ "div",
83
+ {
84
+ className: "flex-1 bg-foreground/40 backdrop-blur-sm",
85
+ onClick: () => setMobileOpen(false),
86
+ "aria-hidden": true
87
+ }
88
+ ),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("aside", { className: "relative w-72 border-l border-sidebar-border bg-sidebar text-sidebar-foreground", children: [
90
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
91
+ "button",
92
+ {
93
+ type: "button",
94
+ onClick: () => setMobileOpen(false),
95
+ "aria-label": "Close menu",
96
+ className: "absolute right-2 top-2 inline-flex h-9 w-9 items-center justify-center rounded-md hover:bg-sidebar-accent",
97
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { className: "h-4 w-4" })
98
+ }
99
+ ),
100
+ sidebarContent
101
+ ] })
102
+ ] }) : null,
103
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col", children: [
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { className: "flex h-14 items-center justify-between gap-3 border-b border-border bg-background/80 px-4 backdrop-blur md:px-6", children: [
105
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
106
+ "button",
107
+ {
108
+ type: "button",
109
+ onClick: () => setMobileOpen(true),
110
+ "aria-label": "Open menu",
111
+ className: "inline-flex h-9 w-9 items-center justify-center rounded-md border border-border md:hidden",
112
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.Menu, { className: "h-4 w-4" })
113
+ }
114
+ ),
115
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-3 md:ml-auto", children: [
116
+ showRoleSwitcher ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_RoleSwitcher.RoleSwitcher, {}) : null,
117
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ThemeSwitcher.ThemeSwitcher, {})
118
+ ] })
119
+ ] }),
120
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("main", { className: "min-w-0 flex-1 px-4 py-6 md:px-8 md:py-8", children })
121
+ ] })
122
+ ] });
123
+ }
124
+ // Annotate the CommonJS export names for ESM import in node:
125
+ 0 && (module.exports = {
126
+ AppShell
127
+ });
128
+ //# sourceMappingURL=AppShell.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/shells/AppShell.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport Link from \"next/link\";\nimport { Menu, X } from \"lucide-react\";\nimport { Logo } from \"../chrome/Logo.js\";\nimport { ThemeSwitcher } from \"../chrome/ThemeSwitcher.js\";\nimport { RoleSwitcher } from \"../chrome/RoleSwitcher.js\";\nimport { cn } from \"../../lib/utils.js\";\n\nexport type AppNavItem = {\n href: string;\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n /** When provided, item only renders if the consumer's `getFlag(flag)` returns true. */\n flag?: string;\n};\n\nexport type AppNavGroup = { label: string; items: AppNavItem[] };\n\nfunction NavGroup({ group, pathname }: { group: AppNavGroup; pathname: string }) {\n if (group.items.length === 0) return null;\n return (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {group.label}\n </p>\n <ul className=\"space-y-0.5\">\n {group.items.map((item) => {\n const active = pathname === item.href || pathname.startsWith(`${item.href}/`);\n return (\n <li key={item.href}>\n <Link\n href={item.href}\n className={cn(\n \"flex items-center gap-3 rounded-md px-3 py-2 text-sm transition\",\n active\n ? \"bg-sidebar-accent text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground hover:bg-sidebar-accent/60\",\n )}\n >\n <item.icon className=\"h-4 w-4 shrink-0\" />\n <span>{item.label}</span>\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\nexport function AppShell({\n children,\n pathname,\n navGroups,\n homeHref = \"/\",\n showRoleSwitcher = true,\n}: {\n children: React.ReactNode;\n pathname: string;\n navGroups: AppNavGroup[];\n homeHref?: string;\n showRoleSwitcher?: boolean;\n}) {\n const [mobileOpen, setMobileOpen] = React.useState(false);\n\n const sidebarContent = (\n <div className=\"flex h-full flex-col gap-6 px-3 py-4\">\n <Link href={homeHref} className=\"px-2\" aria-label=\"Home\">\n <Logo />\n </Link>\n {navGroups.map((g) => (\n <NavGroup key={g.label} group={g} pathname={pathname} />\n ))}\n </div>\n );\n\n return (\n <div className=\"flex min-h-svh bg-background text-foreground\">\n <aside className=\"hidden w-64 shrink-0 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:block\">\n {sidebarContent}\n </aside>\n\n {mobileOpen ? (\n <div className=\"fixed inset-0 z-50 flex md:hidden\">\n <div\n className=\"flex-1 bg-foreground/40 backdrop-blur-sm\"\n onClick={() => setMobileOpen(false)}\n aria-hidden\n />\n <aside className=\"relative w-72 border-l border-sidebar-border bg-sidebar text-sidebar-foreground\">\n <button\n type=\"button\"\n onClick={() => setMobileOpen(false)}\n aria-label=\"Close menu\"\n className=\"absolute right-2 top-2 inline-flex h-9 w-9 items-center justify-center rounded-md hover:bg-sidebar-accent\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n {sidebarContent}\n </aside>\n </div>\n ) : null}\n\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <header className=\"flex h-14 items-center justify-between gap-3 border-b border-border bg-background/80 px-4 backdrop-blur md:px-6\">\n <button\n type=\"button\"\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-md border border-border md:hidden\"\n >\n <Menu className=\"h-4 w-4\" />\n </button>\n <div className=\"flex items-center gap-3 md:ml-auto\">\n {showRoleSwitcher ? <RoleSwitcher /> : null}\n <ThemeSwitcher />\n </div>\n </header>\n <main className=\"min-w-0 flex-1 px-4 py-6 md:px-8 md:py-8\">{children}</main>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBM;AAtBN,YAAuB;AACvB,kBAAiB;AACjB,0BAAwB;AACxB,kBAAqB;AACrB,2BAA8B;AAC9B,0BAA6B;AAC7B,mBAAmB;AAYnB,SAAS,SAAS,EAAE,OAAO,SAAS,GAA6C;AAC/E,MAAI,MAAM,MAAM,WAAW,EAAG,QAAO;AACrC,SACE,6CAAC,SAAI,WAAU,aACb;AAAA,gDAAC,OAAE,WAAU,4EACV,gBAAM,OACT;AAAA,IACA,4CAAC,QAAG,WAAU,eACX,gBAAM,MAAM,IAAI,CAAC,SAAS;AACzB,YAAM,SAAS,aAAa,KAAK,QAAQ,SAAS,WAAW,GAAG,KAAK,IAAI,GAAG;AAC5E,aACE,4CAAC,QACC;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,eAAW;AAAA,YACT;AAAA,YACA,SACI,qDACA;AAAA,UACN;AAAA,UAEA;AAAA,wDAAC,KAAK,MAAL,EAAU,WAAU,oBAAmB;AAAA,YACxC,4CAAC,UAAM,eAAK,OAAM;AAAA;AAAA;AAAA,MACpB,KAZO,KAAK,IAad;AAAA,IAEJ,CAAC,GACH;AAAA,KACF;AAEJ;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,mBAAmB;AACrB,GAMG;AACD,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,KAAK;AAExD,QAAM,iBACJ,6CAAC,SAAI,WAAU,wCACb;AAAA,gDAAC,YAAAA,SAAA,EAAK,MAAM,UAAU,WAAU,QAAO,cAAW,QAChD,sDAAC,oBAAK,GACR;AAAA,IACC,UAAU,IAAI,CAAC,MACd,4CAAC,YAAuB,OAAO,GAAG,YAAnB,EAAE,KAAqC,CACvD;AAAA,KACH;AAGF,SACE,6CAAC,SAAI,WAAU,gDACb;AAAA,gDAAC,WAAM,WAAU,mGACd,0BACH;AAAA,IAEC,aACC,6CAAC,SAAI,WAAU,qCACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,cAAc,KAAK;AAAA,UAClC,eAAW;AAAA;AAAA,MACb;AAAA,MACA,6CAAC,WAAM,WAAU,mFACf;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,cAAc,KAAK;AAAA,YAClC,cAAW;AAAA,YACX,WAAU;AAAA,YAEV,sDAAC,yBAAE,WAAU,WAAU;AAAA;AAAA,QACzB;AAAA,QACC;AAAA,SACH;AAAA,OACF,IACE;AAAA,IAEJ,6CAAC,SAAI,WAAU,gCACb;AAAA,mDAAC,YAAO,WAAU,mHAChB;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,cAAc,IAAI;AAAA,YACjC,cAAW;AAAA,YACX,WAAU;AAAA,YAEV,sDAAC,4BAAK,WAAU,WAAU;AAAA;AAAA,QAC5B;AAAA,QACA,6CAAC,SAAI,WAAU,sCACZ;AAAA,6BAAmB,4CAAC,oCAAa,IAAK;AAAA,UACvC,4CAAC,sCAAc;AAAA,WACjB;AAAA,SACF;AAAA,MACA,4CAAC,UAAK,WAAU,4CAA4C,UAAS;AAAA,OACvE;AAAA,KACF;AAEJ;","names":["Link"]}
@@ -12,16 +12,10 @@ export type AppNavGroup = {
12
12
  label: string;
13
13
  items: AppNavItem[];
14
14
  };
15
- export declare function AppShell({ children, pathname, navGroups, Link, homeHref, showRoleSwitcher, }: {
15
+ export declare function AppShell({ children, pathname, navGroups, homeHref, showRoleSwitcher, }: {
16
16
  children: React.ReactNode;
17
17
  pathname: string;
18
18
  navGroups: AppNavGroup[];
19
- Link: React.ComponentType<{
20
- href: string;
21
- children?: React.ReactNode;
22
- className?: string;
23
- "aria-label"?: string;
24
- }>;
25
19
  homeHref?: string;
26
20
  showRoleSwitcher?: boolean;
27
21
  }): React.JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/components/shells/AppShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AA8CjE,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,QAAc,EACd,gBAAuB,GACxB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,qBA4DA"}
1
+ {"version":3,"file":"AppShell.d.ts","sourceRoot":"","sources":["../../../src/components/shells/AppShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC;AAkCjE,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,QAAc,EACd,gBAAuB,GACxB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,qBA4DA"}
@@ -0,0 +1,94 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import Link from "next/link";
5
+ import { Menu, X } from "lucide-react";
6
+ import { Logo } from "../chrome/Logo.js";
7
+ import { ThemeSwitcher } from "../chrome/ThemeSwitcher.js";
8
+ import { RoleSwitcher } from "../chrome/RoleSwitcher.js";
9
+ import { cn } from "../../lib/utils.js";
10
+ function NavGroup({ group, pathname }) {
11
+ if (group.items.length === 0) return null;
12
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
13
+ /* @__PURE__ */ jsx("p", { className: "px-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: group.label }),
14
+ /* @__PURE__ */ jsx("ul", { className: "space-y-0.5", children: group.items.map((item) => {
15
+ const active = pathname === item.href || pathname.startsWith(`${item.href}/`);
16
+ return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
17
+ Link,
18
+ {
19
+ href: item.href,
20
+ className: cn(
21
+ "flex items-center gap-3 rounded-md px-3 py-2 text-sm transition",
22
+ active ? "bg-sidebar-accent text-sidebar-accent-foreground" : "text-sidebar-foreground hover:bg-sidebar-accent/60"
23
+ ),
24
+ children: [
25
+ /* @__PURE__ */ jsx(item.icon, { className: "h-4 w-4 shrink-0" }),
26
+ /* @__PURE__ */ jsx("span", { children: item.label })
27
+ ]
28
+ }
29
+ ) }, item.href);
30
+ }) })
31
+ ] });
32
+ }
33
+ function AppShell({
34
+ children,
35
+ pathname,
36
+ navGroups,
37
+ homeHref = "/",
38
+ showRoleSwitcher = true
39
+ }) {
40
+ const [mobileOpen, setMobileOpen] = React.useState(false);
41
+ const sidebarContent = /* @__PURE__ */ jsxs("div", { className: "flex h-full flex-col gap-6 px-3 py-4", children: [
42
+ /* @__PURE__ */ jsx(Link, { href: homeHref, className: "px-2", "aria-label": "Home", children: /* @__PURE__ */ jsx(Logo, {}) }),
43
+ navGroups.map((g) => /* @__PURE__ */ jsx(NavGroup, { group: g, pathname }, g.label))
44
+ ] });
45
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-h-svh bg-background text-foreground", children: [
46
+ /* @__PURE__ */ jsx("aside", { className: "hidden w-64 shrink-0 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:block", children: sidebarContent }),
47
+ mobileOpen ? /* @__PURE__ */ jsxs("div", { className: "fixed inset-0 z-50 flex md:hidden", children: [
48
+ /* @__PURE__ */ jsx(
49
+ "div",
50
+ {
51
+ className: "flex-1 bg-foreground/40 backdrop-blur-sm",
52
+ onClick: () => setMobileOpen(false),
53
+ "aria-hidden": true
54
+ }
55
+ ),
56
+ /* @__PURE__ */ jsxs("aside", { className: "relative w-72 border-l border-sidebar-border bg-sidebar text-sidebar-foreground", children: [
57
+ /* @__PURE__ */ jsx(
58
+ "button",
59
+ {
60
+ type: "button",
61
+ onClick: () => setMobileOpen(false),
62
+ "aria-label": "Close menu",
63
+ className: "absolute right-2 top-2 inline-flex h-9 w-9 items-center justify-center rounded-md hover:bg-sidebar-accent",
64
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
65
+ }
66
+ ),
67
+ sidebarContent
68
+ ] })
69
+ ] }) : null,
70
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [
71
+ /* @__PURE__ */ jsxs("header", { className: "flex h-14 items-center justify-between gap-3 border-b border-border bg-background/80 px-4 backdrop-blur md:px-6", children: [
72
+ /* @__PURE__ */ jsx(
73
+ "button",
74
+ {
75
+ type: "button",
76
+ onClick: () => setMobileOpen(true),
77
+ "aria-label": "Open menu",
78
+ className: "inline-flex h-9 w-9 items-center justify-center rounded-md border border-border md:hidden",
79
+ children: /* @__PURE__ */ jsx(Menu, { className: "h-4 w-4" })
80
+ }
81
+ ),
82
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3 md:ml-auto", children: [
83
+ showRoleSwitcher ? /* @__PURE__ */ jsx(RoleSwitcher, {}) : null,
84
+ /* @__PURE__ */ jsx(ThemeSwitcher, {})
85
+ ] })
86
+ ] }),
87
+ /* @__PURE__ */ jsx("main", { className: "min-w-0 flex-1 px-4 py-6 md:px-8 md:py-8", children })
88
+ ] })
89
+ ] });
90
+ }
91
+ export {
92
+ AppShell
93
+ };
94
+ //# sourceMappingURL=AppShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/shells/AppShell.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport Link from \"next/link\";\nimport { Menu, X } from \"lucide-react\";\nimport { Logo } from \"../chrome/Logo.js\";\nimport { ThemeSwitcher } from \"../chrome/ThemeSwitcher.js\";\nimport { RoleSwitcher } from \"../chrome/RoleSwitcher.js\";\nimport { cn } from \"../../lib/utils.js\";\n\nexport type AppNavItem = {\n href: string;\n label: string;\n icon: React.ComponentType<{ className?: string }>;\n /** When provided, item only renders if the consumer's `getFlag(flag)` returns true. */\n flag?: string;\n};\n\nexport type AppNavGroup = { label: string; items: AppNavItem[] };\n\nfunction NavGroup({ group, pathname }: { group: AppNavGroup; pathname: string }) {\n if (group.items.length === 0) return null;\n return (\n <div className=\"space-y-1\">\n <p className=\"px-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground\">\n {group.label}\n </p>\n <ul className=\"space-y-0.5\">\n {group.items.map((item) => {\n const active = pathname === item.href || pathname.startsWith(`${item.href}/`);\n return (\n <li key={item.href}>\n <Link\n href={item.href}\n className={cn(\n \"flex items-center gap-3 rounded-md px-3 py-2 text-sm transition\",\n active\n ? \"bg-sidebar-accent text-sidebar-accent-foreground\"\n : \"text-sidebar-foreground hover:bg-sidebar-accent/60\",\n )}\n >\n <item.icon className=\"h-4 w-4 shrink-0\" />\n <span>{item.label}</span>\n </Link>\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\nexport function AppShell({\n children,\n pathname,\n navGroups,\n homeHref = \"/\",\n showRoleSwitcher = true,\n}: {\n children: React.ReactNode;\n pathname: string;\n navGroups: AppNavGroup[];\n homeHref?: string;\n showRoleSwitcher?: boolean;\n}) {\n const [mobileOpen, setMobileOpen] = React.useState(false);\n\n const sidebarContent = (\n <div className=\"flex h-full flex-col gap-6 px-3 py-4\">\n <Link href={homeHref} className=\"px-2\" aria-label=\"Home\">\n <Logo />\n </Link>\n {navGroups.map((g) => (\n <NavGroup key={g.label} group={g} pathname={pathname} />\n ))}\n </div>\n );\n\n return (\n <div className=\"flex min-h-svh bg-background text-foreground\">\n <aside className=\"hidden w-64 shrink-0 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:block\">\n {sidebarContent}\n </aside>\n\n {mobileOpen ? (\n <div className=\"fixed inset-0 z-50 flex md:hidden\">\n <div\n className=\"flex-1 bg-foreground/40 backdrop-blur-sm\"\n onClick={() => setMobileOpen(false)}\n aria-hidden\n />\n <aside className=\"relative w-72 border-l border-sidebar-border bg-sidebar text-sidebar-foreground\">\n <button\n type=\"button\"\n onClick={() => setMobileOpen(false)}\n aria-label=\"Close menu\"\n className=\"absolute right-2 top-2 inline-flex h-9 w-9 items-center justify-center rounded-md hover:bg-sidebar-accent\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n {sidebarContent}\n </aside>\n </div>\n ) : null}\n\n <div className=\"flex min-w-0 flex-1 flex-col\">\n <header className=\"flex h-14 items-center justify-between gap-3 border-b border-border bg-background/80 px-4 backdrop-blur md:px-6\">\n <button\n type=\"button\"\n onClick={() => setMobileOpen(true)}\n aria-label=\"Open menu\"\n className=\"inline-flex h-9 w-9 items-center justify-center rounded-md border border-border md:hidden\"\n >\n <Menu className=\"h-4 w-4\" />\n </button>\n <div className=\"flex items-center gap-3 md:ml-auto\">\n {showRoleSwitcher ? <RoleSwitcher /> : null}\n <ThemeSwitcher />\n </div>\n </header>\n <main className=\"min-w-0 flex-1 px-4 py-6 md:px-8 md:py-8\">{children}</main>\n </div>\n </div>\n );\n}\n"],"mappings":";AAwBM,cAQQ,YARR;AAtBN,YAAY,WAAW;AACvB,OAAO,UAAU;AACjB,SAAS,MAAM,SAAS;AACxB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAC9B,SAAS,oBAAoB;AAC7B,SAAS,UAAU;AAYnB,SAAS,SAAS,EAAE,OAAO,SAAS,GAA6C;AAC/E,MAAI,MAAM,MAAM,WAAW,EAAG,QAAO;AACrC,SACE,qBAAC,SAAI,WAAU,aACb;AAAA,wBAAC,OAAE,WAAU,4EACV,gBAAM,OACT;AAAA,IACA,oBAAC,QAAG,WAAU,eACX,gBAAM,MAAM,IAAI,CAAC,SAAS;AACzB,YAAM,SAAS,aAAa,KAAK,QAAQ,SAAS,WAAW,GAAG,KAAK,IAAI,GAAG;AAC5E,aACE,oBAAC,QACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,KAAK;AAAA,UACX,WAAW;AAAA,YACT;AAAA,YACA,SACI,qDACA;AAAA,UACN;AAAA,UAEA;AAAA,gCAAC,KAAK,MAAL,EAAU,WAAU,oBAAmB;AAAA,YACxC,oBAAC,UAAM,eAAK,OAAM;AAAA;AAAA;AAAA,MACpB,KAZO,KAAK,IAad;AAAA,IAEJ,CAAC,GACH;AAAA,KACF;AAEJ;AAEO,SAAS,SAAS;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,mBAAmB;AACrB,GAMG;AACD,QAAM,CAAC,YAAY,aAAa,IAAI,MAAM,SAAS,KAAK;AAExD,QAAM,iBACJ,qBAAC,SAAI,WAAU,wCACb;AAAA,wBAAC,QAAK,MAAM,UAAU,WAAU,QAAO,cAAW,QAChD,8BAAC,QAAK,GACR;AAAA,IACC,UAAU,IAAI,CAAC,MACd,oBAAC,YAAuB,OAAO,GAAG,YAAnB,EAAE,KAAqC,CACvD;AAAA,KACH;AAGF,SACE,qBAAC,SAAI,WAAU,gDACb;AAAA,wBAAC,WAAM,WAAU,mGACd,0BACH;AAAA,IAEC,aACC,qBAAC,SAAI,WAAU,qCACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,cAAc,KAAK;AAAA,UAClC,eAAW;AAAA;AAAA,MACb;AAAA,MACA,qBAAC,WAAM,WAAU,mFACf;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,cAAc,KAAK;AAAA,YAClC,cAAW;AAAA,YACX,WAAU;AAAA,YAEV,8BAAC,KAAE,WAAU,WAAU;AAAA;AAAA,QACzB;AAAA,QACC;AAAA,SACH;AAAA,OACF,IACE;AAAA,IAEJ,qBAAC,SAAI,WAAU,gCACb;AAAA,2BAAC,YAAO,WAAU,mHAChB;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,cAAc,IAAI;AAAA,YACjC,cAAW;AAAA,YACX,WAAU;AAAA,YAEV,8BAAC,QAAK,WAAU,WAAU;AAAA;AAAA,QAC5B;AAAA,QACA,qBAAC,SAAI,WAAU,sCACZ;AAAA,6BAAmB,oBAAC,gBAAa,IAAK;AAAA,UACvC,oBAAC,iBAAc;AAAA,WACjB;AAAA,SACF;AAAA,MACA,oBAAC,UAAK,WAAU,4CAA4C,UAAS;AAAA,OACvE;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var PublicShell_exports = {};
31
+ __export(PublicShell_exports, {
32
+ PublicShell: () => PublicShell
33
+ });
34
+ module.exports = __toCommonJS(PublicShell_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_link = __toESM(require("next/link"));
37
+ var import_brand = require("@augmenting-integrations/brand");
38
+ var import_Logo = require("../chrome/Logo.js");
39
+ var import_ThemeSwitcher = require("../chrome/ThemeSwitcher.js");
40
+ function PublicShell({
41
+ children,
42
+ navLinks,
43
+ loginHref = "/login",
44
+ footerLinks
45
+ }) {
46
+ const brand = (0, import_brand.useBrand)();
47
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex min-h-svh flex-col bg-background text-foreground", children: [
48
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("header", { className: "border-b border-border bg-background/80 backdrop-blur", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mx-auto flex max-w-6xl items-center justify-between px-6 py-4", children: [
49
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: "/", "aria-label": "Home", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Logo.Logo, {}) }),
50
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("nav", { className: "flex items-center gap-6 text-sm", children: [
51
+ navLinks.map((link) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
52
+ import_link.default,
53
+ {
54
+ href: link.href,
55
+ className: "text-muted-foreground transition hover:text-foreground",
56
+ children: link.label
57
+ },
58
+ link.href
59
+ )),
60
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
61
+ import_link.default,
62
+ {
63
+ href: loginHref,
64
+ className: "text-muted-foreground transition hover:text-foreground",
65
+ children: "Log in"
66
+ }
67
+ ),
68
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ThemeSwitcher.ThemeSwitcher, {})
69
+ ] })
70
+ ] }) }),
71
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("main", { className: "flex-1", children }),
72
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("footer", { className: "border-t border-border", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mx-auto flex max-w-6xl flex-wrap items-center justify-between gap-3 px-6 py-6 text-sm text-muted-foreground", children: [
73
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
74
+ "\xA9 ",
75
+ (/* @__PURE__ */ new Date()).getFullYear(),
76
+ " ",
77
+ brand.name
78
+ ] }),
79
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex gap-4", children: (footerLinks ?? []).map((link) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: link.href, className: "hover:text-foreground", children: link.label }, link.href)) })
80
+ ] }) })
81
+ ] });
82
+ }
83
+ // Annotate the CommonJS export names for ESM import in node:
84
+ 0 && (module.exports = {
85
+ PublicShell
86
+ });
87
+ //# sourceMappingURL=PublicShell.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/shells/PublicShell.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport Link from \"next/link\";\nimport { useBrand } from \"@augmenting-integrations/brand\";\nimport { Logo } from \"../chrome/Logo.js\";\nimport { ThemeSwitcher } from \"../chrome/ThemeSwitcher.js\";\n\nexport type NavLink = { href: string; label: string };\n\nexport function PublicShell({\n children,\n navLinks,\n loginHref = \"/login\",\n footerLinks,\n}: {\n children: React.ReactNode;\n navLinks: NavLink[];\n loginHref?: string;\n footerLinks?: NavLink[];\n}) {\n const brand = useBrand();\n return (\n <div className=\"flex min-h-svh flex-col bg-background text-foreground\">\n <header className=\"border-b border-border bg-background/80 backdrop-blur\">\n <div className=\"mx-auto flex max-w-6xl items-center justify-between px-6 py-4\">\n <Link href=\"/\" aria-label=\"Home\">\n <Logo />\n </Link>\n <nav className=\"flex items-center gap-6 text-sm\">\n {navLinks.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n className=\"text-muted-foreground transition hover:text-foreground\"\n >\n {link.label}\n </Link>\n ))}\n <Link\n href={loginHref}\n className=\"text-muted-foreground transition hover:text-foreground\"\n >\n Log in\n </Link>\n <ThemeSwitcher />\n </nav>\n </div>\n </header>\n\n <main className=\"flex-1\">{children}</main>\n\n <footer className=\"border-t border-border\">\n <div className=\"mx-auto flex max-w-6xl flex-wrap items-center justify-between gap-3 px-6 py-6 text-sm text-muted-foreground\">\n <span>\n © {new Date().getFullYear()} {brand.name}\n </span>\n <div className=\"flex gap-4\">\n {(footerLinks ?? []).map((link) => (\n <Link key={link.href} href={link.href} className=\"hover:text-foreground\">\n {link.label}\n </Link>\n ))}\n </div>\n </div>\n </footer>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BY;AAxBZ,kBAAiB;AACjB,mBAAyB;AACzB,kBAAqB;AACrB,2BAA8B;AAIvB,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAKG;AACD,QAAM,YAAQ,uBAAS;AACvB,SACE,6CAAC,SAAI,WAAU,yDACb;AAAA,gDAAC,YAAO,WAAU,yDAChB,uDAAC,SAAI,WAAU,iEACb;AAAA,kDAAC,YAAAA,SAAA,EAAK,MAAK,KAAI,cAAW,QACxB,sDAAC,oBAAK,GACR;AAAA,MACA,6CAAC,SAAI,WAAU,mCACZ;AAAA,iBAAS,IAAI,CAAC,SACb;AAAA,UAAC,YAAAA;AAAA,UAAA;AAAA,YAEC,MAAM,KAAK;AAAA,YACX,WAAU;AAAA,YAET,eAAK;AAAA;AAAA,UAJD,KAAK;AAAA,QAKZ,CACD;AAAA,QACD;AAAA,UAAC,YAAAA;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,QACA,4CAAC,sCAAc;AAAA,SACjB;AAAA,OACF,GACF;AAAA,IAEA,4CAAC,UAAK,WAAU,UAAU,UAAS;AAAA,IAEnC,4CAAC,YAAO,WAAU,0BAChB,uDAAC,SAAI,WAAU,+GACb;AAAA,mDAAC,UAAK;AAAA;AAAA,SACD,oBAAI,KAAK,GAAE,YAAY;AAAA,QAAE;AAAA,QAAE,MAAM;AAAA,SACtC;AAAA,MACA,4CAAC,SAAI,WAAU,cACX,0BAAe,CAAC,GAAG,IAAI,CAAC,SACxB,4CAAC,YAAAA,SAAA,EAAqB,MAAM,KAAK,MAAM,WAAU,yBAC9C,eAAK,SADG,KAAK,IAEhB,CACD,GACH;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":["Link"]}
@@ -3,20 +3,10 @@ export type NavLink = {
3
3
  href: string;
4
4
  label: string;
5
5
  };
6
- export declare function PublicShell({ children, navLinks, loginHref, footerLinks, Link, }: {
6
+ export declare function PublicShell({ children, navLinks, loginHref, footerLinks, }: {
7
7
  children: React.ReactNode;
8
8
  navLinks: NavLink[];
9
9
  loginHref?: string;
10
10
  footerLinks?: NavLink[];
11
- /**
12
- * The consuming app passes its router's Link component (e.g. next/link).
13
- * Decoupling the package from next/link keeps it framework-agnostic.
14
- */
15
- Link: React.ComponentType<{
16
- href: string;
17
- children?: React.ReactNode;
18
- className?: string;
19
- "aria-label"?: string;
20
- }>;
21
11
  }): React.JSX.Element;
22
12
  //# sourceMappingURL=PublicShell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PublicShell.d.ts","sourceRoot":"","sources":["../../../src/components/shells/PublicShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,QAAQ,EACR,SAAoB,EACpB,WAAW,EACX,IAAI,GACL,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;IACxB;;;OAGG;IACH,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;CACJ,qBAgDA"}
1
+ {"version":3,"file":"PublicShell.d.ts","sourceRoot":"","sources":["../../../src/components/shells/PublicShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,MAAM,OAAO,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,QAAQ,EACR,SAAoB,EACpB,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;CACzB,qBAgDA"}
@@ -0,0 +1,53 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import Link from "next/link";
4
+ import { useBrand } from "@augmenting-integrations/brand";
5
+ import { Logo } from "../chrome/Logo.js";
6
+ import { ThemeSwitcher } from "../chrome/ThemeSwitcher.js";
7
+ function PublicShell({
8
+ children,
9
+ navLinks,
10
+ loginHref = "/login",
11
+ footerLinks
12
+ }) {
13
+ const brand = useBrand();
14
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-h-svh flex-col bg-background text-foreground", children: [
15
+ /* @__PURE__ */ jsx("header", { className: "border-b border-border bg-background/80 backdrop-blur", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex max-w-6xl items-center justify-between px-6 py-4", children: [
16
+ /* @__PURE__ */ jsx(Link, { href: "/", "aria-label": "Home", children: /* @__PURE__ */ jsx(Logo, {}) }),
17
+ /* @__PURE__ */ jsxs("nav", { className: "flex items-center gap-6 text-sm", children: [
18
+ navLinks.map((link) => /* @__PURE__ */ jsx(
19
+ Link,
20
+ {
21
+ href: link.href,
22
+ className: "text-muted-foreground transition hover:text-foreground",
23
+ children: link.label
24
+ },
25
+ link.href
26
+ )),
27
+ /* @__PURE__ */ jsx(
28
+ Link,
29
+ {
30
+ href: loginHref,
31
+ className: "text-muted-foreground transition hover:text-foreground",
32
+ children: "Log in"
33
+ }
34
+ ),
35
+ /* @__PURE__ */ jsx(ThemeSwitcher, {})
36
+ ] })
37
+ ] }) }),
38
+ /* @__PURE__ */ jsx("main", { className: "flex-1", children }),
39
+ /* @__PURE__ */ jsx("footer", { className: "border-t border-border", children: /* @__PURE__ */ jsxs("div", { className: "mx-auto flex max-w-6xl flex-wrap items-center justify-between gap-3 px-6 py-6 text-sm text-muted-foreground", children: [
40
+ /* @__PURE__ */ jsxs("span", { children: [
41
+ "\xA9 ",
42
+ (/* @__PURE__ */ new Date()).getFullYear(),
43
+ " ",
44
+ brand.name
45
+ ] }),
46
+ /* @__PURE__ */ jsx("div", { className: "flex gap-4", children: (footerLinks ?? []).map((link) => /* @__PURE__ */ jsx(Link, { href: link.href, className: "hover:text-foreground", children: link.label }, link.href)) })
47
+ ] }) })
48
+ ] });
49
+ }
50
+ export {
51
+ PublicShell
52
+ };
53
+ //# sourceMappingURL=PublicShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/shells/PublicShell.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport Link from \"next/link\";\nimport { useBrand } from \"@augmenting-integrations/brand\";\nimport { Logo } from \"../chrome/Logo.js\";\nimport { ThemeSwitcher } from \"../chrome/ThemeSwitcher.js\";\n\nexport type NavLink = { href: string; label: string };\n\nexport function PublicShell({\n children,\n navLinks,\n loginHref = \"/login\",\n footerLinks,\n}: {\n children: React.ReactNode;\n navLinks: NavLink[];\n loginHref?: string;\n footerLinks?: NavLink[];\n}) {\n const brand = useBrand();\n return (\n <div className=\"flex min-h-svh flex-col bg-background text-foreground\">\n <header className=\"border-b border-border bg-background/80 backdrop-blur\">\n <div className=\"mx-auto flex max-w-6xl items-center justify-between px-6 py-4\">\n <Link href=\"/\" aria-label=\"Home\">\n <Logo />\n </Link>\n <nav className=\"flex items-center gap-6 text-sm\">\n {navLinks.map((link) => (\n <Link\n key={link.href}\n href={link.href}\n className=\"text-muted-foreground transition hover:text-foreground\"\n >\n {link.label}\n </Link>\n ))}\n <Link\n href={loginHref}\n className=\"text-muted-foreground transition hover:text-foreground\"\n >\n Log in\n </Link>\n <ThemeSwitcher />\n </nav>\n </div>\n </header>\n\n <main className=\"flex-1\">{children}</main>\n\n <footer className=\"border-t border-border\">\n <div className=\"mx-auto flex max-w-6xl flex-wrap items-center justify-between gap-3 px-6 py-6 text-sm text-muted-foreground\">\n <span>\n © {new Date().getFullYear()} {brand.name}\n </span>\n <div className=\"flex gap-4\">\n {(footerLinks ?? []).map((link) => (\n <Link key={link.href} href={link.href} className=\"hover:text-foreground\">\n {link.label}\n </Link>\n ))}\n </div>\n </div>\n </footer>\n </div>\n );\n}\n"],"mappings":";AA2BY,cAEF,YAFE;AAxBZ,OAAO,UAAU;AACjB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAIvB,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AACF,GAKG;AACD,QAAM,QAAQ,SAAS;AACvB,SACE,qBAAC,SAAI,WAAU,yDACb;AAAA,wBAAC,YAAO,WAAU,yDAChB,+BAAC,SAAI,WAAU,iEACb;AAAA,0BAAC,QAAK,MAAK,KAAI,cAAW,QACxB,8BAAC,QAAK,GACR;AAAA,MACA,qBAAC,SAAI,WAAU,mCACZ;AAAA,iBAAS,IAAI,CAAC,SACb;AAAA,UAAC;AAAA;AAAA,YAEC,MAAM,KAAK;AAAA,YACX,WAAU;AAAA,YAET,eAAK;AAAA;AAAA,UAJD,KAAK;AAAA,QAKZ,CACD;AAAA,QACD;AAAA,UAAC;AAAA;AAAA,YACC,MAAM;AAAA,YACN,WAAU;AAAA,YACX;AAAA;AAAA,QAED;AAAA,QACA,oBAAC,iBAAc;AAAA,SACjB;AAAA,OACF,GACF;AAAA,IAEA,oBAAC,UAAK,WAAU,UAAU,UAAS;AAAA,IAEnC,oBAAC,YAAO,WAAU,0BAChB,+BAAC,SAAI,WAAU,+GACb;AAAA,2BAAC,UAAK;AAAA;AAAA,SACD,oBAAI,KAAK,GAAE,YAAY;AAAA,QAAE;AAAA,QAAE,MAAM;AAAA,SACtC;AAAA,MACA,oBAAC,SAAI,WAAU,cACX,0BAAe,CAAC,GAAG,IAAI,CAAC,SACxB,oBAAC,QAAqB,MAAM,KAAK,MAAM,WAAU,yBAC9C,eAAK,SADG,KAAK,IAEhB,CACD,GACH;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var StudioShell_exports = {};
21
+ __export(StudioShell_exports, {
22
+ StudioShell: () => StudioShell
23
+ });
24
+ module.exports = __toCommonJS(StudioShell_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_utils = require("../../lib/utils.js");
27
+ function StudioShell({
28
+ title,
29
+ description,
30
+ actions,
31
+ children,
32
+ className
33
+ }) {
34
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { className: (0, import_utils.cn)("space-y-6", className), children: [
35
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { className: "flex flex-wrap items-start justify-between gap-3", children: [
36
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
37
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { className: "text-2xl font-semibold tracking-tight", children: title }),
38
+ description ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "mt-1 max-w-2xl text-sm text-muted-foreground", children: description }) : null
39
+ ] }),
40
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex items-center gap-2", children: actions }) : null
41
+ ] }),
42
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "rounded-lg border border-border bg-card p-4 md:p-6", children })
43
+ ] });
44
+ }
45
+ // Annotate the CommonJS export names for ESM import in node:
46
+ 0 && (module.exports = {
47
+ StudioShell
48
+ });
49
+ //# sourceMappingURL=StudioShell.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/shells/StudioShell.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils.js\";\n\n/**\n * Common chrome for studio panels (theme, brand, flags, content). Each app's\n * studio routes wrap their page in <StudioShell title=\"Feature flags\">.\n */\nexport function StudioShell({\n title,\n description,\n actions,\n children,\n className,\n}: {\n title: string;\n description?: string;\n actions?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <section className={cn(\"space-y-6\", className)}>\n <header className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1>\n {description ? (\n <p className=\"mt-1 max-w-2xl text-sm text-muted-foreground\">{description}</p>\n ) : null}\n </div>\n {actions ? <div className=\"flex items-center gap-2\">{actions}</div> : null}\n </header>\n <div className=\"rounded-lg border border-border bg-card p-4 md:p-6\">{children}</div>\n </section>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBQ;AAtBR,mBAAmB;AAMZ,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,SACE,6CAAC,aAAQ,eAAW,iBAAG,aAAa,SAAS,GAC3C;AAAA,iDAAC,YAAO,WAAU,oDAChB;AAAA,mDAAC,SACC;AAAA,oDAAC,QAAG,WAAU,yCAAyC,iBAAM;AAAA,QAC5D,cACC,4CAAC,OAAE,WAAU,gDAAgD,uBAAY,IACvE;AAAA,SACN;AAAA,MACC,UAAU,4CAAC,SAAI,WAAU,2BAA2B,mBAAQ,IAAS;AAAA,OACxE;AAAA,IACA,4CAAC,SAAI,WAAU,sDAAsD,UAAS;AAAA,KAChF;AAEJ;","names":[]}
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { cn } from "../../lib/utils.js";
4
+ function StudioShell({
5
+ title,
6
+ description,
7
+ actions,
8
+ children,
9
+ className
10
+ }) {
11
+ return /* @__PURE__ */ jsxs("section", { className: cn("space-y-6", className), children: [
12
+ /* @__PURE__ */ jsxs("header", { className: "flex flex-wrap items-start justify-between gap-3", children: [
13
+ /* @__PURE__ */ jsxs("div", { children: [
14
+ /* @__PURE__ */ jsx("h1", { className: "text-2xl font-semibold tracking-tight", children: title }),
15
+ description ? /* @__PURE__ */ jsx("p", { className: "mt-1 max-w-2xl text-sm text-muted-foreground", children: description }) : null
16
+ ] }),
17
+ actions ? /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: actions }) : null
18
+ ] }),
19
+ /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border bg-card p-4 md:p-6", children })
20
+ ] });
21
+ }
22
+ export {
23
+ StudioShell
24
+ };
25
+ //# sourceMappingURL=StudioShell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/shells/StudioShell.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/utils.js\";\n\n/**\n * Common chrome for studio panels (theme, brand, flags, content). Each app's\n * studio routes wrap their page in <StudioShell title=\"Feature flags\">.\n */\nexport function StudioShell({\n title,\n description,\n actions,\n children,\n className,\n}: {\n title: string;\n description?: string;\n actions?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}) {\n return (\n <section className={cn(\"space-y-6\", className)}>\n <header className=\"flex flex-wrap items-start justify-between gap-3\">\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">{title}</h1>\n {description ? (\n <p className=\"mt-1 max-w-2xl text-sm text-muted-foreground\">{description}</p>\n ) : null}\n </div>\n {actions ? <div className=\"flex items-center gap-2\">{actions}</div> : null}\n </header>\n <div className=\"rounded-lg border border-border bg-card p-4 md:p-6\">{children}</div>\n </section>\n );\n}\n"],"mappings":";AAyBQ,SACE,KADF;AAtBR,SAAS,UAAU;AAMZ,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,SACE,qBAAC,aAAQ,WAAW,GAAG,aAAa,SAAS,GAC3C;AAAA,yBAAC,YAAO,WAAU,oDAChB;AAAA,2BAAC,SACC;AAAA,4BAAC,QAAG,WAAU,yCAAyC,iBAAM;AAAA,QAC5D,cACC,oBAAC,OAAE,WAAU,gDAAgD,uBAAY,IACvE;AAAA,SACN;AAAA,MACC,UAAU,oBAAC,SAAI,WAAU,2BAA2B,mBAAQ,IAAS;AAAA,OACxE;AAAA,IACA,oBAAC,SAAI,WAAU,sDAAsD,UAAS;AAAA,KAChF;AAEJ;","names":[]}