diff --git a/assets/default.css b/assets/default.css index 91817941..fb117da5 100644 --- a/assets/default.css +++ b/assets/default.css @@ -808,26 +808,22 @@ @apply mb-0; } -:not(.phx-no-feedback).pc-form-field-wrapper--error input, -:not(.phx-no-feedback).pc-form-field-wrapper--error select, -:not(.phx-no-feedback).pc-form-field-wrapper--error textarea { +.pc-form-field-wrapper--error input, +.pc-form-field-wrapper--error select, +.pc-form-field-wrapper--error textarea { @apply border-danger-500 focus:border-danger-500 text-danger-900 placeholder-danger-700 bg-danger-50 dark:text-danger-100 dark:placeholder-danger-300 dark:bg-danger-900 focus:ring-danger-500; } -:not(.phx-no-feedback).pc-form-field-wrapper--error input[type="checkbox"] { +.pc-form-field-wrapper--error input[type="checkbox"] { @apply bg-danger-200 dark:bg-danger-700; } -:not(.phx-no-feedback).pc-form-field-wrapper--error - .pc-switch - .pc-switch__fake-input { +.pc-form-field-wrapper--error .pc-switch .pc-switch__fake-input { @apply bg-danger-200 border-danger-500 dark:bg-danger-600 dark:border-danger-800; } -:not(.phx-no-feedback).pc-form-field-wrapper--error - .pc-radio-card - .pc-radio-card__fake-input { +.pc-form-field-wrapper--error .pc-radio-card .pc-radio-card__fake-input { @apply bg-danger-200 dark:bg-danger-800 border-danger-500; } -:not(.phx-no-feedback).pc-form-field-wrapper--error .pc-label, -:not(.phx-no-feedback).pc-form-field-wrapper--error .pc-checkbox-label { +.pc-form-field-wrapper--error .pc-label, +.pc-form-field-wrapper--error .pc-checkbox-label { @apply !text-danger-600 dark:!text-danger-200; } .pc-checkbox-label { @@ -844,19 +840,9 @@ content: " *"; display: inline; } -.phx-no-feedback.pc-error, -.phx-no-feedback .pc-error { - @apply hidden; -} .pc-form-field-error { @apply mt-1 text-xs italic text-danger-500; } -.phx-no-feedback.pc-form-field-error { - @apply hidden; -} -.phx-no-feedback .pc-form-field-error { - @apply hidden; -} .pc-form-help-text { @apply mt-2 text-sm text-gray-500 dark:text-gray-400; } @@ -1015,7 +1001,7 @@ } /* Add error state styles */ -:not(.phx-no-feedback).pc-form-field-wrapper--error .pc-date-input-icon { +.pc-form-field-wrapper--error .pc-date-input-icon { @apply bg-danger-50 dark:bg-danger-900; } @@ -2531,17 +2517,21 @@ @apply text-sm border-gray-300 rounded-md shadow-sm cursor-pointer disabled:bg-gray-100 disabled:cursor-not-allowed focus:border-primary-500 focus:ring-primary-500 dark:border-gray-600 dark:focus:border-primary-500 dark:bg-gray-800 dark:text-gray-300 focus:outline-none; } -label.has-error:not(.phx-no-feedback) { +label.has-error { + @apply !text-danger-900 dark:!text-danger-200; +} + +span.has-error { @apply !text-danger-900 dark:!text-danger-200; } -textarea.has-error:not(.phx-no-feedback), -input.has-error:not(.phx-no-feedback):not(:checked), -select.has-error:not(.phx-no-feedback) { +textarea.has-error, +input.has-error:not(:checked), +select.has-error { @apply !border-danger-500 focus:!border-danger-500 !text-danger-900 !placeholder-danger-700 !bg-danger-50 dark:!text-danger-100 dark:!placeholder-danger-300 dark:!bg-danger-900 focus:!ring-danger-500; } -input[type="file_input"].has-error:not(.phx-no-feedback) { +input[type="file_input"].has-error { @apply !border-danger-500 !rounded-md focus:!border-danger-500 !text-danger-900 !placeholder-danger-700 !bg-danger-50 file:!border-none dark:!border-none dark:!bg-gray-950 dark:text-danger-400; } diff --git a/lib/petal_components/accordion.ex b/lib/petal_components/accordion.ex index b9f77d4e..ac8668d4 100644 --- a/lib/petal_components/accordion.ex +++ b/lib/petal_components/accordion.ex @@ -89,7 +89,7 @@ defmodule PetalComponents.Accordion do else: "pc-accordion-item__heading" ) }> - <%= current_item.heading %> + {current_item.heading} <%= if @variant == "ghost" do %> @@ -134,7 +134,7 @@ defmodule PetalComponents.Accordion do ] ) }> - <%= render_slot(current_item, current_item.entry) %> + {render_slot(current_item, current_item.entry)} diff --git a/lib/petal_components/alert.ex b/lib/petal_components/alert.ex index 5261de9a..441b09fb 100644 --- a/lib/petal_components/alert.ex +++ b/lib/petal_components/alert.ex @@ -54,12 +54,12 @@ defmodule PetalComponents.Alert do
<%= if @heading do %>

- <%= @heading %> + {@heading}

<% end %>
- <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label}
diff --git a/lib/petal_components/avatar.ex b/lib/petal_components/avatar.ex index 38511745..1420b96f 100644 --- a/lib/petal_components/avatar.ex +++ b/lib/petal_components/avatar.ex @@ -44,7 +44,7 @@ defmodule PetalComponents.Avatar do @class ]} > - <%= generate_initials(@name) %> + {generate_initials(@name)} <% else %> - <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label} """ end diff --git a/lib/petal_components/breadcrumbs.ex b/lib/petal_components/breadcrumbs.ex index 47bf2fd5..1937f972 100644 --- a/lib/petal_components/breadcrumbs.ex +++ b/lib/petal_components/breadcrumbs.ex @@ -39,7 +39,7 @@ defmodule PetalComponents.Breadcrumbs do <.icon name={link[:icon]} class={["pc-breadcrumb-icon", link[:icon_class]]} /> <% end %> <%= if link[:label] do %> - <%= link.label %> + {link.label} <% end %> diff --git a/lib/petal_components/button.ex b/lib/petal_components/button.ex index b250e0eb..4773bdb2 100644 --- a/lib/petal_components/button.ex +++ b/lib/petal_components/button.ex @@ -69,7 +69,7 @@ defmodule PetalComponents.Button do <% end %> <% end %> - <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label} """ end @@ -134,11 +134,11 @@ defmodule PetalComponents.Button do <%= if @loading do %> <% else %> - <%= render_slot(@inner_block) %> + {render_slot(@inner_block)} diff --git a/lib/petal_components/button_group.ex b/lib/petal_components/button_group.ex index 1dd783c7..7f36c839 100644 --- a/lib/petal_components/button_group.ex +++ b/lib/petal_components/button_group.ex @@ -95,9 +95,9 @@ defmodule PetalComponents.ButtonGroup do {group_btn_assigns} > <%= if is_function(group_btn_assigns.inner_block) do %> - <%= render_slot(group_btn_assigns) %> + {render_slot(group_btn_assigns)} <% else %> - <%= group_btn_assigns.label %> + {group_btn_assigns.label} <% end %> @@ -129,7 +129,7 @@ defmodule PetalComponents.ButtonGroup do class={[@class | group_btn_class(assigns)]} {@rest} > - <%= render_slot(@inner_block) %> + {render_slot(@inner_block)} """ end @@ -140,7 +140,7 @@ defmodule PetalComponents.ButtonGroup do ~H""" """ end @@ -148,7 +148,7 @@ defmodule PetalComponents.ButtonGroup do defp group_button(%{kind: "link"} = assigns) do ~H""" <.link class={[@class | group_btn_class(assigns)]} {@rest}> - <%= render_slot(@inner_block) %> + {render_slot(@inner_block)} """ end diff --git a/lib/petal_components/card.ex b/lib/petal_components/card.ex index bbbff9d3..488fc15c 100644 --- a/lib/petal_components/card.ex +++ b/lib/petal_components/card.ex @@ -12,7 +12,7 @@ defmodule PetalComponents.Card do ~H"""
- <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}
""" @@ -50,14 +50,14 @@ defmodule PetalComponents.Card do ~H"""
- <%= @category %> + {@category}
- <%= @heading %> + {@heading}
- <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label}
""" end @@ -69,7 +69,7 @@ defmodule PetalComponents.Card do def card_footer(assigns) do ~H"""
- <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}
""" end @@ -88,13 +88,13 @@ defmodule PetalComponents.Card do <.avatar src={@img} alt={@name} size="md" />
- <.p no_margin class="text-sm pc-review-name"><%= @name %> + <.p no_margin class="text-sm pc-review-name">{@name}
-

<%= @username %>

+

{@username}

- <.p class="text-sm" no_margin><%= @body %> + <.p class="text-sm" no_margin>{@body}
""" diff --git a/lib/petal_components/container.ex b/lib/petal_components/container.ex index 336b3741..efa7804e 100644 --- a/lib/petal_components/container.ex +++ b/lib/petal_components/container.ex @@ -22,7 +22,7 @@ defmodule PetalComponents.Container do @class ]} > - <%= render_slot(@inner_block) %> + {render_slot(@inner_block)} """ end diff --git a/lib/petal_components/dropdown.ex b/lib/petal_components/dropdown.ex index ff00d035..12a20b21 100644 --- a/lib/petal_components/dropdown.ex +++ b/lib/petal_components/dropdown.ex @@ -71,12 +71,12 @@ defmodule PetalComponents.Dropdown do Open options <%= if @label do %> - <%= @label %> + {@label} <.icon name="hero-chevron-down-solid" class="w-5 h-5 pc-dropdown__chevron" /> <% end %> <%= if @trigger_element do %> - <%= render_slot(@trigger_element) %> + {render_slot(@trigger_element)} <% end %> <%= if !@label && @trigger_element == [] do %> @@ -97,7 +97,7 @@ defmodule PetalComponents.Dropdown do aria-labelledby="options-menu" >
- <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}
@@ -126,7 +126,7 @@ defmodule PetalComponents.Dropdown do role="menuitem" {@rest} > - <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label} """ end diff --git a/lib/petal_components/field.ex b/lib/petal_components/field.ex index 4d78efd5..1034f544 100644 --- a/lib/petal_components/field.ex +++ b/lib/petal_components/field.ex @@ -100,9 +100,11 @@ defmodule PetalComponents.Field do doc: "All other props go on the input" def field(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do + errors = if used_input?(field), do: field.errors, else: [] + assigns |> assign(field: nil, id: assigns.id || field.id) - |> assign(:errors, Enum.map(field.errors, &translate_error(&1))) + |> assign(:errors, Enum.map(errors, &translate_error(&1))) |> assign_new(:name, fn -> if assigns.multiple && assigns.type not in ["checkbox-group", "radio-group"], do: field.name <> "[]", @@ -132,10 +134,10 @@ defmodule PetalComponents.Field do {@rest} />
- <%= @label %> + {@label}
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -145,7 +147,7 @@ defmodule PetalComponents.Field do ~H""" <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} for={@id} class={@label_class}> - <%= @label %> + {@label} - <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -168,7 +170,7 @@ defmodule PetalComponents.Field do ~H""" <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} for={@id} class={@label_class}> - <%= @label %> + {@label} - <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -208,9 +210,9 @@ defmodule PetalComponents.Field do -
<%= @label %>
+
{@label}
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -233,7 +235,7 @@ defmodule PetalComponents.Field do ~H""" <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} class={@label_class}> - <%= @label %> + {@label}
- <%= label %> + {label}
<% end %> <%= if @empty_message && Enum.empty?(@options) do %>
- <%= @empty_message %> + {@empty_message}
<% end %>
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -280,7 +282,7 @@ defmodule PetalComponents.Field do ~H""" <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} class={@label_class}> - <%= @label %> + {@label}
- <%= label %> + {label}
<% end %> <%= if @empty_message && Enum.empty?(@options) do %>
- <%= @empty_message %> + {@empty_message}
<% end %>
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -330,7 +332,7 @@ defmodule PetalComponents.Field do ~H""" <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} class={@label_class}> - <%= @label %> + {@label}
-
<%= option[:label] %>
+
{option[:label]}
- <%= option[:description] %> + {option[:description]}
<% end %> <%= if @empty_message && Enum.empty?(@options) do %>
- <%= @empty_message %> + {@empty_message}
<% end %>
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -398,7 +400,7 @@ defmodule PetalComponents.Field do ~H""" <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} for={@id} class={@label_class}> - <%= @label %> + {@label}
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -432,7 +434,7 @@ defmodule PetalComponents.Field do <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} for={@id} class={@label_class}> - <%= @label %> + {@label}
@@ -467,7 +469,7 @@ defmodule PetalComponents.Field do
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> @@ -482,7 +484,7 @@ defmodule PetalComponents.Field do <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} for={@id} class={@label_class}> - <%= @label %> + {@label}
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> @@ -540,7 +542,7 @@ defmodule PetalComponents.Field do ~H""" <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} for={@id} class={@label_class}> - <%= @label %> + {@label}
- <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -569,7 +571,7 @@ defmodule PetalComponents.Field do ~H""" <.field_wrapper errors={@errors} name={@name} class={@wrapper_class} no_margin={@no_margin}> <.field_label required={@required} for={@id} class={@label_class}> - <%= @label %> + {@label} - <.field_error :for={msg <- @errors}><%= msg %> + <.field_error :for={msg <- @errors}>{msg} <.field_help_text help_text={@help_text} /> """ @@ -599,7 +601,6 @@ defmodule PetalComponents.Field do def field_wrapper(assigns) do ~H"""
- <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}
""" end @@ -626,11 +627,11 @@ defmodule PetalComponents.Field do ~H""" <%= if @for do %> <% else %> - <%= render_slot(@inner_block) %> + {render_slot(@inner_block)} <% end %> """ @@ -644,7 +645,7 @@ defmodule PetalComponents.Field do def field_error(assigns) do ~H"""

