tag app-edit get render? do mounted? active = no def open data link = data active = yes def close active = no def mount setTimeout(&, 40) do $dn.focus! imba.commit! def handle_click_set_default_bang unless link.is_bang return err "setting default bang", "Link is not a bang." config.data.default_bang = link config.save! api.sort_links! close! def handle_delete try await api.delete_link link close! catch e err "deleting link", e def save try if /\s/.test link.name.trim! throw "Link name may not contain spaces." api.update_link link, api.construct_link_text link close! catch e err "saving link", e get new_link_text "wip" def cycle_focus if document.activeElement is $dn $n.focus! elif document.activeElement is $n $u.focus! else $dn.focus! def render css d:flex fld:column gap:20px w:100% <.tip-row> <.tip @click=close @hotkey('esc').capture.if(!state.loading)=close > <.tip-hotkey> "Esc" <.tip-content> "Cancel" <.tip @click=handle_delete @hotkey('shift+backspace').capture.if(!state.loading)=handle_delete > css fl:2 <.tip-hotkey> "Shift + Backspace" <.tip-content> "Delete Link" if link.is_bang <.tip @click=handle_click_set_default_bang> css fl:2 <.tip-content> "Set Default Bang" <.tip @click=save @hotkey('shift+return').capture.if(!state.loading)=save > css fl:2 <.tip-hotkey> "Return" <.tip-content> "Update Link" <.tip.noclick @hotkey('tab').capture.if(!state.loading)=cycle_focus > <.tip-hotkey> "Tab" <.tip-content> "Next" <.inputs> css d:flex fld:column gap:20px