Agent skill

Fantasia Drag Drop

by vishiri in vishiri/fantasia-archive

List and table drag-and-drop policy for Fantasia Archive: vue-draggable-plus for QList and flat lists; quasar-ui-q-draggable-table (v-draggable-table) for QTable row reorder; @he-tree/vue Draggable…

GPL-3.0Auto-check passed

Install Fantasia Drag Drop

skills CLI
$ npx skills add vishiri/fantasia-archive --skill fantasia-drag-drop -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install vishiri/fantasia-archive fantasia-drag-drop --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/vishiri/fantasia-archive.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/fantasia-drag-drop .claude/skills/fantasia-drag-drop && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
fantasia-drag-drop
GitHub stars
409
Token cost
~2.6k tokens
SKILL.md length
549 words
Files
1
Skills in repo
35
Repo updated
First seen
Licence
GPL-3.0

At a glance

List and table drag-and-drop policy for Fantasia Archive: vue-draggable-plus for QList and flat lists; quasar-ui-q-draggable-table (v-draggable-table) for QTable row reorder; @he-tree/vue Draggable…

  • Adding reorder UX to settings lists
  • SKILL.md covers Policy summary, vue-draggable-plus (default…, quasar-ui-q-draggable-table… and Trees — use he-tree, not…, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Documenting DnD dependencies

What it does

Fantasia Drag Drop is an agent skill from vishiri/fantasia-archive. List and table drag-and-drop policy for Fantasia Archive: vue-draggable-plus for QList and flat lists; quasar-ui-q-draggable-table (v-draggable-table) for QTable row reorder; @he-tree/vue Draggable for trees. Use when adding reorder UX to settings lists, worlds, tables, or documenting DnD dependencies.

Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It works with Vue.js. The repository describes itself as: A world-builder's best friend! The licence is GPL-3.0.

When your agent uses it

  • Adding reorder UX to settings lists
  • Documenting DnD dependencies

Example prompts

  • “/fantasia-drag-drop”

What it can do on your machine

Read from SKILL.md and the folder at commit 26d4648. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are vue and typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • vue-draggable-plus.pages.dev
    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Fantasia Drag Drop loads about 2.6k tokens when it runs. Until then it costs about 81 tokens; SKILL.md has 549 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~81
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from vishiri/fantasia-archive at commit 26d4648, republished under its GPL-3.0 licence (© vishiri). 549 words, ~2,596 tokens.

Download SKILL.mdSave it as .claude/skills/fantasia-drag-drop/SKILL.md (or your agent's skills folder).
name
fantasia-drag-drop
description
List and table drag-and-drop policy for Fantasia Archive: vue-draggable-plus for QList and flat lists; quasar-ui-q-draggable-table (v-draggable-table) for QTable row reorder; @he-tree/vue Draggable for trees. Use when adding reorder UX to settings lists, worlds, tables, or documenting DnD dependencies.

Fantasia Archive — drag-and-drop (lists and tables)

Full policy: fa-drag-drop-lists.mdc.

Policy summary

SurfaceLibraryNotes
Flat lists (QList, QItem, vertical rows)vue-draggable-plusDefault for any list reorder
QTable row reorderquasar-ui-q-draggable-tablev-draggable-table, boot q-draggable-table
Hierarchical trees@he-tree/vue DraggableBuilt-in DnD — do not use vue-draggable-plus on trees
Floating / spatial moveCustom pointer sessionssrc/scripts/floatingWindows/ — not this skill

Deps in root package.json: vue-draggable-plus, quasar-ui-q-draggable-table.

vue-draggable-plus (default lists)

Docs: vue-draggable-plus.pages.dev.

Component example (QList body)
vue
<script setup lang="ts">
import { ref } from 'vue'
import { VueDraggable } from 'vue-draggable-plus'

const worlds = ref([
  { id: 'a', displayName: 'Realm' },
  { id: 'b', displayName: 'Other' }
])

function onWorldReorder (): void {
  // Persist sort_order from worlds.value order — IPC / store
}
</script>

<template>
  <q-list data-test-locator="worldsReorderList">
    <VueDraggable
      v-model="worlds"
      :animation="150"
      handle=".world-drag-handle"
      @update="onWorldReorder"
    >
      <q-item
        v-for="world in worlds"
        :key="world.id"
        data-test-locator="worldsReorderRow"
      >
        <q-item-section avatar>
          <q-icon
            class="world-drag-handle cursor-grab"
            name="mdi-drag"
            data-test-locator="worldsReorderHandle"
          />
        </q-item-section>
        <q-item-section>{{ world.displayName }}</q-item-section>
      </q-item>
    </VueDraggable>
  </q-list>
</template>
Composable / target container

Sortable root not component root → useDraggable(el, list, options) or v-draggable with selector — see upstream target container docs.

Persistence
  • Reorder updates in-memory array first; on @update / onEnd, write domain order (e.g. sort_order) via runFaActionAwait or store → projectContent IPC.
  • Drag wiring in feature scripts/; thin .vue imports composable or VueDraggable only.
Vertical tab strips (DialogProjectSettings worlds list)

Vertical category tabs reuse faDragDrop_manager (faVerticalDraggableTabsSortableDragOptions, document drag cursor from faDragDropDocumentDragCursorWiring.ts, hideNativeSortableDragGhost, resolveFaVerticalDraggableTabIdUnderPoint) + faVerticalDraggableTabListPointerHoverWiring.ts + global SCSS src/css/theme/custom-components/faVerticalDraggableTabs.scss. Reusable element FaVerticalDraggableTabList. DialogProjectSettingsWorldsTabList: vue-draggable-plus + movement threshold so short clicks select tab without drag. Palette swatch reorder: same library in DialogProjectSettingsWorldColorPaletteEditor.

Horizontal open document tabs (ProjectAppControlBarOpenedTabs)

Workspace header strip: VueDraggable horizontal over q-route-tab children. Reuse Sortable forceFallback + hideNativeSortableDragGhost / document drag cursor from faDragDrop_manager. Feature wiring: projectAppControlBarTabsSortableDragOptionsWiring, edge scroll projectAppControlBarTabsDragEdgeScroll* (Quasar tabs content overflow: hidden), wheel projectAppControlBarTabsWheelScroll*. Domain: openedDocumentTabReorder → store reorderDocumentTabs. Native link drag off: draggable="false" on route tabs.

Pointer hover (not CSS :hover): Sortable sticky :hover wrong after reorder → FaVerticalDraggableTabList tracks pointerHoverItemId via pointermove / pointerleave; tab slot gets isPointerHovered → faVerticalDraggableTabs__tab--pointerHover. After drag end, clear hover then resync from last client point after FA_VERTICAL_DRAGGABLE_TABS_SORTABLE_ANIMATION_MS. Flat skin: Quasar-like wash; fantasy: gold edge glow on pointer class.

Show full SKILL.md (290 more words)Show less
Vertical draggable tab strips (reusable column)

Shared pattern: left column draggable tabs + optional Add row (master–detail settings dialogs). Not horizontal QTabs replacement — vertical reorderable list chrome only.

Reference implementations

SFCRole
DialogProjectSettingsWorldsTabList.vueWorlds column; default width 240px
DialogProjectSettingsDocumentTemplatesTabList.vueDocument templates column; tab-list-width-px="360"
DialogProjectSettingsWorldsTabItem.vue / DialogProjectSettingsDocumentTemplatesTabItem.vueSingle tab row (faVerticalDraggableTabs__tab BEM)

DOM skeleton (outer host must include class faVerticalDraggableTabs):

text
.faVerticalDraggableTabs                    ← :style from buildFaVerticalDraggableTabsRootStyle
  .faVerticalDraggableTabs__scroll.hasScrollbar
    VueDraggable.faVerticalDraggableTabs__draggable
      *TabItem × N                           ← role=button, class faVerticalDraggableTabs__tab
    .faVerticalDraggableTabs__divider        ← q-separator
    .faVerticalDraggableTabs__addButtonRow
      q-btn.faVerticalDraggableTabs__addButton

Import global styles once per feature via @use / src= on colocated unscoped SCSS (see DialogProjectSettings.worldsTabList.unscoped.scss). Base tokens: src/css/theme/custom-components/_faVerticalDraggableTabs.variables.scss.

Layout props (TabList host SFC; all optional with defaults):

PropDefaultMaps to CSS variable
tabListWidthPx240--fa-vertical-draggable-tabs-column-width
tabPadding'4px 40px 4px 60px'--fa-vertical-draggable-tabs-tab-padding
tabTextAlign'left'--fa-vertical-draggable-tabs-tab-text-align
tabJustifyContent'flex-start'--fa-vertical-draggable-tabs-tab-justify-content
tabLabelTextTransform'none'--fa-vertical-draggable-tabs-tab-label-text-transform
tabLabelFontSize'14px'--fa-vertical-draggable-tabs-tab-label-font-size
densefalse (document templates TabList default true)--fa-vertical-draggable-tabs-tab-min-height (36px when dense; SCSS fallback 48px)

Types: types/I_faVerticalDraggableTabs.ts. Defaults + buildFaVerticalDraggableTabsRootStyle: import from faDragDrop_manager.

TabList script pattern

ts
import {
  FA_VERTICAL_DRAGGABLE_TABS_TAB_JUSTIFY_CONTENT_DEFAULT,
  FA_VERTICAL_DRAGGABLE_TABS_TAB_LABEL_FONT_SIZE_DEFAULT,
  FA_VERTICAL_DRAGGABLE_TABS_TAB_LABEL_TEXT_TRANSFORM_DEFAULT,
  FA_VERTICAL_DRAGGABLE_TABS_TAB_PADDING_DEFAULT,
  FA_VERTICAL_DRAGGABLE_TABS_TAB_TEXT_ALIGN_DEFAULT,
  buildFaVerticalDraggableTabsRootStyle
} from 'app/src/scripts/faDragDrop/faDragDrop_manager'

const tabListRootStyle = computed(() => buildFaVerticalDraggableTabsRootStyle({
  columnWidthPx: props.tabListWidthPx,
  tabDense: props.dense,
  tabJustifyContent: props.tabJustifyContent,
  tabLabelFontSize: props.tabLabelFontSize,
  tabLabelTextTransform: props.tabLabelTextTransform,
  tabPadding: props.tabPadding,
  tabTextAlign: props.tabTextAlign
}))

Drag wiring (both reference TabLists):

  • faVerticalDraggableTabsSortableDragOptions on VueDraggable
  • touch-start-threshold="5" — tap-to-select without drag
  • @start → applyFaVerticalDraggableTabsDocumentDragCursor (from faDragDrop_manager)
  • @end → clearFaVerticalDraggableTabsDocumentDragCursor + emit reordered array
  • Root computed class faVerticalDraggableTabs--listDragging while dragging
  • Tab item modifiers: --active, --dragging, --error

Tests: src/scripts/faDragDrop/_tests/buildFaVerticalDraggableTabsRootStyle.vitest.test.ts; TabList Vitest stubs VueDraggable; Playwright uses data-test-locator on list, tabs, add button.

quasar-ui-q-draggable-table (QTable rows)

Registered globally via src/boot/q-draggable-table.ts (quasar.config.ts boot).

vue
<q-table
  v-draggable-table="{
    options: { mode: 'row' },
    onDrop
  }"
  :rows="rows"
  :columns="columns"
  row-key="id"
/>
ts
function onDrop (from: number, to: number): void {
  const next = [...rows.value]
  next.splice(to, 0, next.splice(from, 1)[0])
  rows.value = next
  // Persist row order
}
  • Import quasar-ui-q-draggable-table/dist/index.css from boot manager only (no per-SFC duplicate).
  • Avoid virtual-scroll on same QTable when using row drag.
  • Upstream: github.com/bd2051/q-draggable-table

Trees — use he-tree, not vue-draggable-plus

Nested hierarchies → fantasia-he-tree: Draggable from @he-tree/vue owns reorder semantics.

World template layout tree

Project Settings world template layout uses he-tree Draggable — see fa-drag-drop-lists.mdc World template layout tree for component map, commit policy, wiring, validation, rename menu, tests. Do not duplicate that narrative here.

Tests

  • Vitest: mock vue-draggable-plus when mount-only smoke; test reorder helpers in scripts/_tests with pure array moves.
  • Playwright: data-test-locator on handles; pointer APIs per playwright-tests.mdc.

© vishiri, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .cursor/skills/fantasia-drag-drop of vishiri/fantasia-archive.

Open the folder on GitHubat commit 26d4648

Compare with similar skills

Fantasia Drag Drop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Fantasia Drag Drop compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Fantasia Drag Drop this skillvishiri/fantasia-archive409—~2.6kAutomated safety check: PassGPL-3.0
Tailwindcss Developmentanonaddy/anonaddy4.9k10 repos~865Automated safety check: PassMIT
GSAP Core Animationgreensock/gsap-skills16k3 repos~3.7kAutomated safety check: PassMIT
GSAP in Vue, Nuxt and Sveltegreensock/gsap-skills16k3 repos~2.6kAutomated safety check: PassMIT
Vuetify Playgroundvuetifyjs/vuetify41k—~730Automated safety check: PassCustom licence
Inertia Vue Developmentanonaddy/anonaddy4.9k3 repos~3.4kAutomated safety check: PassMIT

Similar skills

  • Tailwindcss Development

    anonaddy/anonaddy

    Always invoke when the user's message includes 'tailwind' in any form.

    4.9k GitHub starsUsed in 10 repos~865 tokens
    Frontend & DesignAuto-check passed
  • GSAP Core Animation

    greensock/gsap-skills

    Covers the GSAP core API for tweens, easing, staggers, defaults and matchMedia, and when to choose GSAP over CSS animations or other JavaScript animation libraries.

    16k GitHub starsUsed in 3 repos~3.7k tokens
    Frontend & DesignAuto-check passed
  • GSAP in Vue, Nuxt and Svelte

    greensock/gsap-skills

    Shows how to use GSAP in Vue, Nuxt, Svelte and other lifecycle-based frameworks: create after mount, scope selectors to the component, and revert on unmount.

    16k GitHub starsUsed in 3 repos~2.6k tokens
    Frontend & DesignAuto-check passed
  • Vuetify Playground

    vuetifyjs/vuetify

    Maintains the Vuetify repo's local Playground.vue so contributors get a realistic reproduction and a short demo they can paste into a pull request description.

    41k GitHub stars~730 tokensUpdated today
    Frontend & DesignAuto-check passed
  • Inertia Vue Development

    anonaddy/anonaddy

    Develops Inertia.js v3 Vue client-side applications. An agent skill from anonaddy/anonaddy.

    4.9k GitHub starsUsed in 3 repos~3.4k tokens
    Auto-check passed
  • Web Clone

    Jane-xiaoer/claude-skill-web-clone

    网站复刻 / 克隆方法论。USE WHEN 用户说 复刻网站、克隆网站、clone website、抄个站、仿站、 照着这个站做一个、reproduce site、还原某个网页效果、把这个站搬下来改成我的、 复刻某个交互/WebGL/Canvas/Three.js 效果。提供「先拿真源码 → 判路径 → 逆向拆解 → 搭工程 → 替换内容」的可移植决策树,覆盖静态站 /…

    1k GitHub starsUsed in 1 repo~2.7k tokens
    Game DevelopmentAuto-check passed

More from vishiri/fantasia-archive

All 35 skills in this repo
  • Caveman Commit

    vishiri/fantasia-archive

    Ultra-compressed commit message generator. An agent skill from vishiri/fantasia-archive.

    409 GitHub starsUsed in 13 repos~642 tokens
    Auto-check passed
  • Caveman Review

    vishiri/fantasia-archive

    Ultra-compressed code review comments. An agent skill from vishiri/fantasia-archive.

    409 GitHub starsUsed in 12 repos~674 tokens
    Auto-check passed
  • Caveman Compress

    vishiri/fantasia-archive

    Compress natural language memory files (CLAUDE.md, todos, preferences) into caveman format to save input tokens.

    409 GitHub starsUsed in 9 repos~1.1k tokens
    Auto-check: notes
  • Cavecrew

    vishiri/fantasia-archive

    Decision guide for delegating to caveman-style subagents. An agent skill from vishiri/fantasia-archive.

    409 GitHub starsUsed in 7 repos~1k tokens
    Auto-check passed
  • Caveman Help

    vishiri/fantasia-archive

    Quick-reference card for all caveman modes, skills, and commands.

    409 GitHub starsUsed in 6 repos~572 tokens
    Auto-check passed
  • Fantasia Context Menu Dividers

    vishiri/fantasia-archive

    Context menu divider policy: full primary-bright group separators vs low-opacity separatorAlt between consecutive items in the same group.

    409 GitHub stars~741 tokensUpdated 3 days ago
    Auto-check passed

Works with

Questions about Fantasia Drag Drop

What does Fantasia Drag Drop do?

List and table drag-and-drop policy for Fantasia Archive: vue-draggable-plus for QList and flat lists; quasar-ui-q-draggable-table (v-draggable-table) for QTable row reorder; @he-tree/vue Draggable…. Fantasia Drag Drop is an agent skill from vishiri/fantasia-archive. List and table drag-and-drop policy for Fantasia Archive: vue-draggable-plus for QList and flat lists; quasar-ui-q-draggable-table (v-draggable-table) for QTable row reorder; @he-tree/vue Draggable for trees.

When should I use Fantasia Drag Drop?

Fantasia Drag Drop fits situations like: adding reorder UX to settings lists; documenting DnD dependencies.

How do I install Fantasia Drag Drop in Claude Code?

Run `npx skills add vishiri/fantasia-archive --skill fantasia-drag-drop -a claude-code`. Or copy the skill folder (.cursor/skills/fantasia-drag-drop in vishiri/fantasia-archive) into .claude/skills/fantasia-drag-drop in your project. Claude Code loads it when a task matches its description.

How do I install Fantasia Drag Drop in Codex?

Run `npx skills add vishiri/fantasia-archive --skill fantasia-drag-drop -a codex`. Or copy the skill folder (.cursor/skills/fantasia-drag-drop in vishiri/fantasia-archive) into .agents/skills/fantasia-drag-drop in your project. Codex loads it when a task matches its description.

Can I use Fantasia Drag Drop in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vishiri/fantasia-archive --skill fantasia-drag-drop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/fantasia-drag-drop, .gemini/skills/fantasia-drag-drop, .github/skills/fantasia-drag-drop and .opencode/skills/fantasia-drag-drop in your project.

What does Fantasia Drag Drop need to run?

SKILL.md names no scripts, command-line tools or credentials: Fantasia Drag Drop is instructions for the agent only.

Does Fantasia Drag Drop access the network?

SKILL.md names 2 domains. As links in the text: vue-draggable-plus.pages.dev and github.com. This is read from the text; nothing was executed.

Is Fantasia Drag Drop safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Fantasia Drag Drop use?

Fantasia Drag Drop is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Fantasia Drag Drop use?

About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Fantasia Drag Drop?

Skills that share tags, products or a category with Fantasia Drag Drop: Tailwindcss Development (anonaddy/anonaddy, 4.9k stars), GSAP Core Animation (greensock/gsap-skills, 16k stars), GSAP in Vue, Nuxt and Svelte (greensock/gsap-skills, 16k stars) and Vuetify Playground (vuetifyjs/vuetify, 41k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Fantasia Drag Drop?

vishiri (a GitHub user) maintains it in vishiri/fantasia-archive, which has 409 GitHub stars. The repository holds 35 skills in this directory. The repository was last updated on October 7, 2026.

Source: vishiri/fantasia-archive on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.