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,237 @@
1
+ /* Flash Messages and Error Handling Styles */
2
+
3
+ .flash-container {
4
+ position: fixed;
5
+ top: 20px;
6
+ right: 20px;
7
+ z-index: 9999;
8
+ max-width: 500px;
9
+ width: 100%;
10
+ pointer-events: none;
11
+ }
12
+
13
+ .onboarding-flash {
14
+ display: flex;
15
+ align-items: center;
16
+ gap: 12px;
17
+ padding: 16px 20px;
18
+ margin-bottom: 12px;
19
+ border-radius: 8px;
20
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
21
+ pointer-events: auto;
22
+ animation: onboarding-slideInRight 0.3s ease-out;
23
+ position: relative;
24
+ transition: all 0.3s ease;
25
+ }
26
+
27
+ .onboarding-flash:hover {
28
+ transform: translateX(-4px);
29
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.2);
30
+ }
31
+
32
+ /* Flash types */
33
+ .flash-notice,
34
+ .flash-success {
35
+ background-color: #10b981;
36
+ color: white;
37
+ border-left: 4px solid #059669;
38
+ }
39
+
40
+ .flash-alert,
41
+ .flash-warning {
42
+ background-color: #f59e0b;
43
+ color: white;
44
+ border-left: 4px solid #d97706;
45
+ }
46
+
47
+ .flash-error {
48
+ background-color: #ef4444;
49
+ color: white;
50
+ border-left: 4px solid #dc2626;
51
+ }
52
+
53
+ .flash-info {
54
+ background-color: #3b82f6;
55
+ color: white;
56
+ border-left: 4px solid #2563eb;
57
+ }
58
+
59
+ /* Milestone celebration flash */
60
+ .milestone-celebration {
61
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
62
+ border-left: 4px solid #5a67d8;
63
+ animation: onboarding-celebrationPulse 0.5s ease-out, onboarding-slideInRight 0.3s ease-out;
64
+ }
65
+
66
+ /* Flash icon */
67
+ .flash-icon {
68
+ font-size: 20px;
69
+ line-height: 1;
70
+ flex-shrink: 0;
71
+ }
72
+
73
+ /* Flash message */
74
+ .flash-message {
75
+ flex: 1;
76
+ font-size: 14px;
77
+ line-height: 1.5;
78
+ font-weight: 500;
79
+ }
80
+
81
+ /* Flash close button */
82
+ .flash-close {
83
+ background: transparent;
84
+ border: none;
85
+ color: currentColor;
86
+ font-size: 24px;
87
+ line-height: 1;
88
+ cursor: pointer;
89
+ padding: 0;
90
+ width: 24px;
91
+ height: 24px;
92
+ display: flex;
93
+ align-items: center;
94
+ justify-content: center;
95
+ border-radius: 4px;
96
+ transition: background-color 0.2s ease;
97
+ flex-shrink: 0;
98
+ opacity: 0.8;
99
+ }
100
+
101
+ .flash-close:hover {
102
+ opacity: 1;
103
+ background-color: rgba(0, 0, 0, 0.1);
104
+ }
105
+
106
+ .flash-close:focus {
107
+ outline: 2px solid rgba(255, 255, 255, 0.5);
108
+ outline-offset: 2px;
109
+ }
110
+
111
+ /* Animations */
112
+ @keyframes onboarding-slideInRight {
113
+ from {
114
+ transform: translateX(100%);
115
+ opacity: 0;
116
+ }
117
+ to {
118
+ transform: translateX(0);
119
+ opacity: 1;
120
+ }
121
+ }
122
+
123
+ @keyframes onboarding-celebrationPulse {
124
+ 0%, 100% {
125
+ transform: scale(1);
126
+ }
127
+ 50% {
128
+ transform: scale(1.05);
129
+ }
130
+ }
131
+
132
+ @keyframes onboarding-fadeOut {
133
+ from {
134
+ opacity: 1;
135
+ transform: translateX(0);
136
+ }
137
+ to {
138
+ opacity: 0;
139
+ transform: translateX(100%);
140
+ }
141
+ }
142
+
143
+ /* Auto-dismiss animation */
144
+ .onboarding-flash.flash-dismissing {
145
+ animation: onboarding-fadeOut 0.3s ease-out forwards;
146
+ }
147
+
148
+ /* Mobile responsive */
149
+ @media (max-width: 768px) {
150
+ .flash-container {
151
+ top: 10px;
152
+ right: 10px;
153
+ left: 10px;
154
+ max-width: none;
155
+ }
156
+
157
+ .onboarding-flash {
158
+ padding: 12px 16px;
159
+ font-size: 13px;
160
+ }
161
+
162
+ .flash-icon {
163
+ font-size: 18px;
164
+ }
165
+
166
+ .flash-close {
167
+ width: 20px;
168
+ height: 20px;
169
+ font-size: 20px;
170
+ }
171
+ }
172
+
173
+ /* Dark mode support */
174
+ @media (prefers-color-scheme: dark) {
175
+ .onboarding-flash {
176
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
177
+ }
178
+
179
+ .onboarding-flash:hover {
180
+ box-shadow: 0 6px 16px rgba(0, 0, 0, 0.5);
181
+ }
182
+ }
183
+
184
+ /* Accessibility */
185
+ .onboarding-flash[role="alert"] {
186
+ /* Ensure screen readers announce the message */
187
+ }
188
+
189
+ @media (prefers-reduced-motion: reduce) {
190
+ .onboarding-flash,
191
+ .flash-close {
192
+ animation: none;
193
+ transition: none;
194
+ }
195
+ }
196
+
197
+ /* Error inline display (for form errors) */
198
+ .inline-error {
199
+ color: #ef4444;
200
+ font-size: 13px;
201
+ margin-top: 4px;
202
+ display: flex;
203
+ align-items: center;
204
+ gap: 6px;
205
+ }
206
+
207
+ .inline-error::before {
208
+ content: "⚠";
209
+ font-size: 14px;
210
+ }
211
+
212
+ /* Loading state for Turbo transitions */
213
+ .turbo-loading {
214
+ position: relative;
215
+ pointer-events: none;
216
+ opacity: 0.6;
217
+ }
218
+
219
+ .turbo-loading::after {
220
+ content: "";
221
+ position: absolute;
222
+ top: 50%;
223
+ left: 50%;
224
+ transform: translate(-50%, -50%);
225
+ width: 40px;
226
+ height: 40px;
227
+ border: 3px solid rgba(0, 0, 0, 0.1);
228
+ border-top-color: #3b82f6;
229
+ border-radius: 50%;
230
+ animation: onboarding-flash-spin 0.8s linear infinite;
231
+ }
232
+
233
+ @keyframes onboarding-flash-spin {
234
+ to {
235
+ transform: translate(-50%, -50%) rotate(360deg);
236
+ }
237
+ }