tailwind_views_generator 0.0.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 (118) hide show
  1. checksums.yaml +7 -0
  2. data/.fasterer.yml +23 -0
  3. data/.gitignore +11 -0
  4. data/.rubocop.yml +34 -0
  5. data/.simplecov +9 -0
  6. data/.tool-versions +1 -0
  7. data/.yardopts +12 -0
  8. data/CHANGELOG.md +10 -0
  9. data/CODE_OF_CONDUCT.md +22 -0
  10. data/Gemfile +13 -0
  11. data/Gemfile.lock +98 -0
  12. data/LICENSE.txt +21 -0
  13. data/README.md +121 -0
  14. data/Rakefile +16 -0
  15. data/bin/console +15 -0
  16. data/bin/setup +8 -0
  17. data/lib/generators/tailwind_views/devise_generator.rb +52 -0
  18. data/lib/generators/tailwind_views/install_generator.rb +134 -0
  19. data/lib/tailwind_views_generator.rb +10 -0
  20. data/lib/tailwind_views_generator/helpers.rb +15 -0
  21. data/lib/tailwind_views_generator/version.rb +6 -0
  22. data/lib/templates/.DS_Store +0 -0
  23. data/lib/templates/devise/.DS_Store +0 -0
  24. data/lib/templates/devise/erb/confirmations/new.html.erb.tt +25 -0
  25. data/lib/templates/devise/erb/mailer/confirmation_instructions.html.erb +5 -0
  26. data/lib/templates/devise/erb/mailer/email_changed.html.erb +7 -0
  27. data/lib/templates/devise/erb/mailer/password_change.html.erb +3 -0
  28. data/lib/templates/devise/erb/mailer/reset_password_instructions.html.erb +8 -0
  29. data/lib/templates/devise/erb/mailer/unlock_instructions.html.erb +7 -0
  30. data/lib/templates/devise/erb/passwords/edit.html.erb.tt +33 -0
  31. data/lib/templates/devise/erb/passwords/new.html.erb.tt +23 -0
  32. data/lib/templates/devise/erb/registrations/edit.html.erb.tt +53 -0
  33. data/lib/templates/devise/erb/registrations/new.html.erb.tt +37 -0
  34. data/lib/templates/devise/erb/sessions/new.html.erb.tt +36 -0
  35. data/lib/templates/devise/erb/shared/_error_messages.html.erb +15 -0
  36. data/lib/templates/devise/erb/shared/_links.html.erb +28 -0
  37. data/lib/templates/devise/erb/unlocks/new.html.erb.tt +24 -0
  38. data/lib/templates/devise/haml/confirmations/new.html.haml.tt +15 -0
  39. data/lib/templates/devise/haml/mailer/confirmation_instructions.html.haml +3 -0
  40. data/lib/templates/devise/haml/mailer/email_changed.html.haml +7 -0
  41. data/lib/templates/devise/haml/mailer/password_change.html.haml +2 -0
  42. data/lib/templates/devise/haml/mailer/reset_password_instructions.html.haml +5 -0
  43. data/lib/templates/devise/haml/mailer/unlock_instructions.html.haml +4 -0
  44. data/lib/templates/devise/haml/passwords/edit.html.haml.tt +23 -0
  45. data/lib/templates/devise/haml/passwords/new.html.haml.tt +15 -0
  46. data/lib/templates/devise/haml/registrations/edit.html.haml.tt +42 -0
  47. data/lib/templates/devise/haml/registrations/new.html.haml.tt +27 -0
  48. data/lib/templates/devise/haml/sessions/new.html.haml.tt +25 -0
  49. data/lib/templates/devise/haml/shared/_error_messages.html.haml +6 -0
  50. data/lib/templates/devise/haml/shared/_links.html.haml +20 -0
  51. data/lib/templates/devise/haml/unlocks/new.html.haml.tt +16 -0
  52. data/lib/templates/devise/simple_form/erb/confirmations/new.html.erb.tt +18 -0
  53. data/lib/templates/devise/simple_form/erb/passwords/edit.html.erb.tt +20 -0
  54. data/lib/templates/devise/simple_form/erb/passwords/new.html.erb.tt +17 -0
  55. data/lib/templates/devise/simple_form/erb/registrations/edit.html.erb.tt +27 -0
  56. data/lib/templates/devise/simple_form/erb/registrations/new.html.erb.tt +19 -0
  57. data/lib/templates/devise/simple_form/erb/sessions/new.html.erb.tt +18 -0
  58. data/lib/templates/devise/simple_form/erb/unlocks/new.html.erb.tt +17 -0
  59. data/lib/templates/devise/simple_form/haml/confirmations/new.html.haml.tt +13 -0
  60. data/lib/templates/devise/simple_form/haml/passwords/edit.html.haml.tt +15 -0
  61. data/lib/templates/devise/simple_form/haml/passwords/new.html.haml.tt +12 -0
  62. data/lib/templates/devise/simple_form/haml/registrations/edit.html.haml.tt +21 -0
  63. data/lib/templates/devise/simple_form/haml/registrations/new.html.haml.tt +14 -0
  64. data/lib/templates/devise/simple_form/haml/sessions/new.html.haml.tt +13 -0
  65. data/lib/templates/devise/simple_form/haml/unlocks/new.html.haml.tt +12 -0
  66. data/lib/templates/devise/simple_form/slim/confirmations/new.html.slim.tt +13 -0
  67. data/lib/templates/devise/simple_form/slim/passwords/edit.html.slim.tt +15 -0
  68. data/lib/templates/devise/simple_form/slim/passwords/new.html.slim.tt +12 -0
  69. data/lib/templates/devise/simple_form/slim/registrations/edit.html.slim.tt +21 -0
  70. data/lib/templates/devise/simple_form/slim/registrations/new.html.slim.tt +14 -0
  71. data/lib/templates/devise/simple_form/slim/sessions/new.html.slim.tt +13 -0
  72. data/lib/templates/devise/simple_form/slim/unlocks/new.html.slim.tt +12 -0
  73. data/lib/templates/devise/slim/confirmations/new.html.slim.tt +16 -0
  74. data/lib/templates/devise/slim/mailer/confirmation_instructions.html.slim +3 -0
  75. data/lib/templates/devise/slim/mailer/email_changed.html.slim +5 -0
  76. data/lib/templates/devise/slim/mailer/password_change.html.slim +2 -0
  77. data/lib/templates/devise/slim/mailer/reset_password_instructions.html.slim +5 -0
  78. data/lib/templates/devise/slim/mailer/unlock_instructions.html.slim +4 -0
  79. data/lib/templates/devise/slim/passwords/edit.html.slim.tt +24 -0
  80. data/lib/templates/devise/slim/passwords/new.html.slim.tt +16 -0
  81. data/lib/templates/devise/slim/registrations/edit.html.slim.tt +43 -0
  82. data/lib/templates/devise/slim/registrations/new.html.slim.tt +28 -0
  83. data/lib/templates/devise/slim/sessions/new.html.slim.tt +26 -0
  84. data/lib/templates/devise/slim/shared/_error_messages.html.slim +6 -0
  85. data/lib/templates/devise/slim/shared/_links.html.slim +20 -0
  86. data/lib/templates/devise/slim/unlocks/new.html.slim.tt +17 -0
  87. data/lib/templates/layouts/application.html.erb.tt +36 -0
  88. data/lib/templates/layouts/application.html.haml.tt +32 -0
  89. data/lib/templates/layouts/application.html.slim.tt +31 -0
  90. data/lib/templates/scaffolds/erb/_form.html.erb +22 -0
  91. data/lib/templates/scaffolds/erb/edit.html.erb.tt +13 -0
  92. data/lib/templates/scaffolds/erb/index.html.erb.tt +38 -0
  93. data/lib/templates/scaffolds/erb/new.html.erb.tt +14 -0
  94. data/lib/templates/scaffolds/erb/show.html.erb.tt +20 -0
  95. data/lib/templates/scaffolds/haml/_form.html.haml +17 -0
  96. data/lib/templates/scaffolds/haml/edit.html.haml.tt +13 -0
  97. data/lib/templates/scaffolds/haml/index.html.haml.tt +29 -0
  98. data/lib/templates/scaffolds/haml/new.html.haml.tt +10 -0
  99. data/lib/templates/scaffolds/haml/show.html.haml.tt +18 -0
  100. data/lib/templates/scaffolds/simple_form/_form.html.erb +9 -0
  101. data/lib/templates/scaffolds/simple_form/_form.html.haml +9 -0
  102. data/lib/templates/scaffolds/simple_form/_form.html.slim +9 -0
  103. data/lib/templates/scaffolds/slim/_form.html.slim +17 -0
  104. data/lib/templates/scaffolds/slim/edit.html.slim.tt +13 -0
  105. data/lib/templates/scaffolds/slim/index.html.slim.tt +29 -0
  106. data/lib/templates/scaffolds/slim/new.html.slim.tt +11 -0
  107. data/lib/templates/scaffolds/slim/show.html.slim.tt +18 -0
  108. data/lib/templates/shared/footer/_footer.html.erb.tt +5 -0
  109. data/lib/templates/shared/footer/_footer.html.haml.tt +3 -0
  110. data/lib/templates/shared/footer/_footer.html.slim.tt +3 -0
  111. data/lib/templates/shared/navigation/_navigation.html.erb.tt +32 -0
  112. data/lib/templates/shared/navigation/_navigation.html.haml.tt +23 -0
  113. data/lib/templates/shared/navigation/_navigation.html.slim.tt +23 -0
  114. data/lib/templates/shared/pagination/_pagination.html.erb +5 -0
  115. data/lib/templates/shared/pagination/_pagination.html.haml +3 -0
  116. data/lib/templates/shared/pagination/_pagination.html.slim +3 -0
  117. data/tailwind_views_generator.gemspec +38 -0
  118. metadata +223 -0
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+
5
+ module TailwindViews
6
+ module Generators
7
+ # Generator to run to add devise templates to the application
8
+ class DeviseGenerator < ::Rails::Generators::Base
9
+ include TailwindViewsGenerator::Helpers
10
+ hide!
11
+ desc 'Overwrite default devise views'
12
+ source_root ::File.expand_path('../../templates/devise', __dir__)
13
+
14
+ class_option :template_engine, type: :string, default: 'erb', aliases: '-t', enum: %w[erb slim haml],
15
+ desc: 'Set template engine to generate the views with'
16
+
17
+ class_option :metatags, type: :boolean, default: false, aliases: '-m',
18
+ desc: 'If views will assign pages title using metatags gem'
19
+
20
+ class_option :simpleform, type: :boolean, default: false, aliases: '-sf',
21
+ desc: 'Enable SimpleForms for the form generating'
22
+
23
+ def install
24
+ template "#{file_template_location('confirmations/new')}.tt", "app/views/devise/confirmations/new.html.#{options[:template_engine]}", force: true
25
+ directory "#{options[:template_engine]}/mailer", 'app/views/devise/mailer', force: true
26
+
27
+ %i[edit new].map do |file|
28
+ template "#{file_template_location("passwords/#{file}")}.tt", "app/views/devise/passwords/#{file}.html.#{options[:template_engine]}", force: true
29
+ template "#{file_template_location("registrations/#{file}")}.tt", "app/views/devise/registrations/#{file}.html.#{options[:template_engine]}", force: true
30
+ end
31
+ template "#{file_template_location('sessions/new')}.tt", "app/views/devise/sessions/new.html.#{options[:template_engine]}", force: true
32
+ template "#{file_template_location('unlocks/new')}.tt", "app/views/devise/unlocks/new.html.#{options[:template_engine]}", force: true
33
+ directory "#{options[:template_engine]}/shared", 'app/views/devise/shared', force: true
34
+ end
35
+
36
+ private
37
+
38
+ def file_template_location(file_location = '')
39
+ return '' if file_location.blank?
40
+
41
+ # Depending if simpleform is to be used, it will return a path similar to one of the following:
42
+ # => slim/unlocks/new.html.slim || simple_form/slim/unlocks/new.html.slim
43
+ "#{simple_path}#{options[:template_engine]}/#{file_location}.html.#{options[:template_engine]}"
44
+ end
45
+
46
+ # If simpleform is going ot be used with the forms return a simple_form path
47
+ def simple_path
48
+ options[:simpleform] ? 'simple_form/' : ''
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/generators'
4
+ require_relative 'devise_generator'
5
+ require_relative '../../tailwind_views_generator/helpers'
6
+
7
+ module TailwindViews
8
+ module Generators
9
+ # Generate scaffolds and views for tailwind
10
+ class InstallGenerator < ::Rails::Generators::Base
11
+ include TailwindViewsGenerator::Helpers
12
+ desc 'Override default view scaffolding with Tailwind based scaffolds'
13
+ source_root ::File.expand_path('../../templates', __dir__)
14
+ class_option :template_engine, type: :string, default: 'erb', aliases: '-t', enum: %w[erb slim haml],
15
+ desc: 'The template_engine to use for generating the applications views (Erb, Slim, HAML)'
16
+
17
+ # Boolean flags that can be flagged by adding to the generator call ie: --pagination or --metag_tags
18
+ class_option :devise, type: :boolean, default: false,
19
+ desc: 'If views for devise will be required by the generator'
20
+
21
+ class_option :layout, type: :boolean, default: false, aliases: '-l',
22
+ desc: 'Over-write your application layout file with a bootstrap based layout'
23
+
24
+ class_option :metatags, type: :boolean, default: false, aliases: '-m',
25
+ desc: 'If views will assign pages title using metatags gem'
26
+
27
+ class_option :pagination, type: :boolean, default: false, aliases: '-p',
28
+ desc: 'Toggle if pagination will be used with the index view/controller (based off of Pagy)'
29
+
30
+ class_option :simpleform, type: :boolean, default: false, aliases: '-sf',
31
+ desc: 'Enable SimpleForms for the form generating'
32
+
33
+ class_option :skip_javascript, type: :boolean, default: false,
34
+ desc: 'Skip adding javascript_include_tag or javascript_pack_tag to the layouts'
35
+
36
+ class_option :skip_turbolinks, type: :boolean, default: false,
37
+ desc: 'Skip associating assets and views with turbolinks'
38
+
39
+ def copy_scaffold_views
40
+ %w[edit index show new].each do |file|
41
+ template("scaffolds/#{options[:template_engine]}/#{file}.html.#{options[:template_engine]}",
42
+ "lib/templates/#{options[:template_engine]}/scaffold/#{file}.html.#{options[:template_engine]}",
43
+ force: true)
44
+ end
45
+ end
46
+
47
+ def copy_form
48
+ if options[:simpleform]
49
+ copy_file("scaffolds/simple_form/_form.html.#{options[:template_engine]}",
50
+ "lib/templates/#{options[:template_engine]}/scaffold/_form.html.#{options[:template_engine]}", force: true)
51
+ else
52
+ copy_file("scaffolds/#{options[:template_engine]}/_form.html.#{options[:template_engine]}",
53
+ "lib/templates/#{options[:template_engine]}/scaffold/_form.html.#{options[:template_engine]}", force: true)
54
+ end
55
+ end
56
+
57
+ def copy_layout_views
58
+ return unless options[:layout]
59
+
60
+ template("layouts/application.html.#{options[:template_engine]}.tt",
61
+ "app/views/layouts/application.html.#{options[:template_engine]}", force: true)
62
+ end
63
+
64
+ def copy_shared_views
65
+ %w[footer navigation].each do |template_file|
66
+ template("shared/#{template_file}/_#{template_file}.html.#{options[:template_engine]}.tt",
67
+ "app/views/shared/_#{template_file}.html.#{options[:template_engine]}", force: true)
68
+ end
69
+ end
70
+
71
+ def copy_pagination_view
72
+ return unless options[:pagination]
73
+
74
+ copy_file("shared/pagination/_pagination.html.#{options[:template_engine]}",
75
+ "app/views/shared/_pagination.html.#{options[:template_engine]}", force: true)
76
+ end
77
+
78
+ def inject_application_helpers
79
+ pagy_helper = (options[:pagination] ? 'include Pagy::Frontend' : '')
80
+ helper_str = <<~HELPER
81
+ #{pagy_helper}
82
+
83
+ FLASH_TYPE_HASH = { success: 'green', error: 'yellow', alert: 'red', notice: 'indigo' }.freeze
84
+
85
+ def alert_color(flash_type)
86
+ (FLASH_TYPE_HASH[flash_type.to_sym] || flash_type.to_s)
87
+ end
88
+
89
+ def flash_messages(_opts = [])
90
+ return '' unless flash.any?
91
+
92
+ # remove any blank devise timeout errors
93
+ flash.delete(:timedout)
94
+ flash.each do |msg_type, message|
95
+ # You don't need to create an empty alert message
96
+ next if message.blank? || message.to_s.length.zero?
97
+
98
+ concat(tag.div(class: "bg-\#{alert_color(msg_type)}-50 p-5 lg:w-full rounded border-l-4 border-\#{alert_color(msg_type)}-400 mb-5", role: 'alert') do
99
+ concat(tag.p(message, class: "text-sm text-\#{alert_color(msg_type)}-500"))
100
+ end)
101
+ end
102
+ nil
103
+ end
104
+
105
+ # for outputting an objects error messages
106
+ def errors_for(object)
107
+ return '' unless object.errors.any?
108
+
109
+ content_tag(:div, class: 'text-sm bg-red-50 rounded p-5 mb-5') do
110
+ concat(content_tag(:div, class: 'text-red-600 font-medium') do
111
+ concat "\#{pluralize(object.errors.count, 'error')} prohibited this \#{object.class.name.downcase} from being saved:"
112
+ end)
113
+ concat(content_tag(:ul, class: 'px-0 text-red-500 italic font-sm') do
114
+ object.errors.full_messages.each do |msg|
115
+ concat content_tag(:li, msg, class: 'list-disc px-0 py-1 mx-4')
116
+ end
117
+ end)
118
+ end
119
+ end
120
+ HELPER
121
+
122
+ inject_into_file('app/helpers/application_helper.rb',
123
+ optimize_indentation(helper_str, 2),
124
+ after: "module ApplicationHelper\n",
125
+ force: true)
126
+ end
127
+
128
+ def invoke_devise_generator
129
+ # Generate tailwind based devise views if devise is being used
130
+ invoke('tailwind_views:devise') if options[:devise]
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'tailwind_views_generator/version'
4
+ require 'rails'
5
+ require_relative 'tailwind_views_generator/helpers'
6
+
7
+ module TailwindViewsGenerator
8
+ class Error < StandardError; end
9
+ # Your code goes here...
10
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TailwindViewsGenerator
4
+ module Helpers
5
+ # Return a cleaned up version of the name of the application being generated
6
+ # @return [String]
7
+ def app_name
8
+ @app_name ||= if Rails.version.to_f >= 6.0
9
+ Rails.app_class.module_parent_name.demodulize.titleize
10
+ else
11
+ Rails.application.class.parent.to_s.titleize
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module TailwindViewsGenerator
4
+ MIN_RUBY_VERSION = '2.4.0'
5
+ VERSION = '0.0.1'
6
+ end
Binary file
Binary file
@@ -0,0 +1,25 @@
1
+ <div class="md:mx-auto md:max-w-md overflow-hidden mx-0">
2
+ <div class="shadow-md rounded px-8 pt-6 pb-8 mb-4 flex flex-col justify-center bg-gray-50">
3
+ <h2 class="text-center text-xl text-black">
4
+ <%- if options[:metatags] -%>
5
+ <%%%= title('Resend confirmation instructions') %>
6
+ <%- else -%>
7
+ Resend confirmation instructions
8
+ <%- end -%>
9
+ </h2>
10
+
11
+ <%%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { method: :post }) do |f| %>
12
+ <%%= render 'devise/shared/error_messages', resource: resource %>
13
+
14
+ <div class="mb-4">
15
+ <%%= f.label :email, class: 'text-sm font-medium text-gray-600' %>
16
+ <%%= f.email_field :email, autofocus: true, autocomplete: "email", value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email), class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out' %>
17
+ </div>
18
+ <%%= f.submit "Resend confirmation instructions" %>
19
+
20
+ <%%= f.submit "Resend confirmation instructions" class: 'my-2 bg-blue-500 hover:bg-blue-700 text-white font-bold text-sm py-2 px-4 rounded w-full' %>
21
+ <%% end %>
22
+
23
+ <%%= render 'devise/shared/links' %>
24
+ </div>
25
+ </div>
@@ -0,0 +1,5 @@
1
+ <p>Welcome <%= @email %>!</p>
2
+
3
+ <p>You can confirm your account email through the link below:</p>
4
+
5
+ <p><%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %></p>
@@ -0,0 +1,7 @@
1
+ <p>Hello <%= @email %>!</p>
2
+
3
+ <% if @resource.try(:unconfirmed_email?) %>
4
+ <p>We're contacting you to notify you that your email is being changed to <%= @resource.unconfirmed_email %>.</p>
5
+ <% else %>
6
+ <p>We're contacting you to notify you that your email has been changed to <%= @resource.email %>.</p>
7
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>We're contacting you to notify you that your password has been changed.</p>
@@ -0,0 +1,8 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>Someone has requested a link to change your password. You can do this through the link below.</p>
4
+
5
+ <p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>
6
+
7
+ <p>If you didn't request this, please ignore this email.</p>
8
+ <p>Your password won't change until you access the link above and create a new one.</p>
@@ -0,0 +1,7 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>Your account has been locked due to an excessive number of unsuccessful sign in attempts.</p>
4
+
5
+ <p>Click the link below to unlock your account:</p>
6
+
7
+ <p><%= link_to 'Unlock my account', unlock_url(@resource, unlock_token: @token) %></p>
@@ -0,0 +1,33 @@
1
+ <div class="md:mx-auto md:max-w-md overflow-hidden mx-0">
2
+ <div class=" shadow-md rounded px-8 pt-6 pb-8 mb-4 flex flex-col justify-center bg-gray-50">
3
+ <h2 class="text-center text-xl text-black">
4
+ <%- if options[:metatags] -%>
5
+ <%%= title('Change your password') %>
6
+ <%- else -%>
7
+ Change your password
8
+ <%- end -%>
9
+ </h2>
10
+
11
+ <%%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
12
+ <%%= render 'devise/shared/error_messages', resource: resource %>
13
+ <%%= f.hidden_field :reset_password_token %>
14
+
15
+ <div class="mb-4">
16
+ <%%= f.label :password, "New password", class: 'text-sm font-medium text-gray-600' %>
17
+ <%% if @minimum_password_length %>
18
+ <em>(<%%= @minimum_password_length %> characters minimum)</em><br />
19
+ <%% end %>
20
+ <%%= f.password_field :password, autofocus: true, autocomplete: "new-password", class: 'text-sm font-medium text-gray-600' %>
21
+ </div>
22
+
23
+ <div class="mb-4">
24
+ <%%= f.label :password_confirmation, "Confirm new password", class: 'text-sm font-medium text-gray-600' %>
25
+ <%%= f.password_field :password_confirmation, autocomplete: "new-password", class: 'text-sm font-medium text-gray-600' %>
26
+ </div>
27
+
28
+ <%%= f.submit "Change my password" class: 'my-2 bg-blue-500 hover:bg-blue-700 text-white font-bold text-sm py-2 px-4 rounded w-full' %>
29
+ <%% end %>
30
+
31
+ <%%= render 'devise/shared/links' %>
32
+ </div>
33
+ </div>
@@ -0,0 +1,23 @@
1
+ <div class="md:mx-auto md:max-w-md overflow-hidden mx-0">
2
+ <div class=" shadow-md rounded px-8 pt-6 pb-8 mb-4 flex flex-col justify-center bg-gray-50">
3
+ <h2 class="text-center text-xl text-black">
4
+ <%- if options[:metatags] -%>
5
+ <%%= title('Forgot your password?') %>
6
+ <%- else -%>
7
+ Forget your password?
8
+ <%- end -%>
9
+ </h2>
10
+
11
+ <%%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :post }) do |f| %>
12
+ <%%= render 'devise/shared/error_messages', resource: resource %>
13
+ <div class="mb-4">
14
+ <%%= f.label :email, class: 'block email optional text-sm font-medium text-gray-600' %>
15
+ <%%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out string' %>
16
+ </div>
17
+
18
+ <%%= f.submit 'Send me reset password instructions', class: 'my-2 bg-blue-500 hover:bg-blue-700 text-white font-bold text-sm py-2 px-4 rounded w-full' %>
19
+ <%% end %>
20
+
21
+ <%%= render 'devise/shared/links' %>
22
+ </div>
23
+ </div>
@@ -0,0 +1,53 @@
1
+ <div class="md:mx-auto md:max-w-md overflow-hidden mx-0">
2
+ <div class=" shadow-md rounded px-8 pt-6 pb-8 mb-4 flex flex-col justify-center bg-gray-50">
3
+ <h2 class="text-center text-xl text-black">
4
+ <%- if options[:metatags] -%>
5
+ <%%= title("Edit #{resource_name.to_s.humanize}") %>
6
+ <%- else -%>
7
+ Edit <%%= resource_name.to_s.humanize %>
8
+ <%- end -%>
9
+ </h2>
10
+ <hr class="my-5">
11
+
12
+ <%%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
13
+ <%%= render 'devise/shared/error_messages', resource: resource %>
14
+
15
+ <div class="mb-4">
16
+ <%%= f.label :email, class: 'block email text-sm font-medium text-gray-600' %>
17
+ <%%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out string' %>
18
+ </div>
19
+
20
+ <%% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
21
+ <div>Currently waiting confirmation for: <%%= resource.unconfirmed_email %></div>
22
+ <%% end %>
23
+
24
+ <div class="mb-4">
25
+ <%%= f.label :password, class: 'block password text-sm font-medium text-gray-600' %>
26
+ <%%= f.password_field :password, autocomplete: 'new-password', class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out string' %>
27
+ <p class="mt-2 text-grey-700 text-xs italic">Leave it blank if you don't want to change it</p>
28
+ <%% if @minimum_password_length %>
29
+ <br />
30
+ <em><%%= @minimum_password_length %> characters minimum</em>
31
+ <%% end %>
32
+ </div>
33
+
34
+ <div class="mb-4">
35
+ <%%= f.label :password_confirmation, class: 'block password text-sm font-medium text-gray-600' %>
36
+ <%%= f.password_field :password_confirmation, autocomplete: 'new-password', class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out string' %>
37
+ </div>
38
+
39
+ <div class="mb-4">
40
+ <%%= f.label :current_password, class: 'block password text-sm font-medium text-gray-600' %>
41
+ <%%= f.password_field :current_password, autocomplete: 'current-password', class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out string' %>
42
+ <p class="mt-2 text-grey-700 text-xs italic">We need your current password to confirm your changes</p>
43
+ </div>
44
+
45
+ <%%= f.submit 'Update', class: 'my-2 bg-blue-500 hover:bg-blue-700 text-white font-bold text-sm py-2 px-4 rounded w-full' %>
46
+ <%% end %>
47
+ <hr class="my-5" />
48
+ <%%= button_to 'Cancel my account', registration_path(resource_name), class: 'my-2 bg-red-500 hover:bg-red-700 text-white font-bold text-sm py-2 px-4 rounded w-full', data: { confirm: 'Are you sure? You cannot undo this.' }, method: :delete %>
49
+
50
+ <hr class="my-5" />
51
+ <%%= link_to "Back", :back %>
52
+ </div>
53
+ </div>
@@ -0,0 +1,37 @@
1
+ <div class="md:mx-auto md:max-w-md overflow-hidden mx-0">
2
+ <div class=" shadow-md rounded px-8 pt-6 pb-8 mb-4 flex flex-col justify-center bg-gray-50">
3
+ <h2 class="text-center text-xl text-black">
4
+ <%- if options[:metatags] -%>
5
+ <%%= title('Sign Up') %>
6
+ <%- else -%>
7
+ Sign Up
8
+ <%- end -%>
9
+ </h2>
10
+
11
+ <%%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
12
+ <%%= render 'devise/shared/error_messages', resource: resource %>
13
+
14
+ <div class="mb-4">
15
+ <%%= f.label :email, class: 'block email optional text-sm font-medium text-gray-600' %>
16
+ <%%= f.email_field :email, autofocus: true, autocomplete: 'email', class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out string' %>
17
+ </div>
18
+
19
+ <div class="mb-4">
20
+ <%%= f.label :password, class: 'block email optional text-sm font-medium text-gray-600' %>
21
+ <%% if @minimum_password_length %>
22
+ <em>(<%%= @minimum_password_length %> characters minimum)</em>
23
+ <%% end %>
24
+ <%%= f.password_field :password, autocomplete: 'new-password', class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out string' %>
25
+ </div>
26
+
27
+ <div class="mb-4">
28
+ <%%= f.label :password_confirmation, class: 'block email optional text-sm font-medium text-gray-600' %>
29
+ <%%= f.password_field :password_confirmation, autocomplete: 'new-password', class: 'shadow appearance-none border border-gray-300 rounded w-full py-2 px-3 bg-white focus:outline-none focus:ring-0 focus:border-blue-500 text-gray-400 leading-6 transition-colors duration-200 ease-in-out string' %>
30
+ </div>
31
+
32
+ <%%= f.submit 'Sign Up', class: 'my-2 bg-blue-500 hover:bg-blue-700 text-white font-bold text-sm py-2 px-4 rounded w-full' %>
33
+ <%% end %>
34
+
35
+ <%%= render 'devise/shared/links' %>
36
+ </div>
37
+ </div>