- <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}

""" end @@ -657,7 +658,7 @@ defmodule PetalComponents.Field do def field_help_text(assigns) do ~H"""
- <%= render_slot(@inner_block) || @help_text %> + {render_slot(@inner_block) || @help_text}
""" end diff --git a/lib/petal_components/form.ex b/lib/petal_components/form.ex index d2d5d5ac..6efc664a 100644 --- a/lib/petal_components/form.ex +++ b/lib/petal_components/form.ex @@ -14,12 +14,15 @@ defmodule PetalComponents.Form do Deprecated in favor of field.ex and input.ex, which use the new `%Phoenix.HTML.FormField{}` struct. """ - attr(:form, :any, default: nil, doc: "") - attr(:field, :atom, default: nil, doc: "") - attr(:label, :string, default: nil, doc: "labels your field") - attr(:class, :any, doc: "CSS classes to add to your label") - slot(:inner_block, required: false) - attr(:rest, :global, include: ~w(for)) + attr :form, :any, default: nil, doc: "" + attr :field, :atom, default: nil, doc: "" + attr :label, :string, default: nil, doc: "labels your field" + attr :class, :any, doc: "CSS classes to add to your label" + + attr :compound, :boolean, default: false, doc: "Avoid using label/for for compound inputs" + + slot :inner_block, required: false + attr :rest, :global, include: ~w(for) def form_label(assigns) do assigns = @@ -27,13 +30,13 @@ defmodule PetalComponents.Form do |> assign(:classes, label_classes(assigns)) ~H""" - <%= if @form && @field do %> - <%= Form.label @form, @field, [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ Map.to_list(@rest) do %> - <%= render_slot(@inner_block) || @label || Form.humanize(@field) %> + <%= if @form && @field && !@compound do %> + <%= Form.label @form, @field, [class: @classes] ++ Map.to_list(@rest) do %> + {render_slot(@inner_block) || @label || Form.humanize(@field)} <% end %> <% else %> - <%= render_slot(@inner_block) || @label || Form.humanize(@field) %> + {render_slot(@inner_block) || @label || Form.humanize(@field)} <% end %> """ @@ -115,7 +118,7 @@ defmodule PetalComponents.Form do ) ~H""" -
+
<%= case @type do %> <% "checkbox" -> %> <% "switch" -> %> @@ -132,14 +135,26 @@ defmodule PetalComponents.Form do
- <%= @label %> + {@label}
<% "checkbox_group" -> %> - <.form_label form={@form} label={@label} class={@label_class} /> + <.form_label + form={@form} + field={@field} + label={@label} + class={@label_class} + compound={true} + /> <.checkbox_group form={@form} field={@field} {@rest} /> <% "radio_group" -> %> - <.form_label form={@form} label={@label} class={@label_class} /> + <.form_label + form={@form} + field={@field} + label={@label} + class={@label_class} + compound={true} + /> <.radio_group form={@form} field={@field} {@rest} /> <% "text_input" -> %> <.form_label form={@form} field={@field} label={@label} class={@label_class} /> @@ -166,16 +181,34 @@ defmodule PetalComponents.Form do <.form_label form={@form} field={@field} label={@label} class={@label_class} /> <.time_input form={@form} field={@field} {@rest} /> <% "time_select" -> %> - <.form_label form={@form} label={@label} class={@label_class} /> + <.form_label + form={@form} + field={@field} + label={@label} + class={@label_class} + compound={true} + /> <.time_select form={@form} field={@field} {@rest} /> <% "datetime_select" -> %> - <.form_label form={@form} label={@label} class={@label_class} /> + <.form_label + form={@form} + field={@field} + label={@label} + class={@label_class} + compound={true} + /> <.datetime_select form={@form} field={@field} {@rest} /> <% "datetime_local_input" -> %> <.form_label form={@form} field={@field} label={@label} class={@label_class} /> <.datetime_local_input form={@form} field={@field} {@rest} /> <% "date_select" -> %> - <.form_label form={@form} label={@label} class={@label_class} /> + <.form_label + form={@form} + field={@field} + label={@label} + class={@label_class} + compound={true} + /> <.date_select form={@form} field={@field} {@rest} /> <% "date_input" -> %> <.form_label form={@form} field={@field} label={@label} class={@label_class} /> @@ -210,15 +243,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def text_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.text_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.text_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -229,15 +258,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def email_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.email_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.email_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -248,15 +273,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def number_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.number_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.number_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -267,15 +288,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def password_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.password_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.password_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -286,15 +303,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def search_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.search_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.search_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -305,15 +318,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def telephone_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.telephone_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.telephone_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -324,15 +333,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def url_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.url_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.url_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -343,15 +348,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def time_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.time_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.time_input(@form, @field, [class: @classes, bob: "yo"] ++ Map.to_list(@rest))} """ end @@ -362,16 +363,12 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def time_select(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H"""
- <%= Form.time_select( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.time_select(@form, @field, [class: @classes] ++ Map.to_list(@rest))}
""" end @@ -383,15 +380,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def datetime_local_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.datetime_local_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.datetime_local_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -402,16 +395,12 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def datetime_select(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H"""
- <%= Form.datetime_select( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.datetime_select(@form, @field, [class: @classes] ++ Map.to_list(@rest))}
""" end @@ -423,16 +412,12 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def date_select(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H"""
- <%= Form.date_select( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.date_select(@form, @field, [class: @classes] ++ Map.to_list(@rest))}
""" end @@ -444,15 +429,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def date_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.date_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.date_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -463,15 +444,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def color_input(assigns) do - assigns = assign_defaults(assigns, color_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, color_input_classes(errors)) ~H""" - <%= Form.color_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.color_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -482,15 +459,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def file_input(assigns) do - assigns = assign_defaults(assigns, file_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, file_input_classes(errors)) ~H""" - <%= Form.file_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.file_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -501,15 +474,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def range_input(assigns) do - assigns = assign_defaults(assigns, range_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, range_input_classes(errors)) ~H""" - <%= Form.range_input( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.range_input(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -520,15 +489,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def textarea(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.textarea( - @form, - @field, - [class: @classes, rows: "4", phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.textarea(@form, @field, [class: @classes, rows: "4"] ++ Map.to_list(@rest))} """ end @@ -540,16 +505,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def select(assigns) do - assigns = assign_defaults(assigns, select_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, select_classes(errors)) ~H""" - <%= Form.select( - @form, - @field, - @options, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.select(@form, @field, @options, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -563,15 +523,11 @@ defmodule PetalComponents.Form do ) def checkbox(assigns) do - assigns = assign_defaults(assigns, checkbox_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, checkbox_classes(errors)) ~H""" - <%= Form.checkbox( - @form, - @field, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.checkbox(@form, @field, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -585,9 +541,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def checkbox_group(assigns) do + errors = used_input_errors(assigns) + assigns = assigns - |> assign_defaults(checkbox_classes(field_has_errors?(assigns))) + |> assign_defaults(checkbox_classes(errors)) |> assign_new(:checked, fn -> values = case Phoenix.HTML.Form.input_value(assigns[:form], assigns[:field]) do @@ -604,10 +562,10 @@ defmodule PetalComponents.Form do ~H"""
- <%= Form.hidden_input(@form, @field, + {Form.hidden_input(@form, @field, name: Phoenix.HTML.Form.input_name(@form, @field), value: "" - ) %> + )} <%= for {label, value} <- @options do %> <% end %> @@ -639,26 +597,20 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @checkbox_form_attrs) def switch(assigns) do - assigns = assign_defaults(assigns, switch_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, switch_classes(errors)) ~H""" """ end - defp switch_classes(has_errors) do - "#{if has_errors, do: "has-error", else: ""} sr-only peer" + defp switch_classes(errors) do + "#{if errors != [], do: "has-error", else: ""} sr-only peer" end attr(:form, :any, default: nil, doc: "") @@ -669,16 +621,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def radio(assigns) do - assigns = assign_defaults(assigns, radio_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, radio_classes(errors)) ~H""" - <%= Form.radio_button( - @form, - @field, - @value, - [class: @classes, phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ - Map.to_list(@rest) - ) %> + {Form.radio_button(@form, @field, @value, [class: @classes] ++ Map.to_list(@rest))} """ end @@ -691,16 +638,18 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def radio_group(assigns) do + errors = used_input_errors(assigns) + assigns = assigns - |> assign_defaults(radio_classes(field_has_errors?(assigns))) + |> assign_defaults(radio_classes(errors)) ~H"""
<%= for {label, value} <- @options do %> <% end %>
@@ -712,14 +661,11 @@ defmodule PetalComponents.Form do attr(:rest, :global, include: @form_attrs) def hidden_input(assigns) do - assigns = assign_defaults(assigns, text_input_classes(field_has_errors?(assigns))) + errors = used_input_errors(assigns) + assigns = assign_defaults(assigns, text_input_classes(errors)) ~H""" - <%= Form.hidden_input( - @form, - @field, - [phx_feedback_for: Phoenix.HTML.Form.input_name(@form, @field)] ++ Map.to_list(@rest) - ) %> + {Form.hidden_input(@form, @field, Map.to_list(@rest))} """ end @@ -730,21 +676,14 @@ defmodule PetalComponents.Form do def form_field_error(assigns) do assigns = assigns - |> assign(:translated_errors, generated_translated_errors(assigns.form, assigns.field)) + |> assign(:translated_errors, generated_translated_errors(assigns)) ~H""" - <%= if field_has_errors?(assigns) do %> -
- <%= for translated_error <- @translated_errors do %> -
- <%= translated_error %> -
- <% end %> +
+
+ {translated_error}
- <% end %> +
""" end @@ -756,15 +695,15 @@ defmodule PetalComponents.Form do def form_help_text(assigns) do ~H"""
- <%= render_slot(@inner_block) || @help_text %> + {render_slot(@inner_block) || @help_text}
""" end - defp generated_translated_errors(form, field) do + defp generated_translated_errors(assigns) do translate_error = translator_from_config() || (&translate_error/1) - Keyword.get_values(form.errors || [], field) + used_input_errors(assigns) |> Enum.map(fn error -> translate_error.(error) end) @@ -814,6 +753,8 @@ defmodule PetalComponents.Form do end defp label_classes(assigns) do + errors = used_input_errors(assigns) + type_classes = if Enum.member?(["checkbox", "radio"], assigns[:type]) do "pc-label--for-checkbox" @@ -821,31 +762,31 @@ defmodule PetalComponents.Form do "" end - "#{if field_has_errors?(assigns), do: "has-error", else: ""} #{type_classes} #{assigns[:class] || ""} pc-label" + "#{if errors != [], do: "has-error", else: ""} #{type_classes} #{assigns[:class] || ""} pc-label" end - defp text_input_classes(has_error) do - "#{if has_error, do: "has-error", else: ""} pc-text-input" + defp text_input_classes(errors) do + "#{if errors != [], do: "has-error", else: ""} pc-text-input" end - defp select_classes(has_error) do - "#{if has_error, do: "has-error", else: ""} pc-select" + defp select_classes(errors) do + "#{if errors != [], do: "has-error", else: ""} pc-select" end - defp file_input_classes(has_error) do - "#{if has_error, do: "has-error", else: ""} pc-file-input" + defp file_input_classes(errors) do + "#{if errors != [], do: "has-error", else: ""} pc-file-input" end - defp color_input_classes(has_error) do - "#{if has_error, do: "has-error", else: ""} pc-color-input" + defp color_input_classes(errors) do + "#{if errors != [], do: "has-error", else: ""} pc-color-input" end - defp range_input_classes(has_error) do - "#{if has_error, do: "has-error", else: ""} pc-range-input" + defp range_input_classes(errors) do + "#{if errors != [], do: "has-error", else: ""} pc-range-input" end - defp checkbox_classes(has_error) do - "#{if has_error, do: "has-error", else: ""} pc-checkbox" + defp checkbox_classes(errors) do + "#{if errors != [], do: "has-error", else: ""} pc-checkbox" end defp checkbox_group_layout_classes(assigns) do @@ -888,16 +829,13 @@ defmodule PetalComponents.Form do end end - defp radio_classes(has_error) do - "#{if has_error, do: "has-error", else: ""} pc-radio" + defp radio_classes(errors) do + "#{if errors != [], do: "has-error", else: ""} pc-radio" end - defp field_has_errors?(%{form: form, field: field}) when is_map(form) do - case Keyword.get_values(form.errors || [], field) do - [] -> false - _ -> true - end + defp used_input_errors(%{form: form, field: field}) when not is_nil(form) do + if used_input?(form[field]), do: form[field].errors, else: [] end - defp field_has_errors?(_), do: false + defp used_input_errors(_), do: [] end diff --git a/lib/petal_components/icons/svg.ex b/lib/petal_components/icons/svg.ex index 1c5c339d..03e575d2 100644 --- a/lib/petal_components/icons/svg.ex +++ b/lib/petal_components/icons/svg.ex @@ -7,7 +7,7 @@ defmodule PetalComponents.Svg do def title(assigns) do ~H""" <%= if not is_nil(@title) do %> - <%= @title %> + {@title} <% end %> """ end diff --git a/lib/petal_components/input.ex b/lib/petal_components/input.ex index ee1d61f7..5cab40f5 100644 --- a/lib/petal_components/input.ex +++ b/lib/petal_components/input.ex @@ -59,8 +59,8 @@ defmodule PetalComponents.Input do def input(%{type: "select"} = assigns) do ~H""" """ end diff --git a/lib/petal_components/link.ex b/lib/petal_components/link.ex index fec91ac9..cd1cedef 100644 --- a/lib/petal_components/link.ex +++ b/lib/petal_components/link.ex @@ -18,7 +18,7 @@ defmodule PetalComponents.Link do ~H""" """ end @@ -31,7 +31,7 @@ defmodule PetalComponents.Link do def a(%{link_type: "a"} = assigns) do ~H""" <.link href={@to} class={@class} {@rest}> - <%= if(@label, do: @label, else: render_slot(@inner_block)) %> + {if(@label, do: @label, else: render_slot(@inner_block))} """ end @@ -39,7 +39,7 @@ defmodule PetalComponents.Link do def a(%{link_type: "live_patch"} = assigns) do ~H""" <.link patch={@to} class={@class} {@rest}> - <%= if(@label, do: @label, else: render_slot(@inner_block)) %> + {if(@label, do: @label, else: render_slot(@inner_block))} """ end @@ -47,7 +47,7 @@ defmodule PetalComponents.Link do def a(%{link_type: "live_redirect"} = assigns) do ~H""" <.link navigate={@to} class={@class} {@rest}> - <%= if(@label, do: @label, else: render_slot(@inner_block)) %> + {if(@label, do: @label, else: render_slot(@inner_block))} """ end @@ -55,7 +55,7 @@ defmodule PetalComponents.Link do def a(%{link_type: "button"} = assigns) do ~H""" """ end diff --git a/lib/petal_components/marquee.ex b/lib/petal_components/marquee.ex index 4ae7beba..2adaa730 100644 --- a/lib/petal_components/marquee.ex +++ b/lib/petal_components/marquee.ex @@ -54,7 +54,7 @@ defmodule PetalComponents.Marquee do ]} style={@reverse && "animation-direction: reverse;"} > - <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}
<% end %>
diff --git a/lib/petal_components/menu.ex b/lib/petal_components/menu.ex index ea92870c..9e0c35a8 100644 --- a/lib/petal_components/menu.ex +++ b/lib/petal_components/menu.ex @@ -176,7 +176,7 @@ defmodule PetalComponents.Menu do ~H"""
diff --git a/lib/petal_components/tabs.ex b/lib/petal_components/tabs.ex index fbcebfa4..10cb7986 100644 --- a/lib/petal_components/tabs.ex +++ b/lib/petal_components/tabs.ex @@ -11,7 +11,7 @@ defmodule PetalComponents.Tabs do def tabs(assigns) do ~H""" """ end @@ -45,13 +45,13 @@ defmodule PetalComponents.Tabs do {@rest} > <%= if @number do %> - <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label} - <%= @number %> + {@number} <% else %> - <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label} <% end %> """ diff --git a/lib/petal_components/typography.ex b/lib/petal_components/typography.ex index f6efdffd..9f0853f3 100644 --- a/lib/petal_components/typography.ex +++ b/lib/petal_components/typography.ex @@ -20,7 +20,7 @@ defmodule PetalComponents.Typography do def h1(assigns) do ~H"""

- <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label}

""" end @@ -36,7 +36,7 @@ defmodule PetalComponents.Typography do def h2(assigns) do ~H"""

- <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label}

""" end @@ -52,7 +52,7 @@ defmodule PetalComponents.Typography do def h3(assigns) do ~H"""

- <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label}

""" end @@ -68,7 +68,7 @@ defmodule PetalComponents.Typography do def h4(assigns) do ~H"""

- <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label}

""" end @@ -84,7 +84,7 @@ defmodule PetalComponents.Typography do def h5(assigns) do ~H"""
- <%= render_slot(@inner_block) || @label %> + {render_slot(@inner_block) || @label}
""" end @@ -114,7 +114,7 @@ defmodule PetalComponents.Typography do ]} {@rest} > - <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}

""" end @@ -126,7 +126,7 @@ defmodule PetalComponents.Typography do def prose(assigns) do ~H"""
- <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}
""" end @@ -146,7 +146,7 @@ defmodule PetalComponents.Typography do def ul(assigns) do ~H""" """ end @@ -166,7 +166,7 @@ defmodule PetalComponents.Typography do def ol(assigns) do ~H"""
    - <%= render_slot(@inner_block) %> + {render_slot(@inner_block)}
