refactor: consolidate web app UI foundation

This commit is contained in:
3252a8
2026-05-11 23:25:34 +03:00
parent 9f338c3416
commit 6a367c1dec
47 changed files with 713 additions and 275 deletions
@@ -0,0 +1,18 @@
<script>
import { cn } from "$lib/utils.js";
export let columns = 1;
let className = "";
export { className as class };
</script>
<div
class={cn(
"admin-cn-dashboard-grid",
columns === 3 && "admin-cn-dashboard-grid--3",
className,
)}
{...$$restProps}
>
<slot />
</div>
@@ -0,0 +1,10 @@
<script>
import { cn } from "$lib/utils.js";
let className = "";
export { className as class };
</script>
<div class={cn("admin-cn-dashboard-stack", className)} {...$$restProps}>
<slot />
</div>
@@ -0,0 +1,11 @@
<script>
import { cn } from "$lib/utils.js";
export let tone = "default";
let className = "";
export { className as class };
</script>
<div class={cn(tone === "card" ? "admin-card-body" : "admin-empty", className)} {...$$restProps}>
<slot />
</div>
@@ -0,0 +1,11 @@
<script>
export let title = "";
export let description = "";
</script>
<div class="admin-dashboard-section-head">
<h3>{title}</h3>
{#if description}
<small>{description}</small>
{/if}
</div>
@@ -0,0 +1,4 @@
export { default as AdminDashboardGrid } from "./AdminDashboardGrid.svelte";
export { default as AdminDashboardStack } from "./AdminDashboardStack.svelte";
export { default as AdminEmptyState } from "./AdminEmptyState.svelte";
export { default as AdminSectionHeader } from "./AdminSectionHeader.svelte";
@@ -1,7 +1,7 @@
<script>
import { cn } from "../../utils.js";
import { cn } from "$lib/utils.js";
/** @type {'default' | 'outline' | 'destructive'} */
/** @type {'default' | 'outline' | 'destructive' | 'success' | 'muted'} */
export let variant = "default";
let className = "";
@@ -14,6 +14,8 @@
"admin-cn-badge",
variant === "outline" && "admin-cn-badge-outline",
variant === "destructive" && "admin-cn-badge-destructive",
variant === "success" && "admin-cn-badge-success",
variant === "muted" && "admin-cn-badge-muted",
className,
)}
{...$$restProps}
@@ -1,5 +1,6 @@
<script>
import { cn } from "../../utils.js";
import { cva } from "class-variance-authority";
import { cn } from "$lib/utils.js";
export let type = "button";
export let variant = "default";
@@ -10,29 +11,36 @@
let className = "";
export { className as class };
const variants = {
default: "btn btn-primary",
secondary: "btn btn-secondary",
outline: "btn btn-outline",
ghost: "btn btn-ghost",
telegram: "btn btn-telegram",
icon: "btn btn-icon",
};
const sizes = {
default: "",
sm: "btn-sm",
lg: "btn-lg",
icon: "btn-square",
};
const buttonVariants = cva("btn", {
variants: {
variant: {
default: "btn-primary",
secondary: "btn-secondary",
outline: "btn-outline",
ghost: "btn-ghost",
telegram: "btn-telegram",
icon: "btn-icon",
},
size: {
default: "",
sm: "btn-sm",
lg: "btn-lg",
icon: "btn-square",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
});
</script>
{#if href}
<a class={cn(variants[variant], sizes[size], className)} {href} onclick={onclick} {...$$restProps}>
<a class={cn(buttonVariants({ variant, size }), className)} {href} onclick={onclick} {...$$restProps}>
<slot />
</a>
{:else}
<button class={cn(variants[variant], sizes[size], className)} {type} {disabled} onclick={onclick} {...$$restProps}>
<button class={cn(buttonVariants({ variant, size }), className)} {type} {disabled} onclick={onclick} {...$$restProps}>
<slot />
</button>
{/if}
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../utils.js";
import { cn } from "$lib/utils.js";
export let active = false;
export let compact = false;
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../../utils.js";
import { cn } from "$lib/utils.js";
let className = "";
export { className as class };
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../../utils.js";
import { cn } from "$lib/utils.js";
let className = "";
export { className as class };
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../../utils.js";
import { cn } from "$lib/utils.js";
let className = "";
export { className as class };
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../../utils.js";
import { cn } from "$lib/utils.js";
let className = "";
export { className as class };
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../../utils.js";
import { cn } from "$lib/utils.js";
let className = "";
export { className as class };
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../../utils.js";
import { cn } from "$lib/utils.js";
let className = "";
export { className as class };
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../../utils.js";
import { cn } from "$lib/utils.js";
let className = "";
export { className as class };
@@ -1,6 +1,6 @@
<script>
import { X } from "lucide-svelte";
import { cn } from "../../utils.js";
import { cn } from "$lib/utils.js";
import Button from "./button.svelte";
export let open = false;
@@ -0,0 +1,7 @@
export { default as Badge } from "./badge.svelte";
export { default as Button } from "./button.svelte";
export { default as Dialog } from "./dialog.svelte";
export { default as Input } from "./input.svelte";
export { default as LegacyCard } from "./card.svelte";
export * as Card from "./card/index.js";
export { Accordion, Label, Select, Separator, Switch, Tabs, Tooltip } from "./primitives.js";
@@ -1,5 +1,5 @@
<script>
import { cn } from "../../utils.js";
import { cn } from "$lib/utils.js";
export let value = "";
export let type = "text";
@@ -0,0 +1 @@
export { Accordion, Label, Select, Separator, Switch, Tabs, Tooltip } from "bits-ui";