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};
+