<templatex-if="form.node.kind==='list'"><div><templatex-for="(entry,index) in form.node.entries":key="entry.id"><divclass="simple-list-row"><spanclass="step-number"x-text="index+1"></span><templatex-if="entry.kind==='text'"><input:aria-label="t('list_value_4318c3')"x-model="entry.value":placeholder="t('value_8dce17')"></template><templatex-if="entry.kind==='person'"><buttontype="button"class="grow person-select"@click="editDataPeople(form.node,entry)"x-text="dataPersonName(entry.value)"></button></template><buttontype="button":aria-label="t('move_entry_up_647a57')"@click="moveNode(form.node,index,-1)":disabled="!index"><spanx-text="t('symbol_9555ff')"></span></button><buttontype="button":aria-label="t('move_entry_down_bc86af')"@click="moveNode(form.node,index,1)":disabled="index===form.node.entries.length-1"><spanx-text="t('symbol_fc4866')"></span></button><buttontype="button"class="text danger":aria-label="t('remove_entry_18ffc8')"@click="form.node.entries.splice(index,1)"><spanx-text="t('symbol_67fba2')"></span></button></div></template><divclass="actions"><buttontype="button"@click="form.node.entries[0]?.kind==='person'?editDataPeople(form.node):addNode(form.node)"><spanx-text="t('add_item_51e41d')"></span></button><buttontype="button"@click="openBulk(form.node)"><spanx-text="t('paste_rows_24d667')"></span></button></div></div></template>
<templatex-if="form.node.kind!=='list'"><div><divclass="matrix-head"><span><spanx-text="t('project_key_1c60ec')"></span></span><span><spanx-text="t('responsible_people_in_order_d69f7b')"></span></span></div><templatex-for="(group,index) in form.node.entries":key="group.id"><divclass="matrix-row"><input:aria-label="t('dictionary_key_9777bd')"x-model="group.key":placeholder="t('project_name_ab9773')"><divclass="matrix-people"><templatex-for="(entry,i) in group.entries":key="entry.id"><spanclass="matrix-person"><bx-text="i+1"></b><spanx-text="dataPersonName(entry.value)"></span><buttontype="button":aria-label="t('move_person_earlier_52af52')"x-show="i>0"@click="moveNode(group,i,-1)"><spanx-text="t('symbol_817964')"></span></button><buttontype="button":aria-label="t('remove_person_2ea467')"@click="group.entries.splice(i,1)"><spanx-text="t('symbol_67fba2')"></span></button></span></template><buttontype="button"class="text"@click="editDataPeople(group)":aria-label="t('add_person_to_4670b9')+group.key"><spanx-text="t('person_485c1d')"></span></button></div><buttontype="button"class="text danger":aria-label="t('remove_project_333b0c')"@click="form.node.entries.splice(index,1)"><spanx-text="t('symbol_67fba2')"></span></button></div></template><divclass="actions"><buttontype="button"@click="addDataGroup()"><spanx-text="t('add_project_key_71d0f2')"></span></button><buttontype="button"@click="openBulk(form.node)"><spanx-text="t('paste_spreadsheet_rows_e07917')"></span></button></div></div></template>
<divclass="inline-people"x-show="dataPersonTarget"><divclass="section-line"><strongx-text="t('add_to_10956d')+(dataPersonTarget?.key || form.name)"></strong><buttontype="button"@click="dataPersonTarget=null"><spanx-text="t('done_e9b450')"></span></button></div><inputtype="search":aria-label="t('find_person_or_email_b640f7')"x-model="dataPersonQuery":placeholder="t('search_name_or_enter_email_863139')"><divclass="cover-options"><templatex-for="p in people.filter(p=>[p.display_name,p.email,p.username].some(v=>v?.toLowerCase().includes(dataPersonQuery.toLowerCase())))":key="p.id"><buttontype="button"@click="addDataPerson(p.id)":disabled="dataPersonTarget?.entries.some(e=>e.value===p.id)"x-text="p.display_name"></button></template><buttontype="button"x-show="/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(dataPersonQuery)"@click="addDataPerson(dataPersonQuery.toLowerCase())"x-text="t('add_e2b431')+dataPersonQuery"></button></div></div>
</div></template>
<divclass="data-tree compact-data-tree":class="{'structure-mode':dataAdvanced}"x-show="dataAdvanced || !simpleData(form.node)"><templatex-for="row in nodeRows(form.node)":key="row.node.id"><divclass="data-row":class="['data-depth-'+row.depth,{'container-row':dataContainer(row.node)}]">
<selectx-show="dataAdvanced"class="data-type":aria-label="t('value_type_a95648')":value="row.node.kind"@change="setNodeKind(row.node,$event.target.value)"><templatex-for="kind in nodeKinds"><option:value="kind":selected="row.node.kind===kind"x-text="kind==='duration'?t('duration_minutes_77d597'):label(kind)"></option></template></select>
<templatex-if="row.node.kind==='person'"><divclass="person-value"><select:aria-label="t('registered_person_734f05')":value="people.some(p=>p.id===row.node.value)?row.node.value:''"@change="row.node.value=$event.target.value"><optionvalue=""x-text="t('use_email_address_c12ddf')"></option><templatex-for="person in people":key="person.id"><option:value="person.id":selected="row.node.value===person.id"x-text="person.display_name"></option></template></select><input:aria-label="t('person_email_1ed8a9')":type="people.some(p=>p.id===row.node.value)?'text':'email'"x-show="!people.some(p=>p.id===row.node.value)"x-model="row.node.value":placeholder="t('person_example_com_371ab9')"></div></template>
<label><spanx-text="t('iteration_collection_bd6344')"></span><select:aria-label="t('iteration_collection_bd6344')":value="simpleSource(iteration.source,'collection')"@change="selectSimpleSource(iteration.source,$event.target.value,'collection')"><optionvalue="literal"x-text="t('builder_choose_collection')"></option><templatex-for="option in sourceOptions('collection')":key="option.id"><option:value="option.id":selected="simpleSource(iteration.source,'collection')===option.id"x-text="option.name"></option></template><optionvalue="advanced"x-text="t('custom_binding')"></option></select></label>
<sectionclass="recipe-section"><divclass="section-line"><h3><spanx-text="t('builder_outputs')"></span></h3><select:aria-label="t('add_output_block_00047b')"@change="if($event.target.value)addBlock($event.target.value);$event.target.value=''"><optionvalue=""x-text="t('add_another_resource')"></option><optgroup:label="t('schedules_26d9d0')"><templatex-for="kind in ['priority','rotation']"><option:value="kind"x-text="label(kind)"></option></template></optgroup><optgroup:label="t('escalation_policies_ad128e')"><optionvalue="escalation"x-text="label('escalation')"></option></optgroup><optgroup:label="t('routing_rules_49ce36')"><optionvalue="route"x-text="label('route')"></option></optgroup></select></div>
<pclass="constructor-empty"x-show="!form.blocks.length"x-text="t('builder_add_output')"></p><templatex-for="(block,index) in form.blocks":key="block.id"><sectionclass="generation-block":data-block-id="block.id">
<divclass="binding-grid"><templatex-for="field in fieldsFor(block.kind)":key="field.key"><divclass="recipe-field":class="{'compact-scalar-field':['number','date','time','boolean'].includes(field.type) && block.fields[field.key]?.kind==='literal','compact-number-field':field.type==='number','compact-time-field':field.type==='time'}"><label:for="block.id+'-'+field.key"x-text="field.label"></label>
<templatex-if="field.key!=='name'"><div><selectx-show="['list','schedule','policy'].includes(field.type) || block.fields[field.key]?.kind!=='literal'":id="block.id+'-'+field.key":aria-label="field.label":value="simpleSource(block.fields[field.key],field.type)"@change="selectSimpleSource(block.fields[field.key],$event.target.value,field.type)"><optionvalue="literal"x-text="t('fixed_value_191429')"></option><templatex-for="option in sourceOptions(field.type)":key="option.id"><option:value="option.id":selected="simpleSource(block.fields[field.key],field.type)===option.id"x-text="option.name"></option></template><optionvalue="advanced"x-text="simpleSource(block.fields[field.key],field.type)==='advanced'?bindingSummary(block.fields[field.key]):t('custom_binding')"></option></select>
<templatex-if="block.kind==='escalation'"><div><templatex-for="(step,stepIndex) in block.steps":key="stepIndex"><divclass="generation-step"><spanclass="flow-arrow"><spanx-text="t('symbol_fc4866')"></span></span><divclass="inline-binding inline-delay"><templatex-if="step.delay.kind==='literal'"><inputtype="number"min="0":aria-label="t('delay_in_minutes_e18c95')":value="step.delay.value"@input="step.delay.value=$event.target.value===''?null:Number($event.target.value)"></template><buttontype="button"class="binding-button"x-show="step.delay.kind!=='literal'"@click="editBinding(step.delay,'number',t('delay_in_minutes_e18c95'))"x-text="bindingSummary(step.delay)"></button><spanx-text="t('min_f4e8a8')"></span><buttontype="button"class="binding-popup-trigger":aria-label="t('bind_891f4e')+t('delay_in_minutes_e18c95')"@click="editBinding(step.delay,'number',t('delay_in_minutes_e18c95'))"x-text="t('binding_picker_button')"></button></div><select:aria-label="t('escalation_condition_5b4c13')"x-model="step.condition"><optionvalue="if-not-acked"x-text="t('if_not_acknowledged_5fc93a')"></option><optionvalue="if-not-closed"x-text="t('if_not_closed_4369ad')"></option></select><select:aria-label="t('recipient_type_32b1f5')":value="step.team_all?'team_all':step.team_random?'team_random':step.user?'person':'schedule'"@change="step.team_all=$event.target.value==='team_all';step.team_random=$event.target.value==='team_random';step.user=$event.target.value==='person'"><optionvalue="schedule"x-text="t('schedule_0a8ada')"></option><optionvalue="person"x-text="t('person_8c41ae')"></option><optionvalue="team_all"x-text="t('everyone_on_the_team_235b55')"></option><optionvalue="team_random"x-text="t('a_random_team_member_8f35f3')"></option></select><buttonx-show="!step.team_all&&!step.team_random"type="button"class="binding-button grow"@click="editBinding(step.recipient,step.user?'person':'schedule',t('escalation_recipient_9dfd31'))"x-text="bindingSummary(step.recipient)"></button><buttontype="button"class="text danger"@click="block.steps.splice(stepIndex,1)"><spanx-text="t('symbol_67fba2')"></span></button></div></template><buttontype="button"class="text"@click="addGenStep(block)"><spanx-text="t('escalation_step_72b706')"></span></button></div></template>
<templatex-if="block.kind==='route'"><div><pclass="muted"x-show="!block.conditions.length"><spanx-text="t('matches_any_alert_add_conditions_to_target_this_proj_299abf')"></span></p><templatex-for="(condition,conditionIndex) in block.conditions":key="conditionIndex"><divclass="generation-step"><spanclass="logic-key"x-text="conditionIndex?t('and_c2f934'):t('if_7be63e')"></span><select:aria-label="t('routing_field_a63fdc')"x-model="condition.field"><optionvalue="tags"x-text="t('tags_848eed')"></option><optionvalue="message"x-text="t('message_68f414')"></option><optionvalue="priority"x-text="t('priority_886cbf')"></option><optionvalue="description"x-text="t('description_55f8eb')"></option><optionvalue="source"x-text="t('source_6da13a')"></option></select><select:aria-label="t('routing_operation_01689c')"x-model="condition.operation"><optionvalue="greater-than"x-text="t('routing_greater_than')"></option><optionvalue="less-than"x-text="t('routing_less_than')"></option><optionvalue="contains"x-text="t('contains_33e15d')"></option><optionvalue="equals"x-text="t('equals_09b6a6')"></option><optionvalue="starts-with"x-text="t('starts_with_2a61f5')"></option><optionvalue="matches"x-text="t('matches_ee2dbd')"></option></select><buttontype="button"class="binding-button grow"@click="editBinding(condition.value,'text',t('routing_condition_value_f76e2d'))"x-text="bindingSummary(condition.value)"></button><labelclass="check"><inputtype="checkbox"x-model="condition.negate"><spanx-text="t('not_ca1dd3')"></span></label><buttontype="button"class="text danger"@click="block.conditions.splice(conditionIndex,1)"><spanx-text="t('symbol_67fba2')"></span></button></div></template><buttontype="button"class="text"@click="addGenCondition(block)"><spanx-text="t('and_condition_63ce48')"></span></button></div></template>
</main></div></div><templatex-if="rulePeopleTarget"><sectionclass="binding-editor"><divclass="section-line"><inputtype="search":aria-label="t('search_people_or_email')":placeholder="t('search_people_or_email')"x-model="rulePeopleQuery"><buttontype="button"@click="closeRuleEditor()"x-text="t('back_c32ae9')"></button></div><divclass="people-row"><templatex-for="person in people.filter(p=>[p.display_name,p.email,p.username].some(v=>v?.toLowerCase().includes(rulePeopleQuery.toLowerCase())) && !rulePeopleTarget.value.includes(p.id))"><buttontype="button"@click="addRulePerson(person.id)"x-text="person.display_name"></button></template><buttontype="button"x-show="/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(rulePeopleQuery)"@click="addRulePerson(rulePeopleQuery.trim())"x-text="rulePeopleQuery"></button></div></section></template>
<sectionclass="config-guide"x-show="transferMode==='guide'":aria-label="t('transfer_guide')"><divclass="section-line"><pclass="muted"x-text="t('transfer_guide_hint')"></p><buttontype="button"@click="copyTransferGuide()"x-text="t('transfer_guide_copy')"></button></div><templatex-for="section in transferGuideSections()":key="section.id"><section><h3x-text="section.title"></h3><pre:class="{'guide-example':section.code}"x-text="section.body"></pre></section></template></section>
<h3x-text="t('transfer_inputs')"></h3><templatex-for="(change,index) in transferResult.inputs":key="index"><divclass="compact-change"><spanclass="badge"x-text="label(change.action)"></span><strongx-text="change.name"></strong><smallx-text="t(change.kind==='variable'?'map_variables':'map_generators')"></small></div></template>
<divx-show="transferResult.contacts?.length"><h3x-text="t('transfer_contacts')"></h3><templatex-for="contact in transferResult.contacts":key="contact.id"><px-text="contact.email"></p></template></div>
<h3x-text="t('map_generated_resources')"></h3><px-show="!transferResult.preview.changes.length"x-text="t('transfer_no_resources')"></p><templatex-for="change in transferResult.preview.changes":key="change.id"><divclass="compact-change"><spanclass="badge"x-text="label(change.action)"></span><strongx-text="change.name"></strong><smallx-text="label(change.kind)"></small></div></template>
<templatex-for="(issue,index) in transferResult.preview.issues":key="index"><pclass="validation-error"><strongx-text="issue.path"></strong><spanx-text="l(issue.message)"></span></p></template>