aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/mirumd/web/lib/utils.ts')
-rw-r--r--cmd/mirumd/web/lib/utils.ts24+24 −0
1 files changed, 24 insertions, 0 deletions
diff --git a/cmd/mirumd/web/lib/utils.ts b/cmd/mirumd/web/lib/utils.ts
new file mode 100644
--- /dev/null
+++ b/cmd/mirumd/web/lib/utils.ts
@@ -0,0 +1,24 @@
+// Copyright (c) 2026 Nikolay Govorov
+// SPDX-License-Identifier: AGPL-3.0-or-later
+
+import { twMerge } from "tailwind-merge"
+
+export type ClassValue = ClassArray | Record<string, unknown> | string | number | bigint | null | boolean | undefined
+export type ClassArray = ClassValue[]
+
+function classList(value: ClassValue): string {
+ if (typeof value === "string" || typeof value === "number" || typeof value === "bigint") {
+ return String(value)
+ }
+ if (Array.isArray(value)) {
+ return value.map(classList).filter(Boolean).join(" ")
+ }
+ if (value !== null && typeof value === "object") {
+ return Object.keys(value).filter((key) => value[key]).join(" ")
+ }
+ return ""
+}
+
+export function cn(...inputs: ClassValue[]): string {
+ return twMerge(classList(inputs))
+}