func _render(ctx: Component.Context):
	var list := ctx.use_array([
		{ text = "a", id = _generate_unique_id(), checked = false },
		{ text = "b", id = _generate_unique_id(), checked = false },
	])

	var list_children = []
	for item_i in list.size():
		var item = list.at(item_i)
		list_children.append({
			node_type = HBoxContainer,
			size_flags_horizontal = Control.SIZE_EXPAND_FILL,
			id = item.id,
			children = [
				{
					node_type = CheckBox,
					button_pressed = item.checked,
					on_toggled = func(toggled_on: bool):
						list.set_at(item_i, list.at(item_i).merged({ checked = toggled_on }, true)),
				},
				{
					node_type = Button,
					disabled = item_i == 0,
					text = "↑",
					on_pressed = func(): list.swap(item_i, item_i - 1),
				},
				{
					node_type = Button,
					text = "↓",
					disabled = item_i >= list.size() - 1,
					on_pressed = func(): list.swap(item_i, item_i + 1),
				},
				{
					node_type = LineEdit,
					editable = not item.checked,
					custom_minimum_size = Vector2(100, 0),
					size_flags_horizontal = Control.SIZE_EXPAND_FILL,
					text = item.text,
					on_text_changed = func(new_text):
						list.set_at(item_i, list.at(item_i).merged({ text = new_text }, true)),
				},
				{
					node_type = Button,
					theme_type_variation = "RedButton",
					icon = IconTexture2D.create("delete_red"),
					on_pressed = func(): list.remove_at(item_i),
				},
			]
		})
	return {
		node_type = VBoxContainer,
		init = func(e: VBoxContainer):
				e.set_anchors_and_offsets_preset(Control.PRESET_TOP_WIDE),
		children = list_children + [
			{
				node_type = Button,
				text = "+",
				on_pressed = func(): list.append({
					text = "newer item",
					id = _generate_unique_id(),
					checked = false,
				}),
			}
		],
	}