defmodule Corex.PasswordInput do @moduledoc ~S''' Phoenix implementation of [Zag.js Password Input](https://zagjs.com/components/react/password-input). ## Examples ### Basic ```heex <.password_input id="pwd" class="password-input"> <:label>Password <:visible_indicator><.icon name="hero-eye" /> <:hidden_indicator><.icon name="hero-eye-slash" /> ``` ## Styling Use data attributes: `[data-scope="password-input"][data-part="root"]`, `label`, `control`, `input`, `visibility-trigger`, `indicator`. ''' @doc type: :component use Phoenix.Component alias Corex.PasswordInput.Anatomy.{ Props, Root, Label, Control, Input, VisibilityTrigger, Indicator } alias Corex.PasswordInput.Connect attr(:id, :string, required: false) attr(:visible, :boolean, default: false) attr(:controlled_visible, :boolean, default: false) attr(:disabled, :boolean, default: false) attr(:invalid, :boolean, default: false) attr(:read_only, :boolean, default: false) attr(:required, :boolean, default: false) attr(:ignore_password_managers, :boolean, default: false) attr(:name, :string, default: nil) attr(:form, :string, default: nil) attr(:dir, :string, default: nil, values: [nil, "ltr", "rtl"]) attr(:auto_complete, :string, default: "current-password", values: ["current-password", "new-password"] ) attr(:on_visibility_change, :string, default: nil) attr(:on_visibility_change_client, :string, default: nil) attr(:rest, :global) slot(:label, required: false) slot(:visible_indicator, required: true, doc: "Icon shown when password is visible") slot(:hidden_indicator, required: true, doc: "Icon shown when password is hidden") def password_input(assigns) do assigns = assigns |> assign_new(:id, fn -> "password-input-#{System.unique_integer([:positive])}" end) |> assign_new(:dir, fn -> "ltr" end) ~H"""