Packages
Generates type-safe Phoenix.Component modules from DaisyUI documentation. Parses DaisyUI docs, detects variants, and creates production-ready components.
Current section
Files
Jump to
Current section
Files
lib/oopsie_daisy_components/button.ex
defmodule OopsieDaisy.Components.Button do
@moduledoc """
Button component with DaisyUI styling.
Generated from: tmp/daisyui/packages/docs/src/routes/(routes)/components/button/+page.md
## Examples
<.button>Content</.button>
"""
use Phoenix.Component
# Component
attr(:rest, :global, include: ~w(disabled form name value type))
@doc "Additional CSS classes"
attr(:class, :string, default: "")
@doc "Button size"
attr(:size, :atom, default: :sm, values: [:md, :xs, :sm, :lg, :xl])
@doc "Color variant"
attr(:variant, :atom,
default: nil,
values: [nil, :neutral, :primary, :secondary, :accent, :info, :success, :warning, :error]
)
@doc "Style variant"
attr(:style, :atom, default: nil, values: [nil, :soft, :outline, :dash, :ghost, :link])
@doc "Modifier classes"
attr(:modifier, :atom,
default: nil,
values: [nil, :active, :wide, :disabled, :square, :circle, :block]
)
@doc """
Renders a Button component.
"""
slot(:inner_block, required: true)
def button(assigns) do
~H"""
<button class={["btn", variant_class(@variant), size_class(@size), style_class(@style), modifier_class(@modifier), @class]} {@rest}>
<%= render_slot(@inner_block) %>
</button>
"""
end
# Helper functions for class composition
defp variant_class(nil), do: nil
defp variant_class(:neutral), do: "btn-neutral"
defp variant_class(:primary), do: "btn-primary"
defp variant_class(:secondary), do: "btn-secondary"
defp variant_class(:accent), do: "btn-accent"
defp variant_class(:info), do: "btn-info"
defp variant_class(:success), do: "btn-success"
defp variant_class(:warning), do: "btn-warning"
defp variant_class(:error), do: "btn-error"
defp size_class(nil), do: nil
defp size_class(:xs), do: "btn-xs"
defp size_class(:sm), do: "btn-sm"
defp size_class(:lg), do: "btn-lg"
defp size_class(:xl), do: "btn-xl"
defp style_class(nil), do: nil
defp style_class(:soft), do: "btn-soft"
defp style_class(:outline), do: "btn-outline"
defp style_class(:dash), do: "btn-dash"
defp style_class(:ghost), do: "btn-ghost"
defp style_class(:link), do: "btn-link"
defp modifier_class(nil), do: nil
defp modifier_class(:active), do: "btn-active"
defp modifier_class(:wide), do: "btn-wide"
defp modifier_class(:disabled), do: "btn-disabled"
defp modifier_class(:square), do: "btn-square"
defp modifier_class(:circle), do: "btn-circle"
defp modifier_class(:block), do: "btn-block"
end