Files
wehub-resource-sync adf0d17497
publish / version_or_publish (push) Waiting to run
storybook-build / changes (push) Waiting to run
storybook-build / :storybook-build (push) Blocked by required conditions
Sync Gradio Skills to Hugging Face / sync-skills (push) Waiting to run
functional / changes (push) Waiting to run
functional / build-frontend (push) Blocked by required conditions
functional / functional-test-SSR=false (push) Blocked by required conditions
functional / functional-reload (push) Blocked by required conditions
functional / functional-test-SSR=true (push) Blocked by required conditions
hygiene / hygiene-test (push) Waiting to run
python / changes (push) Waiting to run
python / build (push) Blocked by required conditions
python / test-ubuntu-latest-flaky (push) Blocked by required conditions
python / test-ubuntu-latest-not-flaky (push) Blocked by required conditions
python / test-windows-latest-flaky (push) Blocked by required conditions
python / test-windows-latest-not-flaky (push) Blocked by required conditions
js / changes (push) Waiting to run
js / js-test (push) Blocked by required conditions
docs-build / changes (push) Waiting to run
docs-build / docs-build (push) Blocked by required conditions
docs-build / website-build (push) Blocked by required conditions
chore: import upstream snapshot with attribution
2026-07-13 13:17:32 +08:00

57 lines
1.4 KiB
TypeScript

function positive_mod(n: number, m: number): number {
return ((n % m) + m) % m;
}
export function handle_filter(
choices: [string, string | number][],
input_text: string
): number[] {
return choices.reduce((filtered_indices, o, index) => {
if (
input_text ? o[0].toLowerCase().includes(input_text.toLowerCase()) : true
) {
filtered_indices.push(index);
}
return filtered_indices;
}, [] as number[]);
}
export function handle_change(
dispatch: any,
value: string | number | (string | number)[] | undefined,
value_is_output: boolean
): void {
dispatch("change", value);
if (!value_is_output) {
dispatch("input");
}
}
export function handle_shared_keys(
e: KeyboardEvent,
active_index: number | null,
filtered_indices: number[]
): [boolean, number | null] {
if (e.key === "Escape") {
return [false, active_index];
}
if (e.key === "ArrowDown" || e.key === "ArrowUp") {
if (filtered_indices.length > 0) {
if (active_index === null) {
active_index =
e.key === "ArrowDown"
? filtered_indices[0]
: filtered_indices[filtered_indices.length - 1];
} else {
const index_in_filtered = filtered_indices.indexOf(active_index);
const increment = e.key === "ArrowUp" ? -1 : 1;
active_index =
filtered_indices[
positive_mod(index_in_filtered + increment, filtered_indices.length)
];
}
}
}
return [true, active_index];
}