""" end diff --git a/lib/petal_components/user_dropdown_menu.ex b/lib/petal_components/user_dropdown_menu.ex index f728123d..426aa472 100644 --- a/lib/petal_components/user_dropdown_menu.ex +++ b/lib/petal_components/user_dropdown_menu.ex @@ -35,18 +35,18 @@ defmodule PetalComponents.UserDropdownMenu do > <%= cond do %> <% is_function(menu_item.icon) -> %> - <%= Phoenix.LiveView.TagEngine.component( + {Phoenix.LiveView.TagEngine.component( menu_item.icon, [class: "w-5 h-5 text-gray-500 dark:text-gray-400"], {__ENV__.module, __ENV__.function, __ENV__.file, __ENV__.line} - ) %> + )} <% is_binary(menu_item.icon) && String.match?(menu_item.icon, ~r/svg|img/) -> %> - <%= Phoenix.HTML.raw(menu_item.icon) %> + {Phoenix.HTML.raw(menu_item.icon)} <% true -> %> <.icon name={menu_item.icon} class="w-5 h-5 text-gray-500 dark:text-gray-400" /> <% end %> - <%= menu_item.label %> + {menu_item.label} <% end %> diff --git a/lib/petal_components_web/a11y_live.ex b/lib/petal_components_web/a11y_live.ex index 64deff5b..325d8f6d 100644 --- a/lib/petal_components_web/a11y_live.ex +++ b/lib/petal_components_web/a11y_live.ex @@ -274,7 +274,7 @@ defmodule PetalComponentsWeb.A11yLive do <.table class="my-class" id="posts" row_id={fn post -> "row_#{post.id}" end} rows={@posts}> - <:col :let={post} label="Name" class="col-class" row_class="row-class"><%= post.name %> + <:col :let={post} label="Name" class="col-class" row_class="row-class">{post.name} <.tabs class="flex-col sm:flex-row space-x"> diff --git a/mix.exs b/mix.exs index 1f35d970..7da1d02f 100644 --- a/mix.exs +++ b/mix.exs @@ -49,9 +49,9 @@ defmodule PetalComponents.MixProject do {:wallaby, "~> 0.30.9", runtime: false, only: :test}, {:phoenix, "~> 1.7"}, {:phoenix_live_view, "~> 1.0"}, - {:phoenix_html, "~> 4.0"}, + {:phoenix_html, "~> 4.1"}, {:phoenix_html_helpers, "~> 1.0"}, - {:jason, "~> 1.0", only: [:dev, :test]}, + {:jason, "~> 1.2", only: [:dev, :test]}, {:ex_doc, "~> 0.24", only: :dev, runtime: false}, {:phoenix_ecto, "~> 4.4"}, {:credo, "~> 1.7", only: [:dev, :test], runtime: false}, diff --git a/test/petal/accordion_test.exs b/test/petal/accordion_test.exs index 59c9755e..716b84cc 100644 --- a/test/petal/accordion_test.exs +++ b/test/petal/accordion_test.exs @@ -90,7 +90,7 @@ defmodule PetalComponents.AccordionTest do html = rendered_to_string(~H""" <.accordion entries={@entries}> - <:item :let={entry}><%= entry.content %> + <:item :let={entry}>{entry.content} """) diff --git a/test/petal/field_test.exs b/test/petal/field_test.exs index 68bdf270..751b1ac9 100644 --- a/test/petal/field_test.exs +++ b/test/petal/field_test.exs @@ -27,7 +27,6 @@ defmodule PetalComponents.FieldTest do assert html =~ "user[name]" assert html =~ "itemid" assert html =~ "something" - assert html =~ "phx-feedback-for" refute html =~ " disabled " assert html =~ "pc-text-input" assert html =~ "!w-max" @@ -36,7 +35,7 @@ defmodule PetalComponents.FieldTest do assert html =~ "label-class" end - test "field as text with field errors" do + test "Unedited field as text with field errors" do assigns = %{ field: %Phoenix.HTML.FormField{ errors: [ @@ -47,7 +46,38 @@ defmodule PetalComponents.FieldTest do value: "", field: :name, id: "name", - form: %Phoenix.HTML.Form{} + form: %Phoenix.HTML.Form{ + params: %{"_unused_name" => ""} + } + } + } + + html = + rendered_to_string(~H""" + <.field field={@field} /> + """) + + assert html =~ "name" + assert html =~ "Name" + refute html =~ "pc-form-field-error" + refute html =~ html_escape("can't be blank") + refute html =~ html_escape("too short!") + end + + test "Edited field as text with field errors" do + assigns = %{ + field: %Phoenix.HTML.FormField{ + errors: [ + {"can't be blank", [validation: :required]}, + {"too short!", [validation: :length]} + ], + name: "name", + value: "", + field: :name, + id: "name", + form: %Phoenix.HTML.Form{ + params: %{"name" => ""} + } } } @@ -157,7 +187,6 @@ defmodule PetalComponents.FieldTest do assert html =~ "checkbox" assert html =~ "user[read_terms]" - assert html =~ "phx-feedback-for" assert html =~ "itemid" # It includes a hidden field for when the switch is not checked @@ -185,7 +214,6 @@ defmodule PetalComponents.FieldTest do assert html =~ "itemid" assert html =~ "