rails_onboarding 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +1351 -0
  4. data/Rakefile +6 -0
  5. data/app/assets/javascripts/rails_onboarding/admin/chart_controller.js +25 -0
  6. data/app/assets/javascripts/rails_onboarding/admin/filter_controller.js +49 -0
  7. data/app/assets/javascripts/rails_onboarding/admin/flash_controller.js +21 -0
  8. data/app/assets/javascripts/rails_onboarding/admin/flow_editor_controller.js +86 -0
  9. data/app/assets/javascripts/rails_onboarding/application.js +231 -0
  10. data/app/assets/javascripts/rails_onboarding/milestone_celebration_controller.js +177 -0
  11. data/app/assets/javascripts/rails_onboarding/milestone_dashboard_controller.js +132 -0
  12. data/app/assets/javascripts/rails_onboarding/milestone_detail_controller.js +34 -0
  13. data/app/assets/javascripts/rails_onboarding/navigation_controller.js +277 -0
  14. data/app/assets/javascripts/rails_onboarding/onboarding_controller.js +326 -0
  15. data/app/assets/javascripts/rails_onboarding/progress_controller.js +203 -0
  16. data/app/assets/javascripts/rails_onboarding/progressive_disclosure_controller.js +218 -0
  17. data/app/assets/javascripts/rails_onboarding/tooltip_controller.js +1237 -0
  18. data/app/assets/javascripts/rails_onboarding/tooltip_scheduler_controller.js +511 -0
  19. data/app/assets/javascripts/rails_onboarding/tour_controller.js +763 -0
  20. data/app/assets/stylesheets/rails_onboarding/accessibility.css +536 -0
  21. data/app/assets/stylesheets/rails_onboarding/admin.css +816 -0
  22. data/app/assets/stylesheets/rails_onboarding/application.css +1145 -0
  23. data/app/assets/stylesheets/rails_onboarding/flash_messages.css +237 -0
  24. data/app/assets/stylesheets/rails_onboarding/milestones.css +545 -0
  25. data/app/assets/stylesheets/rails_onboarding/mobile.css +856 -0
  26. data/app/assets/stylesheets/rails_onboarding/progressive_disclosure.css +299 -0
  27. data/app/assets/stylesheets/rails_onboarding/tooltips.css +468 -0
  28. data/app/assets/stylesheets/rails_onboarding/tour.css +495 -0
  29. data/app/assets/stylesheets/rails_onboarding/utilities.css +393 -0
  30. data/app/controllers/concerns/rails_onboarding/admin_authorization.rb +98 -0
  31. data/app/controllers/concerns/rails_onboarding/rate_limitable.rb +104 -0
  32. data/app/controllers/rails_onboarding/ab_tests_controller.rb +257 -0
  33. data/app/controllers/rails_onboarding/admin/ab_tests_controller.rb +121 -0
  34. data/app/controllers/rails_onboarding/admin/base_controller.rb +68 -0
  35. data/app/controllers/rails_onboarding/admin/dashboard_controller.rb +189 -0
  36. data/app/controllers/rails_onboarding/admin/flows_controller.rb +175 -0
  37. data/app/controllers/rails_onboarding/admin/users_controller.rb +366 -0
  38. data/app/controllers/rails_onboarding/application_controller.rb +9 -0
  39. data/app/controllers/rails_onboarding/milestones_controller.rb +126 -0
  40. data/app/controllers/rails_onboarding/onboarding_controller.rb +409 -0
  41. data/app/controllers/rails_onboarding/progressive_features_controller.rb +134 -0
  42. data/app/controllers/rails_onboarding/templates_controller.rb +162 -0
  43. data/app/controllers/rails_onboarding/test_sessions_controller.rb +16 -0
  44. data/app/controllers/rails_onboarding/tooltips_controller.rb +92 -0
  45. data/app/helpers/rails_onboarding/application_helper.rb +4 -0
  46. data/app/helpers/rails_onboarding/i18n_helper.rb +137 -0
  47. data/app/helpers/rails_onboarding/personalization_helper.rb +184 -0
  48. data/app/helpers/rails_onboarding/templates_helper.rb +253 -0
  49. data/app/jobs/rails_onboarding/application_job.rb +4 -0
  50. data/app/mailers/rails_onboarding/application_mailer.rb +6 -0
  51. data/app/mailers/rails_onboarding/onboarding_mailer.rb +72 -0
  52. data/app/models/concerns/rails_onboarding/ab_testable.rb +149 -0
  53. data/app/models/concerns/rails_onboarding/onboardable.rb +649 -0
  54. data/app/models/concerns/rails_onboarding/personalizable.rb +211 -0
  55. data/app/models/concerns/rails_onboarding/progressive_disclosure.rb +276 -0
  56. data/app/models/rails_onboarding/analytics.rb +255 -0
  57. data/app/models/rails_onboarding/analytics_event.rb +168 -0
  58. data/app/models/rails_onboarding/application_record.rb +5 -0
  59. data/app/models/rails_onboarding/flow.rb +41 -0
  60. data/app/services/rails_onboarding/milestone_service.rb +105 -0
  61. data/app/views/layouts/rails_onboarding/admin.html.erb +106 -0
  62. data/app/views/layouts/rails_onboarding/application.html.erb +65 -0
  63. data/app/views/rails_onboarding/ab_tests/index.html.erb +209 -0
  64. data/app/views/rails_onboarding/ab_tests/results.html.erb +253 -0
  65. data/app/views/rails_onboarding/admin/ab_tests/_ab_test_card.html.erb +24 -0
  66. data/app/views/rails_onboarding/admin/ab_tests/index.html.erb +57 -0
  67. data/app/views/rails_onboarding/admin/ab_tests/show.html.erb +41 -0
  68. data/app/views/rails_onboarding/admin/dashboard/index.html.erb +224 -0
  69. data/app/views/rails_onboarding/admin/flows/_form.html.erb +147 -0
  70. data/app/views/rails_onboarding/admin/flows/edit.html.erb +7 -0
  71. data/app/views/rails_onboarding/admin/flows/index.html.erb +125 -0
  72. data/app/views/rails_onboarding/admin/flows/new.html.erb +7 -0
  73. data/app/views/rails_onboarding/admin/flows/preview.html.erb +40 -0
  74. data/app/views/rails_onboarding/admin/flows/show.html.erb +114 -0
  75. data/app/views/rails_onboarding/admin/users/index.html.erb +180 -0
  76. data/app/views/rails_onboarding/admin/users/show.html.erb +187 -0
  77. data/app/views/rails_onboarding/milestones/index.html.erb +64 -0
  78. data/app/views/rails_onboarding/milestones/show.html.erb +57 -0
  79. data/app/views/rails_onboarding/onboarding/_custom_footer.html.erb +2 -0
  80. data/app/views/rails_onboarding/onboarding/_progress_indicator.html.erb +56 -0
  81. data/app/views/rails_onboarding/onboarding/_step_navigation.html.erb +44 -0
  82. data/app/views/rails_onboarding/onboarding/step.html.erb +38 -0
  83. data/app/views/rails_onboarding/onboarding/welcome.html.erb +37 -0
  84. data/app/views/rails_onboarding/onboarding_mailer/completion_email.html.erb +109 -0
  85. data/app/views/rails_onboarding/onboarding_mailer/completion_email.text.erb +29 -0
  86. data/app/views/rails_onboarding/onboarding_mailer/reminder_email.html.erb +99 -0
  87. data/app/views/rails_onboarding/onboarding_mailer/reminder_email.text.erb +20 -0
  88. data/app/views/rails_onboarding/onboarding_mailer/step_completed_email.html.erb +105 -0
  89. data/app/views/rails_onboarding/onboarding_mailer/step_completed_email.text.erb +19 -0
  90. data/app/views/rails_onboarding/onboarding_mailer/welcome_email.html.erb +74 -0
  91. data/app/views/rails_onboarding/onboarding_mailer/welcome_email.text.erb +17 -0
  92. data/app/views/rails_onboarding/shared/_flash.html.erb +25 -0
  93. data/app/views/rails_onboarding/shared/_milestone_badge.html.erb +22 -0
  94. data/app/views/rails_onboarding/shared/_milestone_celebration.html.erb +44 -0
  95. data/app/views/rails_onboarding/shared/_onboarding_banner.html.erb +48 -0
  96. data/app/views/rails_onboarding/templates/index.html.erb +255 -0
  97. data/config/importmap.rb +33 -0
  98. data/config/locales/en.yml +62 -0
  99. data/config/locales/es.yml +62 -0
  100. data/config/locales/fr.yml +62 -0
  101. data/config/routes.rb +79 -0
  102. data/lib/generators/rails_onboarding/install_generator.rb +124 -0
  103. data/lib/generators/rails_onboarding/templates/README +120 -0
  104. data/lib/generators/rails_onboarding/templates/add_analytics_to_rails_onboarding.rb +33 -0
  105. data/lib/generators/rails_onboarding/templates/add_milestone_tracking_to_users.rb +38 -0
  106. data/lib/generators/rails_onboarding/templates/add_onboarding_indexes.rb +93 -0
  107. data/lib/generators/rails_onboarding/templates/add_onboarding_to_users.rb +51 -0
  108. data/lib/generators/rails_onboarding/templates/add_robustness_fields_to_users.rb.tt +20 -0
  109. data/lib/generators/rails_onboarding/templates/create_rails_onboarding_flows.rb +18 -0
  110. data/lib/generators/rails_onboarding/templates/onboarding.css +18 -0
  111. data/lib/generators/rails_onboarding/templates/rails_onboarding.rb +75 -0
  112. data/lib/generators/rails_onboarding/update_generator.rb +73 -0
  113. data/lib/rails_onboarding/api_mode.rb +367 -0
  114. data/lib/rails_onboarding/backfill.rb +130 -0
  115. data/lib/rails_onboarding/background_jobs.rb +412 -0
  116. data/lib/rails_onboarding/caching.rb +180 -0
  117. data/lib/rails_onboarding/cdn_support.rb +202 -0
  118. data/lib/rails_onboarding/configuration/ab_testing.rb +24 -0
  119. data/lib/rails_onboarding/configuration/analytics.rb +29 -0
  120. data/lib/rails_onboarding/configuration/integrations.rb +31 -0
  121. data/lib/rails_onboarding/configuration/milestones.rb +92 -0
  122. data/lib/rails_onboarding/configuration/personalization.rb +25 -0
  123. data/lib/rails_onboarding/configuration/progressive_disclosure.rb +41 -0
  124. data/lib/rails_onboarding/configuration/rate_limiting.rb +18 -0
  125. data/lib/rails_onboarding/configuration/steps.rb +121 -0
  126. data/lib/rails_onboarding/configuration/templates.rb +85 -0
  127. data/lib/rails_onboarding/configuration/tooltips.rb +32 -0
  128. data/lib/rails_onboarding/configuration.rb +133 -0
  129. data/lib/rails_onboarding/configuration_errors.rb +19 -0
  130. data/lib/rails_onboarding/configuration_validator.rb +477 -0
  131. data/lib/rails_onboarding/controller_helpers.rb +153 -0
  132. data/lib/rails_onboarding/current.rb +13 -0
  133. data/lib/rails_onboarding/deprecation.rb +64 -0
  134. data/lib/rails_onboarding/devise_integration.rb +122 -0
  135. data/lib/rails_onboarding/engine.rb +245 -0
  136. data/lib/rails_onboarding/error_recovery.rb +173 -0
  137. data/lib/rails_onboarding/lazy_loading.rb +155 -0
  138. data/lib/rails_onboarding/multi_tenant.rb +306 -0
  139. data/lib/rails_onboarding/requirements_validator.rb +315 -0
  140. data/lib/rails_onboarding/responsive_helper.rb +218 -0
  141. data/lib/rails_onboarding/session_manager.rb +187 -0
  142. data/lib/rails_onboarding/skip_logic.rb +159 -0
  143. data/lib/rails_onboarding/turbo_compatibility.rb +229 -0
  144. data/lib/rails_onboarding/version.rb +3 -0
  145. data/lib/rails_onboarding.rb +44 -0
  146. data/lib/tasks/rails_onboarding_analytics.rake +136 -0
  147. data/lib/tasks/rails_onboarding_tasks.rake +162 -0
  148. metadata +303 -0
