rgossiaux/svelte-headlessui

Ternary Operator

TheoGegout opened this issue · 4 comments

Hi !
I try to transform a React Tailwind UI component to Svelte but I encounter a problem.
I don't find in the documentation how to adapt this one ...
Thanks you !

<div className="relative flex">
      <Popover.Button
          className={classNames(
             open
                  ? 'border-indigo-600 text-indigo-600'
                  : 'border-transparent text-gray-700 hover:text-gray-800',
               'relative z-10 -mb-px flex items-center border-b-2 pt-px text-sm font-medium transition-colors duration-200 ease-out'
            )}
        >
          {category.name}
     </Popover.Button>
</div>

You can find an example of using the open prop to style the component in the documentation

Use a ternary here to style the button based on the open state

<Popover let:open>
  <PopoverButton
    class={open ? "popover-overlay-open" : "popover-overlay-closed"}
>
   Solutions</PopoverButton>
  <PopoverPanel>
    <!-- ... -->
  </PopoverPanel>
</Popover>

This is an example of having default classes and a class based on the open state

<Popover let:open>
  <PopoverButton
    class={`${open ? "transform rotate-180" : ""} w-5 h-5 text-purple-500`}
>
   Solutions</PopoverButton>
  <PopoverPanel>
    <!-- ... -->
  </PopoverPanel>
</Popover>

Oh okay my bad didn't see this part !
But maybe u can help me for this :

class={(open
? "border-indigo-600 text-indigo-600"
: "border-transparent text-gray-700 hover:text-gray-800",
"relative z-10 -mb-px flex items-center border-b-2 pt-px text-sm font-medium transition-colors duration-200 ease-out")}

To do is correctly I will do this :

class={open ? "border-indigo-600 text-indigo-600" : "border-transparent text-gray-700 hover:text-gray-800"}

But in my case, I don't know why there is a comma and what it's doing :

,"relative z-10 -mb-px flex items-center border-b-2 pt-px text-sm font-medium transition-colors duration-200 ease-out")}

The comma is part of the classNames function in React which is passing in the default classes.

The syntax for Svelte would be this

<PopoverButton
    class={`${open ? "border-indigo-600 text-indigo-600" : "border-transparent text-gray-700 hover:text-gray-800"} relative z-10 -mb-px flex items-center border-b-2 pt-px text-sm font-medium transition-colors duration-200 ease-out`}
>

Oh okay thank you very much ! ;)