RRobloxUI
BrowseThemeSubmit
RRobloxUI β€” Roblox UI Components Marketplace
Theme ReferencePrivacy
Drag Thumbnail β€” RobloxUI
  1. Home
  2. /
  3. Containers
  4. /
  5. Drag Thumbnail
Live Previewrunning real Luau in your browser
Booting Luau VM…
Preview of Drag Thumbnail β€” executed via in-browser Luau VM (wasmoon)

Drag Thumbnail

TSX + LuauFree

A draggable component thumbnail with ghost image, drop target highlighting, and snap-to-grid behavior. Essential for inventory and hotbar rearrangements.

Details

AuthorRobloxUI Team
FrameworkRoblox-TS + React-Luau
CategoryContainers
Dependencies@rbxts/react, @robloxui/theme
Theme Tokenscolors.bgTertiary, colors.primary, colors.accent
Last UpdatedJuly 22, 2026
import React, { useState } from "@rbxts/react";
import { useTheme } from "@robloxui/theme";

interface DragThumbProps {
  icon: string;
  size?: number;
  onDragStart?: () => void;
  onDragEnd?: (position: UDim2) => void;
}

export function DragThumb({ icon, size = 48, onDragStart, onDragEnd }: DragThumbProps) {
  const { colors } = useTheme();
  const [isDragging, setIsDragging] = useState(false);
  const [dragPos, setDragPos] = useState(UDim2.fromScale(0, 0));

  return (
    <frame
      BackgroundColor3={isDragging ? colors.primary : colors.bgTertiary}
      Size={new UDim2(0, size, 0, size)}
      Position={dragPos}
    >
      <uicorner CornerRadius={new UDim(0, 8)} />
      <imagelabel Image={icon} Size={new UDim2(1, -8, 1, -8)} Position={new UDim2(0.5, 0, 0.5, 0)} AnchorPoint={new Vector2(0.5, 0.5)} BackgroundTransparency={1} />
      {isDragging && <uistroke Thickness={2} Color={colors.accent} />}
    </frame>
  );
}