Skip to content

Commit c51c586

Browse files
authored
Merge pull request #266 from Hugo-Le-Goff/patch-1
2 parents 60fb2a1 + ea22637 commit c51c586

File tree

3 files changed

+38
-21
lines changed

3 files changed

+38
-21
lines changed

docs/dropdown.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,19 @@ The code above will toggle the dropdown component, if you needed to only perform
4545
data-action="click->dropdown#show"
4646
data-action="click->dropdown#hide"
4747
```
48+
49+
### Transitions
50+
51+
The Dropdown component allows you to natively personalize the css transitions as described in the [transition](/docs/transition.md) utility.
52+
53+
In the table below are detailed the defaults tansitions options values, and the data classes attributes you can apply to your controller element to customize your transitions.
54+
55+
| Options | Default value | HTML data atribute |
56+
|-----------|------------------------------------|----------------------------------|
57+
| enter | `transition ease-out duration-100` | `data-dropdown-enter-class` |
58+
| enterFrom | `transform opacity-0 scale-95` | `data-dropdown-enter-from-class` |
59+
| enterTo | `transform opacity-100 scale-100` | `data-dropdown-enter-to-class` |
60+
| leave | `transition ease-in duration-75` | `data-dropdown-leave-class` |
61+
| leaveFrom | `transform opacity-100 scale-100` | `data-dropdown-leave-from-class` |
62+
| leaveTo | `transform opacity-0 scale-95` | `data-dropdown-leave-to-class` |
63+
| toggle | `hidden` | `data-dropdown-toggle-class` |

docs/transition.md

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { Controller } from "@hotwired/stimulus"
99

1010
class CustomController extends Controller {
1111
static targets = ['content']
12+
static classes = ['enter', 'enterFrom', 'enterTo', 'leave', 'leaveFrom', 'leaveTo', 'toggle']
1213

1314
showContent() {
1415
transition(this.contentTarget, true, this.defaultOptions())
@@ -20,13 +21,13 @@ class CustomController extends Controller {
2021

2122
defaultOptions() {
2223
return {
23-
enter: this.hasEnterClass ? this.enterClass : 'transition ease-out duration-100',
24-
enterFrom: this.hasEnterFromClass ? this.enterFromClass : 'transform opacity-0 scale-95',
25-
enterTo: this.hasEnterToClass ? this.enterToClass : 'transform opacity-100 scale-100',
26-
leave: this.hasLeaveClass ? this.leaveClass : 'transition ease-in duration-75',
27-
leaveFrom: this.hasLeaveFromClass ? this.leaveFromClass : 'transform opacity-100 scale-100',
28-
leaveTo: this.hasLeaveToClass ? this.leaveToClass : 'transform opacity-0 scale-95',
29-
toggleClass: this.hasToggleClass ? this.toggleClass : 'hidden',
24+
enter: this.hasEnterClass ? this.enterClasses.join(' ') : 'transition ease-out duration-100',
25+
enterFrom: this.hasEnterFromClass ? this.enterFromClasses.join(' ') : 'transform opacity-0 scale-95',
26+
enterTo: this.hasEnterToClass ? this.enterToClasses.join(' ') : 'transform opacity-100 scale-100',
27+
leave: this.hasLeaveClass ? this.leaveClasses.join(' ') : 'transition ease-in duration-75',
28+
leaveFrom: this.hasLeaveFromClass ? this.leaveFromClasses.join(' ') : 'transform opacity-100 scale-100',
29+
leaveTo: this.hasLeaveToClass ? this.leaveToClasses.join(' ') : 'transform opacity-0 scale-95',
30+
toggleClass: this.hasToggleClass ? this.toggleClasses.join(' ') : 'hidden',
3031
}
3132
}
3233
}
@@ -45,12 +46,12 @@ on an element by element basis
4546
<div class="hidden absolute left-0 bottom-7 w-max bg-white border border-gray-200 shadow rounded p-2"
4647
data-custom-target="content"
4748

48-
data-custom-enter="transition ease-out duration-100"
49-
data-custom-enter-from="transform opacity-0 scale-95"
50-
data-custom-enter-to="transform opacity-100 scale-100"
51-
data-custom-leave="transition ease-in duration-75"
52-
data-custom-leave-from="transform opacity-100 scale-100"
53-
data-custom-leave-to="transform opacity-0 scale-95-0"
49+
data-custom-enter-class="transition ease-out duration-100"
50+
data-custom-enter-from-class="transform opacity-0 scale-95"
51+
data-custom-enter-to-class="transform opacity-100 scale-100"
52+
data-custom-leave-class="transition ease-in duration-75"
53+
data-custom-leave-from-class="transform opacity-100 scale-100"
54+
data-custom-leave-to-class="transform opacity-0 scale-95-0"
5455
data-toggle="hidden"
5556
>
5657
Content

src/dropdown.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,19 @@ export default class extends Controller {
8585
get transitionOptions() {
8686
// once the Class API default values are available, we can simplify this
8787
return {
88-
enter: this.hasEnterClass ? this.enterClass : 'transition ease-out duration-100',
89-
enterFrom: this.hasEnterFromClass ? this.enterFromClass : 'transform opacity-0 scale-95',
90-
enterTo: this.hasEnterToClass ? this.enterToClass : 'transform opacity-100 scale-100',
91-
leave: this.hasLeaveClass ? this.leaveClass : 'transition ease-in duration-75',
92-
leaveFrom: this.hasLeaveFromClass ? this.leaveFromClass : 'transform opacity-100 scale-100',
93-
leaveTo: this.hasLeaveToClass ? this.leaveToClass : 'transform opacity-0 scale-95',
94-
toggleClass: this.hasToggleClass ? this.toggleClass : 'hidden',
88+
enter: this.hasEnterClass ? this.enterClasses.join(' ') : 'transition ease-out duration-100',
89+
enterFrom: this.hasEnterFromClass ? this.enterFromClasses.join(' ') : 'transform opacity-0 scale-95',
90+
enterTo: this.hasEnterToClass ? this.enterToClasses.join(' ') : 'transform opacity-100 scale-100',
91+
leave: this.hasLeaveClass ? this.leaveClasses.join(' ') : 'transition ease-in duration-75',
92+
leaveFrom: this.hasLeaveFromClass ? this.leaveFromClasses.join(' ') : 'transform opacity-100 scale-100',
93+
leaveTo: this.hasLeaveToClass ? this.leaveToClasses.join(' ') : 'transform opacity-0 scale-95',
94+
toggleClass: this.hasToggleClass ? this.toggleClasses.join(' ') : 'hidden',
9595
}
9696
}
9797

9898
// Ensures the menu is hidden before Turbo caches the page
9999
beforeCache() {
100100
this.openValue = false
101-
this.menuTarget.classList.add("hidden")
101+
this.menuTarget.classList.add(this.transitionOptions.toggleClass)
102102
}
103103
}

0 commit comments

Comments
 (0)