x
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<div class="flex flex-col gap-6"> <div data-controller="midwest-onboarding" data-midwest-onboarding-auto-open-value="false" class="midwest-onboarding"> <button data-action="midwest-onboarding#start" class="midwest-button variant-default size-default theme-primary" name="button"> <span class="midwest-button-content">Start tour</span> <div class="midwest-loading-icon" role="img" aria-label="Loading" aria-hidden="true" style="display: none"> <div class="midwest-loading-icon-inner"> <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> <svg viewbox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="Midwest-LoadingIcon__Svg" focusable="false" aria-hidden="true"> <circle cx="15" cy="15" r="15"> <animate attributename="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcmode="linear" repeatcount="indefinite"></animate> </circle> <circle cx="60" cy="15" r="9" fill-opacity="0.3"> <animate attributename="r" from="9" to="9" begin="0s" dur="0.8s" values="9;15;9" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="0.5" to="0.5" begin="0s" dur="0.8s" values=".5;1;.5" calcmode="linear" repeatcount="indefinite"></animate> </circle> <circle cx="105" cy="15" r="15"> <animate attributename="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcmode="linear" repeatcount="indefinite"></animate> </circle> </svg> </div> </div> </button> <div class="midwest-onboarding-step" hidden="hidden" data-midwest-onboarding-target="step" data-position="auto" data-title="Welcome" data-next-text="Next" data-back-text="Back" data-complete-text="Done" data-can-click-target="false"> <template> <p>Adjust the parameters and start the tour.</p> </template> </div> <div class="midwest-onboarding-step" hidden="hidden" data-midwest-onboarding-target="step" data-selector="#playground-target" data-position="bottom" data-title="A feature" data-next-text="Next" data-back-text="Back" data-complete-text="Done" data-can-click-target="false"> <template> <p>This step attaches to the box below.</p> </template> </div> <div class="midwest-onboarding-overlay" data-midwest-onboarding-target="overlay" data-action="click->midwest-onboarding#cancel" hidden></div> <div class="midwest-onboarding-card" data-midwest-onboarding-target="card" role="dialog" aria-modal="true" aria-labelledby="midwest-onboarding-title-f530" tabindex="-1" hidden> <button type="button" class="midwest-onboarding-close" data-action="midwest-onboarding#cancel" aria-label="Close tour"> <div class="midwest-icon "> <div class="midwest-icon-inner"> <svg xmlns="http://www.w3.org/2000/svg" class="Midwest-Icon__Svg" viewbox="0 0 512 512" focusable="false" role="img" aria-label="Close"><title>Close</title> <path d="M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z"></path></svg> </div> </div> </button> <h2 id="midwest-onboarding-title-f530" class="midwest-onboarding-title" data-midwest-onboarding-target="title"></h2> <div class="midwest-onboarding-body" data-midwest-onboarding-target="body"></div> <div class="midwest-onboarding-footer"> <button data-midwest-onboarding-target="back" data-action="midwest-onboarding#back" class="midwest-button variant-ghost size-small theme-primary mr-auto" name="button"> <span class="midwest-button-content">Back</span> <div class="midwest-loading-icon" role="img" aria-label="Loading" aria-hidden="true" style="display: none"> <div class="midwest-loading-icon-inner"> <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> <svg viewbox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="Midwest-LoadingIcon__Svg" focusable="false" aria-hidden="true"> <circle cx="15" cy="15" r="15"> <animate attributename="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcmode="linear" repeatcount="indefinite"></animate> </circle> <circle cx="60" cy="15" r="9" fill-opacity="0.3"> <animate attributename="r" from="9" to="9" begin="0s" dur="0.8s" values="9;15;9" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="0.5" to="0.5" begin="0s" dur="0.8s" values=".5;1;.5" calcmode="linear" repeatcount="indefinite"></animate> </circle> <circle cx="105" cy="15" r="15"> <animate attributename="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcmode="linear" repeatcount="indefinite"></animate> </circle> </svg> </div> </div> </button> <button data-midwest-onboarding-target="next" data-action="midwest-onboarding#next" class="midwest-button variant-default size-small theme-primary" name="button"> <span class="midwest-button-content">Next</span> <div class="midwest-loading-icon" role="img" aria-label="Loading" aria-hidden="true" style="display: none"> <div class="midwest-loading-icon-inner"> <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> <svg viewbox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="Midwest-LoadingIcon__Svg" focusable="false" aria-hidden="true"> <circle cx="15" cy="15" r="15"> <animate attributename="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcmode="linear" repeatcount="indefinite"></animate> </circle> <circle cx="60" cy="15" r="9" fill-opacity="0.3"> <animate attributename="r" from="9" to="9" begin="0s" dur="0.8s" values="9;15;9" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="0.5" to="0.5" begin="0s" dur="0.8s" values=".5;1;.5" calcmode="linear" repeatcount="indefinite"></animate> </circle> <circle cx="105" cy="15" r="15"> <animate attributename="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcmode="linear" repeatcount="indefinite"></animate> </circle> </svg> </div> </div> </button> <button data-midwest-onboarding-target="done" data-action="midwest-onboarding#complete" class="midwest-button variant-default size-small theme-primary" name="button"> <span class="midwest-button-content">Done</span> <div class="midwest-loading-icon" role="img" aria-label="Loading" aria-hidden="true" style="display: none"> <div class="midwest-loading-icon-inner"> <!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL --> <svg viewbox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="Midwest-LoadingIcon__Svg" focusable="false" aria-hidden="true"> <circle cx="15" cy="15" r="15"> <animate attributename="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcmode="linear" repeatcount="indefinite"></animate> </circle> <circle cx="60" cy="15" r="9" fill-opacity="0.3"> <animate attributename="r" from="9" to="9" begin="0s" dur="0.8s" values="9;15;9" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="0.5" to="0.5" begin="0s" dur="0.8s" values=".5;1;.5" calcmode="linear" repeatcount="indefinite"></animate> </circle> <circle cx="105" cy="15" r="15"> <animate attributename="r" from="15" to="15" begin="0s" dur="0.8s" values="15;9;15" calcmode="linear" repeatcount="indefinite"></animate> <animate attributename="fill-opacity" from="1" to="1" begin="0s" dur="0.8s" values="1;.5;1" calcmode="linear" repeatcount="indefinite"></animate> </circle> </svg> </div> </div> </button> </div> <div class="midwest-onboarding-arrow" data-midwest-onboarding-target="arrow"></div> </div> </div> <div id="playground-target" class="rounded-2xl border border-gray-1 p-6 text-center font-medium">Target element</div></div>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div class="flex flex-col gap-6"> <%= midwest_onboarding(auto_open: auto_open, confirm: confirm) do |o| %> <% o.with_trigger do %> <%= midwest_button(as: :button, "data-action": "midwest-onboarding#start") { "Start tour" } %> <% end %> <% o.with_step(title: "Welcome") do %> <p>Adjust the parameters and start the tour.</p> <% end %> <% o.with_step(title: "A feature", selector: "#playground-target", position: :bottom) do %> <p>This step attaches to the box below.</p> <% end %> <% end %> <div id="playground-target" class="rounded-2xl border border-gray-1 p-6 text-center font-medium">Target element</div></div>Playground
| Param | Description | Input |
|---|---|---|
|
Start the tour automatically on load |
|
|
|
Confirmation message shown on early exit (blank = none) |
|
No assets to display.
Add a .js or .css file alongside the component to see it here.
Figma embed for Onboarding/playground
Annotate a preview to embed its Figma design here:
@figma "https://figma.com/..."