feat(spec): add LongPress and Scroll authoring surface

This commit is contained in:
pj committed 2026-05-31 18:08:19 +05:30
1 parent a6a629a6bc
commit 66b2877f9f
2 files changed
+42 -1

No files matched your search

+25 -1
View File
@@ -2,12 +2,15 @@ import type {
AccessibilityElement, AccessibilityElement,
Action, Action,
ActionGenerator, ActionGenerator,
Direction,
DoubleTapAction, DoubleTapAction,
InputTextAction, InputTextAction,
Key, Key,
LongPressAction,
Point, Point,
PressKeyAction, PressKeyAction,
Sampler, Sampler,
ScrollAction,
SwipeAction, SwipeAction,
TapAction, TapAction,
WaitAction, WaitAction,
@@ -47,6 +50,17 @@ export function DoubleTap(parameters: { on: string | AccessibilityElement }): Do
return globalThis.__sanderling__.doubleTap(parameters); return globalThis.__sanderling__.doubleTap(parameters);
} }
export function LongPress(parameters: { on: string | AccessibilityElement }): LongPressAction {
return globalThis.__sanderling__.longPress(parameters);
}
export function Scroll(parameters: {
direction: Direction;
in?: string | AccessibilityElement;
}): ScrollAction {
return globalThis.__sanderling__.scroll(parameters);
}
export function InputText(parameters: { export function InputText(parameters: {
into: string | AccessibilityElement; into: string | AccessibilityElement;
text: string; text: string;
@@ -71,7 +85,15 @@ export function Wait(parameters: { durationMillis: number }): WaitAction {
} }
function builtinGenerator( function builtinGenerator(
name: "taps" | "doubleTaps" | "typing" | "swipes" | "waitOnce" | "pressKeys", name:
| "taps"
| "doubleTaps"
| "longPresses"
| "scrolls"
| "typing"
| "swipes"
| "waitOnce"
| "pressKeys",
): ActionGenerator { ): ActionGenerator {
return new Proxy({} as ActionGenerator, { return new Proxy({} as ActionGenerator, {
get(_target, property) { get(_target, property) {
@@ -86,6 +108,8 @@ function builtinGenerator(
export const taps: ActionGenerator = builtinGenerator("taps"); export const taps: ActionGenerator = builtinGenerator("taps");
export const doubleTaps: ActionGenerator = builtinGenerator("doubleTaps"); export const doubleTaps: ActionGenerator = builtinGenerator("doubleTaps");
export const longPresses: ActionGenerator = builtinGenerator("longPresses");
export const scrolls: ActionGenerator = builtinGenerator("scrolls");
export const typing: ActionGenerator = builtinGenerator("typing"); export const typing: ActionGenerator = builtinGenerator("typing");
export const swipes: ActionGenerator = builtinGenerator("swipes"); export const swipes: ActionGenerator = builtinGenerator("swipes");
export const waitOnce: ActionGenerator = builtinGenerator("waitOnce"); export const waitOnce: ActionGenerator = builtinGenerator("waitOnce");
+17
View File
@@ -132,8 +132,16 @@ export interface Point {
y: number; y: number;
} }
export type Direction = "up" | "down" | "left" | "right";
export type TapAction = { kind: "Tap"; on: string | AccessibilityElement }; export type TapAction = { kind: "Tap"; on: string | AccessibilityElement };
export type DoubleTapAction = { kind: "DoubleTap"; on: string | AccessibilityElement }; export type DoubleTapAction = { kind: "DoubleTap"; on: string | AccessibilityElement };
export type LongPressAction = { kind: "LongPress"; on: string | AccessibilityElement };
export type ScrollAction = {
kind: "Scroll";
direction: Direction;
in?: string | AccessibilityElement;
};
export type InputTextAction = { export type InputTextAction = {
kind: "InputText"; kind: "InputText";
into: string | AccessibilityElement; into: string | AccessibilityElement;
@@ -150,6 +158,8 @@ export type WaitAction = { kind: "Wait"; durationMillis: number };
export type Action = export type Action =
| TapAction | TapAction
| DoubleTapAction | DoubleTapAction
| LongPressAction
| ScrollAction
| InputTextAction | InputTextAction
| SwipeAction | SwipeAction
| PressKeyAction | PressKeyAction
@@ -197,6 +207,11 @@ export interface SanderlingRuntime {
from: <T>(items: readonly T[]) => Sampler<T>; from: <T>(items: readonly T[]) => Sampler<T>;
tap: (parameters: { on: string | AccessibilityElement }) => TapAction; tap: (parameters: { on: string | AccessibilityElement }) => TapAction;
doubleTap: (parameters: { on: string | AccessibilityElement }) => DoubleTapAction; doubleTap: (parameters: { on: string | AccessibilityElement }) => DoubleTapAction;
longPress: (parameters: { on: string | AccessibilityElement }) => LongPressAction;
scroll: (parameters: {
direction: Direction;
in?: string | AccessibilityElement;
}) => ScrollAction;
inputText: (parameters: { inputText: (parameters: {
into: string | AccessibilityElement; into: string | AccessibilityElement;
text: string; text: string;
@@ -210,6 +225,8 @@ export interface SanderlingRuntime {
wait: (parameters: { durationMillis: number }) => WaitAction; wait: (parameters: { durationMillis: number }) => WaitAction;
taps: ActionGenerator; taps: ActionGenerator;
doubleTaps: ActionGenerator; doubleTaps: ActionGenerator;
longPresses: ActionGenerator;
scrolls: ActionGenerator;
typing: ActionGenerator; typing: ActionGenerator;
swipes: ActionGenerator; swipes: ActionGenerator;
waitOnce: ActionGenerator; waitOnce: ActionGenerator;