replace admin rail with unified bottom sheet editor
All checks were successful
deploy / deploy (push) Successful in 1m30s
All checks were successful
deploy / deploy (push) Successful in 1m30s
- add editor sheet component anchored bottom (mobile) / right (desktop) - admin cog moves to header, always visible for admins - remove Done button from editor header, keep only Save - add editor_at_defaults tracking to disable Reset when at defaults - sheet collapses on click outside or Escape, stays in edit mode - dirty indicator + beforeunload warning for unsaved changes - keyboard shortcuts: Ctrl+Z undo, Ctrl+Shift+Z redo - WCAG compliant: aria-expanded, live region, focus management Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -47,7 +47,7 @@ defmodule BerrypodWeb.CoreComponents do
|
||||
id={@id}
|
||||
phx-click={JS.push("lv:clear-flash", value: %{key: @kind}) |> hide("##{@id}")}
|
||||
role="alert"
|
||||
class="admin-toast"
|
||||
class="admin-banner"
|
||||
{@rest}
|
||||
>
|
||||
<div class={[
|
||||
@@ -70,6 +70,39 @@ defmodule BerrypodWeb.CoreComponents do
|
||||
"""
|
||||
end
|
||||
|
||||
@doc """
|
||||
Renders inline status feedback next to a button or form section.
|
||||
|
||||
## Examples
|
||||
|
||||
<.inline_feedback status={@save_status} />
|
||||
<.inline_feedback status={@save_status} message={@save_error} />
|
||||
"""
|
||||
attr :status, :atom, values: [:idle, :saving, :saved, :error], default: :idle
|
||||
attr :message, :string, default: nil
|
||||
|
||||
def inline_feedback(assigns) do
|
||||
~H"""
|
||||
<span
|
||||
:if={@status != :idle}
|
||||
class={["admin-inline-feedback", "admin-inline-feedback-#{@status}"]}
|
||||
role={@status == :error && "alert"}
|
||||
>
|
||||
<.icon :if={@status == :saving} name="hero-arrow-path" class="size-4 motion-safe:animate-spin" />
|
||||
<.icon :if={@status == :saved} name="hero-check" class="size-4" />
|
||||
<.icon :if={@status == :error} name="hero-exclamation-circle" class="size-4" />
|
||||
<span>{feedback_text(@status, @message)}</span>
|
||||
</span>
|
||||
"""
|
||||
end
|
||||
|
||||
defp feedback_text(:saving, _), do: "Saving..."
|
||||
defp feedback_text(:saved, nil), do: "Saved"
|
||||
defp feedback_text(:saved, msg), do: msg
|
||||
defp feedback_text(:error, nil), do: "Something went wrong"
|
||||
defp feedback_text(:error, msg), do: msg
|
||||
defp feedback_text(:idle, _), do: nil
|
||||
|
||||
@doc """
|
||||
Renders a button with navigation support.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user