{% extends "base.html" %} {% block title %}{{ 'New element' if is_new else 'Edit element' }} — Waikiki{% endblock %} {% block content %}

{{ 'New element' if is_new else 'Edit element' }}

← All elements
{# Describe it instead of writing it. The draft lands in the form below rather than being saved: an element ships arbitrary HTML and JS into every page that uses it, so a human reads it here and saves deliberately. #}

It fills the form below — nothing is saved until you press Save, so read it first.

HTML (shadow DOM · {{ '{{field}}' }})
CSS (scoped)
JS (root, props, host)

HTML/CSS/JS render inside a Shadow DOM — CSS is scoped and JS is encapsulated. Field values interpolate as {{ '{{field}}' }} (escaped); the JS runs with root (shadow root), props, and host. Theme CSS variables (e.g. var(--accent)) pierce into the shadow DOM. Templates and pages invoke the element with ```{{ el.slug or 'slug' }} and must supply its required fields.

Cancel

Preview (sample data)

Click Preview to render with sample field values.
{% endblock %} {% block scripts %} {% endblock %}