@@ -7,20 +7,21 @@ import {
77 IconLayersIntersect ,
88 IconList ,
99 IconQuote ,
10+ IconQuestionMark ,
1011} from "@tabler/icons-react"
1112import { cva , type VariantProps } from "class-variance-authority"
1213
1314import { cn } from "@/lib/utils"
1415
15- const iconsMap = {
16+ const iconsMap : Record < string , React . ReactNode > = {
1617 string : < IconQuote size = { 15 } stroke = { 1.2 } /> ,
1718 set : < IconLayersIntersect size = { 15 } stroke = { 1.2 } /> ,
1819 hash : < IconHash size = { 15 } stroke = { 1.2 } /> ,
1920 json : < IconCodeDots size = { 15 } stroke = { 1.2 } /> ,
2021 zset : < IconArrowsSort size = { 15 } stroke = { 1.2 } /> ,
2122 list : < IconList size = { 15 } stroke = { 1.2 } /> ,
2223 stream : < IconList size = { 15 } stroke = { 1.2 } /> ,
23- } as const
24+ }
2425
2526const tagVariants = cva ( "inline-flex shrink-0 items-center rounded-md justify-center" , {
2627 variants : {
@@ -32,14 +33,15 @@ const tagVariants = cva("inline-flex shrink-0 items-center rounded-md justify-ce
3233 json : "bg-purple-200 text-purple-800" ,
3334 list : "bg-orange-200 text-orange-800" ,
3435 stream : "bg-green-200 text-green-800" ,
36+ default : "bg-gray-200 text-gray-800" ,
3537 } ,
3638 type : {
3739 icon : "size-5" ,
3840 badge : "h-6 px-2 uppercase whitespace-nowrap text-xs font-medium leading-none tracking-wide" ,
3941 } ,
4042 } ,
4143 defaultVariants : {
42- variant : "string " ,
44+ variant : "default " ,
4345 type : "icon" ,
4446 } ,
4547} )
@@ -49,9 +51,14 @@ export interface TypeTagProps
4951 VariantProps < typeof tagVariants > { }
5052
5153export function TypeTag ( { className, variant, type } : TypeTagProps ) {
54+ const defaultIcon = < IconQuestionMark size = { 15 } stroke = { 1.2 } />
55+ const variantKey = variant && variant in iconsMap ? variant : "default"
56+
5257 return (
53- < span className = { cn ( tagVariants ( { variant, type, className } ) ) } >
54- { type === "icon" ? iconsMap [ variant as DataType ] : DATA_TYPE_NAMES [ variant as DataType ] }
58+ < span className = { cn ( tagVariants ( { variant : variantKey , type, className } ) ) } >
59+ { type === "icon"
60+ ? ( iconsMap [ variant as string ] ?? defaultIcon )
61+ : ( DATA_TYPE_NAMES [ variant as DataType ] ?? variant ?? "Unknown" ) }
5562 </ span >
5663 )
5764}
0 commit comments