Clipboard

Clipboard component for copying content to clipboard.

Usage

# <% Copy a direct value %>
<%= ui.clipboard "Copy", as: :btn, value: "Text to copy", variant: :secondary %>

# <% Copy from an element by ID %>
<input id="my_input" type="text" value="Copy this!" readonly>
<%= ui.clipboard "Copy", as: :btn, source_id: "my_input", variant: :outline %>

# <% With tooltip feedback %>
<%= ui.clipboard "Copy", source_id: "text_element", tooltip: "Click to copy", success_text: "Copied!" %>
Block contentText or HTML. Alternative to passing text as first argument.
Props
PropTypeDefaultDescription
asSymbolnilRender as another UI component (e.g., :btn). When nil, renders as a span.
valueStringnilThe text content to copy. Use this OR source_id.
source_idStringnilID of the element whose text content should be copied. Use this OR value.
success_textString"Copied!"Text shown after successful copy (replaces button text or tooltip).
tooltipStringnilTooltip text shown on hover. Enables tooltip functionality when set.
tooltip_successStringnilTooltip text shown after successful copy. Defaults to success_text if not provided.
tooltip_placementString"top"Position of the tooltip relative to the element.

Also accepts any HTML attributes via **options (e.g., id:, data:, aria:). class: is also supported for custom styling.

Examples

Copy from input field

<%= ui.group do %>
  <input id="clipboard_input" type="text" class="form__field form__field-readonly" value="Copy this!" readonly>
  <%= ui.clipboard "Copy", as: :btn, source_id: "clipboard_input", variant: :outline, class: "min-w-32" %>
<% end %>

Copy with tooltip

Any content to copy Copy
<div class="flex items-baseline gap-1">
  <span id="clipboard_text">Any content to copy</span>
  <%= ui.clipboard "Copy", class: "link", source_id: "clipboard_text", tooltip: "Click to copy", success_text: "Content copied!" %>
</div>

Icon button with direct value

<div class="flex items-baseline gap-1">
  <%= ui.clipboard ui.icon("clipboard"), as: :btn, size: :icon_xs, variant: :secondary, value: "https://example.com", success_text: "URL copied!", tooltip: "Copy URL" %>
  <%= ui.clipboard ui.icon("clipboard"), as: :btn, size: :icon_sm, variant: :secondary, value: "https://example.com", success_text: "URL copied!", tooltip: "Copy URL" %>
  <%= ui.clipboard ui.icon("clipboard"), as: :btn, size: :icon_md, variant: :secondary, value: "https://example.com", success_text: "URL copied!", tooltip: "Copy URL" %>
  <%= ui.clipboard ui.icon("clipboard"), as: :btn, size: :icon_lg, variant: :secondary, value: "https://example.com", success_text: "URL copied!", tooltip: "Copy URL" %>
</div>