{#each fieldsByCategory() as [category, fields]}
{#if category !== '_uncategorized'}

{category}

{/if}
{#each fields as field}
{#if field.description}

{field.description}

{/if}
handleFieldChange(field.key, e.detail)} onmultiselectchange={(e: CustomEvent) => { const current = formData[field.key] || []; if (e.detail.checked) { handleFieldChange(field.key, [...current, e.detail.value]); } else { handleFieldChange( field.key, current.filter((v) => v !== e.detail.value) ); } }} onlistitemchange={(e: CustomEvent) => { const items = [...(formData[field.key] || [])]; items[e.detail.index] = e.detail.value; handleFieldChange(field.key, items); }} onlistitemremove={(e: CustomEvent) => { const items = [...(formData[field.key] || [])]; items.splice(e.detail, 1); handleFieldChange(field.key, items); }} onlistitemadd={() => { const items = [...(formData[field.key] || [])]; items.push(getDefaultValueForType(field.config.item_type || 'text')); handleFieldChange(field.key, items); }} > {@html getFieldComponent(field)}
{#if errors[field.key]}

{errors[field.key]}

{/if}
{/each}
{/each} {#if onSave && !readonly}
{/if}