@tcoopman Thanks for chiming in!
I was mostly having trouble with entrance transitions. (Elements not previously shown.) I had to add these to get Tailwind transitions to apply correctly:
style="display: none"
class="start-classes"
phx-mounted={JS.show(transition: {"transition-classes", "start-classes", "end-classes"}, time: ...)}
So for example, if a TailwindUI component has:
<!--
Entering: "ease-out duration-300"
From: "opacity-0"
To: "opacity-100"
-->
<div>
...
</div>
I had to do:
<div
style="display: none"
class="opacity-0"
phx-mounted={JS.show(
transition: {"ease-out duration-300", "opacity-0", "opacity-100"},
time: 300
)}
>
...
</div>
Without this precise configuration, I wasn’t able to get the transition to display correctly. (Notice I’m using JS.show
instead of JS.transition
.)
Hopefully someone out there finds this helpful!
It’s worth noting that Alpine.js makes this much less confusing to get right. You just take the 3 lists of classes from the TailwindUI example HTML and drop them into 3 corresponding attributes.
<div
x-show="open"
x-transition:enter="ease-out duration-300"
x-transition:enter-start="opacity-0"
x-transition:enter-end="opacity-100"
>
...
</div>
Perhaps LiveView could benefit to evolve more in that direction.