{#key $refreshPanel}
{#each ALL_ATTRIBUTES as category(category.categoryName)}
{category.categoryName}
{#each category.specs as spec(spec.id)}
{#if validWidgetAttribute(spec, target)}
{#if spec.type === "string"}
updateAttribute(spec, target, e.detail)}
on:input={(e) => updateAttribute(spec, target, e.detail)}
disabled={!$uiState.uiUnlocked || !spec.editable}
label={spec.name}
max_lines={1}
/>
{:else if spec.type === "boolean"}
updateAttribute(spec, target, e.detail)}
disabled={!$uiState.uiUnlocked || !spec.editable}
label={spec.name}
/>
{:else if spec.type === "number"}
updateAttribute(spec, target, e.detail)}
/>
{:else if spec.type === "enum"}
updateAttribute(spec, target, e.detail)}
/>
{/if}
{:else if node}
{#if validNodeProperty(spec, node)}
{#if spec.type === "string"}
updateProperty(spec, e.detail)}
on:input={(e) => updateProperty(spec, e.detail)}
label={spec.name}
disabled={!$uiState.uiUnlocked || !spec.editable}
max_lines={1}
/>
{:else if spec.type === "boolean"}
updateProperty(spec, e.detail)}
/>
{:else if spec.type === "number"}
updateProperty(spec, e.detail)}
/>
{:else if spec.type === "enum"}
updateProperty(spec, e.detail)}
/>
{/if}
{:else if validNodeVar(spec, node)}
{#if spec.type === "string"}
updateVar(spec, e.detail)}
on:input={(e) => updateVar(spec, e.detail)}
label={spec.name}
disabled={!$uiState.uiUnlocked || !spec.editable}
max_lines={1}
/>
{:else if spec.type === "boolean"}
updateVar(spec, e.detail)}
disabled={!$uiState.uiUnlocked || !spec.editable}
label={spec.name}
/>
{:else if spec.type === "number"}
updateVar(spec, e.detail)}
/>
{:else if spec.type === "enum"}
updateVar(spec, e.detail)}
/>
{/if}
{/if}
{:else if !node && !target && validWorkflowAttribute(spec)}
{#if spec.type === "string"}
updateWorkflowAttribute(spec, e.detail)}
on:input={(e) => updateWorkflowAttribute(spec, e.detail)}
label={spec.name}
disabled={!$uiState.uiUnlocked || !spec.editable}
max_lines={1}
/>
{:else if spec.type === "boolean"}
updateWorkflowAttribute(spec, e.detail)}
disabled={!$uiState.uiUnlocked || !spec.editable}
label={spec.name}
/>
{:else if spec.type === "number"}
updateWorkflowAttribute(spec, e.detail)}
/>
{:else if spec.type === "enum"}
updateWorkflowAttribute(spec, e.detail)}
/>
{/if}
{/if}
{/each}
{/each}
{/key}