@@ -0,0 +1,299 @@
1
+ /* Progressive Disclosure Notifications */
2
+
3
+ .progressive-feature-notification {
4
+ position: fixed;
5
+ z-index: 10000;
6
+ background: white;
7
+ border-radius: 8px;
8
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
9
+ padding: 0;
10
+ min-width: 320px;
11
+ max-width: 400px;
12
+ opacity: 0;
13
+ transform: translateY(-20px);
14
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
15
+ }
16
+
17
+ .progressive-feature-notification.onboarding-show {
18
+ opacity: 1;
19
+ transform: translateY(0);
20
+ }
21
+
22
+ .progressive-feature-notification.onboarding-hide {
23
+ opacity: 0;
24
+ transform: translateY(-20px);
25
+ }
26
+
27
+ /* Position variants */
28
+ .progressive-feature-notification.onboarding-top-right {
29
+ top: 20px;
30
+ right: 20px;
31
+ }
32
+
33
+ .progressive-feature-notification.onboarding-top-left {
34
+ top: 20px;
35
+ left: 20px;
36
+ }
37
+
38
+ .progressive-feature-notification.onboarding-bottom-right {
39
+ bottom: 20px;
40
+ right: 20px;
41
+ }
42
+
43
+ .progressive-feature-notification.onboarding-bottom-left {
44
+ bottom: 20px;
45
+ left: 20px;
46
+ }
47
+
48
+ .progressive-feature-notification.onboarding-top-center {
49
+ top: 20px;
50
+ left: 50%;
51
+ transform: translateX(-50%);
52
+ }
53
+
54
+ .progressive-feature-notification.onboarding-top-center.onboarding-show {
55
+ transform: translateX(-50%) translateY(0);
56
+ }
57
+
58
+ .notification-content {
59
+ padding: 1.5rem;
60
+ }
61
+
62
+ .notification-header {
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 0.5rem;
66
+ margin-bottom: 0.75rem;
67
+ }
68
+
69
+ .notification-icon {
70
+ font-size: 1.5rem;
71
+ animation: onboarding-sparkle 2s ease-in-out infinite;
72
+ }
73
+
74
+ @keyframes onboarding-sparkle {
75
+ 0%, 100% {
76
+ transform: scale(1);
77
+ opacity: 1;
78
+ }
79
+ 50% {
80
+ transform: scale(1.2);
81
+ opacity: 0.8;
82
+ }
83
+ }
84
+
85
+ .notification-header h4 {
86
+ flex: 1;
87
+ margin: 0;
88
+ font-size: 1rem;
89
+ font-weight: 600;
90
+ color: #1a1a1a;
91
+ }
92
+
93
+ .notification-close {
94
+ background: none;
95
+ border: none;
96
+ font-size: 1.5rem;
97
+ line-height: 1;
98
+ color: #666;
99
+ cursor: pointer;
100
+ padding: 0;
101
+ width: 24px;
102
+ height: 24px;
103
+ display: flex;
104
+ align-items: center;
105
+ justify-content: center;
106
+ border-radius: 4px;
107
+ transition: all 0.2s;
108
+ }
109
+
110
+ .notification-close:hover {
111
+ background: #f0f0f0;
112
+ color: #000;
113
+ }
114
+
115
+ .notification-content p {
116
+ margin: 0 0 1rem 0;
117
+ font-size: 0.875rem;
118
+ color: #666;
119
+ line-height: 1.5;
120
+ }
121
+
122
+ .notification-actions {
123
+ display: flex;
124
+ gap: 0.5rem;
125
+ }
126
+
127
+ .notification-actions .onboarding-btn {
128
+ flex: 1;
129
+ padding: 0.5rem 1rem;
130
+ border-radius: 4px;
131
+ border: none;
132
+ cursor: pointer;
133
+ font-size: 0.875rem;
134
+ font-weight: 500;
135
+ transition: all 0.2s;
136
+ }
137
+
138
+ .notification-actions .onboarding-btn-primary {
139
+ background: #007bff;
140
+ color: white;
141
+ }
142
+
143
+ .notification-actions .onboarding-btn-primary:hover {
144
+ background: #0056b3;
145
+ }
146
+
147
+ .notification-actions .onboarding-btn-secondary {
148
+ background: #f0f0f0;
149
+ color: #666;
150
+ }
151
+
152
+ .notification-actions .onboarding-btn-secondary:hover {
153
+ background: #e0e0e0;
154
+ color: #333;
155
+ }
156
+
157
+ /* Progressive Features List */
158
+ .progressive-features-list {
159
+ display: grid;
160
+ gap: 1rem;
161
+ }
162
+
163
+ .progressive-feature-card {
164
+ background: white;
165
+ border: 1px solid #e0e0e0;
166
+ border-radius: 8px;
167
+ padding: 1.5rem;
168
+ transition: all 0.2s;
169
+ }
170
+
171
+ .progressive-feature-card.onboarding-revealed {
172
+ border-color: #28a745;
173
+ background: #f8fff9;
174
+ }
175
+
176
+ .progressive-feature-card.onboarding-ready {
177
+ border-color: #007bff;
178
+ background: #f0f8ff;
179
+ }
180
+
181
+ .progressive-feature-card:hover {
182
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
183
+ }
184
+
185
+ .feature-status-badge {
186
+ display: inline-block;
187
+ padding: 0.25rem 0.75rem;
188
+ border-radius: 12px;
189
+ font-size: 0.75rem;
190
+ font-weight: 600;
191
+ text-transform: uppercase;
192
+ letter-spacing: 0.5px;
193
+ }
194
+
195
+ .feature-status-badge.onboarding-revealed {
196
+ background: #d4edda;
197
+ color: #155724;
198
+ }
199
+
200
+ .feature-status-badge.onboarding-ready {
201
+ background: #d1ecf1;
202
+ color: #0c5460;
203
+ }
204
+
205
+ .feature-status-badge.onboarding-locked {
206
+ background: #f8d7da;
207
+ color: #721c24;
208
+ }
209
+
210
+ .feature-reveal-info {
211
+ margin-top: 0.5rem;
212
+ padding: 0.75rem;
213
+ background: #f8f9fa;
214
+ border-radius: 4px;
215
+ font-size: 0.875rem;
216
+ color: #666;
217
+ }
218
+
219
+ /* Mobile responsiveness */
220
+ @media (max-width: 480px) {
221
+ .progressive-feature-notification {
222
+ min-width: auto;
223
+ max-width: calc(100vw - 40px);
224
+ left: 20px !important;
225
+ right: 20px !important;
226
+ transform: none;
227
+ }
228
+
229
+ .progressive-feature-notification.onboarding-top-center {
230
+ transform: none;
231
+ }
232
+
233
+ .progressive-feature-notification.onboarding-show {
234
+ transform: none;
235
+ }
236
+
237
+ .notification-actions {
238
+ flex-direction: column;
239
+ }
240
+
241
+ .notification-actions .onboarding-btn {
242
+ width: 100%;
243
+ }
244
+ }
245
+
246
+ /* Dark mode support */
247
+ @media (prefers-color-scheme: dark) {
248
+ .progressive-feature-notification {
249
+ background: #2a2a2a;
250
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.5);
251
+ }
252
+
253
+ .notification-header h4 {
254
+ color: #f0f0f0;
255
+ }
256
+
257
+ .notification-content p {
258
+ color: #b0b0b0;
259
+ }
260
+
261
+ .notification-close {
262
+ color: #b0b0b0;
263
+ }
264
+
265
+ .notification-close:hover {
266
+ background: #3a3a3a;
267
+ color: #f0f0f0;
268
+ }
269
+
270
+ .notification-actions .onboarding-btn-secondary {
271
+ background: #3a3a3a;
272
+ color: #b0b0b0;
273
+ }
274
+
275
+ .notification-actions .onboarding-btn-secondary:hover {
276
+ background: #4a4a4a;
277
+ color: #f0f0f0;
278
+ }
279
+
280
+ .progressive-feature-card {
281
+ background: #2a2a2a;
282
+ border-color: #3a3a3a;
283
+ }
284
+
285
+ .progressive-feature-card.onboarding-revealed {
286
+ border-color: #28a745;
287
+ background: #1a2a1f;
288
+ }
289
+
290
+ .progressive-feature-card.onboarding-ready {
291
+ border-color: #007bff;
292
+ background: #1a2a3a;
293
+ }
294
+
295
+ .feature-reveal-info {
296
+ background: #3a3a3a;
297
+ color: #b0b0b0;
298
+ }
299
+ }