import { Controller } from "@hotwired/stimulus" import { nextEventNamed } from "helpers/timing_helpers" export default class extends Controller { // Only load for touch devices static get shouldLoad() { return "ontouchstart" in window && navigator.maxTouchPoints > 0 } // Use a fake input to trigger the soft keyboard on actions that load async content // See https://gist.github.com/cathyxz/73739c1bdea7d7011abb236541dc9aaa async open(event) { const fakeInput = this.#focusOnFakeInput() this.#removeOnFocusOut(fakeInput) } #focusOnFakeInput() { const fakeInput = document.createElement("input") fakeInput.setAttribute("type", "text") fakeInput.setAttribute("class", "input--invisible") this.element.appendChild(fakeInput) fakeInput.focus() return fakeInput } async #removeOnFocusOut(element) { await nextEventNamed("focusout", element) element.remove() } }