// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.ui.input;

/// The service provided by an IME
@discoverable
closed protocol ImeService {
    strict GetInputMethodEditor(resource struct {
        keyboard_type KeyboardType;
        action InputMethodAction;
        initial_state TextInputState;
        client client_end:InputMethodEditorClient;
        editor server_end:InputMethodEditor;
    });
    strict ShowKeyboard();
    strict HideKeyboard();
};
