Build responsive, interactive, and beautifully styled slide blueprints using custom data-attributes.
Add data-text="field" to any HTML element to make it editable in the slide inspector and canvas. Supports placeholder and data-char-limit.
<!-- Basic editable title -->
<h1 data-text="title" data-char-limit="50" placeholder="Judul Utama..."></h1>
<!-- Subtitle / description -->
<p data-text="subtitle" data-char-limit="120" placeholder="Sub-judul..."></p>
Add data-asset="slotName" to create an image container. Automatically handles image rendering, crop focal points, and upload triggers.
<!-- Main image slot -->
<div data-asset="default" label="Foto Utama" icon="ph-image" class="absolute inset-0"></div>
<!-- Secondary slot without floating upload button -->
<div data-asset="bg" hide-button="true" class="absolute inset-0"></div>
Binds active regional metadata (Logo, Organization name, City/Province location) directly into elements.
<!-- Active region emblem/logo -->
<img data-setting="logo" class="w-8 h-8 object-contain" />
<!-- Organization & Location text -->
<div data-setting="organization" class="font-bold"></div>
<div data-setting="location" class="text-gray-500"></div>
Add data-variable="key" to insert dynamic global text values configured in the editor settings (e.g. social handles, hashtags).
<!-- Renders global variable "instagram" -->
<span data-variable="instagram" class="font-mono text-xs"></span>
Use Vue's v-for loop on slide.list combined with indexed data-text="list[idx]" to create editable repeating lists or timelines.
<div v-for="(item, idx) in (slide.list || [])" :key="idx" class="flex gap-2">
<span class="font-bold">{{ idx + 1 }}.</span>
<div data-text="list[idx]" placeholder="Item..." class="flex-1"></div>
</div>
Add the no-render class to any UI element (like "+ Add Item" or position slider buttons). They will be visible in the editor but automatically hidden when exporting image files.
<!-- Button hidden on image export -->
<button @click="(slide.list = slide.list || []).push('Item baru...')"
class="no-render text-xs text-blue-500">
+ Tambah Item
</button>
<div class="h-full flex flex-col bg-white text-black w-full relative overflow-hidden">
<!-- Header with Organization Logo & Location (data-setting) -->
<div class="p-4 border-b border-gray-100 flex gap-2 items-center shrink-0 z-10 bg-white">
<div class="w-8 h-8 flex items-center justify-center">
<img data-setting="logo" class="w-full h-full object-contain" />
</div>
<div class="flex flex-col justify-center">
<div class="text-[9px] font-bold text-gray-900 leading-tight whitespace-pre-line" data-setting="organization"></div>
<div class="text-[8px] text-gray-500 leading-tight" data-setting="location"></div>
</div>
</div>
<!-- Image Slot (data-asset) -->
<div class="flex-1 relative bg-gray-100 overflow-hidden">
<div data-asset="default" label="Gambar Utama" icon="ph-image-square" class="absolute inset-0"></div>
</div>
<!-- Content Area with Editable Text Fields (data-text) -->
<div class="p-5 flex flex-col gap-1.5 shrink-0 bg-white z-10">
<div class="text-[9px] font-mono font-bold text-blue-600 tracking-wider" data-text="date" data-char-limit="35" placeholder="Tanggal Kegiatan..."></div>
<h1 class="text-base font-bold text-gray-900 leading-tight" data-text="title" data-char-limit="50" placeholder="Judul Utama Template Baru..."></h1>
<p class="text-xs text-gray-600 leading-relaxed" data-text="subtitle" data-char-limit="120" placeholder="Sub-judul atau deskripsi singkat kegiatan..."></p>
</div>
</div>