@augmenting-integrations/ui 0.1.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.
- package/LICENSE +21 -0
- package/dist/components/chrome/Logo.d.ts +5 -0
- package/dist/components/chrome/Logo.d.ts.map +1 -0
- package/dist/components/chrome/Logo.jsx +19 -0
- package/dist/components/chrome/Logo.jsx.map +1 -0
- package/dist/components/chrome/RoleSwitcher.d.ts +5 -0
- package/dist/components/chrome/RoleSwitcher.d.ts.map +1 -0
- package/dist/components/chrome/RoleSwitcher.jsx +32 -0
- package/dist/components/chrome/RoleSwitcher.jsx.map +1 -0
- package/dist/components/chrome/ThemeSwitcher.d.ts +5 -0
- package/dist/components/chrome/ThemeSwitcher.d.ts.map +1 -0
- package/dist/components/chrome/ThemeSwitcher.jsx +43 -0
- package/dist/components/chrome/ThemeSwitcher.jsx.map +1 -0
- package/dist/components/shells/AppShell.d.ts +28 -0
- package/dist/components/shells/AppShell.d.ts.map +1 -0
- package/dist/components/shells/AppShell.jsx +67 -0
- package/dist/components/shells/AppShell.jsx.map +1 -0
- package/dist/components/shells/PublicShell.d.ts +22 -0
- package/dist/components/shells/PublicShell.d.ts.map +1 -0
- package/dist/components/shells/PublicShell.jsx +42 -0
- package/dist/components/shells/PublicShell.jsx.map +1 -0
- package/dist/components/shells/StudioShell.d.ts +13 -0
- package/dist/components/shells/StudioShell.d.ts.map +1 -0
- package/dist/components/shells/StudioShell.jsx +20 -0
- package/dist/components/shells/StudioShell.jsx.map +1 -0
- package/dist/components/ui/avatar.d.ts +12 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/avatar.jsx +24 -0
- package/dist/components/ui/avatar.jsx.map +1 -0
- package/dist/components/ui/badge.d.ts +8 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.jsx +34 -0
- package/dist/components/ui/badge.jsx.map +1 -0
- package/dist/components/ui/button.d.ts +9 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.jsx +34 -0
- package/dist/components/ui/button.jsx.map +1 -0
- package/dist/components/ui/card.d.ts +12 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.jsx +25 -0
- package/dist/components/ui/card.jsx.map +1 -0
- package/dist/components/ui/checkbox.d.ts +4 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/checkbox.jsx +13 -0
- package/dist/components/ui/checkbox.jsx.map +1 -0
- package/dist/components/ui/dialog.d.ts +18 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.jsx +52 -0
- package/dist/components/ui/dialog.jsx.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +30 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.jsx +73 -0
- package/dist/components/ui/dropdown-menu.jsx.map +1 -0
- package/dist/components/ui/input.d.ts +4 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.jsx +8 -0
- package/dist/components/ui/input.jsx.map +1 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.jsx +8 -0
- package/dist/components/ui/label.jsx.map +1 -0
- package/dist/components/ui/select.d.ts +16 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.jsx +57 -0
- package/dist/components/ui/select.jsx.map +1 -0
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/separator.jsx +8 -0
- package/dist/components/ui/separator.jsx.map +1 -0
- package/dist/components/ui/sheet.d.ts +15 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sheet.jsx +47 -0
- package/dist/components/ui/sheet.jsx.map +1 -0
- package/dist/components/ui/table.d.ts +11 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.jsx +31 -0
- package/dist/components/ui/table.jsx.map +1 -0
- package/dist/components/ui/tabs.d.ts +11 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.jsx +29 -0
- package/dist/components/ui/tabs.jsx.map +1 -0
- package/dist/components/ui/textarea.d.ts +4 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.jsx +7 -0
- package/dist/components/ui/textarea.jsx.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +1585 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/providers/MockProvider.d.ts +23 -0
- package/dist/providers/MockProvider.d.ts.map +1 -0
- package/dist/providers/MockProvider.jsx +59 -0
- package/dist/providers/MockProvider.jsx.map +1 -0
- package/dist/providers/QueryProvider.d.ts +5 -0
- package/dist/providers/QueryProvider.d.ts.map +1 -0
- package/dist/providers/QueryProvider.jsx +12 -0
- package/dist/providers/QueryProvider.jsx.map +1 -0
- package/dist/providers/SessionProvider.d.ts +6 -0
- package/dist/providers/SessionProvider.d.ts.map +1 -0
- package/dist/providers/SessionProvider.jsx +6 -0
- package/dist/providers/SessionProvider.jsx.map +1 -0
- package/dist/providers/ThemeProvider.d.ts +14 -0
- package/dist/providers/ThemeProvider.d.ts.map +1 -0
- package/dist/providers/ThemeProvider.jsx +44 -0
- package/dist/providers/ThemeProvider.jsx.map +1 -0
- package/package.json +61 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Augmenting Integrations LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logo.d.ts","sourceRoot":"","sources":["../../../src/components/chrome/Logo.tsx"],"names":[],"mappings":"AAKA,wBAAgB,IAAI,CAAC,EACnB,SAAS,EACT,YAAmB,GACpB,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,+BAqBA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useBrand } from "@augmenting-integrations/brand";
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
|
+
export function Logo({ className, showWordmark = true, }) {
|
|
5
|
+
const brand = useBrand();
|
|
6
|
+
return (<div className={cn("inline-flex items-center gap-2 text-primary", className)}>
|
|
7
|
+
<span className="inline-flex h-8 w-8 shrink-0 items-center justify-center text-current">
|
|
8
|
+
<svg viewBox="0 0 32 32" className="h-full w-full" aria-hidden="true">
|
|
9
|
+
<rect x="2" y="2" width="28" height="28" rx="6" fill="currentColor"/>
|
|
10
|
+
<path d="M10 22V10h2.6l3.4 6.4L19.4 10H22v12h-2.4v-7.4l-2.8 5.2h-1.6L12.4 14.6V22H10z" fill="var(--primary-foreground)"/>
|
|
11
|
+
</svg>
|
|
12
|
+
</span>
|
|
13
|
+
{showWordmark ? (<span className="text-base font-semibold tracking-tight text-foreground">
|
|
14
|
+
{brand.shortName}
|
|
15
|
+
</span>) : null}
|
|
16
|
+
<span className="sr-only">{brand.name}</span>
|
|
17
|
+
</div>);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Logo.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logo.jsx","sourceRoot":"","sources":["../../../src/components/chrome/Logo.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,UAAU,IAAI,CAAC,EACnB,SAAS,EACT,YAAY,GAAG,IAAI,GAIpB;IACC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,CAAC,CAC3E;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,uEAAuE,CACrF;QAAA,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CACnE;UAAA,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EACnE;UAAA,CAAC,IAAI,CACH,CAAC,CAAC,8EAA8E,CAChF,IAAI,CAAC,2BAA2B,EAEpC;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,IAAI,CACN;MAAA,CAAC,YAAY,CAAC,CAAC,CAAC,CACd,CAAC,IAAI,CAAC,SAAS,CAAC,wDAAwD,CACtE;UAAA,CAAC,KAAK,CAAC,SAAS,CAClB;QAAA,EAAE,IAAI,CAAC,CACR,CAAC,CAAC,CAAC,IAAI,CACR;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAC9C;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleSwitcher.d.ts","sourceRoot":"","sources":["../../../src/components/chrome/RoleSwitcher.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,qBAoDjE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { signIn, useSession } from "next-auth/react";
|
|
4
|
+
import { UserCog } from "lucide-react";
|
|
5
|
+
import { cn } from "../../lib/utils.js";
|
|
6
|
+
const ROLES = ["visitor", "sales", "agent", "admin"];
|
|
7
|
+
export function RoleSwitcher({ className }) {
|
|
8
|
+
const { data: session, update } = useSession();
|
|
9
|
+
const [open, setOpen] = React.useState(false);
|
|
10
|
+
const current = session?.user?.role ?? "visitor";
|
|
11
|
+
return (<div className={cn("relative", className)}>
|
|
12
|
+
<button type="button" onClick={() => setOpen((o) => !o)} aria-haspopup="menu" aria-expanded={open} className="inline-flex h-9 items-center gap-2 rounded-md border border-border bg-background px-3 text-sm text-foreground transition hover:bg-muted">
|
|
13
|
+
<UserCog className="h-4 w-4"/>
|
|
14
|
+
<span className="font-medium capitalize">{current}</span>
|
|
15
|
+
</button>
|
|
16
|
+
|
|
17
|
+
{open ? (<div role="menu" className="absolute right-0 top-full z-50 mt-2 w-56 rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg" onMouseLeave={() => setOpen(false)}>
|
|
18
|
+
<div className="px-2 py-1 text-xs uppercase tracking-wide text-muted-foreground">
|
|
19
|
+
Switch role (dev)
|
|
20
|
+
</div>
|
|
21
|
+
{ROLES.map((r) => (<button key={r} type="button" role="menuitem" onClick={async () => {
|
|
22
|
+
await signIn("credentials", { role: r, redirect: false });
|
|
23
|
+
await update();
|
|
24
|
+
setOpen(false);
|
|
25
|
+
}} className={cn("flex w-full items-center justify-between rounded-sm px-2 py-1.5 text-sm capitalize transition hover:bg-muted", current === r && "bg-muted")}>
|
|
26
|
+
<span>{r}</span>
|
|
27
|
+
{current === r ? (<span className="text-xs text-muted-foreground">active</span>) : null}
|
|
28
|
+
</button>))}
|
|
29
|
+
</div>) : null}
|
|
30
|
+
</div>);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=RoleSwitcher.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoleSwitcher.jsx","sourceRoot":"","sources":["../../../src/components/chrome/RoleSwitcher.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,EAAE,SAAS,EAA0B;IAChE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAI,OAAO,EAAE,IAAsC,EAAE,IAAI,IAAI,SAAS,CAAC;IAEpF,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CACxC;MAAA,CAAC,MAAM,CACL,IAAI,CAAC,QAAQ,CACb,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAClC,aAAa,CAAC,MAAM,CACpB,aAAa,CAAC,CAAC,IAAI,CAAC,CACpB,SAAS,CAAC,yIAAyI,CAEnJ;QAAA,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAC5B;QAAA,CAAC,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAC1D;MAAA,EAAE,MAAM,CAER;;MAAA,CAAC,IAAI,CAAC,CAAC,CAAC,CACN,CAAC,GAAG,CACF,IAAI,CAAC,MAAM,CACX,SAAS,CAAC,2HAA2H,CACrI,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAEnC;UAAA,CAAC,GAAG,CAAC,SAAS,CAAC,iEAAiE,CAC9E;;UACF,EAAE,GAAG,CACL;UAAA,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,CAAC,MAAM,CACL,GAAG,CAAC,CAAC,CAAC,CAAC,CACP,IAAI,CAAC,QAAQ,CACb,IAAI,CAAC,UAAU,CACf,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE;oBAClB,MAAM,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC1D,MAAM,MAAM,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC,CAAC,CACF,SAAS,CAAC,CAAC,EAAE,CACX,8GAA8G,EAC9G,OAAO,KAAK,CAAC,IAAI,UAAU,CAC5B,CAAC,CAEF;cAAA,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CACf;cAAA,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,CACf,CAAC,IAAI,CAAC,SAAS,CAAC,+BAA+B,CAAC,MAAM,EAAE,IAAI,CAAC,CAC9D,CAAC,CAAC,CAAC,IAAI,CACV;YAAA,EAAE,MAAM,CAAC,CACV,CAAC,CACJ;QAAA,EAAE,GAAG,CAAC,CACP,CAAC,CAAC,CAAC,IAAI,CACV;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeSwitcher.d.ts","sourceRoot":"","sources":["../../../src/components/chrome/ThemeSwitcher.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,qBAwElE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { useTheme } from "next-themes";
|
|
4
|
+
import { Moon, Sun, Palette } from "lucide-react";
|
|
5
|
+
import { BASE_THEMES } from "@augmenting-integrations/themes";
|
|
6
|
+
import { useThemeName } from "../../providers/ThemeProvider.js";
|
|
7
|
+
import { cn } from "../../lib/utils.js";
|
|
8
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "../ui/dropdown-menu.js";
|
|
9
|
+
export function ThemeSwitcher({ className }) {
|
|
10
|
+
const { themeName, setThemeName } = useThemeName();
|
|
11
|
+
const { resolvedTheme, setTheme } = useTheme();
|
|
12
|
+
const mounted = React.useSyncExternalStore(() => () => { }, () => true, () => false);
|
|
13
|
+
if (!mounted) {
|
|
14
|
+
return (<div className={cn("h-9 w-[120px] rounded-md border border-border bg-background", className)}/>);
|
|
15
|
+
}
|
|
16
|
+
const isDark = resolvedTheme === "dark";
|
|
17
|
+
const activeLabel = BASE_THEMES.find((t) => t.id === themeName)?.label ?? "Theme";
|
|
18
|
+
return (<div className={cn("flex items-center gap-2", className)}>
|
|
19
|
+
<button type="button" onClick={() => setTheme(isDark ? "light" : "dark")} aria-label={isDark ? "Switch to light mode" : "Switch to dark mode"} className="inline-flex h-9 w-9 items-center justify-center rounded-md border border-border bg-background text-foreground transition hover:bg-muted">
|
|
20
|
+
{isDark ? <Sun className="h-4 w-4"/> : <Moon className="h-4 w-4"/>}
|
|
21
|
+
</button>
|
|
22
|
+
|
|
23
|
+
<DropdownMenu>
|
|
24
|
+
<DropdownMenuTrigger className="inline-flex h-9 items-center gap-2 rounded-md border border-border bg-background px-3 text-sm text-foreground transition hover:bg-muted" aria-label="Switch theme palette">
|
|
25
|
+
<Palette className="h-4 w-4"/>
|
|
26
|
+
<span className="font-medium">{activeLabel}</span>
|
|
27
|
+
</DropdownMenuTrigger>
|
|
28
|
+
<DropdownMenuContent align="end" sideOffset={6} className="w-72 p-1">
|
|
29
|
+
{BASE_THEMES.map((t) => (<DropdownMenuItem key={t.id} onClick={() => setThemeName(t.id)} className={cn("items-start gap-3 px-2 py-2", themeName === t.id && "bg-muted")}>
|
|
30
|
+
<span aria-hidden className="mt-0.5 inline-flex h-6 w-6 shrink-0 overflow-hidden rounded-full ring-1 ring-border">
|
|
31
|
+
<span className="h-full w-1/2" style={{ background: t.swatch.primary }}/>
|
|
32
|
+
<span className="h-full w-1/2" style={{ background: t.swatch.primaryDark }}/>
|
|
33
|
+
</span>
|
|
34
|
+
<span className="flex flex-col">
|
|
35
|
+
<span className="text-sm font-medium">{t.label}</span>
|
|
36
|
+
<span className="text-xs text-muted-foreground">{t.description}</span>
|
|
37
|
+
</span>
|
|
38
|
+
</DropdownMenuItem>))}
|
|
39
|
+
</DropdownMenuContent>
|
|
40
|
+
</DropdownMenu>
|
|
41
|
+
</div>);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ThemeSwitcher.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeSwitcher.jsx","sourceRoot":"","sources":["../../../src/components/chrome/ThemeSwitcher.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type AppNavItem = {
|
|
3
|
+
href: string;
|
|
4
|
+
label: string;
|
|
5
|
+
icon: React.ComponentType<{
|
|
6
|
+
className?: string;
|
|
7
|
+
}>;
|
|
8
|
+
/** When provided, item only renders if the consumer's `getFlag(flag)` returns true. */
|
|
9
|
+
flag?: string;
|
|
10
|
+
};
|
|
11
|
+
export type AppNavGroup = {
|
|
12
|
+
label: string;
|
|
13
|
+
items: AppNavItem[];
|
|
14
|
+
};
|
|
15
|
+
export declare function AppShell({ children, pathname, navGroups, Link, homeHref, showRoleSwitcher, }: {
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
pathname: string;
|
|
18
|
+
navGroups: AppNavGroup[];
|
|
19
|
+
Link: React.ComponentType<{
|
|
20
|
+
href: string;
|
|
21
|
+
children?: React.ReactNode;
|
|
22
|
+
className?: string;
|
|
23
|
+
"aria-label"?: string;
|
|
24
|
+
}>;
|
|
25
|
+
homeHref?: string;
|
|
26
|
+
showRoleSwitcher?: boolean;
|
|
27
|
+
}): React.JSX.Element;
|
|
28
|
+
//# sourceMappingURL=AppShell.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Menu, X } from "lucide-react";
|
|
4
|
+
import { Logo } from "../chrome/Logo.js";
|
|
5
|
+
import { ThemeSwitcher } from "../chrome/ThemeSwitcher.js";
|
|
6
|
+
import { RoleSwitcher } from "../chrome/RoleSwitcher.js";
|
|
7
|
+
import { cn } from "../../lib/utils.js";
|
|
8
|
+
function NavGroup({ group, pathname, Link, }) {
|
|
9
|
+
if (group.items.length === 0)
|
|
10
|
+
return null;
|
|
11
|
+
return (<div className="space-y-1">
|
|
12
|
+
<p className="px-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground">
|
|
13
|
+
{group.label}
|
|
14
|
+
</p>
|
|
15
|
+
<ul className="space-y-0.5">
|
|
16
|
+
{group.items.map((item) => {
|
|
17
|
+
const active = pathname === item.href || pathname.startsWith(`${item.href}/`);
|
|
18
|
+
return (<li key={item.href}>
|
|
19
|
+
<Link href={item.href} className={cn("flex items-center gap-3 rounded-md px-3 py-2 text-sm transition", active
|
|
20
|
+
? "bg-sidebar-accent text-sidebar-accent-foreground"
|
|
21
|
+
: "text-sidebar-foreground hover:bg-sidebar-accent/60")}>
|
|
22
|
+
<item.icon className="h-4 w-4 shrink-0"/>
|
|
23
|
+
<span>{item.label}</span>
|
|
24
|
+
</Link>
|
|
25
|
+
</li>);
|
|
26
|
+
})}
|
|
27
|
+
</ul>
|
|
28
|
+
</div>);
|
|
29
|
+
}
|
|
30
|
+
export function AppShell({ children, pathname, navGroups, Link, homeHref = "/", showRoleSwitcher = true, }) {
|
|
31
|
+
const [mobileOpen, setMobileOpen] = React.useState(false);
|
|
32
|
+
const sidebarContent = (<div className="flex h-full flex-col gap-6 px-3 py-4">
|
|
33
|
+
<Link href={homeHref} className="px-2" aria-label="Home">
|
|
34
|
+
<Logo />
|
|
35
|
+
</Link>
|
|
36
|
+
{navGroups.map((g) => (<NavGroup key={g.label} group={g} pathname={pathname} Link={Link}/>))}
|
|
37
|
+
</div>);
|
|
38
|
+
return (<div className="flex min-h-svh bg-background text-foreground">
|
|
39
|
+
<aside className="hidden w-64 shrink-0 border-r border-sidebar-border bg-sidebar text-sidebar-foreground md:block">
|
|
40
|
+
{sidebarContent}
|
|
41
|
+
</aside>
|
|
42
|
+
|
|
43
|
+
{mobileOpen ? (<div className="fixed inset-0 z-50 flex md:hidden">
|
|
44
|
+
<div className="flex-1 bg-foreground/40 backdrop-blur-sm" onClick={() => setMobileOpen(false)} aria-hidden/>
|
|
45
|
+
<aside className="relative w-72 border-l border-sidebar-border bg-sidebar text-sidebar-foreground">
|
|
46
|
+
<button type="button" onClick={() => setMobileOpen(false)} aria-label="Close menu" className="absolute right-2 top-2 inline-flex h-9 w-9 items-center justify-center rounded-md hover:bg-sidebar-accent">
|
|
47
|
+
<X className="h-4 w-4"/>
|
|
48
|
+
</button>
|
|
49
|
+
{sidebarContent}
|
|
50
|
+
</aside>
|
|
51
|
+
</div>) : null}
|
|
52
|
+
|
|
53
|
+
<div className="flex min-w-0 flex-1 flex-col">
|
|
54
|
+
<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">
|
|
55
|
+
<button type="button" onClick={() => setMobileOpen(true)} aria-label="Open menu" className="inline-flex h-9 w-9 items-center justify-center rounded-md border border-border md:hidden">
|
|
56
|
+
<Menu className="h-4 w-4"/>
|
|
57
|
+
</button>
|
|
58
|
+
<div className="flex items-center gap-3 md:ml-auto">
|
|
59
|
+
{showRoleSwitcher ? <RoleSwitcher /> : null}
|
|
60
|
+
<ThemeSwitcher />
|
|
61
|
+
</div>
|
|
62
|
+
</header>
|
|
63
|
+
<main className="min-w-0 flex-1 px-4 py-6 md:px-8 md:py-8">{children}</main>
|
|
64
|
+
</div>
|
|
65
|
+
</div>);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=AppShell.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppShell.jsx","sourceRoot":"","sources":["../../../src/components/shells/AppShell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type NavLink = {
|
|
3
|
+
href: string;
|
|
4
|
+
label: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function PublicShell({ children, navLinks, loginHref, footerLinks, Link, }: {
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
navLinks: NavLink[];
|
|
9
|
+
loginHref?: string;
|
|
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
|
+
}): React.JSX.Element;
|
|
22
|
+
//# sourceMappingURL=PublicShell.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { useBrand } from "@augmenting-integrations/brand";
|
|
4
|
+
import { Logo } from "../chrome/Logo.js";
|
|
5
|
+
import { ThemeSwitcher } from "../chrome/ThemeSwitcher.js";
|
|
6
|
+
export function PublicShell({ children, navLinks, loginHref = "/login", footerLinks, Link, }) {
|
|
7
|
+
const brand = useBrand();
|
|
8
|
+
return (<div className="flex min-h-svh flex-col bg-background text-foreground">
|
|
9
|
+
<header className="border-b border-border bg-background/80 backdrop-blur">
|
|
10
|
+
<div className="mx-auto flex max-w-6xl items-center justify-between px-6 py-4">
|
|
11
|
+
<Link href="/" aria-label="Home">
|
|
12
|
+
<Logo />
|
|
13
|
+
</Link>
|
|
14
|
+
<nav className="flex items-center gap-6 text-sm">
|
|
15
|
+
{navLinks.map((link) => (<Link key={link.href} href={link.href} className="text-muted-foreground transition hover:text-foreground">
|
|
16
|
+
{link.label}
|
|
17
|
+
</Link>))}
|
|
18
|
+
<Link href={loginHref} className="text-muted-foreground transition hover:text-foreground">
|
|
19
|
+
Log in
|
|
20
|
+
</Link>
|
|
21
|
+
<ThemeSwitcher />
|
|
22
|
+
</nav>
|
|
23
|
+
</div>
|
|
24
|
+
</header>
|
|
25
|
+
|
|
26
|
+
<main className="flex-1">{children}</main>
|
|
27
|
+
|
|
28
|
+
<footer className="border-t border-border">
|
|
29
|
+
<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">
|
|
30
|
+
<span>
|
|
31
|
+
© {new Date().getFullYear()} {brand.name}
|
|
32
|
+
</span>
|
|
33
|
+
<div className="flex gap-4">
|
|
34
|
+
{(footerLinks ?? []).map((link) => (<Link key={link.href} href={link.href} className="hover:text-foreground">
|
|
35
|
+
{link.label}
|
|
36
|
+
</Link>))}
|
|
37
|
+
</div>
|
|
38
|
+
</div>
|
|
39
|
+
</footer>
|
|
40
|
+
</div>);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=PublicShell.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PublicShell.jsx","sourceRoot":"","sources":["../../../src/components/shells/PublicShell.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAI3D,MAAM,UAAU,WAAW,CAAC,EAC1B,QAAQ,EACR,QAAQ,EACR,SAAS,GAAG,QAAQ,EACpB,WAAW,EACX,IAAI,GAgBL;IACC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,CAAC,GAAG,CAAC,SAAS,CAAC,uDAAuD,CACpE;MAAA,CAAC,MAAM,CAAC,SAAS,CAAC,uDAAuD,CACvE;QAAA,CAAC,GAAG,CAAC,SAAS,CAAC,+DAA+D,CAC5E;UAAA,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAC9B;YAAA,CAAC,IAAI,CAAC,AAAD,EACP;UAAA,EAAE,IAAI,CACN;UAAA,CAAC,GAAG,CAAC,SAAS,CAAC,iCAAiC,CAC9C;YAAA,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACtB,CAAC,IAAI,CACH,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACf,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAChB,SAAS,CAAC,wDAAwD,CAElE;gBAAA,CAAC,IAAI,CAAC,KAAK,CACb;cAAA,EAAE,IAAI,CAAC,CACR,CAAC,CACF;YAAA,CAAC,IAAI,CACH,IAAI,CAAC,CAAC,SAAS,CAAC,CAChB,SAAS,CAAC,wDAAwD,CAElE;;YACF,EAAE,IAAI,CACN;YAAA,CAAC,aAAa,CAAC,AAAD,EAChB;UAAA,EAAE,GAAG,CACP;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,MAAM,CAER;;MAAA,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAEzC;;MAAA,CAAC,MAAM,CAAC,SAAS,CAAC,wBAAwB,CACxC;QAAA,CAAC,GAAG,CAAC,SAAS,CAAC,6GAA6G,CAC1H;UAAA,CAAC,IAAI,CACH;cAAE,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAE,CAAA,CAAC,KAAK,CAAC,IAAI,CAC1C;UAAA,EAAE,IAAI,CACN;UAAA,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CACzB;YAAA,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACjC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,uBAAuB,CACtE;gBAAA,CAAC,IAAI,CAAC,KAAK,CACb;cAAA,EAAE,IAAI,CAAC,CACR,CAAC,CACJ;UAAA,EAAE,GAAG,CACP;QAAA,EAAE,GAAG,CACP;MAAA,EAAE,MAAM,CACV;IAAA,EAAE,GAAG,CAAC,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Common chrome for studio panels (theme, brand, flags, content). Each app's
|
|
4
|
+
* studio routes wrap their page in <StudioShell title="Feature flags">.
|
|
5
|
+
*/
|
|
6
|
+
export declare function StudioShell({ title, description, actions, children, className, }: {
|
|
7
|
+
title: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
actions?: React.ReactNode;
|
|
10
|
+
children: React.ReactNode;
|
|
11
|
+
className?: string;
|
|
12
|
+
}): React.JSX.Element;
|
|
13
|
+
//# sourceMappingURL=StudioShell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudioShell.d.ts","sourceRoot":"","sources":["../../../src/components/shells/StudioShell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,qBAeA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
|
+
/**
|
|
5
|
+
* Common chrome for studio panels (theme, brand, flags, content). Each app's
|
|
6
|
+
* studio routes wrap their page in <StudioShell title="Feature flags">.
|
|
7
|
+
*/
|
|
8
|
+
export function StudioShell({ title, description, actions, children, className, }) {
|
|
9
|
+
return (<section className={cn("space-y-6", className)}>
|
|
10
|
+
<header className="flex flex-wrap items-start justify-between gap-3">
|
|
11
|
+
<div>
|
|
12
|
+
<h1 className="text-2xl font-semibold tracking-tight">{title}</h1>
|
|
13
|
+
{description ? (<p className="mt-1 max-w-2xl text-sm text-muted-foreground">{description}</p>) : null}
|
|
14
|
+
</div>
|
|
15
|
+
{actions ? <div className="flex items-center gap-2">{actions}</div> : null}
|
|
16
|
+
</header>
|
|
17
|
+
<div className="rounded-lg border border-border bg-card p-4 md:p-6">{children}</div>
|
|
18
|
+
</section>);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=StudioShell.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StudioShell.jsx","sourceRoot":"","sources":["../../../src/components/shells/StudioShell.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,KAAK,EACL,WAAW,EACX,OAAO,EACP,QAAQ,EACR,SAAS,GAOV;IACC,OAAO,CACL,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAC7C;MAAA,CAAC,MAAM,CAAC,SAAS,CAAC,kDAAkD,CAClE;QAAA,CAAC,GAAG,CACF;UAAA,CAAC,EAAE,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CACjE;UAAA,CAAC,WAAW,CAAC,CAAC,CAAC,CACb,CAAC,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAC9E,CAAC,CAAC,CAAC,IAAI,CACV;QAAA,EAAE,GAAG,CACL;QAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAC5E;MAAA,EAAE,MAAM,CACR;MAAA,CAAC,GAAG,CAAC,SAAS,CAAC,oDAAoD,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CACrF;IAAA,EAAE,OAAO,CAAC,CACX,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
|
|
3
|
+
declare function Avatar({ className, size, ...props }: AvatarPrimitive.Root.Props & {
|
|
4
|
+
size?: "default" | "sm" | "lg";
|
|
5
|
+
}): React.JSX.Element;
|
|
6
|
+
declare function AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props): React.JSX.Element;
|
|
7
|
+
declare function AvatarFallback({ className, ...props }: AvatarPrimitive.Fallback.Props): React.JSX.Element;
|
|
8
|
+
declare function AvatarBadge({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
|
|
9
|
+
declare function AvatarGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
10
|
+
declare function AvatarGroupCount({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
11
|
+
export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge, };
|
|
12
|
+
//# sourceMappingURL=avatar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/avatar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIlE,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,GAAG;IAC9B,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;CAChC,qBAYA;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,KAAK,qBAQxE;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,CAAC,QAAQ,CAAC,KAAK,qBAW9E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAczE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWxE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7E;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
|
+
function Avatar({ className, size = "default", ...props }) {
|
|
6
|
+
return (<AvatarPrimitive.Root data-slot="avatar" data-size={size} className={cn("group/avatar relative flex size-8 shrink-0 rounded-full select-none after:absolute after:inset-0 after:rounded-full after:border after:border-border after:mix-blend-darken data-[size=lg]:size-10 data-[size=sm]:size-6 dark:after:mix-blend-lighten", className)} {...props}/>);
|
|
7
|
+
}
|
|
8
|
+
function AvatarImage({ className, ...props }) {
|
|
9
|
+
return (<AvatarPrimitive.Image data-slot="avatar-image" className={cn("aspect-square size-full rounded-full object-cover", className)} {...props}/>);
|
|
10
|
+
}
|
|
11
|
+
function AvatarFallback({ className, ...props }) {
|
|
12
|
+
return (<AvatarPrimitive.Fallback data-slot="avatar-fallback" className={cn("flex size-full items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-data-[size=sm]/avatar:text-xs", className)} {...props}/>);
|
|
13
|
+
}
|
|
14
|
+
function AvatarBadge({ className, ...props }) {
|
|
15
|
+
return (<span data-slot="avatar-badge" className={cn("absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-primary text-primary-foreground bg-blend-color ring-2 ring-background select-none", "group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden", "group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2", "group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2", className)} {...props}/>);
|
|
16
|
+
}
|
|
17
|
+
function AvatarGroup({ className, ...props }) {
|
|
18
|
+
return (<div data-slot="avatar-group" className={cn("group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background", className)} {...props}/>);
|
|
19
|
+
}
|
|
20
|
+
function AvatarGroupCount({ className, ...props }) {
|
|
21
|
+
return (<div data-slot="avatar-group-count" className={cn("relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3", className)} {...props}/>);
|
|
22
|
+
}
|
|
23
|
+
export { Avatar, AvatarImage, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarBadge, };
|
|
24
|
+
//# sourceMappingURL=avatar.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avatar.jsx","sourceRoot":"","sources":["../../../src/components/ui/avatar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,SAAS,MAAM,CAAC,EACd,SAAS,EACT,IAAI,GAAG,SAAS,EAChB,GAAG,KAAK,EAGT;IACC,OAAO,CACL,CAAC,eAAe,CAAC,IAAI,CACnB,SAAS,CAAC,QAAQ,CAClB,SAAS,CAAC,CAAC,IAAI,CAAC,CAChB,SAAS,CAAC,CAAC,EAAE,CACX,uPAAuP,EACvP,SAAS,CACV,CAAC,CACF,IAAI,KAAK,CAAC,EACV,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACvE,OAAO,CACL,CAAC,eAAe,CAAC,KAAK,CACpB,SAAS,CAAC,cAAc,CACxB,SAAS,CAAC,CAAC,EAAE,CAAC,mDAAmD,EAAE,SAAS,CAAC,CAAC,CAC9E,IAAI,KAAK,CAAC,EACV,CACH,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAkC;IAC7E,OAAO,CACL,CAAC,eAAe,CAAC,QAAQ,CACvB,SAAS,CAAC,iBAAiB,CAC3B,SAAS,CAAC,CAAC,EAAE,CACX,oIAAoI,EACpI,SAAS,CACV,CAAC,CACF,IAAI,KAAK,CAAC,EACV,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgC;IACxE,OAAO,CACL,CAAC,IAAI,CACH,SAAS,CAAC,cAAc,CACxB,SAAS,CAAC,CAAC,EAAE,CACX,0KAA0K,EAC1K,+EAA+E,EAC/E,2FAA2F,EAC3F,+EAA+E,EAC/E,SAAS,CACV,CAAC,CACF,IAAI,KAAK,CAAC,EACV,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IACvE,OAAO,CACL,CAAC,GAAG,CACF,SAAS,CAAC,cAAc,CACxB,SAAS,CAAC,CAAC,EAAE,CACX,qGAAqG,EACrG,SAAS,CACV,CAAC,CACF,IAAI,KAAK,CAAC,EACV,CACH,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA+B;IAC5E,OAAO,CACL,CAAC,GAAG,CACF,SAAS,CAAC,oBAAoB,CAC9B,SAAS,CAAC,CAAC,EAAE,CACX,0VAA0V,EAC1V,SAAS,CACV,CAAC,CACF,IAAI,KAAK,CAAC,EACV,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EACL,MAAM,EACN,WAAW,EACX,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,WAAW,GACZ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const badgeVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "link" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
declare function Badge({ className, variant, render, ...props }: useRender.ComponentProps<"span"> & VariantProps<typeof badgeVariants>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
7
|
+
export { Badge, badgeVariants };
|
|
8
|
+
//# sourceMappingURL=badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../../src/components/ui/badge.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,aAAa;;8EAmBlB,CAAC;AAEF,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAmB,EACnB,MAAM,EACN,GAAG,KAAK,EACT,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,8FAevE;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { mergeProps } from "@base-ui/react/merge-props";
|
|
2
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
|
+
const badgeVariants = cva("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!", {
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
|
|
9
|
+
secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
|
|
10
|
+
destructive: "bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",
|
|
11
|
+
outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
|
|
12
|
+
ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
|
|
13
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
variant: "default",
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
function Badge({ className, variant = "default", render, ...props }) {
|
|
21
|
+
return useRender({
|
|
22
|
+
defaultTagName: "span",
|
|
23
|
+
props: mergeProps({
|
|
24
|
+
className: cn(badgeVariants({ variant }), className),
|
|
25
|
+
}, props),
|
|
26
|
+
render,
|
|
27
|
+
state: {
|
|
28
|
+
slot: "badge",
|
|
29
|
+
variant,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
export { Badge, badgeVariants };
|
|
34
|
+
//# sourceMappingURL=badge.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"badge.jsx","sourceRoot":"","sources":["../../../src/components/ui/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,aAAa,GAAG,GAAG,CACvB,4eAA4e,EAC5e;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,4DAA4D;YACrE,SAAS,EAAE,kEAAkE;YAC7E,WAAW,EACT,gKAAgK;YAClK,OAAO,EACL,kFAAkF;YACpF,KAAK,EAAE,mEAAmE;YAC1E,IAAI,EAAE,iDAAiD;SACxD;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;KACnB;CACF,CACF,CAAC;AAEF,SAAS,KAAK,CAAC,EACb,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,MAAM,EACN,GAAG,KAAK,EAC8D;IACtE,OAAO,SAAS,CAAC;QACf,cAAc,EAAE,MAAM;QACtB,KAAK,EAAE,UAAU,CACf;YACE,SAAS,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC;SACrD,EACD,KAAK,CACN;QACD,MAAM;QACN,KAAK,EAAE;YACL,IAAI,EAAE,OAAO;YACb,OAAO;SACR;KACF,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Button as ButtonPrimitive } from "@base-ui/react/button";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
declare const buttonVariants: (props?: ({
|
|
4
|
+
variant?: "default" | "link" | "secondary" | "destructive" | "outline" | "ghost" | null | undefined;
|
|
5
|
+
size?: "default" | "sm" | "lg" | "xs" | "icon" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
|
+
declare function Button({ className, variant, size, ...props }: ButtonPrimitive.Props & VariantProps<typeof buttonVariants>): import("react").JSX.Element;
|
|
8
|
+
export { Button, buttonVariants };
|
|
9
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE,QAAA,MAAM,cAAc;;;8EAmCnB,CAAC;AAEF,iBAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,cAAc,CAAC,+BAQ7D;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Button as ButtonPrimitive } from "@base-ui/react/button";
|
|
2
|
+
import { cva } from "class-variance-authority";
|
|
3
|
+
import { cn } from "../../lib/utils";
|
|
4
|
+
const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
|
|
5
|
+
variants: {
|
|
6
|
+
variant: {
|
|
7
|
+
default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
|
|
8
|
+
outline: "border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",
|
|
9
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
|
|
10
|
+
ghost: "hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",
|
|
11
|
+
destructive: "bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",
|
|
12
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
13
|
+
},
|
|
14
|
+
size: {
|
|
15
|
+
default: "h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
16
|
+
xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
|
|
17
|
+
sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
|
|
18
|
+
lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
|
|
19
|
+
icon: "size-8",
|
|
20
|
+
"icon-xs": "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
|
|
21
|
+
"icon-sm": "size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg",
|
|
22
|
+
"icon-lg": "size-9",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
defaultVariants: {
|
|
26
|
+
variant: "default",
|
|
27
|
+
size: "default",
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
function Button({ className, variant = "default", size = "default", ...props }) {
|
|
31
|
+
return (<ButtonPrimitive data-slot="button" className={cn(buttonVariants({ variant, size, className }))} {...props}/>);
|
|
32
|
+
}
|
|
33
|
+
export { Button, buttonVariants };
|
|
34
|
+
//# sourceMappingURL=button.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.jsx","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,cAAc,GAAG,GAAG,CACxB,4lBAA4lB,EAC5lB;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,4DAA4D;YACrE,OAAO,EACL,iLAAiL;YACnL,SAAS,EACP,iIAAiI;YACnI,KAAK,EACH,kHAAkH;YACpH,WAAW,EACT,6NAA6N;YAC/N,IAAI,EAAE,iDAAiD;SACxD;QACD,IAAI,EAAE;YACJ,OAAO,EACL,sFAAsF;YACxF,EAAE,EAAE,+MAA+M;YACnN,EAAE,EAAE,yNAAyN;YAC7N,EAAE,EAAE,sFAAsF;YAC1F,IAAI,EAAE,QAAQ;YACd,SAAS,EACP,yHAAyH;YAC3H,SAAS,EACP,oFAAoF;YACtF,SAAS,EAAE,QAAQ;SACpB;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAEF,SAAS,MAAM,CAAC,EACd,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,SAAS,EAChB,GAAG,KAAK,EACoD;IAC5D,OAAO,CACL,CAAC,eAAe,CACd,SAAS,CAAC,QAAQ,CAClB,SAAS,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAC5D,IAAI,KAAK,CAAC,EACV,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
declare function Card({ className, size, ...props }: React.ComponentProps<"div"> & {
|
|
3
|
+
size?: "default" | "sm";
|
|
4
|
+
}): React.JSX.Element;
|
|
5
|
+
declare function CardHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
6
|
+
declare function CardTitle({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
7
|
+
declare function CardDescription({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
8
|
+
declare function CardAction({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
9
|
+
declare function CardContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
10
|
+
declare function CardFooter({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
11
|
+
export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent, };
|
|
12
|
+
//# sourceMappingURL=card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAA;CAAE,qBAY3D;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWtE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ5E;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,GACZ,CAAC"}
|