Skip to main content

priv/registry/empty.json

{
  "files": [
    {
      "content": "defmodule Shadix.Components.Empty do\n  @moduledoc \"\"\"\n  Empty state components, ported from shadcn/ui (new-york-v4) \"empty\".\n\n  Exposes `empty/1`, `empty_header/1`, `empty_media/1`, `empty_title/1`,\n  `empty_description/1`, and `empty_content/1`. `empty_media/1` carries a\n  `variant` axis (`default` / `icon`).\n  \"\"\"\n  use Phoenix.Component\n  import Shadix.Cn\n\n  @empty_media_variants %{\n    \"default\" => \"bg-transparent\",\n    \"icon\" =>\n      \"flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6\"\n  }\n\n  attr(:class, :string, default: nil)\n  attr(:rest, :global)\n  slot(:inner_block, required: true)\n\n  def empty(assigns) do\n    class =\n      cn([\n        \"flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-lg border-dashed p-6 text-center text-balance md:p-12\",\n        assigns.class\n      ])\n\n    assigns = assign(assigns, :computed_class, class)\n\n    ~H\"\"\"\n    <div data-slot=\"empty\" class={@computed_class} {@rest}>{render_slot(@inner_block)}</div>\n    \"\"\"\n  end\n\n  attr(:class, :string, default: nil)\n  attr(:rest, :global)\n  slot(:inner_block, required: true)\n\n  def empty_header(assigns) do\n    class =\n      cn([\n        \"flex max-w-sm flex-col items-center gap-2 text-center\",\n        assigns.class\n      ])\n\n    assigns = assign(assigns, :computed_class, class)\n\n    ~H\"\"\"\n    <div data-slot=\"empty-header\" class={@computed_class} {@rest}>{render_slot(@inner_block)}</div>\n    \"\"\"\n  end\n\n  attr(:class, :string, default: nil)\n  attr(:variant, :string, default: \"default\", values: ~w(default icon))\n  attr(:rest, :global)\n  slot(:inner_block, required: true)\n\n  def empty_media(assigns) do\n    class =\n      cn([\n        \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n        Map.fetch!(@empty_media_variants, assigns.variant),\n        assigns.class\n      ])\n\n    assigns = assign(assigns, :computed_class, class)\n\n    ~H\"\"\"\n    <div data-slot=\"empty-icon\" data-variant={@variant} class={@computed_class} {@rest}>\n      {render_slot(@inner_block)}\n    </div>\n    \"\"\"\n  end\n\n  attr(:class, :string, default: nil)\n  attr(:rest, :global)\n  slot(:inner_block, required: true)\n\n  def empty_title(assigns) do\n    class = cn([\"text-lg font-medium tracking-tight\", assigns.class])\n    assigns = assign(assigns, :computed_class, class)\n\n    ~H\"\"\"\n    <div data-slot=\"empty-title\" class={@computed_class} {@rest}>{render_slot(@inner_block)}</div>\n    \"\"\"\n  end\n\n  attr(:class, :string, default: nil)\n  attr(:rest, :global)\n  slot(:inner_block, required: true)\n\n  def empty_description(assigns) do\n    class =\n      cn([\n        \"text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary\",\n        assigns.class\n      ])\n\n    assigns = assign(assigns, :computed_class, class)\n\n    ~H\"\"\"\n    <div data-slot=\"empty-description\" class={@computed_class} {@rest}>\n      {render_slot(@inner_block)}\n    </div>\n    \"\"\"\n  end\n\n  attr(:class, :string, default: nil)\n  attr(:rest, :global)\n  slot(:inner_block, required: true)\n\n  def empty_content(assigns) do\n    class =\n      cn([\n        \"flex w-full max-w-sm min-w-0 flex-col items-center gap-4 text-sm text-balance\",\n        assigns.class\n      ])\n\n    assigns = assign(assigns, :computed_class, class)\n\n    ~H\"\"\"\n    <div data-slot=\"empty-content\" class={@computed_class} {@rest}>{render_slot(@inner_block)}</div>\n    \"\"\"\n  end\nend\n",
      "path": "empty.ex"
    }
  ],
  "hooks": [],
  "name": "empty",
  "npm_deps": [],
  "registry_deps": [
    "cn"
  ]
}