icon = null; } else if ("1" === $icon) { if (null === $obj) { throw new \RuntimeException("Missing icon name."); } $this->icon = $obj->getBadgeIcon(); if (null === $this->icon) { throw new \RuntimeException("Missing icon name."); } } else { $this->icon = $icon; } $this->label = $label; if (!$obj && !$colour) { throw new \RuntimeException(sprintf('You must specify either a colour an instance of "%s".', BadgeableInterface::class)); } if ($obj && $colour) { throw new \RuntimeException(sprintf('You have specified both the colour "%s" and an instance of "%s". Please use one or the other.', $colour, $obj::class)); } if ($obj) { $palette = $obj->getBadgeColour()->getPalette(); } if ($colour) { $cases = array_map(fn (BadgeColour $b) => strtolower($b->name), BadgeColour::cases()); if (!in_array($colour, $cases)) { $formattedCases = implode(', ', array_map(fn (string $s) => '"'.$s.'"', $cases)); throw new \RuntimeException(sprintf('"%s" is not a valid badge colour. Available options are: %s.', $colour, $formattedCases)); } $colour = strtoupper($colour); $palette = BadgeColour::{$colour}->getPalette(); } $merger = TailwindMerge::instance(); if (true === $outline) { $classes = sprintf('bg-white %s %s %s %s', $palette->borderColourClass, $palette->textColourClass, $this->baseClasses, $class); } else { $glossyClass = $glossy ? 'bg-origin-border bg-[image:radial-gradient(ellipse_at_-10%_-50%,rgba(255,255,255,0.35),transparent_70%),linear-gradient(to_bottom,rgba(255,255,255,0.05),rgba(0,0,0,0.12))]' : ''; $classes = sprintf('text-white %s %s %s [border-color:transparent] %s', $palette->backgroundColourClass, $glossyClass, $this->baseClasses, $class); } if ($this->icon !== null) { $classes = sprintf("flex gap-1 items-center %s", $classes); } $this->finalClasses = $merger->merge(trim($classes)); } }