ProjectBranchSelectorSheetTabTrigger.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import type { LucideIcon } from 'lucide-react'
  2. import { cn, TabsTrigger_Shadcn_ } from 'ui'
  3. export interface ProjectBranchSelectorSheetTabTriggerProps {
  4. value: 'organization' | 'project' | 'branch'
  5. label: string
  6. icon: LucideIcon
  7. isMainBranch?: boolean
  8. isLast: boolean
  9. }
  10. export function ProjectBranchSelectorSheetTabTrigger({
  11. value,
  12. label,
  13. icon: Icon,
  14. isMainBranch = false,
  15. isLast,
  16. }: ProjectBranchSelectorSheetTabTriggerProps) {
  17. const isBranch = value === 'branch'
  18. const isProductionBranch = isBranch && isMainBranch
  19. return (
  20. <TabsTrigger_Shadcn_
  21. value={value}
  22. className={cn(
  23. 'group relative text-xs flex flex-col items-center gap-1.5 px-4 py-3 data-[state=active]:bg-surface-200 data-[state=active]:border-foreground-light border-b duration-0',
  24. isProductionBranch &&
  25. 'text-warning data-[state=active]:text-warning hover:text-warning hover:opacity-70'
  26. )}
  27. >
  28. <Icon className="shrink-0" size={16} strokeWidth={1.5} />
  29. <span className="truncate max-w-full text-xs leading-tight" title={label}>
  30. {label}
  31. </span>
  32. {!isLast && (
  33. <svg
  34. aria-hidden="true"
  35. width="100%"
  36. height="100%"
  37. viewBox="0 0 6 63"
  38. fill="none"
  39. xmlns="http://www.w3.org/2000/svg"
  40. className="absolute duration-0 bottom-0 top-0 -right-2 w-3 h-full z-10"
  41. >
  42. <path
  43. d="M5.49365 31L0.493652 0V62L5.49365 31Z"
  44. className="fill-[hsl(var(--background-dash-sidebar))] group-data-[state=active]:fill-[hsl(var(--background-surface-200))]"
  45. />
  46. <path d="M0.493652 0L5.49365 31L0.493652 62" stroke="hsl(var(--border-default))" />
  47. </svg>
  48. )}
  49. </TabsTrigger_Shadcn_>
  50. )
  51. }