{"data":{"version":"v2.81","locale":"id","availableLocales":["en","vi","th","id","fil"],"updatedAt":"2026-09-30T09:58:59.584Z","contract":{"keywords":["if","else","for","while","def","class","return","global","pass","lambda","in","is","and","or","not","break","continue","True","False","None"],"allowedImports":["cognitab","random","math","time"],"builtinHelpers":["enumerate","zip","len","int","float","str","type","print","bool","abs","sum","min","max","sorted","round","sqrt","pow","floor","ceil","sin","cos","tan","log","clamp"],"functionAliases":{"sleep":"wait"}},"guides":{"concurrency":{"title":"Konkurensi dan eksekusi","sections":[{"id":"overview","title":"Konkurensi dan eksekusi","body":"Panggilan biasa berjalan dalam alur saat ini dan dapat menunggu capture, pemrosesan, gestur, UI, atau input pengguna. parallel pada sentuhan dan Flow.start adalah mekanisme berbeda. Blocking berarti menunggu di alur pemanggil, bukan membekukan UI Android.","example":null},{"id":"flows","title":"Alur latar","body":"Flow.start(name, params=None) memulai cabang terisolasi dan mengembalikan nomor urut Int. Satu Run memiliki maksimal dua cabang latar. Tidak ada Flow.stop(), pause(), resume(), join(), atau handle. Alur utama menunggu cabang latar; kesalahan cabang atau System.stop() menghentikan seluruh Run.","example":"# Konfigurasikan alur makro bernama watch_enemy sebelum dijalankan\nordinal = Flow.start(\"watch_enemy\", {\"task\": \"status\"})\nprint(ordinal)"},{"id":"shared-state","title":"Status bersama","body":"Gunakan nilai dan builder yang dapat berubah secara terpisah di setiap alur. Storage sengaja dibagikan dan mengunci operasi tunggal serta perubahan bertingkat yang dilacak. Storage.get() lalu Storage.set() tidak atomik; gunakan satu penulis untuk baca-ubah-tulis. Capture dan cache juga dibagikan; perubahan memengaruhi semua cabang.","example":null},{"id":"touches","title":"Sentuhan dalam antrean","body":"parallel=True mengantrekan sentuhan; di luar collect, delay_before dan delay_after tetap menunggu di pemanggil. Touch.collect() mengumpulkan sentuhan untuk Touch.send(); Touch.wait() menunggu selesai. Gestur berbagi kanal input Android, bukan perangkat independen. Pembatalan gestur aktif memerlukan Android 8 atau lebih baru.","example":"# Kumpulkan sentuhan yang tumpang tindih, lalu tunggu hingga selesai\nTouch.collect()\nclick((300, 900), hold_ms=1500, parallel=True)\nclick((780, 900), delay_before=500, parallel=True)\nTouch.send()\nTouch.wait()"},{"id":"recognition-ui","title":"Pengenalan dan menunggu UI","body":"Region.find* mencari kemunculan; Region.wait* menunggu hilangnya target. Pengenalan sekali pun memerlukan waktu pemrosesan. Laju polling dibatasi 1–60 Hz. Prompt MacroPanel interaktif diserialkan dan menunggu pengguna. OverlayText dimiliki alurnya; off_all() hanya melepas overlay alur tersebut, sementara UI melalui Android Main.","example":null}]}},"entries":[{"key":"class-audio","kind":"CLASS","parentKey":null,"name":"Audio","signature":"Audio(name)","description":"Nilai audio hanya baca untuk mengenali bunyi dalam aplikasi atau game. Gunakan Audio(name) untuk memuat sampel tersimpan, atau Audio.recent(duration_ms) untuk menyalin audio yang baru ditangkap. Penangkapan dan pencocokan berlangsung di perangkat; buffer pendengaran berkelanjutan tidak diunggah dan skrip tidak dapat mengakses audio mentah (PCM).","behavior":"Nilai audio hanya baca untuk mengenali bunyi dalam aplikasi atau game. Gunakan Audio(name) untuk memuat sampel tersimpan, atau Audio.recent(duration_ms) untuk menyalin audio yang baru ditangkap. Penangkapan dan pencocokan berlangsung di perangkat; buffer pendengaran berkelanjutan tidak diunggah dan skrip tidak dapat mengakses audio mentah (PCM).","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["name","duration_ms","start_ms","end_ms"],"fieldDocs":[{"name":"name","type":"String | None","defaultValue":null,"description":"Nama sampel tersimpan, atau None untuk snapshot terbaru.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"duration_ms","type":"Number","defaultValue":null,"description":"Panjang snapshot dalam milidetik.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"start_ms","type":"Number","defaultValue":null,"description":"Waktu mulai dalam milidetik; nol untuk sampel bernama, relatif terhadap sesi untuk snapshot terbaru.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"end_ms","type":"Number","defaultValue":null,"description":"Waktu akhir eksklusif dalam milidetik pada linimasa yang sama dengan start_ms.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"name","type":"String","defaultValue":null,"description":"Nama sampel yang dibuat di Pengelola Template makro ini wajib diisi, tidak boleh kosong, dan bukan jalur berkas. Sampel langsung dimuat, termasuk sampel yang dipulihkan atau berada dalam paket terlindungi dengan enkripsi; sampel yang hilang atau rusak menimbulkan kesalahan. Backup/Store menyimpan sumber yang dipilih beserta sampel makro: maksimal 32 sampel WAV PCM16 mono 48 kHz, masing-masing paling lama 10 detik, dengan total data WAV maksimal 4 MiB.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"# Muat sampel yang disimpan dalam makro ini\naudio = Audio(\"alert\")","params":[],"returnType":null,"returnDescription":null,"example":"# Kenali sampel audio lokal setelah mulai mendengarkan\nsample = Audio(\"alert\")\nAudio.start()\nwait(2000)\nclip = Audio.recent(duration_ms=2000)\nresult = clip.match(sample, threshold=0.85)\nif result.matched:\n    print(result.score, result.start_ms, result.end_ms)\nAudio.stop()","aliases":[],"group":null},{"key":"class-audio-static-method-start","kind":"STATIC_METHOD","parentKey":"class-audio","name":"start","signature":"Audio.start()","description":"Mulai mendengarkan audio dari aplikasi yang dipilih, bukan dari mikrofon. Memerlukan Android 10+, izin perekaman, persetujuan MediaProjection, dan aplikasi sumber yang mengizinkan penangkapan audio. Pemanggilan ulang saat mendengarkan mempertahankan buffer. Memulai lagi setelah stop mengatur ulang waktu sesi; atur ulang juga waktu deteksi yang disimpan. Pause menghapus riwayat, tetapi Resume tetap memakai awal waktu sesi sebelumnya dan menghitung waktu jeda. Izin, konfigurasi, atau sesi penangkapan yang tidak tersedia menimbulkan kesalahan.","behavior":"Mulai mendengarkan audio dari aplikasi yang dipilih, bukan dari mikrofon. Memerlukan Android 10+, izin perekaman, persetujuan MediaProjection, dan aplikasi sumber yang mengizinkan penangkapan audio. Pemanggilan ulang saat mendengarkan mempertahankan buffer. Memulai lagi setelah stop mengatur ulang waktu sesi; atur ulang juga waktu deteksi yang disimpan. Pause menghapus riwayat, tetapi Resume tetap memakai awal waktu sesi sebelumnya dan menghitung waktu jeda. Izin, konfigurasi, atau sesi penangkapan yang tidak tersedia menimbulkan kesalahan.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":"# Mulai merekam audio aplikasi yang dikonfigurasi setelah izin dan persetujuan diberikan\nAudio.start()","aliases":[],"group":"FLOW"},{"key":"class-audio-static-method-stop","kind":"STATIC_METHOD","parentKey":"class-audio","name":"stop","signature":"Audio.stop()","description":"Hentikan penangkapan audio dan hapus buffernya. Nilai audio yang sudah dikembalikan tetap dapat digunakan; penangkapan layar yang digunakan bagian lain tetap berjalan. Penyelesaian makro juga melepaskan penangkapan audio.","behavior":"Hentikan penangkapan audio dan hapus buffernya. Nilai audio yang sudah dikembalikan tetap dapat digunakan; penangkapan layar yang digunakan bagian lain tetap berjalan. Penyelesaian makro juga melepaskan penangkapan audio.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":"# Lepaskan perekam audio yang dikonfigurasi\nAudio.stop()","aliases":[],"group":"FLOW"},{"key":"class-audio-static-method-recent","kind":"STATIC_METHOD","parentKey":"class-audio","name":"recent","signature":"Audio.recent(duration_ms)","description":"Salin audio terbaru menjadi snapshot mandiri tanpa menunggu data tambahan. Hanya 10 detik terakhir yang tersedia; audio yang diputar sebelum mulai mendengarkan tidak dapat diambil kembali. Riwayat yang belum cukup atau perekam yang tidak tersedia menimbulkan kesalahan. Keheningan saja tidak membuktikan aplikasi sumber memblokir penangkapan audio.","behavior":"Salin audio terbaru menjadi snapshot mandiri tanpa menunggu data tambahan. Hanya 10 detik terakhir yang tersedia; audio yang diputar sebelum mulai mendengarkan tidak dapat diambil kembali. Riwayat yang belum cukup atau perekam yang tidak tersedia menimbulkan kesalahan. Keheningan saja tidak membuktikan aplikasi sumber memblokir penangkapan audio.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"duration_ms","type":"Number (1..10000)","defaultValue":null,"description":"Durasi wajib berupa bilangan bulat dari 1 hingga 10000 milidetik.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Audio","returnDescription":null,"example":"# Aplikasi sumber harus sedang memutar; simpan riwayat setidaknya 500 ms\nAudio.start()\nwait(600)\nclip = Audio.recent(500)\nprint(clip.duration_ms)","aliases":[],"group":"FLOW"},{"key":"class-audio-method-match","kind":"METHOD","parentKey":"class-audio","name":"match","signature":"audio.match(sample, threshold)","description":"Geser sampel referensi di sepanjang snapshot ini dan kembalikan kemiripan terbaik. Menggunakan 64 pita amplitudo mel yang dinormalisasi dan merata-ratakan kemiripan pada frame referensi yang memiliki sinyal; bagian suara yang hilang menurunkan skor. Bagian hening tidak dianggap cocok. Tidak ada pengenalan ucapan atau koreksi kecepatan maupun nada. Sampel yang lebih panjang dari klip merupakan kesalahan. Kalibrasi ulang ambang setelah pembaruan pencocok menggunakan rekaman terpisah.","behavior":"Geser sampel referensi di sepanjang snapshot ini dan kembalikan kemiripan terbaik. Menggunakan 64 pita amplitudo mel yang dinormalisasi dan merata-ratakan kemiripan pada frame referensi yang memiliki sinyal; bagian suara yang hilang menurunkan skor. Bagian hening tidak dianggap cocok. Tidak ada pengenalan ucapan atau koreksi kecepatan maupun nada. Sampel yang lebih panjang dari klip merupakan kesalahan. Kalibrasi ulang ambang setelah pembaruan pencocok menggunakan rekaman terpisah.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sample","type":"Audio","defaultValue":null,"description":"Nilai audio acuan yang ingin ditemukan di dalam nilai audio ini.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number (0..1)","defaultValue":null,"description":"Angka berhingga wajib dari 0 hingga 1. Kalibrasikan dengan rekaman terpisah; 0.85 hanya contoh, bukan ambang yang disarankan untuk semua suara.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"AudioMatch","returnDescription":null,"example":"# Simpan sampel peringatan di Template Manager sebelum menjalankan contoh ini\nsample = Audio(\"alert\")\nAudio.start()\nwait(1500)\nclip = Audio.recent(1500)\nresult = clip.match(sample, 0.85)\nprint(result)\nAudio.stop()","aliases":[],"group":"FLOW"},{"key":"class-audio-method-find","kind":"METHOD","parentKey":"class-audio","name":"find","signature":"audio.find(timeout_ms, threshold)","description":"Dengarkan audio baru untuk menemukan acuan ini selama timeout_ms milidetik, lalu kembalikan AudioMatch pertama atau None jika tidak ditemukan. Memulai sumber penangkapan yang dikonfigurasi bila perlu dan membiarkannya aktif hingga Audio.stop() atau makro selesai. Hanya audio yang diterima setelah panggilan ini berlangganan yang diperiksa. Kandidat tumpang tindih dipindai terus-menerus setiap 10 ms, dengan penggunaan ulang spektrum antarblok; ini mencegah celah polling tetapi tidak menjamin pengenalan. Untuk sampel minimal 100 ms dengan sinyal suara yang cukup, kecocokan yang nyaris sempurna (skor minimal 0,9999) langsung dikembalikan saat seluruh sampel diterima. Kecocokan kuat lainnya (skor minimal 0,98) dapat memeriksa posisi hingga 20 ms lagi; kecocokan yang lebih lemah memakai jendela 50 ms. Jika kandidat baru menjadi sangat cocok menjelang akhir jendela itu, posisinya diperiksa sekali lagi hingga 20 ms. Semua hasil harus memenuhi ambang yang diminta. Timeout membatasi jendela perekaman; pemrosesan audio yang memenuhi syarat dapat menambah latensi. Nol mengembalikan None tanpa memulai penangkapan. Pause makro membuang audio tertunda dan menghentikan hitungan timeout; Resume mencari dalam segmen baru. Sesi terputus, luapan data, dan audio rusak adalah kesalahan, bukan None.","behavior":"Dengarkan audio baru untuk menemukan acuan ini selama timeout_ms milidetik, lalu kembalikan AudioMatch pertama atau None jika tidak ditemukan. Memulai sumber penangkapan yang dikonfigurasi bila perlu dan membiarkannya aktif hingga Audio.stop() atau makro selesai. Hanya audio yang diterima setelah panggilan ini berlangganan yang diperiksa. Kandidat tumpang tindih dipindai terus-menerus setiap 10 ms, dengan penggunaan ulang spektrum antarblok; ini mencegah celah polling tetapi tidak menjamin pengenalan. Untuk sampel minimal 100 ms dengan sinyal suara yang cukup, kecocokan yang nyaris sempurna (skor minimal 0,9999) langsung dikembalikan saat seluruh sampel diterima. Kecocokan kuat lainnya (skor minimal 0,98) dapat memeriksa posisi hingga 20 ms lagi; kecocokan yang lebih lemah memakai jendela 50 ms. Jika kandidat baru menjadi sangat cocok menjelang akhir jendela itu, posisinya diperiksa sekali lagi hingga 20 ms. Semua hasil harus memenuhi ambang yang diminta. Timeout membatasi jendela perekaman; pemrosesan audio yang memenuhi syarat dapat menambah latensi. Nol mengembalikan None tanpa memulai penangkapan. Pause makro membuang audio tertunda dan menghentikan hitungan timeout; Resume mencari dalam segmen baru. Sesi terputus, luapan data, dan audio rusak adalah kesalahan, bukan None.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"timeout_ms","type":"Number (0..2147483647)","defaultValue":null,"description":"Durasi jendela perekaman wajib berupa bilangan bulat dari 0 sampai 2147483647 milidetik. Waktu jeda makro tidak dihitung. Batas jendela diperkirakan dari waktu selesainya pembacaan perekam, bukan timestamp perangkat keras.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number (0..1)","defaultValue":null,"description":"Angka berhingga wajib dari 0 hingga 1. Kalibrasikan dengan rekaman terpisah; 0.85 hanya contoh, bukan ambang yang disarankan untuk semua suara.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"AudioMatch | None","returnDescription":null,"example":"# Tunggu suara baru dan tangani batas waktu\naudio = Audio(\"alert\")\nresult = audio.find(timeout_ms=5000, threshold=0.85)\nif result is not None:\n    print(result.score, result.start_ms, result.end_ms)\nAudio.stop()","aliases":[],"group":"FLOW"},{"key":"class-audiomatch","kind":"READ_ONLY_CLASS","parentKey":null,"name":"AudioMatch","signature":"AudioMatch","description":"Hasil pencocokan audio hanya-baca. Skor adalah kemiripan, bukan probabilitas ketepatan. Waktu find() memakai linimasa sesi mendengarkan; match() memakai linimasa nilai audio yang dicari. Bandingkan waktu agar satu suara tidak ditangani berulang. Gunakan waktu sebagai deteksi hanya jika matched adalah True.","behavior":"Hasil pencocokan audio hanya-baca. Skor adalah kemiripan, bukan probabilitas ketepatan. Waktu find() memakai linimasa sesi mendengarkan; match() memakai linimasa nilai audio yang dicari. Bandingkan waktu agar satu suara tidak ditangani berulang. Gunakan waktu sebagai deteksi hanya jika matched adalah True.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["matched","score","start_ms","end_ms"],"fieldDocs":[{"name":"matched","type":"Boolean","defaultValue":null,"description":"True jika kandidat yang tidak hening mencapai ambang.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"score","type":"Number","defaultValue":null,"description":"Kemiripan dari 0 hingga 1, bukan probabilitas.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"start_ms","type":"Number","defaultValue":null,"description":"Waktu mulai kandidat dalam milidetik pada linimasa audio yang dicari.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"end_ms","type":"Number","defaultValue":null,"description":"Waktu akhir eksklusif dalam milidetik pada linimasa yang sama dengan start_ms.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Simpan sampel peringatan di Template Manager sebelum dijalankan\nsample = Audio(\"alert\")\nAudio.start()\nwait(1500)\nclip = Audio.recent(1500)\nresult = clip.match(sample, 0.85)\nprint(result.matched, result.score, result.start_ms, result.end_ms)\nAudio.stop()","aliases":[],"group":null},{"key":"class-point","kind":"CLASS","parentKey":null,"name":"Point","signature":"Point(x, y, /, scale=\"fixed\", anchor=\"none\")","description":"Sebuah titik di layar, diukur dalam piksel. Pemetaan koordinat kontrol skala/jangkar di seluruh ukuran layar. Setelah pemetaan dan offset, konsumen runtime memasukkan titik akhir ke rentang piksel valid layar saat ini. Titik dapat didestrukturkan menjadi x, y.","behavior":"Sebuah titik di layar, diukur dalam piksel. Pemetaan koordinat kontrol skala/jangkar di seluruh ukuran layar. Setelah pemetaan dan offset, konsumen runtime memasukkan titik akhir ke rentang piksel valid layar saat ini. Titik dapat didestrukturkan menjadi x, y.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["x","y","scale","anchor"],"fieldDocs":[{"name":"x","type":"Number","defaultValue":null,"description":"Horizontal coordinate in pixels.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"y","type":"Number","defaultValue":null,"description":"Vertical coordinate in pixels.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"Coordinate scale mode. Values: fixed, auto, width, height.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor. Values: none, center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right, auto.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"x","type":"Number","defaultValue":null,"description":"X coordinate in pixels","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"y","type":"Number","defaultValue":null,"description":"Y coordinate in pixels","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"scale","type":"String","defaultValue":"fixed","description":"Coordinate scale mode.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":"# Baca nilai x, y dari Point\np = Point(500, 900)\nx_value = p.x #500\ny_value = p.y #900\nscale_value = p.scale #FIXED_PIXEL\n\n# Bongkar Point menjadi koordinat x, y\nx, y = p","constructorExample":"# Buat Point dengan scale/anchor lalu klik posisi itu\np = Point(500, 900, scale=\"width\", anchor=\"center\")\nclick(p)","params":[],"returnType":null,"returnDescription":null,"example":"origin = Point(0, 0)\ntarget = Point(500, 900)\nswipe([\n    SwipePoint(origin, speed=\"NORMAL\"),\n    SwipePoint(target)\n])","aliases":[],"group":null},{"key":"class-point-method-offset","kind":"METHOD","parentKey":"class-point","name":"offset","signature":"point.offset(dx, dy, scale=None)","description":"Selesaikan Titik ini pada layar saat ini, kalikan bilangan bulat piksel dx/dy dengan rasio lebar atau tinggi layar penuh yang dipilih tanpa memutar sumbu delta, lalu tambahkan hasilnya dan kembalikan Titik piksel tetap baru dengan tidak ada jangkar. Ukuran area pandang aplikasi tidak digunakan. Ketika skala dihilangkan, offset mewarisi skala Titik ini. Poin aslinya tidak bermutasi.","behavior":"Selesaikan Titik ini pada layar saat ini, kalikan bilangan bulat piksel dx/dy dengan rasio lebar atau tinggi layar penuh yang dipilih tanpa memutar sumbu delta, lalu tambahkan hasilnya dan kembalikan Titik piksel tetap baru dengan tidak ada jangkar. Ukuran area pandang aplikasi tidak digunakan. Ketika skala dihilangkan, offset mewarisi skala Titik ini. Poin aslinya tidak bermutasi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dx","type":"Int","defaultValue":null,"description":"Integer pixel delta on the Point X axis. Decimal and normalized values are rejected.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"dy","type":"Int","defaultValue":null,"description":"Integer pixel delta on the Point Y axis. Decimal and normalized values are rejected.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"scale","type":"String?","defaultValue":"None","description":"Offset scale mode using full-screen dimensions. Defaults to this Point's current scale. Values: fixed, auto, width, height.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Point","returnDescription":"Titik piksel tetap terselesaikan yang dijepit ke layar saat ini, yang skalanya FIXED_PIXEL dan jangkarnya NONE.","example":"# Skalakan delta piksel menurut lebar layar penuh, lalu tambahkan ke Point\ntarget = Point(500, 900, scale=\"width\", anchor=\"center\").offset(120, -80)\nprint(target)\ntarget.highlight()","aliases":[],"group":"FLOW"},{"key":"class-point-method-highlight","kind":"METHOD","parentKey":"class-point","name":"highlight","signature":"point.highlight(color=\"green\", line_width=2, region_width=36, auto_hide_ms=0)","description":"Gambarlah sebuah kotak yang disorot di tengah titik ini. Menyorot ulang contoh titik yang sama akan menggantikan contoh sebelumnya.","behavior":"Gambarlah sebuah kotak yang disorot di tengah titik ini. Menyorot ulang contoh titik yang sama akan menggantikan contoh sebelumnya.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":"green","description":"Highlight color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"line_width","type":"Number","defaultValue":"2","description":"Stroke thickness in dp.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Square width/height in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Auto-hide after N milliseconds. 0 disables auto-hide.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Wilayah persegi yang disorot berpusat di sekitar titik tersebut.","example":"p = Point(500, 900)\np.highlight()","aliases":[],"group":"FLOW"},{"key":"class-point-method-highlight-off","kind":"METHOD","parentKey":"class-point","name":"highlight_off","signature":"point.highlight_off()","description":"Matikan sorotan untuk contoh titik ini.","behavior":"Matikan sorotan untuk contoh titik ini.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Point","returnDescription":"Mengembalikan titik yang sama setelah mematikan sorotan.","example":"p = Point(500, 900)\np.highlight(\"red\", 3)\nwait(1000)\np.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-swipepoint","kind":"CLASS","parentKey":null,"name":"SwipePoint","signature":"SwipePoint(point, speed=\"NORMAL\", delay_before=0, random=10, humanized=False, scale=\"fixed\", anchor=\"none\")","description":"Satu titik di dalam jalur gesek datar. Intinya harus berupa Titik atau tupel (x, y). Berikan daftar setidaknya dua nilai SwipePoint untuk menggesek([...]) untuk menggerakkan satu jari melalui beberapa titik.","behavior":"Satu titik di dalam jalur gesek datar. Intinya harus berupa Titik atau tupel (x, y). Berikan daftar setidaknya dua nilai SwipePoint untuk menggesek([...]) untuk menggerakkan satu jari melalui beberapa titik.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["point","speed","delay_before","random","humanized","scale","anchor"],"fieldDocs":[{"name":"point","type":"Point","defaultValue":null,"description":"Coordinate point in pixels. Point carries scale/anchor metadata.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"speed","type":"String","defaultValue":"NORMAL","description":"Speed preset from this point to the next point. Values: VERY_SLOW, SLOW, NORMAL, FAST, VERY_FAST.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Delay before this point/segment in milliseconds.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"random","type":"Number","defaultValue":"10","description":"Random pixel offset radius for this point.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"humanized","type":"Boolean","defaultValue":"False","description":"Use a curved human-like path where supported.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"Coordinate scale mode.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"point","type":"Point | tuple[Number, Number]","defaultValue":null,"description":"Coordinate as Point or tuple (x, y). Point scale/anchor metadata is copied unless scale/anchor are provided on SwipePoint.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"speed","type":"String","defaultValue":"NORMAL","description":"Speed preset from this point to the next point. Values: VERY_SLOW, SLOW, NORMAL, FAST, VERY_FAST.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Delay before this point/segment in milliseconds.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"random","type":"Number","defaultValue":"10","description":"Random pixel offset radius for this point.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"humanized","type":"Boolean","defaultValue":"False","description":"Use a curved human-like path where supported.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"scale","type":"String","defaultValue":"fixed","description":"Coordinate scale mode.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"path = [\n    SwipePoint(Point(500, 1500), speed=\"FAST\"),\n    SwipePoint((560, 980), speed=\"NORMAL\", humanized=True),\n    SwipePoint(Point(500, 500))\n]\nswipe(path)","params":[],"returnType":null,"returnDescription":null,"example":"# Dua jari paralel, setiap jari memakai satu path datar\nTouch.collect()\nleft = swipe([\n    SwipePoint(Point(300, 1500), speed=\"FAST\"),\n    SwipePoint(Point(300, 500))\n], parallel=True)\nright = swipe([\n    SwipePoint(Point(780, 1500), speed=\"FAST\"),\n    SwipePoint(Point(780, 500))\n], parallel=True)\nTouch.send()\nTouch.wait()","aliases":[],"group":null},{"key":"class-touch","kind":"CLASS","parentKey":null,"name":"Touch","signature":"Touch","description":"Pembantu statis untuk tindakan klik/gesek paralel yang dibuat oleh UI atau kode melalui klik(..., paralel=True) dan geser(..., paralel=True). Anda dapat mengumpulkan tindakan klik/gesek dan mengirimkannya bersama-sama, atau memeriksa tindakan klik/gesek yang aktif atau antri. Helper ini juga mendukung pembatalan tindakan klik/gesek aktif (khusus Android 8.0+).","behavior":"Pembantu statis untuk tindakan klik/gesek paralel yang dibuat oleh UI atau kode melalui klik(..., paralel=True) dan geser(..., paralel=True). Anda dapat mengumpulkan tindakan klik/gesek dan mengirimkannya bersama-sama, atau memeriksa tindakan klik/gesek yang aktif atau antri. Helper ini juga mendukung pembatalan tindakan klik/gesek aktif (khusus Android 8.0+).","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"Gestur Android berbagi perangkat. parallel=True mengantrekan id sentuhan, tetapi delay_before dan delay_after masih memblokir di luar mode collect. Dalam collect, sentuhan dikumpulkan untuk Touch.send(); Touch.wait() menunggu selesai."},"limitations":[],"relatedApis":["class-touch-static-method-collect","class-touch-static-method-send","class-touch-static-method-wait"],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"Touch.collect()\na = click(Point(300, 900), hold_ms=5000, parallel=True)\nb = click(Point(780, 900), hold_ms=1000, delay_before=1000, parallel=True)\nsent = Touch.send()\nTouch.cancel(a)\nTouch.wait()","aliases":[],"group":null},{"key":"class-touch-static-method-collect","kind":"STATIC_METHOD","parentKey":"class-touch","name":"collect","signature":"Touch.collect()","description":"Enable collect mode for click/swipe calls with parallel=True. When enabled, parallel click/swipe calls are not sent immediately; they are collected and only sent after Touch.send(). This method works for both UI/code. If Touch.collect() is not enabled, parallel click/swipe calls are sent immediately, and later click/swipe calls must wait for the previous click/swipe to finish before they can run because running a later click/swipe immediately would cancel the previous one. You can intentionally cancel the previous click/swipe with Touch.cancel().","behavior":"Enable collect mode for click/swipe calls with parallel=True. When enabled, parallel click/swipe calls are not sent immediately; they are collected and only sent after Touch.send(). This method works for both UI/code. If Touch.collect() is not enabled, parallel click/swipe calls are sent immediately, and later click/swipe calls must wait for the previous click/swipe to finish before they can run because running a later click/swipe immediately would cancel the previous one. You can intentionally cancel the previous click/swipe with Touch.cancel().","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send dan kueri status tidak menunggu gestur selesai. Perintah terkumpul baru masuk executor melalui Touch.send(); snapshot antrean dapat segera berubah."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":"# Periksa atau kendalikan sentuhan yang terkumpul\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-send","kind":"STATIC_METHOD","parentKey":"class-touch","name":"send","signature":"Touch.send()","description":"Send all click/swipe calls collected by Touch.collect() at once, return their matching numeric ids, then turn off Touch.collect() collection mode.","behavior":"Send all click/swipe calls collected by Touch.collect() at once, return their matching numeric ids, then turn off Touch.collect() collection mode.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send dan kueri status tidak menunggu gestur selesai. Perintah terkumpul baru masuk executor melalui Touch.send(); snapshot antrean dapat segera berubah."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[Number]","returnDescription":null,"example":"# Periksa atau kendalikan sentuhan yang terkumpul\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-queued","kind":"STATIC_METHOD","parentKey":"class-touch","name":"queued","signature":"Touch.queued()","description":"Return touch states currently in the queue.","behavior":"Return touch states currently in the queue.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send dan kueri status tidak menunggu gestur selesai. Perintah terkumpul baru masuk executor melalui Touch.send(); snapshot antrean dapat segera berubah."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[TouchState]","returnDescription":null,"example":"# Periksa atau kendalikan sentuhan yang terkumpul\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nprint(Touch.queued())\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-active","kind":"STATIC_METHOD","parentKey":"class-touch","name":"active","signature":"Touch.active()","description":"Return active touch states.","behavior":"Return active touch states.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send dan kueri status tidak menunggu gestur selesai. Perintah terkumpul baru masuk executor melalui Touch.send(); snapshot antrean dapat segera berubah."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[TouchState]","returnDescription":null,"example":"# Periksa atau kendalikan sentuhan yang terkumpul\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nprint(Touch.active())\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-all","kind":"STATIC_METHOD","parentKey":"class-touch","name":"all","signature":"Touch.all()","description":"Return recent and queued/active touch states.","behavior":"Return recent and queued/active touch states.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"collect/send dan kueri status tidak menunggu gestur selesai. Perintah terkumpul baru masuk executor melalui Touch.send(); snapshot antrean dapat segera berubah."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[TouchState]","returnDescription":null,"example":"# Periksa atau kendalikan sentuhan yang terkumpul\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nprint(Touch.all())\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-wait","kind":"STATIC_METHOD","parentKey":"class-touch","name":"wait","signature":"Touch.wait(id=None)","description":"Wait for one numeric id, or every queued/active touch when id is None.","behavior":"Wait for one numeric id, or every queued/active touch when id is None.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu dalam alur pemanggil hingga waktu yang diminta atau sentuhan selesai. Alur lain dapat lanjut; pause dan stop tetap berlaku."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"TouchState | list[TouchState]","returnDescription":null,"example":"# Periksa atau kendalikan sentuhan yang terkumpul\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\nTouch.wait(first)\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touch-static-method-cancel","kind":"STATIC_METHOD","parentKey":"class-touch","name":"cancel","signature":"Touch.cancel(id=None)","description":"Cancel one queued or active touch by numeric id. When id is None, cancels every queued/active touch and returns the accepted cancel count. Active cancel requires Android 8.0+; Android 7.x scripts fail with a clear error when an active touch is targeted.","behavior":"Cancel one queued or active touch by numeric id. When id is None, cancels every queued/active touch and returns the accepted cancel count. Active cancel requires Android 8.0+; Android 7.x scripts fail with a clear error when an active touch is targeted.","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"Gestur Android berbagi perangkat. parallel=True mengantrekan id sentuhan, tetapi delay_before dan delay_after masih memblokir di luar mode collect. Dalam collect, sentuhan dikumpulkan untuk Touch.send(); Touch.wait() menunggu selesai."},"limitations":[],"relatedApis":["class-touch-static-method-collect","class-touch-static-method-send","class-touch-static-method-wait"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean | Int","returnDescription":null,"example":"# Periksa atau kendalikan sentuhan yang terkumpul\nTouch.collect()\nfirst = click((300, 900), hold_ms=1000, parallel=True)\nsecond = click((780, 900), delay_before=300, parallel=True)\nTouch.send()\n# Pembatalan aktif memerlukan Android 8 atau lebih baru\nTouch.cancel(second)\nTouch.wait()","aliases":[],"group":"FLOW"},{"key":"class-touchstate","kind":"READ_ONLY_CLASS","parentKey":null,"name":"TouchState","signature":"TouchState(id, status, kind, action_order, remaining_repeats, completed_repeats)","description":"Cuplikan satu skrip/item sentuh UI dalam antrean isyarat bersama.","behavior":"Cuplikan satu skrip/item sentuh UI dalam antrean isyarat bersama.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["id","status","kind","action_order","remaining_repeats","completed_repeats"],"fieldDocs":[{"name":"id","type":"Number","defaultValue":null,"description":"Touch submission id.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"status","type":"String","defaultValue":null,"description":"queued, active, completed, cancelled, or failed.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"kind","type":"String","defaultValue":null,"description":"Touch kind such as click or swipe.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"action_order","type":"Number","defaultValue":null,"description":"Owning action order.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"remaining_repeats","type":"Number","defaultValue":"0","description":"Repeats still queued.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"completed_repeats","type":"Number","defaultValue":"0","description":"Repeats already completed.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Nilai TouchState berasal dari kueri status sentuhan; jangan membuatnya sendiri\nTouch.collect()\nclick((300, 900), hold_ms=1000, parallel=True)\nTouch.send()\nfor state in Touch.all():\n    print(state.id, state.status, state.kind)\nTouch.wait()","aliases":[],"group":null},{"key":"class-scaleparam","kind":"CLASS","parentKey":null,"name":"ScaleParam","signature":"ScaleParam(grayscale=True, auto_scale=False, cache_scale=True, template_scale=\"SHORT_EDGE\", fast_matching=False)","description":"Parameter pencocokan templat untuk Region. fast_matching memperkecil gambar Region dan templat.","behavior":"Parameter pencocokan templat untuk Region. fast_matching memperkecil gambar Region dan templat.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["grayscale","auto_scale","cache_scale","template_scale","fast_matching"],"fieldDocs":[{"name":"grayscale","type":"Boolean","defaultValue":"True","description":"**Applies to templates**. Convert screenshot/template to grayscale before template matching.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"auto_scale","type":"Boolean","defaultValue":"False","description":"Mencoba ukuran templat di sekitar skala yang dikonfigurasi dengan rentang adaptif: DPI/resolusi tinggi memindai kandidat yang lebih kecil hingga 0,70x, sedangkan DPI/resolusi rendah memindai kandidat yang lebih besar hingga 1,30x.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"cache_scale","type":"Boolean","defaultValue":"True","description":"Menyimpan nilai auto-scale pertama yang berhasil untuk proses berikutnya. Hanya berlaku saat auto_scale bernilai True.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"template_scale","type":"String","defaultValue":"SHORT_EDGE","description":"Mode skala dasar templat. Nilai: SHORT_EDGE, LONG_EDGE, DPI, SMALLEST_WIDTH_DP, NONE.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"fast_matching","type":"Boolean","defaultValue":"False","description":"Perkecil gambar Region dan templat menjadi dua pertiga sebelum pencocokan. Cara ini lebih cepat, tetapi dapat sedikit mengurangi akurasi, terutama untuk ikon kecil.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"grayscale","type":"Boolean","defaultValue":"True","description":"**Applies to templates**. Convert template matching to grayscale.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_scale","type":"Boolean","defaultValue":"False","description":"Mencoba ukuran templat dengan rentang sisi adaptif 0,70x-1,30x setelah skala templat yang dikonfigurasi diterapkan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"cache_scale","type":"Boolean","defaultValue":"True","description":"Menyimpan nilai auto-scale yang berhasil.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"template_scale","type":"String","defaultValue":"SHORT_EDGE","description":"Nilai: SHORT_EDGE, LONG_EDGE, DPI, SMALLEST_WIDTH_DP, NONE.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"fast_matching","type":"Boolean","defaultValue":"False","description":"Perkecil gambar Region dan templat menjadi dua pertiga sebelum pencocokan. Cara ini lebih cepat, tetapi dapat sedikit mengurangi akurasi, terutama untuk ikon kecil.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":"param = ScaleParam(auto_scale=True, template_scale=\"LONG_EDGE\", fast_matching=True)\nparam.cache_scale = False\ntemplate_mode = param.template_scale","constructorExample":"param = ScaleParam(grayscale=True, auto_scale=True, cache_scale=True, template_scale=\"LONG_EDGE\", fast_matching=True)\nquick = ScaleParam(False, True, True, \"LONG_EDGE\", True)","params":[],"returnType":null,"returnDescription":null,"example":"# Atur prapemrosesan pencocokan pada Region ini\nsettings = ScaleParam(grayscale=True, fast_matching=True)\nregion = Region(100, 200, 300, 400, scale_param=settings)\nprint(region.find(\"start\", timeout=0).found)","aliases":[],"group":null},{"key":"class-region","kind":"CLASS","parentKey":null,"name":"Region","signature":"Region(x, y, width, height, /, scale=\"fixed\", anchor=\"none\", scale_param=ScaleParam())","description":"A rectangular region on the screen, measured in pixels on the current screen axes. Scale/anchor control coordinate mapping across full-screen sizes without rotating through portrait coordinates or using the app viewport; runtime consumers clip the final region to the current screen after mapping and offsets. ScaleParam controls template matching inside this region. Region can be destructured as x, y, width, height.","behavior":"A rectangular region on the screen, measured in pixels on the current screen axes. Scale/anchor control coordinate mapping across full-screen sizes without rotating through portrait coordinates or using the app viewport; runtime consumers clip the final region to the current screen after mapping and offsets. ScaleParam controls template matching inside this region. Region can be destructured as x, y, width, height.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung geometri di alur pemanggil tanpa capture atau pengenalan. Simpan builder Region terpisah per alur."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["x","y","width","height","scale","anchor","scale_param","middle_point"],"fieldDocs":[{"name":"x","type":"Number","defaultValue":null,"description":"Top-left horizontal coordinate.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"y","type":"Number","defaultValue":null,"description":"Top-left vertical coordinate.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"width","type":"Number","defaultValue":null,"description":"Region width in pixels.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"height","type":"Number","defaultValue":null,"description":"Region height in pixels.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"**Applies to region coordinates**. Coordinate scale mode using full-screen dimensions on the current X/Y axes, without app viewport scaling or portrait rotation. Values: \"fixed\" keeps saved pixels unchanged; \"auto\" scales X by width and Y by height; \"width\" scales both axes by screen width; \"height\" scales both axes by screen height.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"**Applies to region coordinates**. Coordinate anchor. Values: none, center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right, auto.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale_param","type":"ScaleParam","defaultValue":"ScaleParam()","description":"**Applies to templates**. Template matching scale parameters used by find/wait methods on this region.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"middle_point","type":"Point","defaultValue":null,"description":"Center point of this region.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"x","type":"Number","defaultValue":null,"description":"Top-left X coordinate","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"y","type":"Number","defaultValue":null,"description":"Top-left Y coordinate","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"width","type":"Number","defaultValue":null,"description":"Region width","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"height","type":"Number","defaultValue":null,"description":"Region height","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"scale","type":"String","defaultValue":"fixed","description":"**Applies to region coordinates**. Optional full-screen scale mode on the current X/Y axes. Values: \"fixed\", \"auto\", \"width\", \"height\".","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"**Applies to region coordinates**. Optional anchor mode. Values: none, center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right, auto.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"scale_param","type":"ScaleParam","defaultValue":"ScaleParam()","description":"**Applies to templates**. Template matching scale parameters.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":"search_area = Region(120, 240, 360, 420)\nleft = search_area.x\ntop = search_area.y\nw = search_area.width\nh = search_area.height\nscale = search_area.scale\nanchor = search_area.anchor\nsearch_area.x = 300\nsearch_area.scale_param = ScaleParam(auto_scale=True, template_scale=\"LONG_EDGE\")\ncenter = search_area.middle_point\n\n# Bongkar Region menjadi x, y, width, height\nx, y, width, height = search_area","constructorExample":"search_region = Region(120, 240, 360, 420)\nfixed_center = Region(120, 240, 360, 420, \"fixed\", \"center\")\nleft_lane = Region(120, 240, 360, 420, scale=\"width\", anchor=\"left\", scale_param=ScaleParam(auto_scale=True, template_scale=\"LONG_EDGE\"))","params":[],"returnType":null,"returnDescription":null,"example":"region = Region(100, 200, 300, 400)\nhit = region.find(\"img\", 3000, threshold=0.8, rate=3.0)","aliases":[],"group":null},{"key":"class-region-static-method-highlighted","kind":"STATIC_METHOD","parentKey":"class-region","name":"highlighted","signature":"Region.highlighted()","description":"Dapatkan semua wilayah yang saat ini disorot berdasarkan contoh skrip.","behavior":"Dapatkan semua wilayah yang saat ini disorot berdasarkan contoh skrip.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[Region]","returnDescription":"daftar wilayah aktif yang disorot.","example":"active_regions = Region.highlighted()\nfor area in active_regions:\n    area.highlight(\"yellow\", auto_hide_ms=500)","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-full-screen","kind":"STATIC_METHOD","parentKey":"class-region","name":"full_screen","signature":"Region.full_screen()","description":"Kembalikan wilayah layar penuh saat ini.","behavior":"Kembalikan wilayah layar penuh saat ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Region","returnDescription":"Wilayah seukuran layar dari host runtime.","example":"scan = Region.full_screen()\nhit = scan.find(\"ok\", 2000)","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-highlight-off","kind":"STATIC_METHOD","parentKey":"class-region","name":"highlight_off","signature":"Region.highlight_off()","description":"Matikan semua sorotan wilayah aktif.","behavior":"Matikan semua sorotan wilayah aktif.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai.","example":"scan = Region(120, 260, 280, 160)\nscan.highlight(\"green\")\nwait(1000)\nRegion.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-macro-width","kind":"STATIC_METHOD","parentKey":"class-region","name":"macro_width","signature":"Region.macro_width()","description":"Return the screen width of the device that created this macro, adapted to current screen orientation, when available.","behavior":"Return the screen width of the device that created this macro, adapted to current screen orientation, when available.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number?","returnDescription":"Lebar layar sumber makro, atau Tidak Ada bila tidak tersedia.","example":"macro_w = Region.macro_width()","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-macro-height","kind":"STATIC_METHOD","parentKey":"class-region","name":"macro_height","signature":"Region.macro_height()","description":"Return the screen height of the device that created this macro, adapted to current screen orientation, when available.","behavior":"Return the screen height of the device that created this macro, adapted to current screen orientation, when available.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number?","returnDescription":"Tinggi layar sumber makro, atau Tidak Ada bila tidak tersedia.","example":"macro_h = Region.macro_height()","aliases":[],"group":"FLOW"},{"key":"class-region-method-find","kind":"METHOD","parentKey":"class-region","name":"find","signature":"region.find(template, timeout=0, threshold=0.7, rate=3.0)","description":"Pindai area ini hingga satu kecocokan templat ditemukan atau waktu habis. Jika timeout dihilangkan, hanya satu pemindaian dilakukan. Gunakan ScreenCapture.cache_on() untuk memeriksa beberapa gambar dalam satu frame yang disematkan, lalu cache_off() untuk melepaskannya. Untuk pengenalan berulang dengan frame terbaru yang tersedia, gunakan juga ScreenCapture.auto_cache_off(); jika tidak, cache otomatis menggunakan kembali frame hingga 100 ms. Menonaktifkannya menambah beban pengambilan gambar dan tidak menjamin eksekusi lebih cepat.","behavior":"Pindai area ini hingga satu kecocokan templat ditemukan atau waktu habis. Jika timeout dihilangkan, hanya satu pemindaian dilakukan. Gunakan ScreenCapture.cache_on() untuk memeriksa beberapa gambar dalam satu frame yang disematkan, lalu cache_off() untuk melepaskannya. Untuk pengenalan berulang dengan frame terbaru yang tersedia, gunakan juga ScreenCapture.auto_cache_off(); jika tidak, cache otomatis menggunakan kembali frame hingga 100 ms. Menonaktifkannya menambah beban pengambilan gambar dan tidak menjamin eksekusi lebih cepat.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"template","type":"String | Template","defaultValue":null,"description":"Template name, relative folder path, or a Template object in current macro.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Pencocokan pertama yang berhasil, atau ditemukan=salah ketika waktu habis.","example":"region = Region(80, 220, 420, 520)\nhit = region.find(\"ok\", 4000, 0.8, 4.0)\nMacroPanel.notify(str(hit))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-multi","kind":"METHOD","parentKey":"class-region","name":"find_multi","signature":"region.find_multi(template, timeout=0, threshold=0.7, rate=3.0)","description":"Pindai di dalam wilayah ini dan kembalikan semua kecocokan untuk satu templat ketika setidaknya satu templat ditemukan. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","behavior":"Pindai di dalam wilayah ini dan kembalikan semua kecocokan untuk satu templat ketika setidaknya satu templat ditemukan. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"template","type":"String | Template","defaultValue":null,"description":"Template name, relative folder path, or a Template object in current macro.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Semua cocok untuk templat, atau daftar kosong saat batas waktu habis.","example":"region = Region(80, 220, 420, 520)\nmatches = region.find_multi(\"enemy\", 3000)\nMacroPanel.notify(str(matches))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-any","kind":"METHOD","parentKey":"class-region","name":"find_any","signature":"region.find_any(templates, timeout=0, threshold=0.7, rate=3.0)","description":"Pindai wilayah ini dan kembalikan ketika templat apa pun dalam daftar ditemukan. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","behavior":"Pindai wilayah ini dan kembalikan ketika templat apa pun dalam daftar ditemukan. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"templates","type":"list[String | Template]","defaultValue":null,"description":"Template names or Template objects.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Hasil pencocokan batch ketika templat apa pun ditemukan, atau daftar kosong saat batas waktu habis.","example":"region = Region(80, 220, 420, 520)\nmatches = region.find_any([\"enemy_a\", \"enemy_b\"], 2500)\nMacroPanel.notify(str(matches))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-all","kind":"METHOD","parentKey":"class-region","name":"find_all","signature":"region.find_all(templates, timeout=0, threshold=0.7, rate=3.0)","description":"Pindai wilayah ini dan kembalikan hanya ketika setiap templat dalam daftar ditemukan. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","behavior":"Pindai wilayah ini dan kembalikan hanya ketika setiap templat dalam daftar ditemukan. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"templates","type":"list[String | Template]","defaultValue":null,"description":"Template names or Template objects.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Hasil pencocokan batch ketika semua templat ditemukan, atau daftar kosong saat waktu habis.","example":"region = Region(80, 220, 420, 520)\nmatches = region.find_all([\"hp\", \"mp\"], 5000)\nMacroPanel.notify(str(matches))","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-color","kind":"METHOD","parentKey":"class-region","name":"find_color","signature":"region.find_color(color, timeout=0, tolerance=0, rate=3, interval=10)","description":"Pindai wilayah ini untuk mencari satu warna target menggunakan aturan toleransi RGB bingkai mentah yang sama seperti pengenalan warna UI. Titik terbaik dipilih berdasarkan delta saluran RGB maks terkecil.","behavior":"Pindai wilayah ini untuk mencari satu warna target menggunakan aturan toleransi RGB bingkai mentah yang sama seperti pengenalan warna UI. Titik terbaik dipilih berdasarkan delta saluran RGB maks terkecil.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":null,"description":"Target color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. 0 performs one scan pass.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel RGB delta from 0 to 255.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3","description":"Scan attempts per second while waiting.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Sampling step in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Cocokkan dengan titik sebagai daftar[Titik]; find_color mengembalikan paling banyak satu poin.","example":"scan = Region(80, 220, 420, 520)\nhit = scan.find_color(\"#FF4CAF50\", tolerance=8, interval=4)\nif hit.found:\n    click(hit.point[0], random=0)","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-any-color","kind":"METHOD","parentKey":"class-region","name":"find_any_color","signature":"region.find_any_color(colors, timeout=0, tolerance=0, rate=3, interval=10)","description":"Pindai wilayah ini untuk melihat beberapa warna target. Setiap warna masukan menyumbang paling banyak satu titik terbaik, diurutkan berdasarkan daftar warna masukan.","behavior":"Pindai wilayah ini untuk melihat beberapa warna target. Setiap warna masukan menyumbang paling banyak satu titik terbaik, diurutkan berdasarkan daftar warna masukan.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"colors","type":"list[Color | String | Number] | tuple[Color | String | Number]","defaultValue":null,"description":"Target colors.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. 0 performs one scan pass.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel RGB delta from 0 to 255.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3","description":"Scan attempts per second while waiting.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Sampling step in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Cocokkan dengan titik sebagai daftar[Titik]; satu titik terbaik per warna masukan yang ditemukan.","example":"colors = [\"#FF0000\", \"#00FF00\", \"#0000FF\"]\nhit = Region.full_screen().find_any_color(colors, tolerance=6)\nif hit.found:\n    click(hit, random=0)","aliases":[],"group":"FLOW"},{"key":"class-region-method-find-multi-color","kind":"METHOD","parentKey":"class-region","name":"find_multi_color","signature":"region.find_multi_color(color, timeout=0, tolerance=0, rate=3, interval=10)","description":"Pindai wilayah ini untuk melihat beberapa posisi sampel dengan satu warna target. Melewati daftar atau tuple ditolak sehingga ini tidak menjadi pencarian warna multi-target secara diam-diam.","behavior":"Pindai wilayah ini untuk melihat beberapa posisi sampel dengan satu warna target. Melewati daftar atau tuple ditolak sehingga ini tidak menjadi pencarian warna multi-target secara diam-diam.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":null,"description":"Single target color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. 0 performs one scan pass.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel RGB delta from 0 to 255.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3","description":"Scan attempts per second while waiting.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Sampling step in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Cocokkan dengan titik sebagai daftar[Titik]; titik sampel yang cocok diurutkan terlebih dahulu dengan warna yang paling mendekati.","example":"hit = Region(80, 220, 420, 520).find_multi_color(\"red\", tolerance=4, interval=3)\nif hit.found:\n    first = hit.point[0]\n    hit.highlight(color=\"yellow\", auto_hide_ms=800)","aliases":[],"group":"FLOW"},{"key":"class-region-method-wait","kind":"METHOD","parentKey":"class-region","name":"wait","signature":"region.wait(template, timeout=0, threshold=0.7, rate=3.0)","description":"Tunggu hingga template menghilang dari wilayah ini. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","behavior":"Tunggu hingga template menghilang dari wilayah ini. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"template","type":"String | Template","defaultValue":null,"description":"Template name, relative folder path, or a Template object in current macro.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Status kecocokan terakhir saat template hilang atau batas waktu tercapai.","example":"region = Region(0, 0, 1080, 2400)\nresult = region.wait(\"loading\", 8000)\nMacroPanel.notify(str(result))","aliases":[],"group":"FLOW"},{"key":"class-region-method-wait-any","kind":"METHOD","parentKey":"class-region","name":"wait_any","signature":"region.wait_any(templates, timeout=0, threshold=0.7, rate=3.0)","description":"Tunggu hingga templat apa pun dalam daftar hilang dari wilayah ini. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","behavior":"Tunggu hingga templat apa pun dalam daftar hilang dari wilayah ini. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"templates","type":"list[String | Template]","defaultValue":null,"description":"Template names or Template objects.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Pencocokan batch menyatakan ketika setidaknya satu templat tidak lagi ditemukan.","example":"watch = [\"loading\", \"syncing\"]\nresult = region.wait_any(watch, 10000)\nMacroPanel.notify(str(result))","aliases":[],"group":"FLOW"},{"key":"class-region-method-wait-all","kind":"METHOD","parentKey":"class-region","name":"wait_all","signature":"region.wait_all(templates, timeout=0, threshold=0.7, rate=3.0)","description":"Tunggu hingga semua templat dalam daftar hilang dari wilayah ini. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","behavior":"Tunggu hingga semua templat dalam daftar hilang dari wilayah ini. Jika batas waktu dihilangkan, hanya satu pemindaian yang dilakukan.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"templates","type":"list[String | Template]","defaultValue":null,"description":"Template names or Template objects.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Maximum wait time in milliseconds. Omit this argument to scan only once.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"threshold","type":"Number","defaultValue":"0.7","description":"Match threshold from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"rate","type":"Number","defaultValue":"3.0","description":"Scan attempts per second (1-60).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Pencocokan batch menyatakan ketika semua templat tidak lagi ditemukan.","example":"watch = [\"loading\", \"syncing\"]\nresult = region.wait_all(watch, 10000)\nMacroPanel.notify(str(result))","aliases":[],"group":"FLOW"},{"key":"class-region-method-capture","kind":"METHOD","parentKey":"class-region","name":"capture","signature":"region.capture(name=None)","description":"Tangkap layar dan pangkas wilayah ini, lalu kembalikan hasilnya sebagai Templat.","behavior":"Tangkap layar dan pangkas wilayah ini, lalu kembalikan hasilnya sebagai Templat.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Pengenalan berjalan pada alur pemanggil dan memakai capture bersama. find mencari kemunculan; wait menunggu hilangnya target. Satu pemindaian tetap membutuhkan waktu capture dan pengenalan; timeout atau laju polling tidak membuatnya asinkron."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String?","defaultValue":"None","description":"Optional template name to save into current macro immediately.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"Objek templat yang diambil.","example":"sample = Region(120, 280, 220, 120).capture()\nsaved = sample.save_as(\"buttons/top/enemy_slot\")","aliases":[],"group":"FLOW"},{"key":"class-region-method-left","kind":"METHOD","parentKey":"class-region","name":"left","signature":"region.left(value=0.5)","description":"Kecilkan wilayah ini ke arah sisi kiri. Tepi kanan bergerak ke kiri sesuai jumlah yang diminta.","behavior":"Kecilkan wilayah ini ke arah sisi kiri. Tepi kanan bergerak ke kiri sesuai jumlah yang diminta.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung geometri di alur pemanggil tanpa capture atau pengenalan. Simpan builder Region terpisah per alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Shrink amount: 0 -> 1 means ratio of current width, >1 means pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Wilayah baru menyempit dari tepi kanan.","example":"full = Region(100, 200, 1000, 500)\nleft_focus = full.left(0.4)\nleft_focus_px = full.left(400)","aliases":[],"group":"FLOW"},{"key":"class-region-method-right","kind":"METHOD","parentKey":"class-region","name":"right","signature":"region.right(value=0.5)","description":"Kecilkan wilayah ini ke arah sisi kanan. Tepi kiri bergerak ke kanan sesuai jumlah yang diminta.","behavior":"Kecilkan wilayah ini ke arah sisi kanan. Tepi kiri bergerak ke kanan sesuai jumlah yang diminta.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung geometri di alur pemanggil tanpa capture atau pengenalan. Simpan builder Region terpisah per alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Shrink amount: 0 -> 1 means ratio of current width, >1 means pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Wilayah baru menyempit dari tepi kiri.","example":"full = Region(100, 200, 1000, 500)\nright_focus = full.right(0.3)\nright_focus_px = full.right(240)","aliases":[],"group":"FLOW"},{"key":"class-region-method-top","kind":"METHOD","parentKey":"class-region","name":"top","signature":"region.top(value=0.5)","description":"Kecilkan wilayah ini ke arah sisi atas. Tepi bawah bergerak ke atas sesuai jumlah yang diminta.","behavior":"Kecilkan wilayah ini ke arah sisi atas. Tepi bawah bergerak ke atas sesuai jumlah yang diminta.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung geometri di alur pemanggil tanpa capture atau pengenalan. Simpan builder Region terpisah per alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Shrink amount: 0 -> 1 means ratio of current height, >1 means pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Wilayah baru menyempit dari tepi bawah.","example":"full = Region(100, 200, 1000, 500)\ntop_focus = full.top(0.25)\ntop_focus_px = full.top(120)","aliases":[],"group":"FLOW"},{"key":"class-region-method-bottom","kind":"METHOD","parentKey":"class-region","name":"bottom","signature":"region.bottom(value=0.5)","description":"Kecilkan wilayah ini ke sisi bawah. Tepi atas bergerak ke bawah sesuai jumlah yang diminta.","behavior":"Kecilkan wilayah ini ke sisi bawah. Tepi atas bergerak ke bawah sesuai jumlah yang diminta.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung geometri di alur pemanggil tanpa capture atau pengenalan. Simpan builder Region terpisah per alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Shrink amount: 0 -> 1 means ratio of current height, >1 means pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Wilayah baru menyempit dari tepi atas.","example":"full = Region(100, 200, 1000, 500)\nbottom_focus = full.bottom(0.25)\nbottom_focus_px = full.bottom(120)","aliases":[],"group":"FLOW"},{"key":"class-region-method-horizontal","kind":"METHOD","parentKey":"class-region","name":"horizontal","signature":"region.horizontal(value=0.5)","description":"Kecilkan secara horizontal ke arah tengah dengan menggerakkan tepi kiri dan kanan ke dalam.","behavior":"Kecilkan secara horizontal ke arah tengah dengan menggerakkan tepi kiri dan kanan ke dalam.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung geometri di alur pemanggil tanpa capture atau pengenalan. Simpan builder Region terpisah per alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Total horizontal shrink: 0 -> 1 means ratio of current width, >1 means pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Wilayah terpusat dengan lebar yang dikurangi.","example":"full = Region(100, 200, 1000, 500)\ncenter_lane = full.horizontal(0.5)\ncenter_lane_px = full.horizontal(300)","aliases":[],"group":"FLOW"},{"key":"class-region-method-vertical","kind":"METHOD","parentKey":"class-region","name":"vertical","signature":"region.vertical(value=0.5)","description":"Kecilkan secara vertikal ke arah tengah dengan menggerakkan tepi atas dan bawah ke dalam.","behavior":"Kecilkan secara vertikal ke arah tengah dengan menggerakkan tepi atas dan bawah ke dalam.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung geometri di alur pemanggil tanpa capture atau pengenalan. Simpan builder Region terpisah per alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Total vertical shrink: 0 -> 1 means ratio of current height, >1 means pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Wilayah terpusat dengan ketinggian berkurang.","example":"full = Region(100, 200, 1000, 500)\ncenter_band = full.vertical(0.5)\ncenter_band_px = full.vertical(200)","aliases":[],"group":"FLOW"},{"key":"class-region-method-middle","kind":"METHOD","parentKey":"class-region","name":"middle","signature":"region.middle(value=0.5)","description":"Kecilkan lebar dan tinggi ke arah tengah.","behavior":"Kecilkan lebar dan tinggi ke arah tengah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung geometri di alur pemanggil tanpa capture atau pengenalan. Simpan builder Region terpisah per alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Shrink amount for both axes: 0 -> 1 means ratio per axis, >1 means pixels per axis.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Wilayah terpusat tereduksi pada kedua sumbu.","example":"full = Region(100, 200, 1000, 500)\nfocus = full.middle(0.4)\nfocus_px = full.middle(160)","aliases":[],"group":"FLOW"},{"key":"class-region-method-highlight","kind":"METHOD","parentKey":"class-region","name":"highlight","signature":"region.highlight(color=\"green\", line_width=2, auto_hide_ms=0, movable=False)","description":"Gambarlah persegi panjang yang disorot untuk wilayah ini. Dengan movable=True, pengguna dapat menyeret wilayah dan objek Wilayah yang sama menerima koordinat layar yang diperbarui. Menyorot ulang contoh wilayah yang sama akan menggantikan contoh wilayah sebelumnya.","behavior":"Gambarlah persegi panjang yang disorot untuk wilayah ini. Dengan movable=True, pengguna dapat menyeret wilayah dan objek Wilayah yang sama menerima koordinat layar yang diperbarui. Menyorot ulang contoh wilayah yang sama akan menggantikan contoh wilayah sebelumnya.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":"green","description":"Highlight color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"line_width","type":"Number","defaultValue":"2","description":"Stroke thickness in dp.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Auto-hide after N milliseconds. 0 disables auto-hide.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"movable","type":"Boolean","defaultValue":"False","description":"Allow dragging the highlighted region and write the moved coordinates back into this Region.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Mengembalikan wilayah yang sama setelah menyorot gambar.","example":"scan = Region(120, 260, 280, 160)\nscan.highlight(\"#FF00BCD4\", line_width=3, auto_hide_ms=1500, movable=True)","aliases":[],"group":"FLOW"},{"key":"class-region-method-highlight-off","kind":"METHOD","parentKey":"class-region","name":"highlight_off","signature":"region.highlight_off()","description":"Matikan sorotan untuk contoh wilayah ini.","behavior":"Matikan sorotan untuk contoh wilayah ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Region","returnDescription":"Mengembalikan wilayah yang sama setelah mematikan sorotan.","example":"scan = Region(120, 260, 280, 160)\nscan.highlight(\"green\")\nwait(1000)\nscan.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-template","kind":"CLASS","parentKey":null,"name":"Template","signature":"Template(name, /)","description":"Pembungkus gambar templat. Anda dapat menskalakan/memotong templat yang sudah ada, menyimpannya sebagai nama templat baru, atau memeriksa keberadaannya.","behavior":"Pembungkus gambar templat. Anda dapat menskalakan/memotong templat yang sudah ada, menyimpannya sebagai nama templat baru, atau memeriksa keberadaannya.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["name"],"fieldDocs":[{"name":"name","type":"String?","defaultValue":null,"description":"Template name or relative folder path when this object points to a named template in current macro.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"name","type":"String","defaultValue":null,"description":"Template name in current macro, optionally as a relative folder path such as \"buttons/top/attack\".","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"fieldExample":null,"constructorExample":"base = Template(\"enemy_head\")","params":[],"returnType":null,"returnDescription":null,"example":"base = Template(\"enemy_head\")\nvariant = base.scale(0.9).crop(Region(0, 0, 64, 64)).save_as(\"enemy_head_small\")","aliases":[],"group":null},{"key":"class-template-static-method-exists","kind":"STATIC_METHOD","parentKey":"class-template","name":"exists","signature":"Template.exists(name)","description":"Periksa apakah nama templat ada di makro saat ini.","behavior":"Periksa apakah nama templat ada di makro saat ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Template name or relative folder path to check.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"benar jika templatnya ada.","example":"if Template.exists(\"enemy_head\"):\n    text(\"ready\")","aliases":[],"group":"FLOW"},{"key":"class-template-method-exists","kind":"METHOD","parentKey":"class-template","name":"exists","signature":"template.exists()","description":"Periksa apakah objek Template ini masih mengarah ke file yang sudah ada.","behavior":"Periksa apakah objek Template ini masih mengarah ke file yang sudah ada.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"benar jika file template pendukung ada.","example":"t = Template(\"enemy_head\")\nif t.exists():\n    text(\"ok\")","aliases":[],"group":"FLOW"},{"key":"class-template-method-scale","kind":"METHOD","parentKey":"class-template","name":"scale","signature":"template.scale(scale, scale_y=None)","description":"Buat salinan templat berskala dan kembalikan sebagai objek Templat lainnya.","behavior":"Buat salinan templat berskala dan kembalikan sebagai objek Templat lainnya.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"scale","type":"Number","defaultValue":null,"description":"Scale factor for X axis (and Y axis when scale_y is omitted).","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"scale_y","type":"Number","defaultValue":"scale","description":"Optional Y-axis scale factor.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"Objek templat berskala.","example":"t = Template(\"enemy_head\")\nsmall = t.scale(0.8)\nhit = Region(0, 0, 1080, 2400).find(small, 3000)","aliases":[],"group":"FLOW"},{"key":"class-template-method-crop","kind":"METHOD","parentKey":"class-template","name":"crop","signature":"template.crop(region)","description":"Pangkas templat ini berdasarkan wilayah dalam piksel templat-lokal dan kembalikan objek Templat baru.","behavior":"Pangkas templat ini berdasarkan wilayah dalam piksel templat-lokal dan kembalikan objek Templat baru.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"region","type":"Region","defaultValue":null,"description":"Crop region in template-local coordinates.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"Objek templat terpotong.","example":"t = Template(\"enemy_head\")\nface = t.crop(Region(10, 10, 60, 60))","aliases":[],"group":"FLOW"},{"key":"class-template-method-save-as","kind":"METHOD","parentKey":"class-template","name":"save_as","signature":"template.save_as(name)","description":"Simpan objek templat ini ke dalam templat makro saat ini menggunakan nama baru atau jalur folder relatif.","behavior":"Simpan objek templat ini ke dalam templat makro saat ini menggunakan nama baru atau jalur folder relatif.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"New template name, optionally including folders such as \"buttons/top/attack\".","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"Objek templat bernama yang disimpan.","example":"captured = Region(200, 300, 120, 90).capture()\nsaved = captured.save_as(\"buttons/top/enemy_slot\")\nif saved.exists():\n    text(\"saved\")","aliases":[],"group":"FLOW"},{"key":"class-recognition","kind":"READ_ONLY_CLASS","parentKey":null,"name":"Recognition","signature":"Recognition","description":"Digunakan di cabang pengakuan keberhasilan di UI. Recognition.result mengembalikan Kecocokan untuk satu target pengenalan atau Daftar Kecocokan ketika beberapa target cocok.","behavior":"Digunakan di cabang pengakuan keberhasilan di UI. Recognition.result mengembalikan Kecocokan untuk satu target pengenalan atau Daftar Kecocokan ketika beberapa target cocok.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["result"],"fieldDocs":[{"name":"result","type":"Match | MatchList","defaultValue":null,"description":"The active recognition result for this Success branch.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":"current = Recognition.result\nif current.found:\n    click(current, random=0)","constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Recognition hanya tersedia di Python pada cabang Berhasil mengenali.\na = Recognition.result\nif a.found:\n    a.highlight(color=\"yellow\", auto_hide_ms=800)","aliases":[],"group":null},{"key":"class-match","kind":"READ_ONLY_CLASS","parentKey":null,"name":"Match","signature":"Match","description":"Hasil kecocokan pengenalan hanya baca yang dikembalikan oleh pembantu region.find*. Di cabang pengakuan Sukses, Recognition.result menunjuk ke Match atau MatchList yang aktif.","behavior":"Hasil kecocokan pengenalan hanya baca yang dikembalikan oleh pembantu region.find*. Di cabang pengakuan Sukses, Recognition.result menunjuk ke Match atau MatchList yang aktif.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["name","found","confidence","conf","point","bounds","region","inference_info"],"fieldDocs":[{"name":"name","type":"String?","defaultValue":null,"description":"Matched target name. Template matches use the template name without extension, OCR uses the matched target text, and color matches use Color.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"found","type":"Boolean","defaultValue":null,"description":"Whether a match was found.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"confidence","type":"Number","defaultValue":null,"description":"Confidence score from 0.0 to 1.0.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"conf","type":"Number","defaultValue":null,"description":"Alias dari confidence; mengembalikan skor yang sama dari 0.0 hingga 1.0.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"point","type":"Point? | list[Point]","defaultValue":null,"description":"Titik hasil kecocokan. Pengenalan gambar/OCR/objek biasanya mengembalikan Point; kecocokan gambar di bawah threshold tetap dapat mengembalikan titik kandidat terbaik saat bounds tersedia. Pengenalan warna dan multi-target dapat mengembalikan list[Point] sehingga match.point[0].x/y dapat membaca titik terbaik.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"bounds","type":"Region?","defaultValue":null,"description":"Kotak bounds dari area yang cocok. Kecocokan gambar di bawah threshold tetap dapat menampilkan bounds kandidat terbaik.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"region","type":"Region?","defaultValue":null,"description":"Alias dari bounds; mengembalikan Region yang sama atau None.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"inference_info","type":"dict?","defaultValue":null,"description":"Metadata model atau warna jika tersedia. Metadata TFLite mencakup backend, class_id, class_name, preprocess_ms, inference_ms, postprocess_ms, total_ms, input_width, input_height, dimensi gambar debug opsional, dan telemetri tangkapan layar. Baris debug_result terperinci hanya ditampilkan di dialog debug inference. Metadata warna mencakup backend=color, target_color, sampled_color, point, max_channel_delta, confidence, interval, match_count, dan matches.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":"m = Region(100, 200, 300, 400).find(\"btn\", 3000)\ntarget_name = m.name\nis_found = m.found\nscore = m.confidence\nshort_score = m.conf\ncenter = m.point\nbox = m.bounds\nsame_box = m.region\ninfo = m.inference_info\ninfo_class_id = info.class_id\ninfo_class_name = info.class_name\n\ncolor_hit = Region(0, 0, 1080, 1920).find_color(\"#FFFFFF\", tolerance=4)\ncolor_name = color_hit.name\nfirst_color_point = color_hit.point[0]\n\n# Di cabang Berhasil mengenali:\ncurrent = Recognition.result\nif current.found:\n    text(current.name)\n    current.highlight(color=\"yellow\", auto_hide_ms=800)","constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"m = Region(100, 200, 300, 400).find(\"btn\", 3000)\nif m.found:\n    click(m)\n    conf = m.confidence\n\n# Recognition.result hanya tersedia di Python pada cabang Berhasil mengenali.\nif Recognition.result.found:\n    click(Recognition.result, random=0)","aliases":[],"group":null},{"key":"class-match-method-highlight","kind":"METHOD","parentKey":"class-match","name":"highlight","signature":"match.highlight(color=\"green\", line_width=2, region_width=36, auto_hide_ms=0)","description":"Gambarlah bingkai sorotan untuk kecocokan ini ketika ditemukan=benar. Gunakan batasan terlebih dahulu; ketika batasnya hilang, gambarkan satu kotak untuk setiap titik dalam poin/daftar.","behavior":"Gambarlah bingkai sorotan untuk kecocokan ini ketika ditemukan=benar. Gunakan batasan terlebih dahulu; ketika batasnya hilang, gambarkan satu kotak untuk setiap titik dalam poin/daftar.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":"green","description":"Highlight color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"line_width","type":"Number","defaultValue":"2","description":"Outline width in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Fallback square width when the match only has point.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Auto-hide timeout in milliseconds. 0 keeps highlight visible.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Mengembalikan kecocokan yang sama setelah sorotan gambar.","example":"m = Region(100, 200, 300, 400).find(\"start\", 3000)\nm.highlight(color=\"yellow\", line_width=3, auto_hide_ms=1200)","aliases":[],"group":"FLOW"},{"key":"class-match-method-highlight-off","kind":"METHOD","parentKey":"class-match","name":"highlight_off","signature":"match.highlight_off()","description":"Matikan sorotan aktif yang dihasilkan dari contoh kecocokan ini.","behavior":"Matikan sorotan aktif yang dihasilkan dari contoh kecocokan ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Match","returnDescription":"Mengembalikan kecocokan yang sama setelah mematikan sorotan.","example":"m = Region(100, 200, 300, 400).find(\"start\", 3000)\nm.highlight()\nm.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-matchlist","kind":"READ_ONLY_CLASS","parentKey":null,"name":"MatchList","signature":"MatchList","description":"Daftar nilai Kecocokan hanya baca yang ditampilkan berdasarkan region.find_any/find_all/find_multi, wait_any/wait_all, dan Recognition.result ketika beberapa target pengenalan cocok.","behavior":"Daftar nilai Kecocokan hanya baca yang ditampilkan berdasarkan region.find_any/find_all/find_multi, wait_any/wait_all, dan Recognition.result ketika beberapa target pengenalan cocok.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"hits = Region(100, 200, 300, 400).find_all([\"hp\", \"mp\"], 5000)\nif hits:\n    click(hits, offset=(0, 4), random=0)","aliases":[],"group":null},{"key":"class-matchlist-method-highlight","kind":"METHOD","parentKey":"class-matchlist","name":"highlight","signature":"matches.highlight(color=\"green\", line_width=2, region_width=36, auto_hide_ms=0)","description":"Gambarlah bingkai sorotan untuk setiap kecocokan yang ditemukan dalam daftar ini. Item tanpa titik/batas kecocokan yang valid akan dilewati.","behavior":"Gambarlah bingkai sorotan untuk setiap kecocokan yang ditemukan dalam daftar ini. Item tanpa titik/batas kecocokan yang valid akan dilewati.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"color","type":"Color | String | Number","defaultValue":"green","description":"Highlight color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"line_width","type":"Number","defaultValue":"2","description":"Outline width in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Fallback square width when a match has point only.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Auto-hide timeout in milliseconds. 0 keeps highlight visible.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Mengembalikan daftar kecocokan yang sama setelah menggambar sorotan.","example":"hits = Region(100, 200, 300, 400).find_any([\"enemy_a\", \"enemy_b\"], 2500)\nhits.highlight(color=\"yellow\", line_width=3, auto_hide_ms=1200)","aliases":[],"group":"FLOW"},{"key":"class-matchlist-method-highlight-off","kind":"METHOD","parentKey":"class-matchlist","name":"highlight_off","signature":"matches.highlight_off()","description":"Matikan semua sorotan aktif yang dihasilkan dari contoh daftar kecocokan ini.","behavior":"Matikan semua sorotan aktif yang dihasilkan dari contoh daftar kecocokan ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"MatchList","returnDescription":"Mengembalikan daftar kecocokan yang sama setelah mematikan sorotan.","example":"hits = Region(100, 200, 300, 400).find_any([\"enemy_a\", \"enemy_b\"], 2500)\nhits.highlight()\nhits.highlight_off()","aliases":[],"group":"FLOW"},{"key":"class-color","kind":"CLASS","parentKey":null,"name":"Color","signature":"Color(value, /)","description":"Mewakili satu warna ARGB dan menyediakan bantuan pengambilan sampel/perbandingan warna.","behavior":"Mewakili satu warna ARGB dan menyediakan bantuan pengambilan sampel/perbandingan warna.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["argb","a","r","g","b","hex"],"fieldDocs":[{"name":"argb","type":"Number","defaultValue":null,"description":"Raw ARGB integer value.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"a","type":"Int","defaultValue":null,"description":"Alpha channel 0-255.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"r","type":"Int","defaultValue":null,"description":"Red channel 0-255.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"g","type":"Int","defaultValue":null,"description":"Green channel 0-255.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"b","type":"Int","defaultValue":null,"description":"Blue channel 0-255.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"hex","type":"String","defaultValue":null,"description":"Hex string `#AARRGGBB`.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"value","type":"String | Number","defaultValue":null,"description":"Hex string (`#AARRGGBB`/`#RRGGBB`) or raw ARGB number.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"fieldExample":null,"constructorExample":"c1 = Color(\"#FFFFFFFF\")\nc2 = Color(4294967295)","params":[],"returnType":null,"returnDescription":null,"example":"cursor = Point(540, 920)\npicked = Color.get(cursor)\nif picked == \"#FFFFFFFF\":\n    click(cursor, random=6)","aliases":[],"group":null},{"key":"class-color-static-method-get","kind":"STATIC_METHOD","parentKey":"class-color","name":"get","signature":"Color.get(target, interval=3, default=\"#00000000\")","description":"Membaca warna dari layar: Titik -> Warna, Wilayah -> Array Warna 2D, daftar[Titik] -> Daftar warna. Ini adalah contoh sekali pakai; jika tidak ada bingkai yang tersedia atau sampel hilang, kembalikan warna default alih-alih mencoba ulang atau menghentikan skrip.","behavior":"Membaca warna dari layar: Titik -> Warna, Wilayah -> Array Warna 2D, daftar[Titik] -> Daftar warna. Ini adalah contoh sekali pakai; jika tidak ada bingkai yang tersedia atau sampel hilang, kembalikan warna default alih-alih mencoba ulang atau menghentikan skrip.","execution":{"blocking":"yes","threadSafety":"serialized","parallel":"conditional","details":"Mengambil sampel frame capture bersama di pemanggil; capture dan pemrosesan memerlukan waktu. Alur lain berbagi kebijakan capture/cache."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"target","type":"Point | Region | list[Point]","defaultValue":null,"description":"Sampling target.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"3","description":"Grid step (pixels) when target is Region.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"Color | String | Number","defaultValue":"#00000000","description":"Fallback color returned when screen capture or pixel sampling is unavailable.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Color | list[list[Color]] | list[Color]","returnDescription":"Sampel payload warna berdasarkan jenis target, dengan sampel yang hilang diisi secara default.","example":"c = Color.get(Point(100, 200), default=\"#FF000000\")\ngrid = Color.get(Region(120, 240, 90, 60), interval=3, default=\"#00000000\")\nbatch = Color.get([Point(10, 10), Point(20, 20)])","aliases":[],"group":"FLOW"},{"key":"class-color-static-method-compare","kind":"STATIC_METHOD","parentKey":"class-color","name":"compare","signature":"Color.compare(a, b, tolerance=0)","description":"Bandingkan dua warna berdasarkan toleransi RGB per saluran. Pertandingan lolos hanya jika |R1-R2|, |G1-G2|, dan |B1-B2| semuanya <= toleransi.","behavior":"Bandingkan dua warna berdasarkan toleransi RGB per saluran. Pertandingan lolos hanya jika |R1-R2|, |G1-G2|, dan |B1-B2| semuanya <= toleransi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a","type":"Color | String | Number","defaultValue":null,"description":"First color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"b","type":"Color | String | Number","defaultValue":null,"description":"Second color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel difference (0-255). Practical start: 4-8 for near-identical UI shades, 10-16 for anti-alias/compression variation.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"benar ketika semua saluran RGB berada dalam toleransi. Panduan singkat: 0 = tepat, 4-8 = hampir sama, 10-16 = cukup cocok, >24 = sangat longgar.","example":"base = Color(\\\"#FF4CAF50\\\")\nsample = Color.get(Point(620, 340))\nis_same = Color.compare(base, sample, tolerance=8)  # warna UI yang hampir sama","aliases":[],"group":"FLOW"},{"key":"class-color-static-method-distance-rgb","kind":"STATIC_METHOD","parentKey":"class-color","name":"distance_rgb","signature":"Color.distance_rgb(a, b)","description":"Hitung jarak Euclidean dalam ruang RGB antara dua warna.","behavior":"Hitung jarak Euclidean dalam ruang RGB antara dua warna.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a","type":"Color | String | Number","defaultValue":null,"description":"First color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"b","type":"Color | String | Number","defaultValue":null,"description":"Second color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"Jarak ruang RGB pada rentang 0 -> 441.67 (0 = tepat). Panduan praktis: <=8 hampir sama, 9-20 dekat, 21-40 terlihat berbeda, >40 berjauhan.","example":"actual = Color.get(Point(620, 340))\nrgb_gap = Color.distance_rgb(\\\"#FF4CAF50\\\", actual)\nif rgb_gap <= 15:\n    print(\\\"close in RGB\\\")","aliases":[],"group":"FLOW"},{"key":"class-color-static-method-delta-e","kind":"STATIC_METHOD","parentKey":"class-color","name":"delta_e","signature":"Color.delta_e(a, b)","description":"Hitung CIE76 Delta E antara dua warna untuk perbedaan persepsi.","behavior":"Hitung CIE76 Delta E antara dua warna untuk perbedaan persepsi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a","type":"Color | String | Number","defaultValue":null,"description":"First color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"b","type":"Color | String | Number","defaultValue":null,"description":"Second color.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"Skor perbedaan persepsi. Aturan praktisnya: <1 tidak terlihat, 1-2 hampir tidak terlihat, 2-5 terlihat, 5-10 berbeda jelas, >10 warna berbeda.","example":"actual = Color.get(Point(620, 340))\nd = Color.delta_e(\\\"#FF4CAF50\\\", actual)\nif d <= 3:\n    print(\\\"looks similar to human eye\\\")","aliases":[],"group":"FLOW"},{"key":"class-color-method-compare","kind":"METHOD","parentKey":"class-color","name":"compare","signature":"color.compare(other, tolerance=0)","description":"Bandingkan versi contoh toleransi RGB. Berguna ketika Anda sudah mencicipi satu warna dan membandingkannya dengan warna target.","behavior":"Bandingkan versi contoh toleransi RGB. Berguna ketika Anda sudah mencicipi satu warna dan membandingkannya dengan warna target.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Color | String | Number","defaultValue":null,"description":"Color to compare.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"tolerance","type":"Number","defaultValue":"0","description":"Allowed per-channel difference (0-255). Typical same-ish range: 4-8; use 10-16 for noisy/compressed captures.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"Hasil perbandingan. 0 berarti sama persis; toleransi yang lebih besar membuat pencocokan menjadi lebih permisif.","example":"picked = Color.get(Point(540, 920))\nif picked.compare(\\\"#FFFFFFFF\\\", tolerance=5):\n    click(Point(540, 920))","aliases":[],"group":"FLOW"},{"key":"class-color-method-distance-rgb","kind":"METHOD","parentKey":"class-color","name":"distance_rgb","signature":"color.distance_rgb(other)","description":"Hitung jarak Euclidean dalam ruang RGB dari warna ini ke warna lain.","behavior":"Hitung jarak Euclidean dalam ruang RGB dari warna ini ke warna lain.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Color | String | Number","defaultValue":null,"description":"Color to compare.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"Jarak ruang RGB (0 -> 441.67). Bacaan singkat: <=8 hampir sama, 9-20 hampir sama, 21-40 terlihat berbeda, >40 berjauhan.","example":"base = Color(\\\"#FF4CAF50\\\")\nactual = Color.get(Point(620, 340))\nrgb_gap = base.distance_rgb(actual)\nif rgb_gap <= 20:\n    print(\\\"close enough in RGB\\\")","aliases":[],"group":"FLOW"},{"key":"class-color-method-delta-e","kind":"METHOD","parentKey":"class-color","name":"delta_e","signature":"color.delta_e(other)","description":"Hitung CIE76 Delta E dari warna ini ke warna lain untuk perbandingan persepsi.","behavior":"Hitung CIE76 Delta E dari warna ini ke warna lain untuk perbandingan persepsi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Color | String | Number","defaultValue":null,"description":"Color to compare.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"Skor perbedaan warna persepsi. Panduan praktis: <1 tidak terlihat, 1-2 hampir tidak terlihat, 2-5 terlihat, 5-10 perbedaan jelas, >10 sangat berbeda.","example":"base = Color(\\\"#FF4CAF50\\\")\nactual = Color.get(Point(620, 340))\nperceptual_gap = base.delta_e(actual)\nif perceptual_gap <= 2:\n    print(\\\"looks almost the same\\\")","aliases":[],"group":"FLOW"},{"key":"class-overlaytext","kind":"CLASS","parentKey":null,"name":"OverlayText","signature":"OverlayText(text=\"\", position=(0, 0), color=\"#FFFFFFFF\", size=16, background=None)","description":"Gambar teks di atas layar dengan pelacakan interaksi opsional (tekan/pindahkan/tahan). Nama penyetel seperti teks/latar belakang adalah metode; membaca nilai saat ini melalui state().","behavior":"Gambar teks di atas layar dengan pelacakan interaksi opsional (tekan/pindahkan/tahan). Nama penyetel seperti teks/latar belakang adalah metode; membaca nilai saat ini melalui state().","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":true,"fields":["x","y","scale","anchor","argb","size_sp"],"fieldDocs":[{"name":"x","type":"Number","defaultValue":"0","description":"Top-left X position in pixels. Writable before show().","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"y","type":"Number","defaultValue":"0","description":"Top-left Y position in pixels. Writable before show().","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"Coordinate scale copied from Point positions.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Coordinate anchor copied from Point positions.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"argb","type":"Color","defaultValue":"white","description":"Text color. Assign with Color/string/number values. Use overlay.color(value) for method chaining.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"size_sp","type":"Number","defaultValue":"16","description":"Text size in sp. Use overlay.size(sp) for method chaining.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"text","type":"String","defaultValue":"\"\"","description":"Initial text content.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"position","type":"Point | tuple[Number, Number]","defaultValue":"(0, 0)","description":"Initial position as Point or tuple/list (x, y). Point carries scale/anchor metadata.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"color","type":"Color | String | Number","defaultValue":"white","description":"Initial text color.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"size","type":"Number","defaultValue":"16","description":"Initial text size (sp).","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"background","type":"Color | String | Number | None","defaultValue":"None","description":"Initial background color. None means transparent/no background.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"badge = OverlayText(\"Ready\", Point(420, 220, scale=\"width\", anchor=\"top\"), background=None)","params":[],"returnType":null,"returnDescription":null,"example":"badge = OverlayText(\"Running...\", Point(320, 160, scale=\"width\", anchor=\"top\"), background=None)\nbadge.color(\"#FF00E676\").background(\"#66000000\").size(18).track(press=True, move=True, hold=True, hold_ms=700)\nbadge.show()\n\nstate = badge.state()\nif state[\"status\"] == 2:\n    MacroPanel.notify(\"Badge is moving\")\n\np = badge.get_point()\nr = badge.get_region()\nif r is not None:\n    r.highlight(\"yellow\", auto_hide_ms=600)\n\nbadge.hide()   # sembunyikan cepat\nbadge.show()   # tampilkan lagi dengan cepat\nbadge.off()    # lepas sepenuhnya","aliases":[],"group":null},{"key":"class-overlaytext-static-method-off-all","kind":"STATIC_METHOD","parentKey":"class-overlaytext","name":"off_all","signature":"OverlayText.off_all()","description":"Matikan dan lepaskan semua teks overlay yang dibuat alur saat ini, tanpa memengaruhi alur yang berjalan paralel.","behavior":"Matikan dan lepaskan semua teks overlay yang dibuat alur saat ini, tanpa memengaruhi alur yang berjalan paralel.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"# Lepaskan overlay yang dimiliki alur ini\na = OverlayText(\"Running\", (24, 120))\na.show()\nOverlayText.off_all()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-text","kind":"METHOD","parentKey":"class-overlaytext","name":"text","signature":"overlay.text(value)","description":"Perbarui konten teks yang ditampilkan.","behavior":"Perbarui konten teks yang ditampilkan.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"String","defaultValue":null,"description":"Text content.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"Mengembalikan pembuat teks overlay yang sama.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.text(\"Running\")\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-color","kind":"METHOD","parentKey":"class-overlaytext","name":"color","signature":"overlay.color(value)","description":"Perbarui warna teks.","behavior":"Perbarui warna teks.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Color | String | Number","defaultValue":null,"description":"Color value.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"Mengembalikan pembuat teks overlay yang sama.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.color(\"#FF00E676\")\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-background","kind":"METHOD","parentKey":"class-overlaytext","name":"background","signature":"overlay.background(value=None)","description":"Perbarui warna latar belakang. Melewati Tidak Ada menghapus latar belakang.","behavior":"Perbarui warna latar belakang. Melewati Tidak Ada menghapus latar belakang.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Color | String | Number | None","defaultValue":"None","description":"Background color, or None for transparent/no background.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"Mengembalikan pembuat teks overlay yang sama.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.background(\"#66000000\")\nbadge.show()\nbadge.background(None)","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-size","kind":"METHOD","parentKey":"class-overlaytext","name":"size","signature":"overlay.size(sp)","description":"Perbarui ukuran teks (sp).","behavior":"Perbarui ukuran teks (sp).","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sp","type":"Number","defaultValue":null,"description":"Text size in sp.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"Mengembalikan pembuat teks overlay yang sama.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.size(20)\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-position","kind":"METHOD","parentKey":"class-overlaytext","name":"position","signature":"overlay.position(position)","description":"Perbarui posisi undian dengan Point atau tuple/list (x, y). Titik membawa metadata skala/jangkar.","behavior":"Perbarui posisi undian dengan Point atau tuple/list (x, y). Titik membawa metadata skala/jangkar.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"position","type":"Point | tuple[Number, Number]","defaultValue":null,"description":"New position.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"Mengembalikan pembuat teks overlay yang sama.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.position((80, 160))\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-track","kind":"METHOD","parentKey":"class-overlaytext","name":"track","signature":"overlay.track(press=False, move=False, hold=False, hold_ms=600)","description":"Konfigurasikan pelacakan interaksi. Jika semua tandanya Salah, teks tetap pada posisi yang dinyatakan.","behavior":"Konfigurasikan pelacakan interaksi. Jika semua tandanya Salah, teks tetap pada posisi yang dinyatakan.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"press","type":"Boolean","defaultValue":"False","description":"Track press/release state.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"move","type":"Boolean","defaultValue":"False","description":"Allow user drag to move text.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"hold","type":"Boolean","defaultValue":"False","description":"Track hold state.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"hold_ms","type":"Number","defaultValue":"600","description":"Hold threshold to treat interaction as holding, measured in milliseconds.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"Mengembalikan pembuat teks overlay yang sama.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.track(press=True, move=True, hold=True, hold_ms=700)\nbadge.show()\nprint(badge.state())","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-get-point","kind":"METHOD","parentKey":"class-overlaytext","name":"get_point","signature":"overlay.get_point()","description":"Dapatkan titik kiri atas teks overlay ini. Posisi ini diperbarui setelah drag bergerak.","behavior":"Dapatkan titik kiri atas teks overlay ini. Posisi ini diperbarui setelah drag bergerak.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Point","returnDescription":"Posisi overlay saat ini dalam piksel layar.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\npoint = badge.get_point()\nprint(point.x, point.y)","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-get-region","kind":"METHOD","parentKey":"class-overlaytext","name":"get_region","signature":"overlay.get_region()","description":"Dapatkan wilayah yang membungkus batas teks hamparan saat ini. Mengembalikan Tidak Ada bila overlay belum terlihat atau belum diukur.","behavior":"Dapatkan wilayah yang membungkus batas teks hamparan saat ini. Mengembalikan Tidak Ada bila overlay belum terlihat atau belum diukur.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Region?","returnDescription":"Wilayah pembatas untuk teks overlay, atau Tidak Ada. Selalu periksa Tidak Ada sebelum menggunakan wilayah tersebut.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\nbounds = badge.get_region()\nif bounds is not None:\n    print(bounds.width, bounds.height)","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-show","kind":"METHOD","parentKey":"class-overlaytext","name":"show","signature":"overlay.show()","description":"Tampilkan hamparan teks (atau tampilkan lagi setelah sembunyikan()).","behavior":"Tampilkan hamparan teks (atau tampilkan lagi setelah sembunyikan()).","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Kamus status overlay saat ini.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nprint(badge.show())","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-hide","kind":"METHOD","parentKey":"class-overlaytext","name":"hide","signature":"overlay.hide()","description":"Sembunyikan teks overlay tetapi pertahankan tampilan cache untuk pertunjukan yang lebih cepat().","behavior":"Sembunyikan teks overlay tetapi pertahankan tampilan cache untuk pertunjukan yang lebih cepat().","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Kamus status overlay saat ini.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\nbadge.hide()\nbadge.show()","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-off","kind":"METHOD","parentKey":"class-overlaytext","name":"off","signature":"overlay.off()","description":"Matikan teks overlay dan lepaskan sumber daya.","behavior":"Matikan teks overlay dan lepaskan sumber daya.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Kamus status overlay saat ini.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\nprint(badge.off())","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-state","kind":"METHOD","parentKey":"class-overlaytext","name":"state","signature":"overlay.state()","description":"Kembalikan status interaksi saat ini. Peta status: 0=IDLE, 1=DITEKAN, 2=BERGERAK, 3=Tahan, 4=LEPAS, 5=TERSEMBUNYI, 6=MATI. Membaca state() auto-reset DITEKAN dan DIBEBASkan kembali ke IDLE untuk polling berikutnya; PINDAHKAN dan TAHAN tidak diatur ulang secara otomatis.","behavior":"Kembalikan status interaksi saat ini. Peta status: 0=IDLE, 1=DITEKAN, 2=BERGERAK, 3=Tahan, 4=LEPAS, 5=TERSEMBUNYI, 6=MATI. Membaca state() auto-reset DITEKAN dan DIBEBASkan kembali ke IDLE untuk polling berikutnya; PINDAHKAN dan TAHAN tidak diatur ulang secara otomatis.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Setiap alur memiliki id overlay sendiri; off_all() hanya melepas overlay alur tersebut. Pekerjaan UI dikirim ke Android Main dan dapat menangguhkan pemanggil. Simpan builder overlay yang dapat berubah dalam alur pemiliknya."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Kamus nyatakan dengan status/status_label, tanda pelacakan, dan lebar/tinggi hamparan opsional dalam piksel.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.track(press=True, move=True)\nbadge.show()\nstate = badge.state()\nprint(state[\"status_label\"])","aliases":[],"group":"FLOW"},{"key":"class-timer","kind":"CLASS","parentKey":null,"name":"Timer","signature":"Timer(auto_start=True)","description":"Pembantu stopwatch milidetik untuk pemeriksaan waktu skrip dan waktu tunggu yang dijaga.","behavior":"Pembantu stopwatch milidetik untuk pemeriksaan waktu skrip dan waktu tunggu yang dijaga.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["auto_start"],"fieldDocs":[{"name":"auto_start","type":"Boolean","defaultValue":"True","description":"Whether the timer starts immediately after creation. Assign True to start; assign False to pause.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"auto_start","type":"Boolean","defaultValue":"True","description":"Start counting immediately after creation.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"timer = Timer()\nif timer.is_elapsed(500):\n    text(\"half-second passed\")","params":[],"returnType":null,"returnDescription":null,"example":"timer = Timer(auto_start=False)\ntimer.start()\nwhile not timer.is_elapsed(2000):\n    wait(50)\ntimer.stop()","aliases":[],"group":null},{"key":"class-timer-method-start","kind":"METHOD","parentKey":"class-timer","name":"start","signature":"timer.start()","description":"Mulailah menghitung jika pengatur waktu sedang berhenti.","behavior":"Mulailah menghitung jika pengatur waktu sedang berhenti.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan pengatur waktu yang sama untuk rangkaian.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer(auto_start=False)\ntimer.start()\nwait(100)\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-pause","kind":"METHOD","parentKey":"class-timer","name":"pause","signature":"timer.pause()","description":"Jeda penghitungan sambil mempertahankan milidetik yang telah berlalu.","behavior":"Jeda penghitungan sambil mempertahankan milidetik yang telah berlalu.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan pengatur waktu yang sama untuk rangkaian.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer()\nwait(100)\ntimer.pause()\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-resume","kind":"METHOD","parentKey":"class-timer","name":"resume","signature":"timer.resume()","description":"Lanjutkan penghitungan dari keadaan dijeda.","behavior":"Lanjutkan penghitungan dari keadaan dijeda.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan pengatur waktu yang sama untuk rangkaian.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer()\ntimer.pause()\ntimer.resume()\nwait(100)\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-stop","kind":"METHOD","parentKey":"class-timer","name":"stop","signature":"timer.stop()","description":"Berhenti menghitung dan simpan milidetik yang telah berlalu.","behavior":"Berhenti menghitung dan simpan milidetik yang telah berlalu.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan pengatur waktu yang sama untuk rangkaian.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer()\nwait(100)\ntimer.stop()\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-reset","kind":"METHOD","parentKey":"class-timer","name":"reset","signature":"timer.reset()","description":"Atur ulang waktu yang telah berlalu ke 0 sambil mempertahankan status berjalan saat ini.","behavior":"Atur ulang waktu yang telah berlalu ke 0 sambil mempertahankan status berjalan saat ini.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan pengatur waktu yang sama untuk rangkaian.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer()\nwait(100)\ntimer.reset()\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-restart","kind":"METHOD","parentKey":"class-timer","name":"restart","signature":"timer.restart()","description":"Atur ulang waktu yang telah berlalu ke 0 dan segera mulai menghitung.","behavior":"Atur ulang waktu yang telah berlalu ke 0 dan segera mulai menghitung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan pengatur waktu yang sama untuk rangkaian.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer(auto_start=False)\ntimer.restart()\nwait(100)\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-elapsed-ms","kind":"METHOD","parentKey":"class-timer","name":"elapsed_ms","signature":"timer.elapsed_ms()","description":"Baca total milidetik yang telah berlalu.","behavior":"Baca total milidetik yang telah berlalu.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"Milidetik berlalu.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer()\nwait(100)\nprint(timer.elapsed_ms())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-is-elapsed","kind":"METHOD","parentKey":"class-timer","name":"is_elapsed","signature":"timer.is_elapsed(time)","description":"Periksa apakah waktu yang berlalu lebih besar atau sama dengan milidetik yang disediakan.","behavior":"Periksa apakah waktu yang berlalu lebih besar atau sama dengan milidetik yang disediakan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"time","type":"Number","defaultValue":null,"description":"Target milliseconds threshold.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"benar ketika waktu yang berlalu mencapai atau melampaui ambang batas.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer()\nwait(500)\nif timer.is_elapsed(500):\n    print(\"Elapsed\")","aliases":[],"group":"FLOW"},{"key":"class-timer-method-is-running","kind":"METHOD","parentKey":"class-timer","name":"is_running","signature":"timer.is_running()","description":"Periksa apakah pengatur waktu sedang menghitung.","behavior":"Periksa apakah pengatur waktu sedang menghitung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"benar saat pengatur waktu menghitung.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer()\nprint(timer.is_running())","aliases":[],"group":"FLOW"},{"key":"class-timer-method-is-paused","kind":"METHOD","parentKey":"class-timer","name":"is_paused","signature":"timer.is_paused()","description":"Periksa apakah pengatur waktu dijeda setelah dimulai.","behavior":"Periksa apakah pengatur waktu dijeda setelah dimulai.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"benar ketika pengatur waktu dijeda.","example":"# Ukur waktu di alur pemanggil\ntimer = Timer()\ntimer.pause()\nprint(timer.is_paused())","aliases":[],"group":"FLOW"},{"key":"class-tflitemodel","kind":"CLASS","parentKey":null,"name":"TfliteModel","signature":"TfliteModel(model)","description":"TFLite model handle for scripts. The model type must be selected in Template Manager metadata. Supported outputs are YOLOv8/YOLO11 object detection [1,N,4+C]/[1,4+C,N], YOLO26 end-to-end detection [1,N,6]/[N,6], YOLO11/YOLO26 image classification [1,C], and MobileNetV3 image classification [1,C]. Runtime detects FLOAT32, INT8, or UINT8 tensor precision from the model and dequantizes quantized detection and classification outputs before applying thresholds. Classification matches return class confidence and metadata without point or bounds. Inference methods require a local model file; when local file is missing and runtime download fails, script raises a runtime error.","behavior":"TFLite model handle for scripts. The model type must be selected in Template Manager metadata. Supported outputs are YOLOv8/YOLO11 object detection [1,N,4+C]/[1,4+C,N], YOLO26 end-to-end detection [1,N,6]/[N,6], YOLO11/YOLO26 image classification [1,C], and MobileNetV3 image classification [1,C]. Runtime detects FLOAT32, INT8, or UINT8 tensor precision from the model and dequantizes quantized detection and classification outputs before applying thresholds. Classification matches return class confidence and metadata without point or bounds. Inference methods require a local model file; when local file is missing and runtime download fails, script raises a runtime error.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["model","resize_mode","color_mode","norm_mode","padding_color"],"fieldDocs":[{"name":"model","type":"String","defaultValue":null,"description":"Model reference in current macro (prefer template model name; legacy model id still accepted).","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"resize_mode","type":"String","defaultValue":"LETTERBOX","description":"Resolved preprocessing resize mode: LETTERBOX, STRETCH, or CROP_CENTER.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"color_mode","type":"String","defaultValue":"RGB","description":"Resolved preprocessing color mode: RGB, BGR, or GRAYSCALE.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"norm_mode","type":"String","defaultValue":"ZERO_ONE","description":"Resolved preprocessing normalization: ZERO_ONE, MINUS_ONE_ONE, IMAGENET, or CUSTOM.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"padding_color","type":"Int","defaultValue":"114","description":"Padding fill value (0 -> 255) used by LETTERBOX resize mode.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"model","type":"String","defaultValue":null,"description":"Model reference to use for inference (prefer template model name).","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":"# Impor model TFLite yang didukung dan pilih jenis output di Template Manager.\n# Buat model handle yang terikat ke satu nama model TFLite di Template Manager.\nmodel = TfliteModel(\"enemy_model\")","params":[],"returnType":null,"returnDescription":null,"example":"# Periksa ketersediaan model sebelum menjalankan deteksi\nif TfliteModel.exists(\"enemy_model\"):\n    detector = TfliteModel(\"enemy_model\")\n    hits = detector.inference()\n    if len(hits) > 0:\n        click(hits[0])","aliases":[],"group":null},{"key":"class-tflitemodel-static-method-exists","kind":"STATIC_METHOD","parentKey":"class-tflitemodel","name":"exists","signature":"TfliteModel.exists(model)","description":"Periksa apakah file model TFLite lokal (diselesaikan berdasarkan nama model atau id lama) saat ini tersedia di makro ini.","behavior":"Periksa apakah file model TFLite lokal (diselesaikan berdasarkan nama model atau id lama) saat ini tersedia di makro ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"model","type":"String","defaultValue":null,"description":"Model reference to check.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"benar jika file model lokal siap digunakan.","example":"# Periksa model yang diimpor di Template Manager\nif TfliteModel.exists(\"enemy_detector\"):\n    print(\"Model available\")","aliases":[],"group":"FLOW"},{"key":"class-tflitemodel-static-method-list","kind":"STATIC_METHOD","parentKey":"class-tflitemodel","name":"list","signature":"TfliteModel.list()","description":"Kembalikan referensi model lokal yang saat ini tersedia untuk makro (lebih suka nama tampilan).","behavior":"Kembalikan referensi model lokal yang saat ini tersedia untuk makro (lebih suka nama tampilan).","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list[String]","returnDescription":"Daftar referensi model.","example":"# Daftarkan model yang tersedia untuk makro ini\nprint(TfliteModel.list())","aliases":[],"group":"FLOW"},{"key":"class-tflitemodel-method-exists","kind":"METHOD","parentKey":"class-tflitemodel","name":"exists","signature":"model.exists()","description":"Periksa apakah file model lokal detektor ini tersedia.","behavior":"Periksa apakah file model lokal detektor ini tersedia.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"benar jika file model lokal dapat segera digunakan.","example":"# Buat hanya setelah memastikan model yang diimpor tersedia\nif TfliteModel.exists(\"enemy_detector\"):\n    model = TfliteModel(\"enemy_detector\")\n    print(model.exists())","aliases":[],"group":"FLOW"},{"key":"class-tflitemodel-method-inference","kind":"METHOD","parentKey":"class-tflitemodel","name":"inference","signature":"model.inference(threshold=0.5, region=None, max_results=8, debug=False)","description":"Jalankan model TFLite yang dipilih tanpa pemfilteran kelas dan kembalikan semua kecocokan. Ketika wilayah disediakan, gambar layarnya dipotong sebelum pra-pemrosesan dan inferensi; hal ini dapat mengurangi akurasi model jika model tidak dilatih pada gambar yang dipotong serupa. Pertandingan klasifikasi tidak ada batasnya.","behavior":"Jalankan model TFLite yang dipilih tanpa pemfilteran kelas dan kembalikan semua kecocokan. Ketika wilayah disediakan, gambar layarnya dipotong sebelum pra-pemrosesan dan inferensi; hal ini dapat mengurangi akurasi model jika model tidak dilatih pada gambar yang dipotong serupa. Pertandingan klasifikasi tidak ada batasnya.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"threshold","type":"Number","defaultValue":"0.5","description":"Confidence threshold in 0 -> 1.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region","type":"Region?","defaultValue":"None","description":"Optional screen region. Its image is cropped before preprocessing and inference, which can reduce accuracy if the model was not trained on similarly cropped images.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max_results","type":"Int","defaultValue":"8","description":"Maximum number of detections returned.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"debug","type":"Boolean","defaultValue":"False","description":"In Edit mode, true saves a preprocess preview and opens the runtime debug dialog. Run-only mode ignores the debug output and performs normal inference without a dialog. Detailed model-result rows and preprocess config stay in the dialog; returned Match objects do not include debug_result. Detection previews draw bbox/class labels; classification previews show the preprocessed input plus class scores.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Daftar kecocokan inferensi di semua kelas.","example":"# Jalankan inference model mentah dan periksa output debug preprocess\ndetector = TfliteModel(\"enemy_model\")\nsearch = Region(100, 200, 300, 400)\nhits = detector.inference(threshold=0.55, region=search, max_results=12, debug=True)\ntext(str(len(hits)))","aliases":[],"group":"FLOW"},{"key":"class-flow","kind":"READ_ONLY_CLASS","parentKey":null,"name":"Flow","signature":"Flow","description":"Kontrol statis untuk memulai flow makro bernama secara paralel. Maksimal dua flow latar dapat berjalan bersama flow utama, dan hanya satu pemanggilan aktif untuk setiap nama flow, termasuk saat dijeda atau dihentikan. Flow.start() segera mengembalikan nilai setelah coordinator menerima cabang; flow latar dapat memulai flow sebaya. Variabel terisolasi per cabang dan tidak pernah digabungkan ke pemanggil. Flow utama menunggu semua flow latar sebelum Run selesai. Nama tidak valid atau duplikat, kapasitas flow penuh, kesalahan cabang apa pun, System.stop(), atau Main Stop mengakhiri seluruh makro. Kontrol dock bernomor untuk setiap flow latar hanya dapat menjeda atau melanjutkan cabang itu sementara; tidak ada Stop per cabang. Pause atau Resume Main berlaku untuk semua cabang, dan Resume global juga menghapus tanda jeda lokal cabang. Gesture sentuh dari cabang berbeda dapat saling membatalkan. Kebijakan ScreenCapture dan audio capture dipakai bersama secara global. Storage memakai kunci persisten yang sama antar-cabang dan bukan kanal pesan antarproses.","behavior":"Kontrol statis untuk memulai flow makro bernama secara paralel. Maksimal dua flow latar dapat berjalan bersama flow utama, dan hanya satu pemanggilan aktif untuk setiap nama flow, termasuk saat dijeda atau dihentikan. Flow.start() segera mengembalikan nilai setelah coordinator menerima cabang; flow latar dapat memulai flow sebaya. Variabel terisolasi per cabang dan tidak pernah digabungkan ke pemanggil. Flow utama menunggu semua flow latar sebelum Run selesai. Nama tidak valid atau duplikat, kapasitas flow penuh, kesalahan cabang apa pun, System.stop(), atau Main Stop mengakhiri seluruh makro. Kontrol dock bernomor untuk setiap flow latar hanya dapat menjeda atau melanjutkan cabang itu sementara; tidak ada Stop per cabang. Pause atau Resume Main berlaku untuk semua cabang, dan Resume global juga menghapus tanda jeda lokal cabang. Gesture sentuh dari cabang berbeda dapat saling membatalkan. Kebijakan ScreenCapture dan audio capture dipakai bersama secara global. Storage memakai kunci persisten yang sama antar-cabang dan bukan kanal pesan antarproses.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"yes","details":"Flow.start membuat executor latar yang terisolasi dan mengembalikan nomor urut Int, bukan handle. Maksimal dua alur latar berjalan bersama alur utama. Alur utama menunggu selesai; kesalahan alur mana pun atau System.stop() menghentikan seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-storage","class-screencapture"],"isCallable":false,"fields":[],"fieldDocs":[{"name":"params","type":"dict","defaultValue":null,"description":"Input salinan hanya-baca untuk cabang saat ini. Flow utama menerima dict kosong. Setiap pembacaan mengembalikan data aman yang terpisah dari collection coordinator dan VM induk.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Mulai worker terkonfigurasi saat flow utama tetap berjalan\nworker_no = Flow.start(\"watch_enemy\", {\"labels\": [\"boss\", \"guard\"]})\nMacroPanel.notify(\"Background flow #\" + str(worker_no) + \" started\")","aliases":[],"group":null},{"key":"class-flow-static-method-start","kind":"STATIC_METHOD","parentKey":"class-flow","name":"start","signature":"Flow.start(name, params=None)","description":"Memulai satu flow bernama yang dikonfigurasi tanpa memblokir pemanggil. Nama dicocokkan oleh coordinator makro. Params disalin sebelum dikirim dan hanya boleh berisi None, Boolean, angka terbatas, String, list, tuple, serta dict dengan kunci String dalam batas kedalaman dan ukuran runtime; callable, nilai domain/resource, dan koleksi siklik ditolak.","behavior":"Memulai satu flow bernama yang dikonfigurasi tanpa memblokir pemanggil. Nama dicocokkan oleh coordinator makro. Params disalin sebelum dikirim dan hanya boleh berisi None, Boolean, angka terbatas, String, list, tuple, serta dict dengan kunci String dalam batas kedalaman dan ukuran runtime; callable, nilai domain/resource, dan koleksi siklik ditolak.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Kembali setelah koordinator menerima alur bernama; tidak menunggu alur selesai. Masukan disalin sebelum dikirim."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Nama flow terkonfigurasi yang tepat untuk diselesaikan oleh coordinator makro.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"params","type":"dict?","defaultValue":"None","description":"Input salinan aman opsional yang tersedia sebagai Flow.params di cabang yang dimulai.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Int","returnDescription":"Nomor instance cabang positif yang meningkat monoton untuk status dock dan log; ini bukan handle kontrol.","example":"# Mulai pengenalan dan telemetri bersama flow utama\nrecognition_no = Flow.start(\"recognition\", {\"region\": \"arena\", \"threshold\": 0.86})\ntelemetry_no = Flow.start(\"telemetry\")\n\n# Di dalam flow pengenalan yang dikonfigurasi, baca input salinan cabang ini\nregion_name = Flow.params.get(\"region\", \"full_screen\")\nthreshold = Flow.params.get(\"threshold\", 0.8)","aliases":[],"group":"FLOW"},{"key":"class-list","kind":"COLLECTION","parentKey":null,"name":"list","signature":"list(iterable=(), /)","description":"Koleksi terurut yang dapat Anda buat, baca, ulangi, ubah strukturnya, dan perbarui saat skrip berjalan.","behavior":"Koleksi terurut yang dapat Anda buat, baca, ulangi, ubah strukturnya, dan perbarui saat skrip berjalan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"numbers = list()\nnumbers.append(2)\nnumbers.extend([0, 3])\nfirst = numbers[0]        # mengembalikan 2\ncount = len(numbers)      # mengembalikan 3\n\nfor value in numbers:\n    wait(50)              # mengembalikan None","aliases":[],"group":null},{"key":"class-list-creation-method-constructor","kind":"CREATION_METHOD","parentKey":"class-list","name":"constructor","signature":"list()\nlist(iterable, /)","description":"Buat daftar kosong atau salin item dari satu iterable ke daftar baru yang dapat diubah.","behavior":"Buat daftar kosong atau salin item dari satu iterable ke daftar baru yang dapat diubah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":"()","description":"Nilai sumber untuk disalin ke daftar baru.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"list","returnDescription":"Daftar baru yang bisa berubah.","example":"numbers = list()\nnumbers.append(2)\nnumbers.append(3)\n\ncopied = list(numbers)","aliases":[],"group":"FLOW"},{"key":"class-list-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-list","name":"literal","signature":"[1, 2, 3]","description":"Buat daftar sebaris literal. Ini adalah bentuk terpendek ketika Anda sudah mengetahui itemnya.","behavior":"Buat daftar sebaris literal. Ini adalah bentuk terpendek ketika Anda sudah mengetahui itemnya.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"item","type":"Any?","defaultValue":null,"description":"Each item written inside the brackets.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"list","returnDescription":"Daftar baru yang dapat diubah mempertahankan urutan literal.","example":"numbers = [2, 0, 3]\nfirst = numbers[0]       # mengembalikan 2","aliases":[],"group":"FLOW"},{"key":"class-list-creation-method-comprehension","kind":"CREATION_METHOD","parentKey":"class-list","name":"comprehension","signature":"[expr for target in iterable if condition]","description":"Buat daftar dengan mengulang iterable lainnya. Beberapa klausa for/if didukung, dan target loop tetap bersifat lokal bagi pemahaman.","behavior":"Buat daftar dengan mengulang iterable lainnya. Beberapa klausa for/if didukung, dan target loop tetap bersifat lokal bagi pemahaman.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"expr","type":"Any?","defaultValue":null,"description":"Value to append for each accepted item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"target","type":"Name | destructuring target","defaultValue":null,"description":"Loop target for the current item. Starred targets are not supported.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Source values to loop through.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"condition","type":"Boolean","defaultValue":"True","description":"Optional filter checked before appending.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"list","returnDescription":"Daftar baru yang dapat diubah dengan item yang cocok dalam urutan iterasi.","example":"values = [1, 2, 3, 4]\nevens = [x for x in values if x % 2 == 0]","aliases":[],"group":"FLOW"},{"key":"class-list-creation-method-range-source","kind":"CREATION_METHOD","parentKey":"class-list","name":"range_source","signature":"range(stop, /) | range(start, stop, step=1, /)","description":"Buat daftar bilangan bulat baru untuk loop, penghitung, dan rentang angka.","behavior":"Buat daftar bilangan bulat baru untuk loop, penghitung, dan rentang angka.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Number","defaultValue":"0","description":"Start value (inclusive).","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"stop","type":"Number","defaultValue":null,"description":"End value (exclusive).","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"step","type":"Number","defaultValue":"1","description":"Increment between items. Cannot be 0.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"list[Int]","returnDescription":"Daftar bilangan bulat baru.","example":"numbers = range(5)         # mengembalikan [0, 1, 2, 3, 4]\nevens = range(0, 10, 2)   # mengembalikan [0, 2, 4, 6, 8]","aliases":[],"group":"FLOW"},{"key":"class-list-method-length","kind":"METHOD","parentKey":"class-list","name":"length","signature":"len(list, /)","description":"Hitung berapa banyak item dalam daftar.","behavior":"Hitung berapa banyak item dalam daftar.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"list","type":"list","defaultValue":null,"description":"The list to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Jumlah item dalam daftar.","example":"numbers = range(3, 8)     # mengembalikan [3, 4, 5, 6, 7]\ncount = len(numbers)      # mengembalikan 5","aliases":[],"group":"FLOW"},{"key":"class-list-method-index-access","kind":"METHOD","parentKey":"class-list","name":"index_access","signature":"list[index]","description":"Baca satu item berdasarkan indeks. Indeks negatif dihitung dari akhir.","behavior":"Baca satu item berdasarkan indeks. Indeks negatif dihitung dari akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"list","type":"list","defaultValue":null,"description":"The source list.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"Item index. Use -1 for the last item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Item pada posisi tersebut. Memunculkan IndexError ketika indeks berada di luar daftar.","example":"numbers = range(10, 15)   # mengembalikan [10, 11, 12, 13, 14]\nfirst = numbers[0]        # mengembalikan 10\nthird = numbers[2]        # mengembalikan 12\nlast = numbers[-1]        # mengembalikan 14","aliases":[],"group":"FLOW"},{"key":"class-list-method-slice","kind":"METHOD","parentKey":"class-list","name":"slice","signature":"list[start:end[:step]]","description":"Salin bagian dari daftar menggunakan pemotongan gaya Python. Batas yang dihilangkan menggunakan awal atau akhir; indeks negatif dihitung dari akhir.","behavior":"Salin bagian dari daftar menggunakan pemotongan gaya Python. Batas yang dihilangkan menggunakan awal atau akhir; indeks negatif dihitung dari akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Int","defaultValue":"start of list","description":"First item index to include.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"end","type":"Int","defaultValue":"end of list","description":"Stop before this item index.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"Distance between items. Cannot be 0; negative values read backward.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"list","returnDescription":"Potongan daftar baru yang dapat diubah, dijepit ke rentang yang tersedia.","example":"numbers = [0, 1, 2, 3, 4]\nmiddle = numbers[1:4]     # mengembalikan [1, 2, 3]\ntail = numbers[-2:]       # mengembalikan [3, 4]\nreverse = numbers[::-1]   # mengembalikan [4, 3, 2, 1, 0]","aliases":[],"group":"FLOW"},{"key":"class-list-method-index-assignment","kind":"METHOD","parentKey":"class-list","name":"index_assignment","signature":"list[index] = value","description":"Ganti satu item yang ada berdasarkan indeks. Indeks negatif dihitung dari akhir. Indeks harus sudah ada di dalam daftar.","behavior":"Ganti satu item yang ada berdasarkan indeks. Indeks negatif dihitung dari akhir. Indeks harus sudah ada di dalam daftar.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"list","type":"list","defaultValue":null,"description":"The mutable list to update.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"Item index that already exists. Use -1 for the last item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"},{"name":"value","type":"Any?","defaultValue":null,"description":"New value to store at that position.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Daftar ini diperbarui pada tempatnya.","example":"numbers = [12, 12, 21, 3, 2, 1]\nnumbers[4] = 3            # numbers menjadi [12, 12, 21, 3, 3, 1]","aliases":[],"group":"FLOW"},{"key":"class-list-method-destructuring-assignment","kind":"METHOD","parentKey":"class-list","name":"destructuring_assignment","signature":"a, b = list","description":"Buka paket item daftar ke dalam target tugas yang cocok. Target bertumpuk didukung, namun target berbintang seperti *sisanya tidak didukung.","behavior":"Buka paket item daftar ke dalam target tugas yang cocok. Target bertumpuk didukung, namun target berbintang seperti *sisanya tidak didukung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a, b","type":"Targets","defaultValue":null,"description":"Assignment targets matching the list item count.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"list","type":"list","defaultValue":null,"description":"Source list to unpack.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Target menerima item daftar dari kiri ke kanan.","example":"point = [500, 900]\nx, y = point","aliases":[],"group":"FLOW"},{"key":"class-list-method-append","kind":"METHOD","parentKey":"class-list","name":"append","signature":"list.append(value, /)","description":"Tambahkan satu item baru ke akhir daftar.","behavior":"Tambahkan satu item baru ke akhir daftar.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"The value to add.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Daftar ini diperbarui pada tempatnya.","example":"numbers = [2, 0]\nnumbers.append(3)\nlast = numbers[-1]        # mengembalikan 3","aliases":[],"group":"FLOW"},{"key":"class-list-method-extend","kind":"METHOD","parentKey":"class-list","name":"extend","signature":"list.extend(iterable, /)","description":"Tambahkan setiap item dari iterable lain ke akhir daftar saat ini.","behavior":"Tambahkan setiap item dari iterable lain ke akhir daftar saat ini.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Nilai sumber yang itemnya akan ditambahkan.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Daftarnya terus bertambah.","example":"numbers = [1]\nnumbers.extend([2, 3])\ncount = len(numbers)      # mengembalikan 3","aliases":[],"group":"FLOW"},{"key":"class-list-method-insert","kind":"METHOD","parentKey":"class-list","name":"insert","signature":"list.insert(index, value, /)","description":"Sisipkan satu item sebelum indeks yang diberikan. Indeks negatif dan terlalu besar dibatasi seperti Python.","behavior":"Sisipkan satu item sebelum indeks yang diberikan. Indeks negatif dan terlalu besar dibatasi seperti Python.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"index","type":"Int","defaultValue":null,"description":"Posisi sebelum nilai disisipkan.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"value","type":"Any?","defaultValue":null,"description":"Nilai yang akan disisipkan.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Daftar ini diperbarui pada tempatnya.","example":"numbers = [1, 3]\nnumbers.insert(1, 2)      # numbers menjadi [1, 2, 3]","aliases":[],"group":"FLOW"},{"key":"class-list-method-remove","kind":"METHOD","parentKey":"class-list","name":"remove","signature":"list.remove(value, /)","description":"Hapus item pertama yang nilainya cocok dengan nilai yang diberikan.","behavior":"Hapus item pertama yang nilainya cocok dengan nilai yang diberikan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to find and remove from the list.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Menimbulkan ValueError ketika nilai tidak ditemukan.","example":"numbers = [1, 2, 2, 3]\nnumbers.remove(2)         # numbers menjadi [1, 2, 3]","aliases":[],"group":"FLOW"},{"key":"class-list-method-pop","kind":"METHOD","parentKey":"class-list","name":"pop","signature":"list.pop(index=-1, /)","description":"Hapus satu item dari daftar lalu kembalikan item itu. Jika indeks dihilangkan, item terakhir akan dihapus.","behavior":"Hapus satu item dari daftar lalu kembalikan item itu. Jika indeks dihilangkan, item terakhir akan dihapus.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"index","type":"Int","defaultValue":"-1","description":"Indeks opsional untuk dihapus. Indeks negatif dihitung dari akhir daftar.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Item yang dihapus. Memunculkan IndexError ketika daftar kosong atau indeks berada di luar daftar.","example":"numbers = [2, 0, 3]\nremoved = numbers.pop()   # mengembalikan 3\nfirst = numbers.pop(0)    # mengembalikan 2","aliases":[],"group":"FLOW"},{"key":"class-list-method-clear","kind":"METHOD","parentKey":"class-list","name":"clear","signature":"list.clear()","description":"Hapus setiap item dari daftar.","behavior":"Hapus setiap item dari daftar.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Daftarnya menjadi kosong.","example":"numbers = [2, 0, 3]\nnumbers.clear()\ntext(str(len(numbers)))   # mengembalikan 0","aliases":[],"group":"FLOW"},{"key":"class-list-method-index","kind":"METHOD","parentKey":"class-list","name":"index","signature":"list.index(value, start=0, stop=len(list), /)","description":"Kembalikan indeks pertama yang itemnya sama dengan value dalam batas start dan stop opsional.","behavior":"Kembalikan indeks pertama yang itemnya sama dengan value dalam batas start dan stop opsional.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Nilai yang dicari.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Batas awal opsional. Nilai negatif dihitung dari akhir daftar.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(list)","description":"Batas akhir opsional. Item pada indeks ini tidak ikut dihitung.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Indeks yang cocok. Memunculkan ValueError ketika nilai tidak ditemukan.","example":"numbers = [1, 2, 1, 3]\nfirst_one = numbers.index(1)       # mengembalikan 0\nlater_one = numbers.index(1, 1)    # mengembalikan 2","aliases":[],"group":"FLOW"},{"key":"class-list-method-count","kind":"METHOD","parentKey":"class-list","name":"count","signature":"list.count(value, /)","description":"Hitung berapa banyak item yang sama dengan nilai yang diberikan.","behavior":"Hitung berapa banyak item yang sama dengan nilai yang diberikan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Nilai yang akan dihitung.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Jumlah item yang cocok.","example":"numbers = [1, 2, 1, 3]\nones = numbers.count(1)   # mengembalikan 2","aliases":[],"group":"FLOW"},{"key":"class-list-method-sort","kind":"METHOD","parentKey":"class-list","name":"sort","signature":"list.sort(*, key=None, reverse=False)","description":"Urutkan daftar di tempat menggunakan aturan urutan stabil yang sama seperti sorted().","behavior":"Urutkan daftar di tempat menggunakan aturan urutan stabil yang sama seperti sorted().","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Operasi memproses nilai dalam alur pemanggil. Callable key juga berjalan di sana dan dapat menunggu atau menimbulkan efek samping; ini tidak berarti eksekusi asinkron."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Callable?","defaultValue":"None","description":"Fungsi opsional yang mengembalikan kunci pembanding untuk setiap item.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"reverse","type":"Boolean","defaultValue":"False","description":"Jika true, urutkan dari terbesar ke terkecil.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"None","returnDescription":"Tidak ada nilai balik langsung. Daftar diurutkan ulang di tempat.","example":"numbers = [3, 1, 2]\nnumbers.sort()\ntext(str(numbers))        # mengembalikan [1, 2, 3]","aliases":[],"group":"FLOW"},{"key":"class-list-method-reverse","kind":"METHOD","parentKey":"class-list","name":"reverse","signature":"list.reverse()","description":"Balik urutan daftar di tempat.","behavior":"Balik urutan daftar di tempat.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai balik langsung. Urutan daftar dibalik di tempat.","example":"numbers = [1, 2, 3]\nnumbers.reverse()         # numbers menjadi [3, 2, 1]","aliases":[],"group":"FLOW"},{"key":"class-list-method-copy","kind":"METHOD","parentKey":"class-list","name":"copy","signature":"list.copy()","description":"Buat salinan daftar yang dangkal dan bisa diubah.","behavior":"Buat salinan daftar yang dangkal dan bisa diubah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"Daftar baru yang bisa diubah dengan referensi item yang sama.","example":"numbers = [1, 2]\ncopied = numbers.copy()\ncopied.append(3)\ncount = len(numbers)      # mengembalikan 2","aliases":[],"group":"FLOW"},{"key":"class-list-method-for-loop","kind":"METHOD","parentKey":"class-list","name":"for_loop","signature":"for item in list:","description":"Ulangi item secara berurutan dari kiri ke kanan.","behavior":"Ulangi item secara berurutan dari kiri ke kanan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"item","type":"Any","defaultValue":null,"description":"Current item inside the loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"list","type":"list","defaultValue":null,"description":"The list to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Loop menjalankan tubuhnya satu kali per item.","example":"steps = range(1, 4)      # mengembalikan [1, 2, 3]\nfor step in steps:\n    wait(step * 100)      # mengembalikan None","aliases":[],"group":"FLOW"},{"key":"class-list-method-truthy-check","kind":"METHOD","parentKey":"class-list","name":"truthy_check","signature":"if list | if not list","description":"Periksa apakah daftar tersebut memiliki setidaknya satu item. Daftar kosong dianggap salah.","behavior":"Periksa apakah daftar tersebut memiliki setidaknya satu item. Daftar kosong dianggap salah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"list","type":"list","defaultValue":null,"description":"The list used in the condition.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean condition","returnDescription":"benar jika daftarnya tidak kosong, salah jika daftarnya kosong.","example":"numbers = range(0)        # mengembalikan []\nif not numbers:\n    text(\"No items\")      # mengembalikan None","aliases":[],"group":"FLOW"},{"key":"class-tuple","kind":"COLLECTION","parentKey":null,"name":"tuple","signature":"tuple(iterable=(), /)\n(value1, value2, ...)","description":"Koleksi hanya-baca yang dipesan. Gunakan tuple literal ketika nilai harus tetap tetap setelah pembuatan atau ketika mengembalikan nilai yang dikelompokkan untuk destrukturisasi.","behavior":"Koleksi hanya-baca yang dipesan. Gunakan tuple literal ketika nilai harus tetap tetap setelah pembuatan atau ketika mengembalikan nilai yang dikelompokkan untuk destrukturisasi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"offset = (0, 1)\nx = offset[0]\ny = offset[1]\nif 1 in offset:\n    text(\"offset ready\")","aliases":[],"group":null},{"key":"class-tuple-creation-method-constructor","kind":"CREATION_METHOD","parentKey":"class-tuple","name":"constructor","signature":"tuple()\ntuple(iterable, /)","description":"Create an empty tuple or clone another iterable as tuple. Use a tuple literal for multiple inline values.","behavior":"Create an empty tuple or clone another iterable as tuple. Use a tuple literal for multiple inline values.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":"None","description":"Optional iterable to clone into a tuple.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"tuple","returnDescription":"Tupel read-only baru.","example":"coords = (120, 340)\ncopy = tuple(coords)","aliases":[],"group":"FLOW"},{"key":"class-tuple-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-tuple","name":"literal","signature":"(value1, value2, ...)","description":"Buat tuple inline menggunakan tanda kurung dan koma.","behavior":"Buat tuple inline menggunakan tanda kurung dan koma.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Each item written inside tuple parentheses.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"tuple","returnDescription":"Tuple baru yang mempertahankan urutan literal.","example":"offset = (0, 1)\nclick(Point(500, 900), offset=offset)","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-length","kind":"METHOD","parentKey":"class-tuple","name":"length","signature":"len(tuple, /)","description":"Hitung berapa banyak item yang ada di tuple.","behavior":"Hitung berapa banyak item yang ada di tuple.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"tuple","type":"tuple","defaultValue":null,"description":"The tuple to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Jumlah item tupel.","example":"offset = (0, 1)\ncount = len(offset)      # mengembalikan 2","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-index-access","kind":"METHOD","parentKey":"class-tuple","name":"index_access","signature":"tuple[index]","description":"Baca satu item Tuple berdasarkan indeks. Indeks negatif dihitung dari akhir.","behavior":"Baca satu item Tuple berdasarkan indeks. Indeks negatif dihitung dari akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"tuple","type":"tuple","defaultValue":null,"description":"Source tuple.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"Item index. Use -1 for the last item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"item tuple di indeks, atau Tidak Ada saat di luar jangkauan.","example":"pair = (10, 20)\nx = pair[0]              # mengembalikan 10\ny = pair[-1]             # mengembalikan 20","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-slice","kind":"METHOD","parentKey":"class-tuple","name":"slice","signature":"tuple[start:end[:step]]","description":"Salin bagian tuple menggunakan pemotongan gaya Python. Batas yang dihilangkan menggunakan awal atau akhir; indeks negatif dihitung dari akhir.","behavior":"Salin bagian tuple menggunakan pemotongan gaya Python. Batas yang dihilangkan menggunakan awal atau akhir; indeks negatif dihitung dari akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Int","defaultValue":"start of tuple","description":"First item index to include.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"end","type":"Int","defaultValue":"end of tuple","description":"Stop before this item index.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"Distance between items. Cannot be 0; negative values read backward.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"tuple","returnDescription":"Potongan tupel baru, dijepit ke rentang yang tersedia.","example":"values = (0, 1, 2, 3, 4)\nmiddle = values[1:4]     # mengembalikan (1, 2, 3)\nreverse = values[::-1]   # mengembalikan (4, 3, 2, 1, 0)","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-destructuring-assignment","kind":"METHOD","parentKey":"class-tuple","name":"destructuring_assignment","signature":"x, y = tuple","description":"Buka paket tuple item ke dalam target penugasan yang cocok. Target bertumpuk didukung, namun target berbintang seperti *sisanya tidak didukung.","behavior":"Buka paket tuple item ke dalam target penugasan yang cocok. Target bertumpuk didukung, namun target berbintang seperti *sisanya tidak didukung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"x, y","type":"Targets","defaultValue":null,"description":"Assignment targets matching the tuple item count.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"tuple","type":"tuple","defaultValue":null,"description":"Source tuple to unpack.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Target menerima tuple item dari kiri ke kanan.","example":"label, (x, y) = (\"target\", (500, 900))","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-index-method","kind":"METHOD","parentKey":"class-tuple","name":"index_method","signature":"tuple.index(value, start=0, stop=len(tuple), /)","description":"Find the first matching item index and fail visibly when absent.","behavior":"Find the first matching item index and fail visibly when absent.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value that must exist in the tuple.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(tuple)","description":"Stop index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"First matching item index.","example":"pair = (\"farm\", \"pvp\")\nindex = pair.index(\"pvp\")","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-count-method","kind":"METHOD","parentKey":"class-tuple","name":"count_method","signature":"tuple.count(value, /)","description":"Count matching tuple items.","behavior":"Count matching tuple items.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Nilai yang akan dihitung.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Number of matches.","example":"pair = (\"farm\", \"farm\", \"pvp\")\ncount = pair.count(\"farm\")","aliases":[],"group":"FLOW"},{"key":"class-tuple-method-for-loop","kind":"METHOD","parentKey":"class-tuple","name":"for_loop","signature":"for item in tuple:","description":"Iterasi item Tuple dari kiri ke kanan.","behavior":"Iterasi item Tuple dari kiri ke kanan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"item","type":"Any","defaultValue":null,"description":"Current tuple item in loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"tuple","type":"tuple","defaultValue":null,"description":"tuple to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung.","example":"offset = (0, 1)\nfor item in offset:\n    text(str(item))","aliases":[],"group":"FLOW"},{"key":"class-set","kind":"COLLECTION","parentKey":null,"name":"set","signature":"set(iterable=None, /)","description":"Kumpulan nilai unik yang bisa berubah. CogniTab menjaga urutan iterasi tetap stabil sehingga keluaran skrip mudah dibaca.","behavior":"Kumpulan nilai unik yang bisa berubah. CogniTab menjaga urutan iterasi tetap stabil sehingga keluaran skrip mudah dibaca.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"seen = {1, 2, 2}\nseen.add(3)\n\nif 2 in seen:\n    text(str(seen))","aliases":[],"group":null},{"key":"class-set-creation-method-constructor","kind":"CREATION_METHOD","parentKey":"class-set","name":"constructor","signature":"set()\nset(iterable, /)","description":"Buat himpunan kosong atau kumpulkan nilai unik dari iterable lain, termasuk ekspresi generator.","behavior":"Buat himpunan kosong atau kumpulkan nilai unik dari iterable lain, termasuk ekspresi generator.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":"None","description":"Optional source values to deduplicate into the new set.","suggestAsNamedArg":true,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"set","returnDescription":"Satu set baru yang bisa berubah.","example":"seen = set()\nunique = set([1, 2, 2, 3])","aliases":[],"group":"FLOW"},{"key":"class-set-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-set","name":"literal","signature":"{1, 2, 3}","description":"Buat satu set inline literal. Gunakan dict() atau {} untuk kamus kosong; gunakan set() untuk set kosong.","behavior":"Buat satu set inline literal. Gunakan dict() atau {} untuk kamus kosong; gunakan set() untuk set kosong.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Each value written inside the braces.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"set","returnDescription":"Kumpulan baru yang dapat diubah yang menyimpan satu salinan dari setiap nilai.","example":"unique = {1, 2, 2, 3}\ntext(str(unique))        # mengembalikan {1, 2, 3}","aliases":[],"group":"FLOW"},{"key":"class-set-creation-method-comprehension","kind":"CREATION_METHOD","parentKey":"class-set","name":"comprehension","signature":"{expr for target in iterable if condition}","description":"Bangun satu set dengan melakukan perulangan melalui iterable dan pertahankan nilai terhitung yang unik. Beberapa klausa for/if didukung.","behavior":"Bangun satu set dengan melakukan perulangan melalui iterable dan pertahankan nilai terhitung yang unik. Beberapa klausa for/if didukung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"expr","type":"Any?","defaultValue":null,"description":"Value calculated for each accepted item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"target","type":"Name | destructuring target","defaultValue":null,"description":"Loop target for the current item. Starred targets are not supported.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Source values to loop through.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"condition","type":"Boolean","defaultValue":"True","description":"Optional filter checked before adding a value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"set","returnDescription":"Satu set baru yang bisa berubah.","example":"values = [1, 2, 3, 4, 5]\nremainders = {x % 3 for x in values}","aliases":[],"group":"FLOW"},{"key":"class-set-method-length","kind":"METHOD","parentKey":"class-set","name":"length","signature":"len(set, /)","description":"Hitung berapa banyak nilai unik yang ada di kumpulan.","behavior":"Hitung berapa banyak nilai unik yang ada di kumpulan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"set","type":"set","defaultValue":null,"description":"The set to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Jumlah nilai yang ditetapkan.","example":"values = {1, 2, 2}\ncount = len(values)      # mengembalikan 2","aliases":[],"group":"FLOW"},{"key":"class-set-method-membership-operator","kind":"METHOD","parentKey":"class-set","name":"membership_operator","signature":"value in set","description":"Periksa apakah ada nilai di set.","behavior":"Periksa apakah ada nilai di set.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to test.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"set","type":"set","defaultValue":null,"description":"Set used for membership.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"benar jika nilainya ada, jika tidak maka salah.","example":"values = {1, 2, 3}\nif 2 in values:\n    text(\"ready\")","aliases":[],"group":"FLOW"},{"key":"class-set-method-add-method","kind":"METHOD","parentKey":"class-set","name":"add_method","signature":"set.add(value, /)","description":"Tambahkan satu nilai ke set. Nilai-nilai yang ada dipertahankan satu kali.","behavior":"Tambahkan satu nilai ke set. Nilai-nilai yang ada dipertahankan satu kali.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to add.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Set diperbarui di tempatnya.","example":"seen = set()\nseen.add(\"home\")","aliases":[],"group":"FLOW"},{"key":"class-set-method-discard-method","kind":"METHOD","parentKey":"class-set","name":"discard_method","signature":"set.discard(value, /)","description":"Hapus nilai jika ada. Nilai yang hilang diabaikan.","behavior":"Hapus nilai jika ada. Nilai yang hilang diabaikan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to remove if present.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Set dapat diperbarui pada tempatnya.","example":"seen = {\"home\", \"shop\"}\nseen.discard(\"shop\")","aliases":[],"group":"FLOW"},{"key":"class-set-method-remove-method","kind":"METHOD","parentKey":"class-set","name":"remove_method","signature":"set.remove(value, /)","description":"Hapus nilai yang ada. Nilai yang hilang menimbulkan kesalahan runtime sehingga kesalahan terlihat.","behavior":"Hapus nilai yang ada. Nilai yang hilang menimbulkan kesalahan runtime sehingga kesalahan terlihat.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value that must exist in the set.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Set diperbarui di tempatnya.","example":"seen = {\"home\", \"shop\"}\nseen.remove(\"home\")","aliases":[],"group":"FLOW"},{"key":"class-set-method-pop-method","kind":"METHOD","parentKey":"class-set","name":"pop_method","signature":"set.pop()","description":"Remove and return one value from the set. Empty sets raise a runtime error.","behavior":"Remove and return one value from the set. Empty sets raise a runtime error.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Any?","returnDescription":"Removed value.","example":"seen = {\"home\", \"shop\"}\nvalue = seen.pop()","aliases":[],"group":"FLOW"},{"key":"class-set-method-update-method","kind":"METHOD","parentKey":"class-set","name":"update_method","signature":"set.update(*iterables)","description":"Add values from one or more iterables into the set.","behavior":"Add values from one or more iterables into the set.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Sources to add.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Set diperbarui di tempatnya.","example":"seen = {\"home\"}\nseen.update([\"shop\", \"home\"])","aliases":[],"group":"FLOW"},{"key":"class-set-method-union-method","kind":"METHOD","parentKey":"class-set","name":"union_method","signature":"set.union(*iterables)","description":"Return a new set with values from this set and the provided iterables.","behavior":"Return a new set with values from this set and the provided iterables.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Sources to merge.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"set","returnDescription":"Merged set copy.","example":"a = {\"home\"}\nb = a.union([\"shop\"])","aliases":[],"group":"FLOW"},{"key":"class-set-method-intersection-method","kind":"METHOD","parentKey":"class-set","name":"intersection_method","signature":"set.intersection(*iterables)","description":"Return a new set containing values that also exist in every provided iterable.","behavior":"Return a new set containing values that also exist in every provided iterable.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Sources to compare.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"set","returnDescription":"Intersection set copy.","example":"a = {\"home\", \"shop\"}\nb = a.intersection([\"shop\"])","aliases":[],"group":"FLOW"},{"key":"class-set-method-difference-method","kind":"METHOD","parentKey":"class-set","name":"difference_method","signature":"set.difference(*iterables)","description":"Return a new set without values found in the provided iterables.","behavior":"Return a new set without values found in the provided iterables.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Sources to subtract.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"set","returnDescription":"Difference set copy.","example":"a = {\"home\", \"shop\"}\nb = a.difference([\"home\"])","aliases":[],"group":"FLOW"},{"key":"class-set-method-copy-method","kind":"METHOD","parentKey":"class-set","name":"copy_method","signature":"set.copy()","description":"Salin himpunan tersebut ke dalam himpunan baru yang bisa berubah.","behavior":"Salin himpunan tersebut ke dalam himpunan baru yang bisa berubah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"set","returnDescription":"Satu set baru dengan nilai yang sama.","example":"seen = {1, 2}\ncopied = seen.copy()","aliases":[],"group":"FLOW"},{"key":"class-set-method-clear-method","kind":"METHOD","parentKey":"class-set","name":"clear_method","signature":"set.clear()","description":"Hapus setiap nilai dari kumpulan.","behavior":"Hapus setiap nilai dari kumpulan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Set menjadi kosong.","example":"seen = {1, 2}\nseen.clear()","aliases":[],"group":"FLOW"},{"key":"class-set-method-for-loop","kind":"METHOD","parentKey":"class-set","name":"for_loop","signature":"for value in set:","description":"Ulangi nilai dalam urutan penyisipan yang stabil.","behavior":"Ulangi nilai dalam urutan penyisipan yang stabil.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Current set value in the loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"set","type":"set","defaultValue":null,"description":"set to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Perulangan berjalan satu kali per nilai.","example":"values = {\"home\", \"shop\"}\nfor value in values:\n    text(value)","aliases":[],"group":"FLOW"},{"key":"class-set-method-truthy-check","kind":"METHOD","parentKey":"class-set","name":"truthy_check","signature":"if set | if not set","description":"Periksa apakah himpunan tersebut memiliki setidaknya satu nilai. Himpunan kosong dianggap salah.","behavior":"Periksa apakah himpunan tersebut memiliki setidaknya satu nilai. Himpunan kosong dianggap salah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"set","type":"set","defaultValue":null,"description":"The set used in the condition.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean condition","returnDescription":"benar jika himpunan tidak kosong, salah jika himpunan kosong.","example":"seen = set()\nif not seen:\n    text(\"empty\")","aliases":[],"group":"FLOW"},{"key":"class-dict","kind":"COLLECTION","parentKey":null,"name":"dict","signature":"dict(mapping_or_pairs=(), /, **items)","description":"Kumpulan kunci/nilai yang menyimpan urutan penyisipan dan dapat dibaca atau diperbarui selama eksekusi skrip.","behavior":"Kumpulan kunci/nilai yang menyimpan urutan penyisipan dan dapat dibaca atau diperbarui selama eksekusi skrip.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"settings = dict(mode=\"farm\", retries=3)\nmode = settings.get(\"mode\")   # mengembalikan farm\nkeys = settings.keys()\n\nfor key in settings:\n    text(str(settings[key]))   # mengembalikan None","aliases":[],"group":null},{"key":"class-dict-creation-method-constructor","kind":"CREATION_METHOD","parentKey":"class-dict","name":"constructor","signature":"dict()\ndict(mapping_or_pairs, /)\ndict(key=value, ...)","description":"Create an empty dictionary, copy a mapping or iterable of pairs, or build entries from keyword arguments.","behavior":"Create an empty dictionary, copy a mapping or iterable of pairs, or build entries from keyword arguments.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"mapping_or_pairs","type":"dict | Iterable","defaultValue":"None","description":"Mapping or iterable of two-item pairs to copy.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"key=value","type":"Any?","defaultValue":null,"description":"Keyword entries to add after the source mapping.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"variadic"}],"returnType":"dict","returnDescription":"Kamus baru yang bisa berubah.","example":"settings = dict(mode=\"farm\", retries=3)\ncopied = dict(settings)\nfrom_pairs = dict([(\"mode\", \"pvp\")])","aliases":[],"group":"FLOW"},{"key":"class-dict-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-dict","name":"literal","signature":"{\"mode\": \"farm\", \"retries\": 3}","description":"Buat kamus dengan nilai string, angka, boolean, atau objek.","behavior":"Buat kamus dengan nilai string, angka, boolean, atau objek.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"String","defaultValue":null,"description":"dict key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"value","type":"Any?","defaultValue":null,"description":"Value stored for that key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"dict","returnDescription":"Kamus baru yang mempertahankan urutan entri literal.","example":"settings = {\n    \"mode\": \"farm\",\n    \"retries\": 3,\n    \"enabled\": True\n}","aliases":[],"group":"FLOW"},{"key":"class-dict-creation-method-comprehension","kind":"CREATION_METHOD","parentKey":"class-dict","name":"comprehension","signature":"{key: value for target in iterable if condition}","description":"Bangun kamus dari iterable sambil mempertahankan urutan penyisipan. Beberapa klausa for/if didukung.","behavior":"Bangun kamus dari iterable sambil mempertahankan urutan penyisipan. Beberapa klausa for/if didukung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"dict key calculated for each accepted item.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"value","type":"Any?","defaultValue":null,"description":"Value stored for that key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"target","type":"Name | destructuring target","defaultValue":null,"description":"Loop target for the current item. Starred targets are not supported.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Source values to loop through.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"condition","type":"Boolean","defaultValue":"True","description":"Optional filter checked before storing an entry.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"dict","returnDescription":"Kamus baru yang bisa berubah.","example":"pairs = [(\"mode\", \"farm\"), (\"retries\", 3)]\nsettings = {key: value for key, value in pairs}","aliases":[],"group":"FLOW"},{"key":"class-dict-method-key-access","kind":"METHOD","parentKey":"class-dict","name":"key_access","signature":"dictionary[\"key\"]","description":"Baca satu nilai demi kunci. Kunci yang hilang akan mengembalikan Tidak Ada.","behavior":"Baca satu nilai demi kunci. Kunci yang hilang akan mengembalikan Tidak Ada.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dictionary","type":"dict","defaultValue":null,"description":"The source dictionary.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"key","type":"Any","defaultValue":null,"description":"Key to look up.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Any?","returnDescription":"Nilai yang disimpan untuk kunci tersebut, atau Tidak Ada jika kunci tidak ada.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nmode = settings[\"mode\"]        # mengembalikan farm\nmissing = settings[\"unknown\"]  # mengembalikan None","aliases":[],"group":"FLOW"},{"key":"class-dict-method-key-assignment","kind":"METHOD","parentKey":"class-dict","name":"key_assignment","signature":"dictionary[key] = value","description":"Tulis atau ganti satu entri kunci/nilai dengan sintaks penetapan braket.","behavior":"Tulis atau ganti satu entri kunci/nilai dengan sintaks penetapan braket.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dictionary","type":"dict","defaultValue":null,"description":"The mutable dictionary to update.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"key","type":"Any","defaultValue":null,"description":"Key to write or replace.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"},{"name":"value","type":"Any?","defaultValue":null,"description":"Value to store for that key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Kamus diperbarui pada tempatnya.","example":"settings = {\"mode\": \"farm\"}\nsettings[\"mode\"] = \"pvp","aliases":[],"group":"FLOW"},{"key":"class-dict-method-length","kind":"METHOD","parentKey":"class-dict","name":"length","signature":"len(dictionary, /)","description":"Hitung berapa banyak pasangan kunci/nilai dalam kamus.","behavior":"Hitung berapa banyak pasangan kunci/nilai dalam kamus.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dictionary","type":"dict","defaultValue":null,"description":"The dictionary to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Jumlah entri dalam kamus.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\ncount = len(settings)          # mengembalikan 2","aliases":[],"group":"FLOW"},{"key":"class-dict-method-get-method","kind":"METHOD","parentKey":"class-dict","name":"get_method","signature":"dictionary.get(key, default=None, /)","description":"Membaca nilai berdasarkan kunci dan secara opsional kembali ke default.","behavior":"Membaca nilai berdasarkan kunci dan secara opsional kembali ke default.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to look up.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"default","type":"Any?","defaultValue":"None","description":"Fallback value returned when the key is missing.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Nilai yang disimpan untuk kunci tersebut, atau nilai default yang diberikan.","example":"settings = {\"mode\": \"farm\"}\nmode = settings.get(\"mode\")           # mengembalikan farm\nretry = settings.get(\"retries\", 0)    # mengembalikan 0","aliases":[],"group":"FLOW"},{"key":"class-dict-method-items-method","kind":"METHOD","parentKey":"class-dict","name":"items_method","signature":"dictionary.items()","description":"Get key/value pairs as a list of two-item tuples in insertion order.","behavior":"Get key/value pairs as a list of two-item tuples in insertion order.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"A list of (key, value) tuples.","example":"settings = {\"mode\": \"farm\"}\npairs = settings.items()","aliases":[],"group":"FLOW"},{"key":"class-dict-method-pop-method","kind":"METHOD","parentKey":"class-dict","name":"pop_method","signature":"dictionary.pop(key, default=None, /)","description":"Remove one key and return its value, or return the default when missing.","behavior":"Remove one key and return its value, or return the default when missing.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to remove.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"default","type":"Any?","defaultValue":"None","description":"Fallback returned when the key is missing.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Removed value or fallback default.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nremoved = settings.pop(\"retries\")","aliases":[],"group":"FLOW"},{"key":"class-dict-method-copy-method","kind":"METHOD","parentKey":"class-dict","name":"copy_method","signature":"dictionary.copy()","description":"Copy the dictionary into a new mutable dictionary.","behavior":"Copy the dictionary into a new mutable dictionary.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"A new dictionary with the same entries.","example":"settings = {\"mode\": \"farm\"}\ncopied = settings.copy()","aliases":[],"group":"FLOW"},{"key":"class-dict-method-update-method","kind":"METHOD","parentKey":"class-dict","name":"update_method","signature":"dictionary.update(other=(), /, **items)","description":"Update this dictionary from another mapping, pairs iterable, and keyword entries.","behavior":"Update this dictionary from another mapping, pairs iterable, and keyword entries.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"dict | Iterable","defaultValue":"None","description":"Mapping or pairs to merge.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"items","type":"Any?","defaultValue":null,"description":"Keyword entries to write.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Kamus diperbarui pada tempatnya.","example":"settings = {\"mode\": \"farm\"}\nsettings.update([(\"retries\", 3)], mode=\"pvp\")","aliases":[],"group":"FLOW"},{"key":"class-dict-method-setdefault-method","kind":"METHOD","parentKey":"class-dict","name":"setdefault_method","signature":"dictionary.setdefault(key, default=None, /)","description":"Return an existing value, or store and return the default when the key is missing.","behavior":"Return an existing value, or store and return the default when the key is missing.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to read or create.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"default","type":"Any?","defaultValue":"None","description":"Value stored when the key is absent.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Existing value or inserted default.","example":"settings = dict()\nmode = settings.setdefault(\"mode\", \"farm\")","aliases":[],"group":"FLOW"},{"key":"class-dict-method-keys-method","kind":"METHOD","parentKey":"class-dict","name":"keys_method","signature":"dictionary.keys()","description":"Dapatkan kunci kamus sebagai daftar dalam urutan penyisipan.","behavior":"Dapatkan kunci kamus sebagai daftar dalam urutan penyisipan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"Daftar kunci.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nkeys = settings.keys()\nfirst_key = keys[0]                 # mengembalikan mode","aliases":[],"group":"FLOW"},{"key":"class-dict-method-values-method","kind":"METHOD","parentKey":"class-dict","name":"values_method","signature":"dictionary.values()","description":"Dapatkan nilai kamus sebagai daftar dalam urutan penyisipan.","behavior":"Dapatkan nilai kamus sebagai daftar dalam urutan penyisipan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"Daftar nilai.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nvalues = settings.values()\nlast_value = values[-1]             # mengembalikan 3","aliases":[],"group":"FLOW"},{"key":"class-dict-method-clear-method","kind":"METHOD","parentKey":"class-dict","name":"clear_method","signature":"dictionary.clear()","description":"Hapus setiap pasangan kunci/nilai dari kamus.","behavior":"Hapus setiap pasangan kunci/nilai dari kamus.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Kamus menjadi kosong.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nsettings.clear()\ntext(str(len(settings)))   # mengembalikan 0","aliases":[],"group":"FLOW"},{"key":"class-dict-method-for-loop","kind":"METHOD","parentKey":"class-dict","name":"for_loop","signature":"for key in dictionary:","description":"Ulangi kunci kamus dengan urutan yang sama dengan penulisan literalnya.","behavior":"Ulangi kunci kamus dengan urutan yang sama dengan penulisan literalnya.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Current key inside the loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"dictionary","type":"dict","defaultValue":null,"description":"The dictionary to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Perulangan berjalan satu kali per kunci.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nfor key in settings:\n    text(str(settings[key]))   # mengembalikan None","aliases":[],"group":"FLOW"},{"key":"class-dict-method-truthy-check","kind":"METHOD","parentKey":"class-dict","name":"truthy_check","signature":"if dictionary | if not dictionary","description":"Periksa apakah kamus memiliki setidaknya satu entri. Kamus kosong dianggap salah.","behavior":"Periksa apakah kamus memiliki setidaknya satu entri. Kamus kosong dianggap salah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dictionary","type":"dict","defaultValue":null,"description":"The dictionary used in the condition.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean condition","returnDescription":"benar jika kamus tidak kosong, salah jika kamus kosong.","example":"settings = {}\nif not settings:\n    text(\"No settings\")       # mengembalikan None","aliases":[],"group":"FLOW"},{"key":"class-string","kind":"COLLECTION","parentKey":null,"name":"String","signature":"String","description":"Pengumpulan nilai teks. Dibuat oleh string literal atau str(nilai), kemudian dibaca dengan operasi panjang/indeks/loop.","behavior":"Pengumpulan nilai teks. Dibuat oleh string literal atau str(nilai), kemudian dibaca dengan operasi panjang/indeks/loop.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"name = \"Start\"\nif name:\n    first_char = name[0]\n    text(first_char)","aliases":[],"group":null},{"key":"class-string-creation-method-literal","kind":"CREATION_METHOD","parentKey":"class-string","name":"literal","signature":"\"hello\"","description":"Buat teks secara langsung dengan tanda kutip tunggal atau ganda.","behavior":"Buat teks secara langsung dengan tanda kutip tunggal atau ganda.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"text","type":"String","defaultValue":null,"description":"String content between quotes.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"String","returnDescription":"Nilai string baru.","example":"label = \"Start\"\ntext(label)","aliases":[],"group":"FLOW"},{"key":"class-string-creation-method-cast","kind":"CREATION_METHOD","parentKey":"class-string","name":"cast","signature":"str(value, /)","description":"Convert a number, boolean, or other value to text. Large or deeply nested structured values use a bounded preview with explicit omission markers, while a direct string remains unchanged.","behavior":"Convert a number, boolean, or other value to text. Large or deeply nested structured values use a bounded preview with explicit omission markers, while a direct string remains unchanged.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Value to convert into text.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Nilai teks yang dikonversi.","example":"attempt = 3\nline = str(attempt)","aliases":[],"group":"FLOW"},{"key":"class-string-method-length","kind":"METHOD","parentKey":"class-string","name":"length","signature":"len(string, /)","description":"Hitung berapa banyak karakter dalam string.","behavior":"Hitung berapa banyak karakter dalam string.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"string","type":"String","defaultValue":null,"description":"String value to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Jumlah karakter.","example":"label = \"Play\"\ncount = len(label)        # mengembalikan 4","aliases":[],"group":"FLOW"},{"key":"class-string-method-index-access","kind":"METHOD","parentKey":"class-string","name":"index_access","signature":"string[index]","description":"Baca satu karakter berdasarkan indeks. Indeks negatif dihitung dari akhir.","behavior":"Baca satu karakter berdasarkan indeks. Indeks negatif dihitung dari akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"string","type":"String","defaultValue":null,"description":"Source string.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"index","type":"Int","defaultValue":null,"description":"Character index. Use -1 for the last character.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"String?","returnDescription":"String satu karakter, atau Tidak Ada jika di luar jangkauan.","example":"label = \"Play\"\nfirst = label[0]          # mengembalikan 'P'\nlast = label[-1]          # mengembalikan 'y'","aliases":[],"group":"FLOW"},{"key":"class-string-method-slice","kind":"METHOD","parentKey":"class-string","name":"slice","signature":"string[start:end[:step]]","description":"Salin substring menggunakan pemotongan gaya Python. Batas yang dihilangkan menggunakan awal atau akhir; indeks negatif dihitung dari akhir.","behavior":"Salin substring menggunakan pemotongan gaya Python. Batas yang dihilangkan menggunakan awal atau akhir; indeks negatif dihitung dari akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Int","defaultValue":"start of string","description":"First character index to include.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"end","type":"Int","defaultValue":"end of string","description":"Stop before this character index.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"Distance between characters. Cannot be 0; negative values read backward.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Potongan string baru, dijepit ke rentang yang tersedia.","example":"label = \"abcdef\"\nmiddle = label[1:4]       # mengembalikan 'bcd'\ntail = label[-3:]         # mengembalikan 'def'\nreverse = label[::-1]     # mengembalikan 'fedcba'","aliases":[],"group":"FLOW"},{"key":"class-string-method-lower-method","kind":"METHOD","parentKey":"class-string","name":"lower_method","signature":"string.lower()","description":"Return a lowercase copy of the string.","behavior":"Return a lowercase copy of the string.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"Lowercase string.","example":"label = \"PLAY\"\ntext(label.lower())","aliases":[],"group":"FLOW"},{"key":"class-string-method-upper-method","kind":"METHOD","parentKey":"class-string","name":"upper_method","signature":"string.upper()","description":"Return an uppercase copy of the string.","behavior":"Return an uppercase copy of the string.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"Uppercase string.","example":"label = \"play\"\ntext(label.upper())","aliases":[],"group":"FLOW"},{"key":"class-string-method-strip-method","kind":"METHOD","parentKey":"class-string","name":"strip_method","signature":"string.strip(chars=None, /)","description":"Trim whitespace, or the provided characters, from both ends.","behavior":"Trim whitespace, or the provided characters, from both ends.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"Characters to trim instead of whitespace.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Trimmed string.","example":"label = \"  Play  \"\nclean = label.strip()","aliases":[],"group":"FLOW"},{"key":"class-string-method-lstrip-method","kind":"METHOD","parentKey":"class-string","name":"lstrip_method","signature":"string.lstrip(chars=None, /)","description":"Trim whitespace, or the provided characters, from the left side.","behavior":"Trim whitespace, or the provided characters, from the left side.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"Characters to trim instead of whitespace.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Left-trimmed string.","example":"label = \"...Play\"\nclean = label.lstrip(\".\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-rstrip-method","kind":"METHOD","parentKey":"class-string","name":"rstrip_method","signature":"string.rstrip(chars=None, /)","description":"Trim whitespace, or the provided characters, from the right side.","behavior":"Trim whitespace, or the provided characters, from the right side.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"Characters to trim instead of whitespace.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Right-trimmed string.","example":"label = \"Play...\"\nclean = label.rstrip(\".\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-startswith-method","kind":"METHOD","parentKey":"class-string","name":"startswith_method","signature":"string.startswith(prefix, start=0, stop=len(string), /)","description":"Check whether the selected slice starts with a prefix.","behavior":"Check whether the selected slice starts with a prefix.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"prefix","type":"String","defaultValue":null,"description":"Prefix to test.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the check.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the check.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"true when the prefix matches.","example":"label = \"Play\"\nready = label.startswith(\"Pl\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-endswith-method","kind":"METHOD","parentKey":"class-string","name":"endswith_method","signature":"string.endswith(suffix, start=0, stop=len(string), /)","description":"Check whether the selected slice ends with a suffix.","behavior":"Check whether the selected slice ends with a suffix.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"suffix","type":"String","defaultValue":null,"description":"Suffix to test.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the check.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the check.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"true when the suffix matches.","example":"label = \"Play\"\nready = label.endswith(\"ay\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-find-method","kind":"METHOD","parentKey":"class-string","name":"find_method","signature":"string.find(sub, start=0, stop=len(string), /)","description":"Find the first substring index, or return -1 when absent.","behavior":"Find the first substring index, or return -1 when absent.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sub","type":"String","defaultValue":null,"description":"Substring to find.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"First matching index, or -1.","example":"label = \"start button\"\nindex = label.find(\"button\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-index-method","kind":"METHOD","parentKey":"class-string","name":"index_method","signature":"string.index(sub, start=0, stop=len(string), /)","description":"Find the first substring index and fail visibly when absent.","behavior":"Find the first substring index and fail visibly when absent.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sub","type":"String","defaultValue":null,"description":"Substring that must exist.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the search.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"First matching index.","example":"label = \"start button\"\nindex = label.index(\"button\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-replace-method","kind":"METHOD","parentKey":"class-string","name":"replace_method","signature":"string.replace(old, new, count=-1, /)","description":"Return a copy with occurrences of old text replaced.","behavior":"Return a copy with occurrences of old text replaced.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"old","type":"String","defaultValue":null,"description":"Text to replace.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"new","type":"String","defaultValue":null,"description":"Replacement text.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"count","type":"Int","defaultValue":"-1","description":"Maximum replacements; negative means all.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Updated string copy.","example":"label = \"start start\"\nonce = label.replace(\"start\", \"play\", 1)","aliases":[],"group":"FLOW"},{"key":"class-string-method-split-method","kind":"METHOD","parentKey":"class-string","name":"split_method","signature":"string.split(sep=None, maxsplit=-1, /)","description":"Split a string into a list of text parts.","behavior":"Split a string into a list of text parts.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sep","type":"String?","defaultValue":"None","description":"Separator text. None splits on whitespace.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"maxsplit","type":"Int","defaultValue":"-1","description":"Maximum split count; negative means all.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"list","returnDescription":"List of string parts.","example":"raw = \"a,b,c\"\nparts = raw.split(\",\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-join-method","kind":"METHOD","parentKey":"class-string","name":"join_method","signature":"string.join(iterable, /)","description":"Join an iterable of strings using this string as the separator.","behavior":"Join an iterable of strings using this string as the separator.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable<String>","defaultValue":null,"description":"String values to join.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Joined string.","example":"parts = [\"a\", \"b\", \"c\"]\nline = \",\".join(parts)","aliases":[],"group":"FLOW"},{"key":"class-string-method-count-method","kind":"METHOD","parentKey":"class-string","name":"count_method","signature":"string.count(sub, start=0, stop=len(string), /)","description":"Count non-overlapping substring occurrences.","behavior":"Count non-overlapping substring occurrences.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sub","type":"String","defaultValue":null,"description":"Substring to count.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int","defaultValue":"0","description":"Start index for the count.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(string)","description":"Stop index for the count.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Occurrence count.","example":"label = \"banana\"\ncount = label.count(\"an\")","aliases":[],"group":"FLOW"},{"key":"class-string-method-isalpha-method","kind":"METHOD","parentKey":"class-string","name":"isalpha_method","signature":"string.isalpha()","description":"Check whether the string is non-empty and all characters are letters.","behavior":"Check whether the string is non-empty and all characters are letters.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"true for letters only.","example":"label = \"Play\"\nok = label.isalpha()","aliases":[],"group":"FLOW"},{"key":"class-string-method-isdigit-method","kind":"METHOD","parentKey":"class-string","name":"isdigit_method","signature":"string.isdigit()","description":"Check whether the string is non-empty and all characters are digits.","behavior":"Check whether the string is non-empty and all characters are digits.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"true for digits only.","example":"value = \"123\"\nok = value.isdigit()","aliases":[],"group":"FLOW"},{"key":"class-string-method-isalnum-method","kind":"METHOD","parentKey":"class-string","name":"isalnum_method","signature":"string.isalnum()","description":"Check whether the string is non-empty and all characters are letters or digits.","behavior":"Check whether the string is non-empty and all characters are letters or digits.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"true for letters or digits only.","example":"value = \"A123\"\nok = value.isalnum()","aliases":[],"group":"FLOW"},{"key":"class-string-method-isspace-method","kind":"METHOD","parentKey":"class-string","name":"isspace_method","signature":"string.isspace()","description":"Check whether the string is non-empty and all characters are whitespace.","behavior":"Check whether the string is non-empty and all characters are whitespace.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"true for whitespace only.","example":"value = \"   \"\nok = value.isspace()","aliases":[],"group":"FLOW"},{"key":"class-string-method-for-loop","kind":"METHOD","parentKey":"class-string","name":"for_loop","signature":"for ch in string:","description":"Ulangi karakter dari kiri ke kanan.","behavior":"Ulangi karakter dari kiri ke kanan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"ch","type":"String","defaultValue":null,"description":"Current character in the loop.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"string","type":"String","defaultValue":null,"description":"String to iterate.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Dieksekusi satu kali per karakter.","example":"word = \"Go\"\nfor ch in word:\n    text(ch)","aliases":[],"group":"FLOW"},{"key":"class-string-method-truthy-check","kind":"METHOD","parentKey":"class-string","name":"truthy_check","signature":"if string | if not string","description":"Periksa apakah stringnya kosong atau tidak.","behavior":"Periksa apakah stringnya kosong atau tidak.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"string","type":"String","defaultValue":null,"description":"String used in the condition.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean condition","returnDescription":"benar jika tidak kosong, salah jika kosong.","example":"value = \"\"\nif not value:\n    text(\"empty\")","aliases":[],"group":"FLOW"},{"key":"class-macropanel","kind":"CLASS","parentKey":null,"name":"MacroPanel","signature":"MacroPanel(title=\"\", subtitle=\"\", confirm_text=\"Run\", cancel_text=\"Cancel\", *, version=\"\")","description":"Buat dan tampilkan panel input runtime untuk parameter makro yang dikontrol skrip.","behavior":"Buat dan tampilkan panel input runtime untuk parameter makro yang dikontrol skrip.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Simpan builder panel dalam alurnya sendiri. show() dan notify() interaktif diserialkan oleh kunci prompt runtime dan menunggu pengguna. error() menghentikan eksekusi dengan kesalahan yang memengaruhi seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":true,"fields":["title","subtitle","version","confirm_text","cancel_text"],"fieldDocs":[{"name":"title","type":"String","defaultValue":"\"\"","description":"Panel title. Writable after construction.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"subtitle","type":"String","defaultValue":"\"\"","description":"Panel subtitle/helper text. Writable after construction.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"version","type":"String","defaultValue":"\"\"","description":"Label version opsional yang dipertahankan untuk kompatibilitas; nilai input MacroPanel dipulihkan dari Storage dan disimpan ke Storage berdasarkan nama variabel, bukan berdasarkan version. Dapat ditulis ulang setelah dibuat.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"confirm_text","type":"String","defaultValue":"\"Run\"","description":"Confirm button label.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"cancel_text","type":"String","defaultValue":"\"Cancel\"","description":"Cancel button label.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"title","type":"String","defaultValue":"\"\"","description":"Panel title.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"subtitle","type":"String","defaultValue":"\"\"","description":"Panel subtitle/helper text.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"confirm_text","type":"String","defaultValue":"\"Run\"","description":"Confirm button label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"cancel_text","type":"String","defaultValue":"\"Cancel\"","description":"Cancel button label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"version","type":"String","defaultValue":"\"\"","description":"Label version opsional yang dipertahankan untuk kompatibilitas; nilai input MacroPanel dipulihkan dari Storage dan disimpan ke Storage berdasarkan nama variabel, bukan berdasarkan version.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"panel = MacroPanel(\"Run config\", \"Pick options before run\", confirm_text=\"Start\", cancel_text=\"Back\")\npanel.text(\"<b>Ready?</b>\")\npanel.checkbox(\"safe_mode\", \"Safe mode\", checked=True)\npanel.toggle_switch(\"retry\", \"Auto retry\", checked=False)\npanel.edit_text(\"username\", default=\"player01\", desc=\"Shown below the field\")\npanel.edit_text(\"runs\", \"Runs\", default=\"3\", desc=\"Numbers only\", input_type=\"number\")\npanel.radio_group(\"mode\", [\"farm\", \"pvp\"], default=\"farm\")\npanel.radio_group(\"target\", [\"boss\", \"minion\"], default=\"boss\", dropdown=True)\npanel.slider(\"speed\", min=0, max=100, step=5, default=60)\npanel.stepper(\"retry_count\", min=0, max=10, step=1, default=2)\nvalues = panel.show()","aliases":[],"group":null},{"key":"class-macropanel-static-method-notify","kind":"STATIC_METHOD","parentKey":"class-macropanel","name":"notify","signature":"MacroPanel.notify(text)","description":"Tampilkan dialog info pemblokiran di runtime overlay dan lanjutkan setelah pengguna mengonfirmasi. String tetap tidak berubah; nilai terstruktur menggunakan formatter yang dapat dibaca seperti str(value), termasuk perluasan multi-baris untuk konten bertingkat.","behavior":"Tampilkan dialog info pemblokiran di runtime overlay dan lanjutkan setelah pengguna mengonfirmasi. String tetap tidak berubah; nilai terstruktur menggunakan formatter yang dapat dibaca seperti str(value), termasuk perluasan multi-baris untuk konten bertingkat.","execution":{"blocking":"yes","threadSafety":"serialized","parallel":"conditional","details":"Menunggu konfirmasi pengguna melalui kunci prompt runtime bersama. Prompt bersamaan diserialkan."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"text","type":"Any","defaultValue":null,"description":"Message text or structured value to display.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian setelah konfirmasi pengguna.","example":"# Tunggu pengguna mengakui pesan ini\nMacroPanel.notify(\"Macro is ready\")","aliases":[],"group":"FLOW"},{"key":"class-macropanel-static-method-error","kind":"STATIC_METHOD","parentKey":"class-macropanel","name":"error","signature":"MacroPanel.error(text)","description":"Hentikan eksekusi skrip dengan menimbulkan kesalahan runtime. Selama makro berjalan, hamparan memperlihatkan satu kesalahan skrip standar dengan jalur aliran/tindakan; nilai terstruktur menggunakan formatter yang dapat dibaca sama seperti str(nilai).","behavior":"Hentikan eksekusi skrip dengan menimbulkan kesalahan runtime. Selama makro berjalan, hamparan memperlihatkan satu kesalahan skrip standar dengan jalur aliran/tindakan; nilai terstruktur menggunakan formatter yang dapat dibaca sama seperti str(nilai).","execution":{"blocking":"no","threadSafety":"serialized","parallel":"no","details":"Memunculkan kesalahan skrip fatal; semua cabang Run berhenti. Ini bukan prompt konfirmasi."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"text","type":"Any","defaultValue":null,"description":"Error text or structured value to display.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak kembali; memunculkan kesalahan runtime.","example":"# Prasyarat yang gagal mengakhiri seluruh Run\nif not TfliteModel.exists(\"enemy_detector\"):\n    MacroPanel.error(\"Import enemy_detector in Template Manager\")","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-edit-text","kind":"METHOD","parentKey":"class-macropanel","name":"edit_text","signature":"panel.edit_text(name, label=None, default=\"\", desc=None, input_type=\"text\")","description":"Tambahkan bidang teks yang dapat diedit. Gunakan desc untuk teks pembantu kecil di bawah bidang, dan input_type=\"number\" untuk menampilkan input numerik sementara nilai yang dikembalikan tetap berupa String.","behavior":"Tambahkan bidang teks yang dapat diedit. Gunakan desc untuk teks pembantu kecil di bawah bidang, dan input_type=\"number\" untuk menampilkan input numerik sementara nilai yang dikembalikan tetap berupa String.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Simpan builder panel dalam alurnya sendiri. show() dan notify() interaktif diserialkan oleh kunci prompt runtime dan menunggu pengguna. error() menghentikan eksekusi dengan kesalahan yang memengaruhi seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Variable name to return in panel result.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"String","defaultValue":"\"\"","description":"Default text value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"desc","type":"String?","defaultValue":"None","description":"Small helper text displayed below this field.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"input_type","type":"String","defaultValue":"\"text\"","description":"Use \"text\" for normal text or \"number\" for numeric input. The result value remains a String.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama untuk rangkaian yang lancar.","example":"# Buat panel dan tunggu konfirmasi pengguna\npanel = MacroPanel(\"Settings\")\npanel.edit_text(\"player\", label=\"Player\", default=\"Guest\")\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-checkbox","kind":"METHOD","parentKey":"class-macropanel","name":"checkbox","signature":"panel.checkbox(name, label=None, checked=False)","description":"Tambahkan masukan kotak centang.","behavior":"Tambahkan masukan kotak centang.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Simpan builder panel dalam alurnya sendiri. show() dan notify() interaktif diserialkan oleh kunci prompt runtime dan menunggu pengguna. error() menghentikan eksekusi dengan kesalahan yang memengaruhi seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Variable name.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"checked","type":"Boolean","defaultValue":"False","description":"Default checked state.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama untuk rangkaian yang lancar.","example":"# Buat panel dan tunggu konfirmasi pengguna\npanel = MacroPanel(\"Settings\")\npanel.checkbox(\"sound\", label=\"Sound\", checked=True)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-toggle-switch","kind":"METHOD","parentKey":"class-macropanel","name":"toggle_switch","signature":"panel.toggle_switch(name, label=None, checked=False)","description":"Tambahkan masukan sakelar sakelar.","behavior":"Tambahkan masukan sakelar sakelar.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Simpan builder panel dalam alurnya sendiri. show() dan notify() interaktif diserialkan oleh kunci prompt runtime dan menunggu pengguna. error() menghentikan eksekusi dengan kesalahan yang memengaruhi seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Variable name.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"checked","type":"Boolean","defaultValue":"False","description":"Default toggle state.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama untuk rangkaian yang lancar.","example":"# Buat panel dan tunggu konfirmasi pengguna\npanel = MacroPanel(\"Settings\")\npanel.toggle_switch(\"enabled\", label=\"Enabled\", checked=True)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-radio-group","kind":"METHOD","parentKey":"class-macropanel","name":"radio_group","signature":"panel.radio_group(name, options, label=None, default=None, dropdown=False)","description":"Tambahkan pemilih grup radio, atau render sebagai dropdown ketika dropdown=True.","behavior":"Tambahkan pemilih grup radio, atau render sebagai dropdown ketika dropdown=True.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Simpan builder panel dalam alurnya sendiri. show() dan notify() interaktif diserialkan oleh kunci prompt runtime dan menunggu pengguna. error() menghentikan eksekusi dengan kesalahan yang memengaruhi seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Variable name.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"options","type":"list[String]","defaultValue":null,"description":"Selectable options.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"String|Int|None","defaultValue":"None","description":"Default option label or 0-based option index; None selects the first option.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"dropdown","type":"Boolean","defaultValue":"False","description":"Render this selector as a dropdown instead of radio options.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama untuk rangkaian yang lancar.","example":"# Buat panel dan tunggu konfirmasi pengguna\npanel = MacroPanel(\"Settings\")\npanel.radio_group(\"mode\", [\"slow\", \"fast\"], label=\"Mode\", default=\"slow\")\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-slider","kind":"METHOD","parentKey":"class-macropanel","name":"slider","signature":"panel.slider(name, min=0, max=100, step=1, label=None, default=None)","description":"Tambahkan penggeser numerik.","behavior":"Tambahkan penggeser numerik.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Simpan builder panel dalam alurnya sendiri. show() dan notify() interaktif diserialkan oleh kunci prompt runtime dan menunggu pengguna. error() menghentikan eksekusi dengan kesalahan yang memengaruhi seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Variable name.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"min","type":"Number","defaultValue":"0","description":"Minimum value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max","type":"Number","defaultValue":"100","description":"Maximum value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"step","type":"Number","defaultValue":"1","description":"Step size between values.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"Number?","defaultValue":"min","description":"Default value, clamped to min/max.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama untuk rangkaian yang lancar.","example":"# Buat panel dan tunggu konfirmasi pengguna\npanel = MacroPanel(\"Settings\")\npanel.slider(\"speed\", min=1, max=10, step=1, default=5)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-stepper","kind":"METHOD","parentKey":"class-macropanel","name":"stepper","signature":"panel.stepper(name, min=0, max=100, step=1, label=None, default=None)","description":"Tambahkan stepper numerik dengan kontrol +/-.","behavior":"Tambahkan stepper numerik dengan kontrol +/-.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Simpan builder panel dalam alurnya sendiri. show() dan notify() interaktif diserialkan oleh kunci prompt runtime dan menunggu pengguna. error() menghentikan eksekusi dengan kesalahan yang memengaruhi seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Variable name.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"min","type":"Number","defaultValue":"0","description":"Minimum integer value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max","type":"Number","defaultValue":"100","description":"Maximum integer value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"step","type":"Number","defaultValue":"1","description":"Step size.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"label","type":"String?","defaultValue":"None","description":"Display label. Leave empty to hide label.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"default","type":"Number?","defaultValue":"min","description":"Default value, clamped to min/max.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama untuk rangkaian yang lancar.","example":"# Buat panel dan tunggu konfirmasi pengguna\npanel = MacroPanel(\"Settings\")\npanel.stepper(\"count\", min=1, max=20, step=1, default=3)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-text","kind":"METHOD","parentKey":"class-macropanel","name":"text","signature":"panel.text(html)","description":"Tambahkan blok teks HTML. Tag dasar dirender sebaris, dan fragmen bergaya CSS seperti kartu, bagian berwarna, baris fleksibel, gradien, dan kotak bulat dirender dalam WebView yang terkunci dengan JavaScript dan navigasi eksternal dinonaktifkan.","behavior":"Tambahkan blok teks HTML. Tag dasar dirender sebaris, dan fragmen bergaya CSS seperti kartu, bagian berwarna, baris fleksibel, gradien, dan kotak bulat dirender dalam WebView yang terkunci dengan JavaScript dan navigasi eksternal dinonaktifkan.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Simpan builder panel dalam alurnya sendiri. show() dan notify() interaktif diserialkan oleh kunci prompt runtime dan menunggu pengguna. error() menghentikan eksekusi dengan kesalahan yang memengaruhi seluruh Run."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"html","type":"String","defaultValue":null,"description":"HTML content to display.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama untuk rangkaian yang lancar.","example":"# Buat panel dan tunggu konfirmasi pengguna\npanel = MacroPanel(\"Settings\")\npanel.text(\"<b>Ready</b>\")\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-show","kind":"METHOD","parentKey":"class-macropanel","name":"show","signature":"panel.show()","description":"Tampilkan panel dan kembalikan nilai input pengguna sesuai tipe. Nilai Storage yang memiliki nama variabel yang sama menjadi nilai default field, dan nilai yang dikonfirmasi disimpan kembali ke Storage berdasarkan nama variabel: nilai checkbox/toggle adalah Boolean, nilai slider adalah Number, nilai stepper adalah Int, nilai radio/dropdown adalah indeks opsi Int berbasis 0, dan nilai edit text adalah String untuk teks normal (atau tipe numerik/tersimpan yang sesuai). Jika panggilan panel.show() yang sama terbuka berulang tanpa tindakan runtime lain, runtime akan menghentikan skrip untuk menghindari loop panel tanpa akhir.","behavior":"Tampilkan panel dan kembalikan nilai input pengguna sesuai tipe. Nilai Storage yang memiliki nama variabel yang sama menjadi nilai default field, dan nilai yang dikonfirmasi disimpan kembali ke Storage berdasarkan nama variabel: nilai checkbox/toggle adalah Boolean, nilai slider adalah Number, nilai stepper adalah Int, nilai radio/dropdown adalah indeks opsi Int berbasis 0, dan nilai edit text adalah String untuk teks normal (atau tipe numerik/tersimpan yang sesuai). Jika panggilan panel.show() yang sama terbuka berulang tanpa tindakan runtime lain, runtime akan menghentikan skrip untuk menghindari loop panel tanpa akhir.","execution":{"blocking":"yes","threadSafety":"serialized","parallel":"conditional","details":"Menunggu konfirmasi pengguna melalui kunci prompt runtime bersama. Prompt bersamaan diserialkan."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"dict dari VariableName -> nilai yang diketik.","example":"# Buat panel dan tunggu konfirmasi pengguna\npanel = MacroPanel(\"Settings\")\npanel.checkbox(\"enabled\", checked=True)\nresult = panel.show()\nprint(result)","aliases":[],"group":"FLOW"},{"key":"class-system","kind":"CLASS","parentKey":null,"name":"System","signature":"System()","description":"Akses info sistem/perangkat runtime dan picu tindakan tingkat sistem dari skrip.","behavior":"Akses info sistem/perangkat runtime dan picu tindakan tingkat sistem dari skrip.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["dev","battery","screen","memory"],"fieldDocs":[{"name":"dev","type":"dict","defaultValue":null,"description":"Device capability info (`isEmulator`, `sdk`, `language`, `darkmode`, `touch`, `capture`).","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"battery","type":"dict","defaultValue":null,"description":"Battery info (`percent`, `charging`, `temperature`, `health`).","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"screen","type":"dict","defaultValue":null,"description":"Info layar (`width`, `height`, `orientation`, `density`, `dpi`); `orientation` adalah rotasi layar dalam derajat: `0`, `90`, `180`, atau `270`.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"memory","type":"dict","defaultValue":null,"description":"Memory info (`avail`, `total`, `threshold`, `low`).","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"sys = System()\nprint(\"sdk=\", sys.sdk())\nbattery = System.battery()\nprint(\"battery=\", battery.percent, battery.charging)\nSystem.toast(\"Macro started\")\nSystem.play_noti()\nSystem.home()","aliases":[],"group":null},{"key":"class-system-static-method-time-ms","kind":"STATIC_METHOD","parentKey":"class-system","name":"time_ms","signature":"System.time_ms()","description":"Dapatkan stempel waktu saat ini dalam milidetik.","behavior":"Dapatkan stempel waktu saat ini dalam milidetik.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"Epoch milidetik.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nstarted = System.time_ms()\nwait(100)\nprint(System.time_ms() - started)","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-app-version","kind":"STATIC_METHOD","parentKey":"class-system","name":"app_version","signature":"System.app_version()","description":"Dapatkan nama versi aplikasi.","behavior":"Dapatkan nama versi aplikasi.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"Nama versi aplikasi.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.app_version())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-variant","kind":"STATIC_METHOD","parentKey":"class-system","name":"variant","signature":"System.variant()","description":"Dapatkan kode stabil varian macro yang dipilih untuk eksekusi ini.","behavior":"Dapatkan kode stabil varian macro yang dipilih untuk eksekusi ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"Kode varian seperti `default` atau `pro_plus`.","example":"# Buat percabangan berdasarkan varian macro saat ini\nif System.variant() == \"pro_plus\":\n    print(\"Pro Plus\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-open","kind":"STATIC_METHOD","parentKey":"class-system","name":"open","signature":"System.open(package_name)","description":"Buka aktivitas peluncur aplikasi Android yang terinstal. CogniTab menemukan aktivitas peluncur standar atau Android TV dari nama paket, sehingga kelas aktivitas tidak perlu diberikan.","behavior":"Buka aktivitas peluncur aplikasi Android yang terinstal. CogniTab menemukan aktivitas peluncur standar atau Android TV dari nama paket, sehingga kelas aktivitas tidak perlu diberikan.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"package_name","type":"String","defaultValue":null,"description":"Nama paket aplikasi Android, misalnya `com.android.settings`.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"`True` saat Android menerima intent peluncuran; `False` saat aplikasi tidak tersedia, tidak memiliki aktivitas yang dapat diluncurkan, atau tidak dapat dibuka.","example":"# Buka Setelan Android dan tangani jika aplikasi tidak tersedia\nopened = System.open(\"com.android.settings\")\nif not opened:\n    System.toast(\"App is unavailable\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-sdk","kind":"STATIC_METHOD","parentKey":"class-system","name":"sdk","signature":"System.sdk()","description":"Dapatkan Android SDK int.","behavior":"Dapatkan Android SDK int.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"Bilangan bulat versi SDK Android.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.sdk())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-language","kind":"STATIC_METHOD","parentKey":"class-system","name":"language","signature":"System.language()","description":"Dapatkan kode bahasa saat ini.","behavior":"Dapatkan kode bahasa saat ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"Kode bahasa lokal (misalnya `en`, `vi`).","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.language())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-dpi","kind":"STATIC_METHOD","parentKey":"class-system","name":"dpi","signature":"System.dpi()","description":"Dapatkan DPI layar saat ini.","behavior":"Dapatkan DPI layar saat ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"DPI kepadatan tampilan.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.dpi())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-darkmode","kind":"STATIC_METHOD","parentKey":"class-system","name":"darkmode","signature":"System.darkmode()","description":"Periksa apakah mode gelap diaktifkan.","behavior":"Periksa apakah mode gelap diaktifkan.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` saat mode gelap aktif.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nif System.darkmode():\n    print(\"Dark mode\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-play-noti","kind":"STATIC_METHOD","parentKey":"class-system","name":"play_noti","signature":"System.play_noti()","description":"Putar suara notifikasi sistem.","behavior":"Putar suara notifikasi sistem.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nSystem.play_noti()","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-toast","kind":"STATIC_METHOD","parentKey":"class-system","name":"toast","signature":"System.toast(text)","description":"Tampilkan pesan roti panggang sistem. Nilai terstruktur dirender dengan formatter tampilan DSL ringkas sehingga hasil tetap singkat dan mudah dibaca.","behavior":"Tampilkan pesan roti panggang sistem. Nilai terstruktur dirender dengan formatter tampilan DSL ringkas sehingga hasil tetap singkat dan mudah dibaca.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"text","type":"Any","defaultValue":null,"description":"Toast text or structured value to display compactly.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nSystem.toast(\"Macro started\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-stop","kind":"STATIC_METHOD","parentKey":"class-system","name":"stop","signature":"System.stop()","description":"Segera hentikan makro saat ini dari skrip.","behavior":"Segera hentikan makro saat ini dari skrip.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"no","details":"Menghentikan seluruh Run makro, termasuk alur latar. Eksekusi tidak berlanjut setelah panggilan; ini bukan API pembatalan per alur."},"limitations":[],"relatedApis":["class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Menghentikan eksekusi; tidak ada nilai kembalian yang diamati.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nif Storage.get(\"stop_requested\", False):\n    System.stop()\nprint(\"Still running\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-minimized-dock","kind":"STATIC_METHOD","parentKey":"class-system","name":"minimized_dock","signature":"System.minimized_dock(point=None, *, width=None, height=None, alpha=None, mode=None)","description":"Kueri atau sesuaikan dok overlay yang diperkecil. Titik tersebut menggunakan skala koordinat dan aturan jangkar yang sama dengan target klik berbasis titik; lebar dan tinggi adalah piksel layar saat ini.","behavior":"Kueri atau sesuaikan dok overlay yang diperkecil. Titik tersebut menggunakan skala koordinat dan aturan jangkar yang sama dengan target klik berbasis titik; lebar dan tinggi adalah piksel layar saat ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"point","type":"Point?","defaultValue":"None","description":"Optional top-left dock position.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"width","type":"Number?","defaultValue":"None","description":"Optional minimized dock footprint width in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"height","type":"Number?","defaultValue":"None","description":"Optional minimized dock footprint height in pixels.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"alpha","type":"Number?","defaultValue":"None","description":"Optional dock opacity from 0.2 to 1.0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"mode","type":"String?","defaultValue":"None","description":"Tampilan dock opsional. Nilai: icon atau row.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"dict","returnDescription":"Status yang diterapkan dengan `applied`, `x`, `y`, `width`, `height`, `alpha`, `mode`, dan `reason` opsional.","example":"# Pindahkan, ubah ukuran, dan ciutkan dock kecil menjadi ikon untuk run ini\nSystem.minimized_dock(Point(24, 120), width=72, height=36, alpha=0.85, mode=\"icon\")","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-back","kind":"STATIC_METHOD","parentKey":"class-system","name":"back","signature":"System.back()","description":"Lakukan tindakan Kembali global.","behavior":"Lakukan tindakan Kembali global.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` jika tindakan dikirim.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.back())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-home","kind":"STATIC_METHOD","parentKey":"class-system","name":"home","signature":"System.home()","description":"Lakukan tindakan Beranda global.","behavior":"Lakukan tindakan Beranda global.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` jika tindakan dikirim.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.home())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-recent","kind":"STATIC_METHOD","parentKey":"class-system","name":"recent","signature":"System.recent()","description":"Buka layar terkini.","behavior":"Buka layar terkini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` jika tindakan dikirim.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.recent())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-noti","kind":"STATIC_METHOD","parentKey":"class-system","name":"noti","signature":"System.noti()","description":"Buka bayangan notifikasi.","behavior":"Buka bayangan notifikasi.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` jika tindakan dikirim.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.noti())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-lockscreen","kind":"STATIC_METHOD","parentKey":"class-system","name":"lockscreen","signature":"System.lockscreen()","description":"Kunci layar saat ini.","behavior":"Kunci layar saat ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` jika tindakan dikirim.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.lockscreen())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-powerdialog","kind":"STATIC_METHOD","parentKey":"class-system","name":"powerdialog","signature":"System.powerdialog()","description":"Buka dialog kekuasaan.","behavior":"Buka dialog kekuasaan.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` jika tindakan dikirim.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.powerdialog())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-quicksetting","kind":"STATIC_METHOD","parentKey":"class-system","name":"quicksetting","signature":"System.quicksetting()","description":"Buka panel pengaturan cepat.","behavior":"Buka panel pengaturan cepat.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` jika tindakan dikirim.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.quicksetting())","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-screenshot","kind":"STATIC_METHOD","parentKey":"class-system","name":"screenshot","signature":"System.screenshot()","description":"Memicu tindakan tangkapan layar global.","behavior":"Memicu tindakan tangkapan layar global.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`Benar` jika tindakan dikirim.","example":"# Ambil informasi Android atau minta tindakan sistem yang terdokumentasi\nprint(System.screenshot())","aliases":[],"group":"FLOW"},{"key":"class-screencapture","kind":"CLASS","parentKey":null,"name":"ScreenCapture","signature":"ScreenCapture","description":"Kontrol statis untuk pengambilan layar bersama selama proses makro saat ini. Cache otomatis biasanya menggunakan kembali frame hingga 100 ms untuk mengurangi beban pengambilan gambar. Untuk pengenalan berulang yang membutuhkan frame terbaru yang tersedia, gunakan auto_cache_off(); ini menambah beban pemrosesan dan penggunaan baterai, tanpa menjamin eksekusi lebih cepat atau piksel yang baru dirender. cache_on() menyematkan frame secara terpisah dan diprioritaskan di atas pengaturan cache otomatis.","behavior":"Kontrol statis untuk pengambilan layar bersama selama proses makro saat ini. Cache otomatis biasanya menggunakan kembali frame hingga 100 ms untuk mengurangi beban pengambilan gambar. Untuk pengenalan berulang yang membutuhkan frame terbaru yang tersedia, gunakan auto_cache_off(); ini menambah beban pemrosesan dan penggunaan baterai, tanpa menjamin eksekusi lebih cepat atau piksel yang baru dirender. cache_on() menyematkan frame secara terpisah dan diprioritaskan di atas pengaturan cache otomatis.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Kontrol cache memperbarui kebijakan bersama tanpa menunggu frame atau durasi yang ditentukan. Capture berikutnya memakai kebijakan itu. Perubahan memengaruhi semua alur dalam Run; kontrol ini tidak meminta izin capture."},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Pakai ulang satu frame tangkapan untuk beberapa pemeriksaan layar\nScreenCapture.cache_on()\ncolor = Color.get(Point(500, 900))\nhit = Region.full_screen().find(\"enemy\", timeout=0)\nScreenCapture.cache_off()\n\n# Utamakan frame terbaru yang tersedia untuk pengenalan singkat\nScreenCapture.auto_cache_off(duration_ms=1000)\nhit = Region.full_screen().find(\"enemy\", timeout=800, rate=30)\n\n# Nonaktifkan tanpa batas waktu, lalu aktifkan kembali cache otomatis\nScreenCapture.auto_cache_off()\nhit = Region.full_screen().find(\"enemy\", timeout=2000, rate=30)\nScreenCapture.auto_cache_on()","aliases":[],"group":null},{"key":"class-screencapture-static-method-cache-on","kind":"STATIC_METHOD","parentKey":"class-screencapture","name":"cache_on","signature":"ScreenCapture.cache_on()","description":"Sematkan frame tangkapan layar nyata berikutnya dan gunakan kembali hingga ScreenCapture.cache_off() dipanggil. Jika belum ada buffer baru dalam antrean, frame valid terbaru dari pembaca tangkapan saat ini akan disematkan sebagai gantinya. Fungsi ini tidak meminta izin tangkapan layar.","behavior":"Sematkan frame tangkapan layar nyata berikutnya dan gunakan kembali hingga ScreenCapture.cache_off() dipanggil. Jika belum ada buffer baru dalam antrean, frame valid terbaru dari pembaca tangkapan saat ini akan disematkan sebagai gantinya. Fungsi ini tidak meminta izin tangkapan layar.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Kontrol cache memperbarui kebijakan bersama tanpa menunggu frame atau durasi yang ditentukan. Capture berikutnya memakai kebijakan itu. Perubahan memengaruhi semua alur dalam Run; kontrol ini tidak meminta izin capture."},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"# Sematkan satu frame bersama untuk dua proses pengenalan\nScreenCapture.cache_on()\nregion = Region(100, 200, 300, 400)\nfirst = region.find(\"start\", 0)\nsecond = region.find(\"confirm\", 0)\nScreenCapture.cache_off()\nprint(first.found, second.found)","aliases":[],"group":"FLOW"},{"key":"class-screencapture-static-method-cache-off","kind":"STATIC_METHOD","parentKey":"class-screencapture","name":"cache_off","signature":"ScreenCapture.cache_off()","description":"Lepaskan frame tangkapan layar yang disematkan tanpa mengubah pengaturan cache otomatis. Frame yang masih baru tetap dapat digunakan kembali jika cache otomatis aktif. Panggil juga auto_cache_off() jika pengenalan membutuhkan frame terbaru yang tersedia.","behavior":"Lepaskan frame tangkapan layar yang disematkan tanpa mengubah pengaturan cache otomatis. Frame yang masih baru tetap dapat digunakan kembali jika cache otomatis aktif. Panggil juga auto_cache_off() jika pengenalan membutuhkan frame terbaru yang tersedia.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Kontrol cache memperbarui kebijakan bersama tanpa menunggu frame atau durasi yang ditentukan. Capture berikutnya memakai kebijakan itu. Perubahan memengaruhi semua alur dalam Run; kontrol ini tidak meminta izin capture."},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"# Lepas penyematan manual sebelum pemindaian berikutnya\nScreenCapture.cache_off()\nregion = Region(100, 200, 300, 400)\nprint(region.find(\"start\", 0).found)","aliases":[],"group":"FLOW"},{"key":"class-screencapture-static-method-auto-cache-off","kind":"STATIC_METHOD","parentKey":"class-screencapture","name":"auto_cache_off","signature":"ScreenCapture.auto_cache_off(duration_ms=None)","description":"Nonaktifkan penggunaan ulang frame yang disengaja oleh cache otomatis selama duration_ms milidetik sejak pemanggilan ini, atau hingga auto_cache_on() dipanggil atau proses makro berakhir jika argumen dihilangkan atau None. Pemanggilan ulang mengganti durasi sebelumnya. Berlaku untuk pengambilan bitmap, frame mentah, TFLite, dan piksel bersama; penggunaan ulang berdasarkan TTL dilewati, tetapi pengambilan frame tetap dibatasi waktunya dan tidak dapat memaksa Android merender piksel baru. Tidak melepaskan sematan cache_on(), meminta izin tangkapan layar, atau menunggu durasi berakhir.","behavior":"Nonaktifkan penggunaan ulang frame yang disengaja oleh cache otomatis selama duration_ms milidetik sejak pemanggilan ini, atau hingga auto_cache_on() dipanggil atau proses makro berakhir jika argumen dihilangkan atau None. Pemanggilan ulang mengganti durasi sebelumnya. Berlaku untuk pengambilan bitmap, frame mentah, TFLite, dan piksel bersama; penggunaan ulang berdasarkan TTL dilewati, tetapi pengambilan frame tetap dibatasi waktunya dan tidak dapat memaksa Android merender piksel baru. Tidak melepaskan sematan cache_on(), meminta izin tangkapan layar, atau menunggu durasi berakhir.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Kontrol cache memperbarui kebijakan bersama tanpa menunggu frame atau durasi yang ditentukan. Capture berikutnya memakai kebijakan itu. Perubahan memengaruhi semua alur dalam Run; kontrol ini tidak meminta izin capture."},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"duration_ms","type":"Number | None","defaultValue":"None","description":"Milidetik berupa bilangan bulat positif (100 dan 100.0 sama-sama valid), atau None untuk tanpa batas waktu selama proses makro ini. Nilai nol, negatif, pecahan, string, boolean, dan nilai yang melampaui batas ditolak.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"# Lewati cache otomatis sementara; penyematan manual adalah pengaturan terpisah\nScreenCapture.cache_off()\nScreenCapture.auto_cache_off(1000)\nregion = Region(100, 200, 300, 400)\nprint(region.find(\"start\", 500).found)\nScreenCapture.auto_cache_on()","aliases":[],"group":"FLOW"},{"key":"class-screencapture-static-method-auto-cache-on","kind":"STATIC_METHOD","parentKey":"class-screencapture","name":"auto_cache_on","signature":"ScreenCapture.auto_cache_on()","description":"Aktifkan kembali cache frame otomatis normal segera dan batalkan penonaktifan yang berjangka maupun tanpa batas waktu. Tidak melepaskan sematan cache_on(), meminta izin tangkapan layar, atau menunggu. Cache otomatis juga dipulihkan saat proses makro berakhir.","behavior":"Aktifkan kembali cache frame otomatis normal segera dan batalkan penonaktifan yang berjangka maupun tanpa batas waktu. Tidak melepaskan sematan cache_on(), meminta izin tangkapan layar, atau menunggu. Cache otomatis juga dipulihkan saat proses makro berakhir.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Kontrol cache memperbarui kebijakan bersama tanpa menunggu frame atau durasi yang ditentukan. Capture berikutnya memakai kebijakan itu. Perubahan memengaruhi semua alur dalam Run; kontrol ini tidak meminta izin capture."},"limitations":[],"relatedApis":["class-region","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"# Pulihkan penggunaan ulang frame otomatis seperti biasa\nScreenCapture.auto_cache_on()\nregion = Region(100, 200, 300, 400)\nprint(region.find(\"start\", 0).found)","aliases":[],"group":"FLOW"},{"key":"class-storage","kind":"CLASS","parentKey":null,"name":"Storage","signature":"Storage","description":"Storage key/value persisten untuk makro saat ini. Variabel biasa hanya dibagikan antar-action PYTHON_CODE berurutan dalam flow yang sama, termasuk action di dalam GROUP; flow paralel memiliki variabel terisolasi. Kunci Storage dipakai bersama oleh semua flow, jadi gunakan Storage ketika nilai harus bertahan ke run makro berikutnya, bukan sebagai kanal pesan antarproses. Penulisan disimpan otomatis setelah 2 detik tanpa penulisan baru dan di-commit lagi setelah seluruh Run makro dan semua flow latar berakhir.","behavior":"Storage key/value persisten untuk makro saat ini. Variabel biasa hanya dibagikan antar-action PYTHON_CODE berurutan dalam flow yang sama, termasuk action di dalam GROUP; flow paralel memiliki variabel terisolasi. Kunci Storage dipakai bersama oleh semua flow, jadi gunakan Storage ketika nilai harus bertahan ke run makro berikutnya, bukan sebagai kanal pesan antarproses. Penulisan disimpan otomatis setelah 2 detik tanpa penulisan baru dan di-commit lagi setelah seluruh Run makro dan semua flow latar berakhir.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":false,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Simpan nilai lintas run makro yang terpisah\nrun_count = Storage.get(\"run_count\", 0)\nrun_count = run_count + 1\nStorage.set(\"run_count\", run_count)\nStorage.set(\"last_point\", Point(500, 900))\nMacroPanel.notify(\"Run #\" + str(run_count))","aliases":[],"group":null},{"key":"class-storage-static-method-get","kind":"STATIC_METHOD","parentKey":"class-storage","name":"get","signature":"Storage.get(key, default=None)","description":"Baca satu nilai yang bertahan berdasarkan kunci dan secara opsional kembali ke default ketika kuncinya hilang.","behavior":"Baca satu nilai yang bertahan berdasarkan kunci dan secara opsional kembali ke default ketika kuncinya hilang.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to look up.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"default","type":"Any?","defaultValue":"None","description":"Fallback value returned when the key is missing.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Any?","returnDescription":"Nilai yang disimpan untuk kunci tersebut, atau nilai default yang diberikan.","example":"# Pulihkan penghitung tersimpan dengan nilai default cadangan\nrun_count = Storage.get(\"run_count\", 0)","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-set","kind":"STATIC_METHOD","parentKey":"class-storage","name":"set","signature":"Storage.set(key, value)","description":"Tulis atau ganti satu entri di penyimpanan persisten. Nilai yang didukung mempertahankan tipe ramah skrip seperti Number, String, Boolean, Point, Region, list, tuple, dict, set, dan None, termasuk nilai koleksi yang disarangkan.","behavior":"Tulis atau ganti satu entri di penyimpanan persisten. Nilai yang didukung mempertahankan tipe ramah skrip seperti Number, String, Boolean, Point, Region, list, tuple, dict, set, dan None, termasuk nilai koleksi yang disarangkan.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to write.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"value","type":"Any?","defaultValue":null,"description":"Value to persist for that key.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai balik langsung. Storage diperbarui langsung, disimpan otomatis setelah 2 detik tanpa penulisan baru, lalu di-commit lagi setelah seluruh Run makro dan semua flow latar berakhir.","example":"# Simpan nilai untuk run makro berikutnya\nStorage.set(\"run_count\", 3)\nStorage.set(\"last_point\", Point(500, 900))","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-remove","kind":"STATIC_METHOD","parentKey":"class-storage","name":"remove","signature":"Storage.remove(key)","description":"Hapus satu entri yang bertahan dan kembalikan nilai lama.","behavior":"Hapus satu entri yang bertahan dan kembalikan nilai lama.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to remove.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Any?","returnDescription":"Nilai yang dihapus, atau Tidak Ada saat kuncinya hilang.","example":"# Hapus flag tersimpan saat tidak diperlukan lagi\nold_flag = Storage.remove(\"boost_enabled\")","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-contains","kind":"STATIC_METHOD","parentKey":"class-storage","name":"contains","signature":"Storage.contains(key)","description":"Periksa apakah kunci yang ada saat ini ada.","behavior":"Periksa apakah kunci yang ada saat ini ada.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Key to test.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"`True` bila kuncinya ada, jika tidak `False`.","example":"# Jalankan penjaga logika berdasarkan state tersimpan\nif Storage.contains(\"last_point\"):\n    MacroPanel.notify(\"Saved point is ready\")","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-keys","kind":"STATIC_METHOD","parentKey":"class-storage","name":"keys","signature":"Storage.keys()","description":"Dapatkan semua kunci yang disimpan sebagai daftar dalam urutan penyisipan.","behavior":"Dapatkan semua kunci yang disimpan sebagai daftar dalam urutan penyisipan.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"Daftar kunci yang disimpan.","example":"# Periksa nilai mana yang tersimpan untuk makro ini\nsaved_keys = Storage.keys()","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-values","kind":"STATIC_METHOD","parentKey":"class-storage","name":"values","signature":"Storage.values()","description":"Dapatkan semua nilai yang bertahan sebagai daftar dalam urutan penyisipan.","behavior":"Dapatkan semua nilai yang bertahan sebagai daftar dalam urutan penyisipan.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"Daftar nilai yang bertahan.","example":"# Baca semua nilai tersimpan untuk pemeriksaan cepat\nsaved_values = Storage.values()","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-clear","kind":"STATIC_METHOD","parentKey":"class-storage","name":"clear","signature":"Storage.clear()","description":"Hapus setiap entri yang ada untuk makro saat ini.","behavior":"Hapus setiap entri yang ada untuk makro saat ini.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow","class-storage-static-method-to-dict"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai pengembalian langsung. Penyimpanan menjadi kosong.","example":"# Reset semua nilai Storage tersimpan\nStorage.clear()","aliases":[],"group":"FLOW"},{"key":"class-storage-static-method-to-dict","kind":"STATIC_METHOD","parentKey":"class-storage","name":"to_dict","signature":"Storage.to_dict()","description":"Kembalikan Storage saat ini sebagai live dict yang dipakai bersama oleh setiap flow dalam Run ini. Edit langsung pada entri dict yang dikembalikan mengikuti alur simpan otomatis, dan snapshot live terbaru di-commit setelah seluruh Run makro dan semua flow latar berakhir.","behavior":"Kembalikan Storage saat ini sebagai live dict yang dipakai bersama oleh setiap flow dalam Run ini. Edit langsung pada entri dict yang dikembalikan mengikuti alur simpan otomatis, dan snapshot live terbaru di-commit setelah seluruh Run makro dan semua flow latar berakhir.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Alur dalam satu Run berbagi sesi Storage. Operasi tunggal dan perubahan bertingkat yang dilacak dilindungi kunci. get lalu set bukan transaksi atomik; gunakan satu alur penulis jika pembaruan bergantung pada pembacaan sebelumnya."},"limitations":[],"relatedApis":["class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Tampilan dict langsung dari entri penyimpanan yang ada saat ini.","example":"# Baca dan perbarui seluruh dictionary storage tersimpan\nstate = Storage.to_dict()\nstate[\"bonus\"] = 5\nMacroPanel.notify(str(state))","aliases":[],"group":"FLOW"},{"key":"function-click","kind":"FUNCTION","parentKey":null,"name":"click","signature":"click(target, hold_ms=0, offset=(0, 0), random=0, delay_before=0, delay_after=0, parallel=False)","description":"Click on a Point, (x, y) tuple, Match, or MatchList. Every parameter supports positional or named form in the documented order. Use Point(x, y) for coordinate metadata such as scale/anchor; use (x, y) for fixed pixel coordinates. Use parallel=True to queue this touch and receive its numeric id; call Touch.cancel(id) or Touch.cancel() to cancel queued/active touches.","behavior":"Click on a Point, (x, y) tuple, Match, or MatchList. Every parameter supports positional or named form in the documented order. Use Point(x, y) for coordinate metadata such as scale/anchor; use (x, y) for fixed pixel coordinates. Use parallel=True to queue this touch and receive its numeric id; call Touch.cancel(id) or Touch.cancel() to cancel queued/active touches.","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"Gestur Android berbagi perangkat. parallel=True mengantrekan id sentuhan, tetapi delay_before dan delay_after masih memblokir di luar mode collect. Dalam collect, sentuhan dikumpulkan untuk Touch.send(); Touch.wait() menunggu selesai."},"limitations":[],"relatedApis":["class-touch-static-method-collect","class-touch-static-method-send","class-touch-static-method-wait"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"target","type":"Point | tuple[Number, Number] | Match | MatchList","defaultValue":null,"description":"Target Point, coordinate tuple, found Match, or MatchList. Match/MatchList values with multiple points click each found point.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"hold_ms","type":"Int","defaultValue":"0","description":"Hold duration in milliseconds","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"offset","type":"tuple[Number, Number]","defaultValue":"(0, 0)","description":"Add a pixel offset after resolving the target point.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"random","type":"Number | tuple[Number, Number]","defaultValue":"0","description":"Add random pixel offset after resolving the target point.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Delay before the click in milliseconds.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_after","type":"Number","defaultValue":"0","description":"Delay after the click in milliseconds.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"parallel","type":"Boolean","defaultValue":"False","description":"When True, returns a numeric touch id. In collect mode the touch waits for Touch.send(); collected overlapping touches may start at different delay_before offsets without cancelling each other.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Number | list[Number] | None","returnDescription":"Mengembalikan satu id numerik untuk satu klik paralel yang diantri, sebuah daftar[Nomor] ketika Match multi-titik atau MatchList mengantri beberapa klik paralel, jika tidak, Tidak Ada.","example":"# Klik koordinat layar dengan Point atau tuple\nclick(Point(500, 900))\nclick((500, 900))\nclick((500, 900), hold_ms=200)\nclick(Point(500, 900), 0, (0, 0), 10, 0, 500)\n\nmatch = Region(100, 200, 300, 400).find(\"start\", 3000)\nif match.found:\n    click(match, offset=(0, 6))\n\nhits = Region(100, 200, 300, 400).find_any([\"a\", \"b\"], 3000)\nif hits:\n    click(hits, random=0)\n\n# Kumpulkan dua sentuhan paralel, kirim bersama, lalu tunggu antrean\nTouch.collect()\na = click(Point(300, 900), parallel=True)\nb = click(Point(780, 900), parallel=True)\nTouch.send()\nTouch.wait()\n\n# Tahan p1, lalu ketuk p2 setelah 1 detik tanpa melepas p1\nTouch.collect()\np1 = click(Point(300, 900), hold_ms=5000, parallel=True)\np2 = click(Point(780, 900), hold_ms=1000, delay_before=1000, parallel=True)\nTouch.send()\nTouch.cancel(p1)\nTouch.wait()","aliases":[],"group":"GESTURE"},{"key":"function-swipe","kind":"FUNCTION","parentKey":null,"name":"swipe","signature":"swipe(points, *, parallel=False)","description":"Lakukan gerakan menggesek dari daftar datar nilai SwipePoint. Setiap daftar menciptakan satu jalur multi-titik untuk satu jari.","behavior":"Lakukan gerakan menggesek dari daftar datar nilai SwipePoint. Setiap daftar menciptakan satu jalur multi-titik untuk satu jari.","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"Gestur Android berbagi perangkat. parallel=True mengantrekan id sentuhan, tetapi delay_before dan delay_after masih memblokir di luar mode collect. Dalam collect, sentuhan dikumpulkan untuk Touch.send(); Touch.wait() menunggu selesai."},"limitations":[],"relatedApis":["class-touch-static-method-collect","class-touch-static-method-send","class-touch-static-method-wait"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"points","type":"list[SwipePoint]","defaultValue":null,"description":"Flat path for one finger. Requires at least 2 points.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"parallel","type":"Boolean","defaultValue":"False","description":"When True, returns a numeric touch id. In collect mode the swipe waits for Touch.send(); otherwise it queues immediately. Use Touch.cancel(id) or Touch.cancel() to cancel queued/active touches.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Number | None","returnDescription":"Mengembalikan id numerik hanya ketika parallel=True; jika tidak, Tidak ada.","example":"path = [\n    SwipePoint(Point(500, 1500), speed=\"FAST\"),\n    SwipePoint((560, 980), speed=\"NORMAL\", humanized=True),\n    SwipePoint(Point(500, 500))\n]\nswipe(path)\n\nTouch.collect()\nleft = swipe(path, parallel=True)\nright = swipe([\n    SwipePoint(Point(780, 1500), speed=\"FAST\"),\n    SwipePoint(Point(780, 500))\n], parallel=True)\nTouch.send()\nTouch.wait()","aliases":[],"group":"GESTURE"},{"key":"function-wait","kind":"FUNCTION","parentKey":null,"name":"wait","signature":"wait(ms, /)","description":"Jeda eksekusi skrip selama beberapa milidetik tertentu.","behavior":"Jeda eksekusi skrip selama beberapa milidetik tertentu.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu dalam alur pemanggil hingga waktu yang diminta atau sentuhan selesai. Alur lain dapat lanjut; pause dan stop tetap berlaku."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"ms","type":"Int","defaultValue":null,"description":"Pause duration in milliseconds","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"None","returnDescription":"Tidak ada nilai kembalian","example":"click(Point(500, 900))\nwait(1000)  # Tunggu 1 detik\nclick(Point(500, 900))","aliases":["sleep"],"group":"FLOW"},{"key":"function-text","kind":"FUNCTION","parentKey":null,"name":"text","signature":"text(value, /, focus_index=0)","description":"Masukkan teks. focus_index=0 mempertahankan fokus saat ini, 1 fokus pada EditTeks pertama, 2 fokus pada EditTeks kedua, dan seterusnya.","behavior":"Masukkan teks. focus_index=0 mempertahankan fokus saat ini, 1 fokus pada EditTeks pertama, 2 fokus pada EditTeks kedua, dan seterusnya.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"String","defaultValue":null,"description":"Text to input","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"focus_index","type":"Int","defaultValue":"0","description":"0: keep current focus, N>=1: focus N-th EditText before input","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"Tidak ada nilai kembalian","example":"click(Point(300, 500))  # Klik kolom input\nwait(200)\ntext(\"Hello World\", 1)","aliases":[],"group":"INPUT"},{"key":"function-range","kind":"FUNCTION","parentKey":null,"name":"range","signature":"range(stop, /) | range(start, stop, step=1, /)","description":"Hasilkan urutan bilangan bulat untuk digunakan dalam for-loop.","behavior":"Hasilkan urutan bilangan bulat untuk digunakan dalam for-loop.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"start","type":"Int","defaultValue":"0","description":"Start value (inclusive)","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":null,"description":"End value (exclusive)","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"step","type":"Int","defaultValue":"1","description":"Step increment","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"list[Int]","returnDescription":"daftar bilangan bulat dari awal sampai berhenti","example":"numbers = range(5)          # mengembalikan [0, 1, 2, 3, 4]\nevens = range(0, 10, 2)   # mengembalikan [0, 2, 4, 6, 8]\n\nfor i in numbers:\n    click(Point(100 + i * 50, 500))  # mengembalikan None","aliases":[],"group":"FLOW"},{"key":"function-enumerate","kind":"FUNCTION","parentKey":null,"name":"enumerate","signature":"enumerate(iterable, start=0)","description":"Mengembalikan daftar pasangan Tuple(indeks, item) untuk nilai apa pun yang dapat diubah.","behavior":"Mengembalikan daftar pasangan Tuple(indeks, item) untuk nilai apa pun yang dapat diubah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"Value to enumerate. Dictionaries enumerate keys.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"start","type":"Int","defaultValue":"0","description":"First index value.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"list[tuple]","returnDescription":"daftar tupel dua item: indeks pertama, item asli kedua.","example":"# Beri nomor item sebelum dipakai\nnames = [\"alpha\", \"beta\"]\nfor pair in enumerate(names, start=1):\n    text(str(pair[0]) + \": \" + pair[1])","aliases":[],"group":"COLLECTION"},{"key":"function-zip","kind":"FUNCTION","parentKey":null,"name":"zip","signature":"zip(*iterables)","description":"Gabungkan iterable ke dalam daftar tupel, berhenti pada input terpendek.","behavior":"Gabungkan iterable ke dalam daftar tupel, berhenti pada input terpendek.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"String | list | tuple | dict","defaultValue":null,"description":"Values to combine. Dictionaries contribute keys.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"}],"returnType":"list[tuple]","returnDescription":"daftar tupel yang setiap tupel berisi satu item dari setiap input.","example":"# Pasangkan label dengan titik klik\nlabels = [\"left\", \"right\"]\npoints = [Point(100, 500), Point(900, 500)]\nfor pair in zip(labels, points):\n    text(pair[0])\n    click(pair[1])","aliases":[],"group":"COLLECTION"},{"key":"function-random","kind":"FUNCTION","parentKey":null,"name":"random","signature":"random()","description":"Mengembalikan angka floating-point acak dalam rentang 0 -> 1.","behavior":"Mengembalikan angka floating-point acak dalam rentang 0 -> 1.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Float","returnDescription":"Nilai floating-point acak dalam 0 -> 1 (1 eksklusif).","example":"chance = random()\nif chance < 0.25:\n    text(\"lucky\")","aliases":[],"group":"FLOW"},{"key":"function-random-int","kind":"FUNCTION","parentKey":null,"name":"random_int","signature":"random_int(min, max, /)","description":"Mengembalikan bilangan bulat acak dalam rentang min -> maks yang inklusif.","behavior":"Mengembalikan bilangan bulat acak dalam rentang min -> maks yang inklusif.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"min","type":"Int","defaultValue":null,"description":"Lower bound of the range.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"max","type":"Int","defaultValue":null,"description":"Upper bound of the range.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Bilangan bulat acak antara min dan maks (inklusif).","example":"delay_steps = random_int(1, 4)\nwait(delay_steps * 100)","aliases":[],"group":"FLOW"},{"key":"function-len","kind":"FUNCTION","parentKey":null,"name":"len","signature":"len(value, /)","description":"Dapatkan ukuran String, daftar/Tuple, atau dict.","behavior":"Dapatkan ukuran String, daftar/Tuple, atau dict.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"String | list | tuple | dict","defaultValue":null,"description":"Value to measure","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Jumlah item/karakter.","example":"name = \"CogniTab\"\ncount = len(name)\ntext(str(count))","aliases":[],"group":"COLLECTION"},{"key":"function-int","kind":"FUNCTION","parentKey":null,"name":"int","signature":"int(value, /)","description":"Berikan nilai ke bilangan bulat (memotong bagian desimal).","behavior":"Berikan nilai ke bilangan bulat (memotong bagian desimal).","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float | Boolean | String","defaultValue":null,"description":"Value to cast","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Nilai bilangan bulat yang dikonversi.","example":"threshold = int(3.9)\ntext(str(threshold))","aliases":[],"group":"TYPE_CAST"},{"key":"function-float","kind":"FUNCTION","parentKey":null,"name":"float","signature":"float(value, /)","description":"Berikan nilai ke angka floating-point.","behavior":"Berikan nilai ke angka floating-point.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float | Boolean | String","defaultValue":null,"description":"Value to cast","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Nilai floating-point yang dikonversi.","example":"score = float(\"0.85\")\nif score > 0.8:\n    text(\"ok\")","aliases":[],"group":"TYPE_CAST"},{"key":"function-str","kind":"FUNCTION","parentKey":null,"name":"str","signature":"str(value, /)","description":"Convert value to string using DSL display format. Point/Region stay compact, two-dimensional lists render as one row list per line, and only rows that are too long or complex expand into vertical multi-line text. Large or deeply nested structured values use a bounded preview with explicit omitted/budget markers; a direct string value remains unchanged.","behavior":"Convert value to string using DSL display format. Point/Region stay compact, two-dimensional lists render as one row list per line, and only rows that are too long or complex expand into vertical multi-line text. Large or deeply nested structured values use a bounded preview with explicit omitted/budget markers; a direct string value remains unchanged.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":null,"description":"Value to convert","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Bentuk teks dari nilai.","example":"total = 12\ntext(\"Total: \" + str(total))","aliases":[],"group":"TYPE_CAST"},{"key":"function-type","kind":"FUNCTION","parentKey":null,"name":"type","signature":"type(value, /)","description":"Mengembalikan string deskriptor kelas seperti Python untuk suatu nilai, misalnya <class 'int'>.","behavior":"Mengembalikan string deskriptor kelas seperti Python untuk suatu nilai, misalnya <class 'int'>.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":null,"description":"Value to inspect","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"Deskriptor tipe seperti Python.","example":"value = 42\nprint(type(value))","aliases":[],"group":"TYPE_CAST"},{"key":"function-print","kind":"FUNCTION","parentKey":null,"name":"print","signature":"print(*values, sep=\" \", end=\"\\n\")","description":"Write values to the overlay script console without blocking execution. Structured values use the same bounded display formatter as str(value), including row-based pretty output for two-dimensional lists, multi-line output for complex nesting, and explicit markers when content is omitted.","behavior":"Write values to the overlay script console without blocking execution. Structured values use the same bounded display formatter as str(value), including row-based pretty output for two-dimensional lists, multi-line output for complex nesting, and explicit markers when content is omitted.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Biaya pemrosesan dan waktu tunggu bergantung pada operasi yang didokumentasikan. Simpan nilai yang dapat berubah dalam alur pemiliknya; berbagi objek sembarang antaralur tidak dijamin aman."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"values","type":"Any","defaultValue":null,"description":"Values to print","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"},{"name":"sep","type":"String","defaultValue":"\" \"","description":"Separator between values","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"end","type":"String","defaultValue":"\"\\n\"","description":"Suffix appended after each print call","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"count = 3\nprint(\"remaining\", count, sep=\": \")\nprint(\"done\", end=\"\")","aliases":[],"group":"FLOW"},{"key":"function-bool","kind":"FUNCTION","parentKey":null,"name":"bool","signature":"bool(value, /)","description":"Ubah nilai menjadi boolean menggunakan aturan skrip kebenaran/kesalahan.","behavior":"Ubah nilai menjadi boolean menggunakan aturan skrip kebenaran/kesalahan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":null,"description":"Value to convert","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"false untuk Tidak Ada/0/kosong; benar sebaliknya.","example":"enabled = bool(1)\nif enabled:\n    text(\"enabled\")","aliases":[],"group":"TYPE_CAST"},{"key":"function-abs","kind":"FUNCTION","parentKey":null,"name":"abs","signature":"abs(value, /)","description":"Kembalikan nilai absolut.","behavior":"Kembalikan nilai absolut.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Nilai numerik mutlak.","example":"delta = abs(-12.5)\ntext(str(delta))","aliases":[],"group":"MATH"},{"key":"function-sum","kind":"FUNCTION","parentKey":null,"name":"sum","signature":"sum(iterable, /, start=0)","description":"Mengembalikan jumlah angka dalam iterable, dengan nilai awal start jika diinginkan. Tanda kurung tersendiri pada generator expression hanya boleh dihilangkan jika generator merupakan satu-satunya argumen dalam pemanggilan fungsi atau metode; jika ada argumen lain atau koma di akhir, generator harus diapit tanda kurung.","behavior":"Mengembalikan jumlah angka dalam iterable, dengan nilai awal start jika diinginkan. Tanda kurung tersendiri pada generator expression hanya boleh dihilangkan jika generator merupakan satu-satunya argumen dalam pemanggilan fungsi atau metode; jika ada argumen lain atau koma di akhir, generator harus diapit tanda kurung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"list | tuple | set | generator","defaultValue":null,"description":"Iterable containing numeric values.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Number","defaultValue":"0","description":"Initial value added before iterable items.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"Nilai numerik total.","example":"# Jumlahkan nilai yang dihasilkan generator\nvalues = [1, 2, 3]\ntotal = sum(value * 2 for value in values)\nwith_start = sum((value * 2 for value in values), start=10)\ntext(str(total))\ntext(str(with_start))","aliases":[],"group":"MATH"},{"key":"function-min","kind":"FUNCTION","parentKey":null,"name":"min","signature":"min(iterable, /, *, key=None) | min(iterable, /, *, default, key=None) | min(arg1, arg2, /, *args, key=None)","description":"Mengembalikan item terkecil dari satu iterable atau argumen terkecil dari dua argumen atau lebih. kunci dapat menghitung nilai yang digunakan untuk pemesanan; ikatan menjaga item pertama yang ditemui.","behavior":"Mengembalikan item terkecil dari satu iterable atau argumen terkecil dari dua argumen atau lebih. kunci dapat menghitung nilai yang digunakan untuk pemesanan; ikatan menjaga item pertama yang ditemui.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Operasi memproses nilai dalam alur pemanggil. Callable key juga berjalan di sana dan dapat menunggu atau menimbulkan efek samping; ini tidak berarti eksekusi asinkron."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"Single iterable input. Dictionaries compare keys.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"args","type":"Any","defaultValue":null,"description":"Additional positional values when passing two or more arguments.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"variadic"},{"name":"default","type":"Any","defaultValue":"-","description":"Value returned when the single iterable is empty. Only valid with one iterable argument.","suggestAsNamedArg":true,"requirement":"overload-dependent","callingMode":"keyword-only"},{"name":"key","type":"Callable?","defaultValue":"None","description":"One-argument callable used to compute comparison keys.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Any","returnDescription":"Item terkecil asli, atau default ketika iterable kosong disediakan dengan default=.","example":"# Pilih skor terendah, dengan fallback aman saat list kosong\nbest = min([0.9, 0.7, 0.85])\nfallback = min([], default=\"none\")\nclosest = min([12, -5, 7], key=lambda value: abs(value))\ntext(str(closest))","aliases":[],"group":"MATH"},{"key":"function-max","kind":"FUNCTION","parentKey":null,"name":"max","signature":"max(iterable, /, *, key=None) | max(iterable, /, *, default, key=None) | max(arg1, arg2, /, *args, key=None)","description":"Mengembalikan item terbesar dari satu iterable atau argumen terbesar dari dua argumen atau lebih. kunci dapat menghitung nilai yang digunakan untuk pemesanan; ikatan menjaga item pertama yang ditemui.","behavior":"Mengembalikan item terbesar dari satu iterable atau argumen terbesar dari dua argumen atau lebih. kunci dapat menghitung nilai yang digunakan untuk pemesanan; ikatan menjaga item pertama yang ditemui.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Operasi memproses nilai dalam alur pemanggil. Callable key juga berjalan di sana dan dapat menunggu atau menimbulkan efek samping; ini tidak berarti eksekusi asinkron."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"Single iterable input. Dictionaries compare keys.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"args","type":"Any","defaultValue":null,"description":"Additional positional values when passing two or more arguments.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"variadic"},{"name":"default","type":"Any","defaultValue":"-","description":"Value returned when the single iterable is empty. Only valid with one iterable argument.","suggestAsNamedArg":true,"requirement":"overload-dependent","callingMode":"keyword-only"},{"name":"key","type":"Callable?","defaultValue":"None","description":"One-argument callable used to compute comparison keys.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Any","returnDescription":"Item asli terbesar, atau default ketika iterable kosong disediakan dengan default=.","example":"# Pilih skor tertinggi, dengan fallback aman saat list kosong\npeak = max([0.9, 0.7, 0.85])\nfallback = max([], default=\"none\")\nlongest = max([\"a\", \"team\", \"go\"], key=lambda value: len(value))\ntext(longest)","aliases":[],"group":"MATH"},{"key":"function-sorted","kind":"FUNCTION","parentKey":null,"name":"sorted","signature":"sorted(iterable, /, *, key=None, reverse=False)","description":"Kembalikan daftar baru yang berisi semua item dari iterable dalam urutan yang diurutkan. kunci dapat menghitung kunci perbandingan; reverse=True mengurutkan secara menurun sambil menjaga item dengan kunci yang sama tetap stabil.","behavior":"Kembalikan daftar baru yang berisi semua item dari iterable dalam urutan yang diurutkan. kunci dapat menghitung kunci perbandingan; reverse=True mengurutkan secara menurun sambil menjaga item dengan kunci yang sama tetap stabil.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Operasi memproses nilai dalam alur pemanggil. Callable key juga berjalan di sana dan dapat menunggu atau menimbulkan efek samping; ini tidak berarti eksekusi asinkron."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict | set","defaultValue":null,"description":"Iterable input. Dictionaries sort keys.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"key","type":"Callable?","defaultValue":"None","description":"One-argument callable used to compute comparison keys.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"reverse","type":"Boolean","defaultValue":"False","description":"Sort descending when True.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"list","returnDescription":"Daftar terurut baru. Nilai input tidak diubah.","example":"values = sorted([3, 1, 2])\ntext(str(values))","aliases":[],"group":"COLLECTION"},{"key":"function-round","kind":"FUNCTION","parentKey":null,"name":"round","signature":"round(value, digits=0, /)","description":"Membulatkan nilai ke sejumlah digit desimal tertentu.","behavior":"Membulatkan nilai ke sejumlah digit desimal tertentu.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"digits","type":"Int","defaultValue":"0","description":"Decimal digits to keep","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Nilai numerik yang dibulatkan.","example":"ratio = round(0.87654, 2)\ntext(str(ratio))","aliases":[],"group":"MATH"},{"key":"function-sqrt","kind":"FUNCTION","parentKey":null,"name":"sqrt","signature":"sqrt(value, /)","description":"Mengembalikan akar kuadrat dari nilai non-negatif.","behavior":"Mengembalikan akar kuadrat dari nilai non-negatif.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number (>= 0)","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Nilai akar kuadrat.","example":"distance = sqrt(144)\ntext(str(distance))","aliases":[],"group":"MATH"},{"key":"function-pow","kind":"FUNCTION","parentKey":null,"name":"pow","signature":"pow(base, exponent, /)","description":"Naikkan basis ke eksponen.","behavior":"Naikkan basis ke eksponen.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"base","type":"Int | Float","defaultValue":null,"description":"Base value","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"exponent","type":"Int | Float","defaultValue":null,"description":"Exponent value","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Hasil kekuatan.","example":"boost = pow(1.2, 3)\ntext(str(boost))","aliases":[],"group":"MATH"},{"key":"function-floor","kind":"FUNCTION","parentKey":null,"name":"floor","signature":"floor(value, /)","description":"Kembalikan bilangan bulat terbesar tidak lebih besar dari nilai.","behavior":"Kembalikan bilangan bulat terbesar tidak lebih besar dari nilai.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Nilai dasar.","example":"bucket = floor(9.99)\ntext(str(bucket))","aliases":[],"group":"MATH"},{"key":"function-ceil","kind":"FUNCTION","parentKey":null,"name":"ceil","signature":"ceil(value, /)","description":"Kembalikan bilangan bulat terkecil tidak lebih kecil dari nilai.","behavior":"Kembalikan bilangan bulat terkecil tidak lebih kecil dari nilai.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Nilai plafon.","example":"bucket = ceil(9.01)\ntext(str(bucket))","aliases":[],"group":"MATH"},{"key":"function-sin","kind":"FUNCTION","parentKey":null,"name":"sin","signature":"sin(value, /)","description":"Mengembalikan nilai sinus dalam radian.","behavior":"Mengembalikan nilai sinus dalam radian.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Angle in radians","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Hasil sinus.","example":"wave = sin(0)\ntext(str(wave))","aliases":[],"group":"MATH"},{"key":"function-cos","kind":"FUNCTION","parentKey":null,"name":"cos","signature":"cos(value, /)","description":"Mengembalikan kosinus nilai dalam radian.","behavior":"Mengembalikan kosinus nilai dalam radian.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Angle in radians","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Hasil kosinus.","example":"wave = cos(0)\ntext(str(wave))","aliases":[],"group":"MATH"},{"key":"function-tan","kind":"FUNCTION","parentKey":null,"name":"tan","signature":"tan(value, /)","description":"Mengembalikan tangen nilai dalam radian.","behavior":"Mengembalikan tangen nilai dalam radian.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Angle in radians","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Hasil singgung.","example":"wave = tan(0)\ntext(str(wave))","aliases":[],"group":"MATH"},{"key":"function-log","kind":"FUNCTION","parentKey":null,"name":"log","signature":"log(value, base=None, /)","description":"Kembalikan logaritma nilai. Menggunakan log natural ketika basis dihilangkan.","behavior":"Kembalikan logaritma nilai. Menggunakan log natural ketika basis dihilangkan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input value (> 0)","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"base","type":"Int | Float","defaultValue":null,"description":"Optional base (> 0 and != 1)","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Hasil logaritma.","example":"bits = log(8, 2)\ntext(str(bits))","aliases":[],"group":"MATH"},{"key":"function-clamp","kind":"FUNCTION","parentKey":null,"name":"clamp","signature":"clamp(value, min, max, /)","description":"Jepit nilai ke dalam rentang min -> maks.","behavior":"Jepit nilai ke dalam rentang min -> maks.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Operasi nilai berjalan dalam alur pemanggil tanpa sengaja menunggu tangkapan layar, gestur selesai, atau masukan pengguna. Buat wadah dan builder yang dapat berubah secara terpisah dalam setiap alur; isolasi bukan jaminan sinkronisasi objek bersama."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float","defaultValue":null,"description":"Input value","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"min","type":"Int | Float","defaultValue":null,"description":"Lower bound","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"max","type":"Int | Float","defaultValue":null,"description":"Upper bound","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Float","returnDescription":"Nilai numerik terjepit.","example":"safe = clamp(135, 0, 100)\ntext(str(safe))","aliases":[],"group":"MATH"}]}}