Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions compose/mpp/demo/src/webMain/resources/input-events/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Event Order with requestAnimationFrame</title>
<style>
body {
font-family: sans-serif;
padding: 1em;
}

#log {
white-space: pre-wrap;
border: 1px solid #ccc;
padding: 1em;
margin-top: 1em;
max-height: 300px;
overflow-y: auto;
background: #f9f9f9;
font-size: 0.8em;
}
</style>
</head>
<body>
<h2>Keyboard Event Order Tracker</h2>
<p>Click the input below and type something:</p>
<input type="text" id="testInput" autofocus/>
<div id="log"></div>

<script>
const logContainer = document.getElementById('log');
const input = document.getElementById('testInput');

let rAFScheduled = false;

const log = (msg) => {
const time = performance.now().toFixed(2);
logContainer.textContent = `[${time} ms] ${msg}\n` + logContainer.textContent;
logContainer.scrollTop = 0;
};

const scheduleRAF = () => {
if (rAFScheduled) return;
rAFScheduled = true;
requestAnimationFrame(() => {
log('requestAnimationFrame\n');
rAFScheduled = false;
});
};

const eventLoggers = [
['keydown', (e) => log(`keydown: ${e.key}, composing: ${e.isComposing}, type: ${e.type}`)],
['keyup', (e) => log(`keyup: ${e.key}, type: ${e.type}`)],
['beforeinput', (e) => log(`beforeinput: ${e.inputType}, type: ${e.type}, data: ${e.data}, isComposing: ${e.isComposing}, selection: (${input.selectionStart} - ${input.selectionEnd} / ${input.selectionDirection})`)],
['compositionstart', (e) => log(`compositionstart --- type: ${e.type}`)],
['compositionupdate', (e) => log(`compositionupdate --- type: ${e.type}`)],
['compositionend', (e) => log(`compositionend --- type: ${e.type}`)],
];

for (const [event, handler] of eventLoggers) {
input.addEventListener(event, (e) => {
handler(e);
scheduleRAF();
});
}
</script>
</body>
</html>
38 changes: 4 additions & 34 deletions compose/ui/ui/api/ui.klib.api
Original file line number Diff line number Diff line change
Expand Up @@ -5315,25 +5315,10 @@ final val androidx.compose.ui.platform/androidx_compose_ui_platform_BackingDomIn
final val androidx.compose.ui.platform/androidx_compose_ui_platform_DomInputStrategy$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_DomInputStrategy$stableprop|#static{}androidx_compose_ui_platform_DomInputStrategy$stableprop[0]

// Targets: [js, wasmJs]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_AccentDialogue$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_AccentDialogue$stableprop|#static{}androidx_compose_ui_platform_EditState_AccentDialogue$stableprop[0]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_InputEvent$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_InputEvent$stableprop|#static{}androidx_compose_ui_platform_InputEvent$stableprop[0]

// Targets: [js, wasmJs]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_CompositeDialogue$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_CompositeDialogue$stableprop|#static{}androidx_compose_ui_platform_EditState_CompositeDialogue$stableprop[0]

// Targets: [js, wasmJs]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_Default$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_Default$stableprop|#static{}androidx_compose_ui_platform_EditState_Default$stableprop[0]

// Targets: [js, wasmJs]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_WaitingComposeActivity$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_WaitingComposeActivity$stableprop|#static{}androidx_compose_ui_platform_EditState_WaitingComposeActivity$stableprop[0]

// Targets: [js, wasmJs]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Accent$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Accent$stableprop|#static{}androidx_compose_ui_platform_RepeatMode_Accent$stableprop[0]

// Targets: [js, wasmJs]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Default$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Default$stableprop|#static{}androidx_compose_ui_platform_RepeatMode_Default$stableprop[0]

// Targets: [js, wasmJs]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Unknown$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Unknown$stableprop|#static{}androidx_compose_ui_platform_RepeatMode_Unknown$stableprop[0]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_NativeInputEventsProcessor$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_NativeInputEventsProcessor$stableprop|#static{}androidx_compose_ui_platform_NativeInputEventsProcessor$stableprop[0]

// Targets: [js, wasmJs]
final val androidx.compose.ui.platform/androidx_compose_ui_platform_W3CTemporaryClipboard$stableprop // androidx.compose.ui.platform/androidx_compose_ui_platform_W3CTemporaryClipboard$stableprop|#static{}androidx_compose_ui_platform_W3CTemporaryClipboard$stableprop[0]
Expand Down Expand Up @@ -5405,25 +5390,10 @@ final fun androidx.compose.ui.platform/androidx_compose_ui_platform_BackingDomIn
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_DomInputStrategy$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_DomInputStrategy$stableprop_getter|androidx_compose_ui_platform_DomInputStrategy$stableprop_getter(){}[0]

// Targets: [js, wasmJs]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_AccentDialogue$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_AccentDialogue$stableprop_getter|androidx_compose_ui_platform_EditState_AccentDialogue$stableprop_getter(){}[0]

// Targets: [js, wasmJs]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_CompositeDialogue$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_CompositeDialogue$stableprop_getter|androidx_compose_ui_platform_EditState_CompositeDialogue$stableprop_getter(){}[0]

// Targets: [js, wasmJs]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_Default$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_Default$stableprop_getter|androidx_compose_ui_platform_EditState_Default$stableprop_getter(){}[0]

// Targets: [js, wasmJs]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_WaitingComposeActivity$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_EditState_WaitingComposeActivity$stableprop_getter|androidx_compose_ui_platform_EditState_WaitingComposeActivity$stableprop_getter(){}[0]

// Targets: [js, wasmJs]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Accent$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Accent$stableprop_getter|androidx_compose_ui_platform_RepeatMode_Accent$stableprop_getter(){}[0]

// Targets: [js, wasmJs]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Default$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Default$stableprop_getter|androidx_compose_ui_platform_RepeatMode_Default$stableprop_getter(){}[0]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_InputEvent$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_InputEvent$stableprop_getter|androidx_compose_ui_platform_InputEvent$stableprop_getter(){}[0]

// Targets: [js, wasmJs]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Unknown$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_RepeatMode_Unknown$stableprop_getter|androidx_compose_ui_platform_RepeatMode_Unknown$stableprop_getter(){}[0]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_NativeInputEventsProcessor$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_NativeInputEventsProcessor$stableprop_getter|androidx_compose_ui_platform_NativeInputEventsProcessor$stableprop_getter(){}[0]

// Targets: [js, wasmJs]
final fun androidx.compose.ui.platform/androidx_compose_ui_platform_W3CTemporaryClipboard$stableprop_getter(): kotlin/Int // androidx.compose.ui.platform/androidx_compose_ui_platform_W3CTemporaryClipboard$stableprop_getter|androidx_compose_ui_platform_W3CTemporaryClipboard$stableprop_getter(){}[0]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ internal interface ComposeCommandCommunicator {
fun sendEditCommand(commands: List<EditCommand>)
fun sendEditCommand(command: EditCommand) = sendEditCommand(listOf(command))

fun sendKeyboardEvent(keyboardEvent: KeyEvent): Boolean
fun sendKeyboardEvent(keyboardEvent: KeyEvent)
}

private fun setBackingInputBox(container: HTMLElement, left: Float, top: Float, width: Float, height: Float) { js("""
Expand Down
Loading