diff --git a/app/assets/images/icons/eye-empty.svg b/app/assets/images/icons/eye-empty.svg new file mode 100644 index 00000000..0eef4117 --- /dev/null +++ b/app/assets/images/icons/eye-empty.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/assets/images/icons/eye-off.svg b/app/assets/images/icons/eye-off.svg new file mode 100644 index 00000000..617fedc7 --- /dev/null +++ b/app/assets/images/icons/eye-off.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js index 632444b6..5ac2df52 100644 --- a/app/javascript/controllers/index.js +++ b/app/javascript/controllers/index.js @@ -5,9 +5,11 @@ import { application } from 'controllers/application' // Eager load all controllers defined in the import map under controllers/**/*_controller import { eagerLoadControllersFrom } from '@hotwired/stimulus-loading' import Dropdown from '@stimulus-components/dropdown' +import PasswordVisibility from '@stimulus-components/password-visibility' // Lazy load controllers as they appear in the DOM (remember not to preload controllers in import map!) // import { lazyLoadControllersFrom } from "@hotwired/stimulus-loading" // lazyLoadControllersFrom("controllers", application) eagerLoadControllersFrom('controllers', application) application.register('dropdown', Dropdown) +application.register('password-visibility', PasswordVisibility) diff --git a/app/views/user_sessions/new.html.erb b/app/views/user_sessions/new.html.erb index cd294413..e3c1ffc6 100644 --- a/app/views/user_sessions/new.html.erb +++ b/app/views/user_sessions/new.html.erb @@ -16,7 +16,13 @@
<%= form.label :password, class: "text-white italic font-bold mb-2" %> - <%= form.password_field :password, required: true, placeholder: "Password", data: { test_id: "password_field" } %> +
+ <%= form.password_field :password, required: true, class: "peer w-full", placeholder: "Password", data: { test_id: "password_field", "password-visibility-target": "input" } %> + +
diff --git a/config/importmap.rb b/config/importmap.rb index 2fb8a2af..4d309db2 100644 --- a/config/importmap.rb +++ b/config/importmap.rb @@ -10,3 +10,4 @@ pin_all_from "app/javascript/custom", under: "custom" pin "trix" pin "@rails/actiontext", to: "actiontext.esm.js" +pin "@stimulus-components/password-visibility", to: "@stimulus-components--password-visibility.js" # @3.0.0 diff --git a/vendor/javascript/@stimulus-components--password-visibility.js b/vendor/javascript/@stimulus-components--password-visibility.js new file mode 100644 index 00000000..649eaf92 --- /dev/null +++ b/vendor/javascript/@stimulus-components--password-visibility.js @@ -0,0 +1,2 @@ +import{Controller as s}from"@hotwired/stimulus";const t=class _PasswordVisibility extends s{connect(){this.hidden=this.inputTarget.type==="password",this.class=this.hasHiddenClass?this.hiddenClass:"hidden"}toggle(s){s.preventDefault(),this.inputTarget.type=this.hidden?"text":"password",this.hidden=!this.hidden,this.iconTargets.forEach((s=>s.classList.toggle(this.class)))}};t.targets=["input","icon"],t.classes=["hidden"];let i=t;export{i as default}; +