{"data":{"version":"v2.107","locale":"id","availableLocales":["en","vi","th","id","fil"],"updatedAt":"2026-11-13T08:53:59.804Z","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","any","all","globals","len","int","float","str","type","isinstance","hasattr","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":"Alur menjalankan baris berurutan. “Blocking” berarti baris berikutnya menunggu, bukan aplikasi membeku. Flow.start() menjalankan alur lain bersamaan; parallel=True hanya mengantrekan sentuhan.","example":null},{"id":"flows","title":"Alur latar","body":"Flow.start() mengembalikan Int positif saat alur bernama siap menerima pesan; maksimal dua alur latar bersamaan. send() menyalin pesan berurutan; receive() menunggu, poll() memeriksa segera. Jeda menyimpan pesan; stop/selesai membuangnya. running() mencakup alur dijeda. Flow.stop(name) menghentikan alur latar pemilik; alur lain lanjut dan namanya tetap dicadangkan hingga pembersihan selesai. Grup bersarang bernama memakai pesan dan target stop pemiliknya; alur utama tidak dapat dihentikan begitu dan tidak punya nama otomatis. Makro menunggu pekerja: hentikan pekerja tanpa akhir secara eksplisit. Pause/Resume utama berlaku untuk semua; Resume global menghapus jeda individual. Kontrol latar menyediakan Pause/Resume, tanpa Stop. Start tidak valid/duplikat, kesalahan alur, Stop utama atau System.stop() menghentikan seluruh makro.","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":"Pisahkan objek yang dapat diubah tiap alur. Storage melindungi tiap operasi, termasuk perubahan dalam koleksi, tetapi alur lain dapat menulis di antara get() dan set(). Gunakan satu penulis agar pembaruan tidak tertimpa. Tangkapan layar, pemakaian ulang gambar dan pengaturan audio dibagikan. Tukar salinan pesan lewat Flow.send(), receive() dan poll().","example":null},{"id":"touches","title":"Sentuhan dalam antrean","body":"parallel=True mengantrekan sentuhan tanpa menunggu selesai; delay_before, delay_after tetap menunggu di luar collect. Touch.collect() mengumpulkan, Touch.send() mengirim, dan Touch.wait() menunggu. Gestur antaralur dapat saling membatalkan pada layar bersama. 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. Satu pemeriksaan tetap memerlukan waktu; laju pengulangan 1–60 kali/detik. Dialog MacroPanel menunggu, satu per satu. show(mode=\"floating\") lanjut dengan satu panel mengambang per proses; baca kontrol dengan values(), tutup dengan close(). OverlayText.off_all() hanya menghapus overlay alur ini; pembaruan tampilan dapat menunggu.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Cari bagian yang paling mirip sample dalam audio ini dan kembalikan skor kemiripannya. Keheningan bukan kecocokan; bagian suara yang hilang menurunkan skor. Sampel yang lebih panjang dari audio ini menyebabkan error. Tidak mengenali ucapan atau mengoreksi kecepatan maupun nada. Pilih ambang dengan rekaman terpisah dan periksa lagi setelah pembaruan pencocok.","behavior":"Cari bagian yang paling mirip sample dalam audio ini dan kembalikan skor kemiripannya. Keheningan bukan kecocokan; bagian suara yang hilang menurunkan skor. Sampel yang lebih panjang dari audio ini menyebabkan error. Tidak mengenali ucapan atau mengoreksi kecepatan maupun nada. Pilih ambang dengan rekaman terpisah dan periksa lagi setelah pembaruan pencocok.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Tunggu sampel ini dalam audio baru lalu kembalikan AudioMatch yang memenuhi ambang, atau None jika jendela rekaman berakhir tanpa kecocokan. Hanya audio yang diterima setelah panggilan dimulai yang dicari; pengenalan tidak dijamin.\nMulai mendengarkan bila perlu dengan syarat yang sama seperti Audio.start(), dan terus mendengarkan hingga Audio.stop() atau makro selesai. Pemrosesan dapat selesai setelah timeout_ms. Nilai 0 mengembalikan None tanpa memulai perekaman.\nPause makro membuang audio tertunda dan menjeda waktu tunggu; Resume mencari audio baru. Perekaman terputus, data meluap, atau audio rusak menyebabkan error, bukan None.","behavior":"Tunggu sampel ini dalam audio baru lalu kembalikan AudioMatch yang memenuhi ambang, atau None jika jendela rekaman berakhir tanpa kecocokan. Hanya audio yang diterima setelah panggilan dimulai yang dicari; pengenalan tidak dijamin.\nMulai mendengarkan bila perlu dengan syarat yang sama seperti Audio.start(), dan terus mendengarkan hingga Audio.stop() atau makro selesai. Pemrosesan dapat selesai setelah timeout_ms. Nilai 0 mengembalikan None tanpa memulai perekaman.\nPause makro membuang audio tertunda dan menjeda waktu tunggu; Resume mencari audio baru. Perekaman terputus, data meluap, atau audio rusak menyebabkan error, bukan None.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"timeout_ms","type":"Number (0..2147483647)","defaultValue":null,"description":"Durasi bilangan bulat wajib dari 0 sampai 2147483647 milidetik. Waktu jeda makro tidak dihitung. Jendela rekaman bersifat perkiraan; pemrosesan dapat selesai lebih lambat.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Posisi layar dalam piksel untuk klik, usap, dan penanda. Scale dan anchor menyesuaikan posisi ke ukuran layar lain; posisi akhir dibatasi di dalam layar. Baca kedua koordinat dengan x, y = point.","behavior":"Posisi layar dalam piksel untuk klik, usap, dan penanda. Scale dan anchor menyesuaikan posisi ke ukuran layar lain; posisi akhir dibatasi di dalam layar. Baca kedua koordinat dengan x, y = point.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Cara menyesuaikan koordinat dari layar sumber makro: fixed mempertahankan piksel; auto menskalakan X menurut lebar dan Y menurut tinggi; width atau height menskalakan kedua sumbu menurut dimensi itu. Koordinat non-fixed atau dengan anchor juga mengikuti rotasi layar dan pemetaan area aplikasi makro.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Posisi acuan untuk menyesuaikan koordinat: none (kiri atas), center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right. auto memilih tepi atau tengah terdekat.","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":"Cara menyesuaikan koordinat dari layar sumber makro: fixed mempertahankan piksel; auto menskalakan X menurut lebar dan Y menurut tinggi; width atau height menskalakan kedua sumbu menurut dimensi itu. Koordinat non-fixed atau dengan anchor juga mengikuti rotasi layar dan pemetaan area aplikasi makro.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"Posisi acuan untuk menyesuaikan koordinat: none (kiri atas), center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right. auto memilih tepi atau tengah terdekat.","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-distance-to","kind":"METHOD","parentKey":"class-point","name":"distance_to","signature":"point.distance_to(other)","description":"Mengembalikan jarak Euclidean antara koordinat tersimpan yang terbatas dari dua Point. Gunakan ruang koordinat yang sama; tanpa penskalaan atau pemotongan layar.","behavior":"Mengembalikan jarak Euclidean antara koordinat tersimpan yang terbatas dari dua Point. Gunakan ruang koordinat yang sama; tanpa penskalaan atau pemotongan layar.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Point","defaultValue":null,"description":"Titik lainnya.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"Jarak terbatas; koordinat atau jarak yang tidak terbatas menimbulkan error.","example":"# Ukur jarak antara dua titik\nprint(Point(0, 0).distance_to(Point(3, 4)))","aliases":[],"group":"FLOW"},{"key":"class-point-method-offset","kind":"METHOD","parentKey":"class-point","name":"offset","signature":"point.offset(dx, dy, scale=None)","description":"Mengembalikan Point baru yang digeser sebesar dx dan dy setelah titik ini disesuaikan ke layar saat ini. Skala pergeseran memakai ukuran layar penuh, dengan X tetap horizontal dan Y vertikal. Point asli tidak berubah.","behavior":"Mengembalikan Point baru yang digeser sebesar dx dan dy setelah titik ini disesuaikan ke layar saat ini. Skala pergeseran memakai ukuran layar penuh, dengan X tetap horizontal dan Y vertikal. Point asli tidak berubah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"dx","type":"Int","defaultValue":null,"description":"Pergeseran horizontal dalam piksel bulat: positif ke kanan, negatif ke kiri. Pecahan ditolak.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"dy","type":"Int","defaultValue":null,"description":"Pergeseran vertikal dalam piksel bulat: positif ke bawah, negatif ke atas. Pecahan ditolak.","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":"Point baru di dalam layar saat ini, dengan scale FIXED_PIXEL dan anchor 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":"Tandai titik ini dengan bingkai persegi. Pemanggilan ulang pada Point yang sama mengganti bingkainya. Kembali sebelum gambar selesai; hanya pembaruan terakhir sebelum penyegaran layar berikutnya yang ditampilkan.","behavior":"Tandai titik ini dengan bingkai persegi. Pemanggilan ulang pada Point yang sama mengganti bingkainya. Kembali sebelum gambar selesai; hanya pembaruan terakhir sebelum penyegaran layar berikutnya yang ditampilkan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Ketebalan bingkai dalam dp; nilai di bawah 1 menjadi 1.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Lebar dan tinggi persegi dalam piksel; nilai di bawah 1 menjadi 1.","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":"Hapus bingkai yang dibuat oleh Point ini.","behavior":"Hapus bingkai yang dibuat oleh Point ini.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Posisi dan pengaturan gerakan untuk satu langkah usapan. Berikan daftar minimal dua objek SwipePoint ke swipe([...]) untuk menggerakkan satu jari melalui posisi tersebut.","behavior":"Posisi dan pengaturan gerakan untuk satu langkah usapan. Berikan daftar minimal dua objek SwipePoint ke swipe([...]) untuk menggerakkan satu jari melalui posisi tersebut.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["point","speed","delay_before","random","humanized","scale","anchor"],"fieldDocs":[{"name":"point","type":"Point","defaultValue":null,"description":"Posisi usapan dalam piksel, beserta pengaturan scale dan anchor.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"speed","type":"String","defaultValue":"NORMAL","description":"Kecepatan gerakan dari titik ini ke titik berikutnya: VERY_SLOW, SLOW, NORMAL, FAST, VERY_FAST.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Jeda dalam milidetik; nilai negatif menjadi 0. Dengan parallel=False, tunggu sebelum mulai di titik pertama atau setelah mencapai titik berikutnya. Usapan paralel hanya memakai jeda titik pertama.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"random","type":"Number","defaultValue":"10","description":"Pergeseran acak maksimum dalam piksel pada setiap sumbu; 0 memakai posisi tepat. Nilai negatif menjadi 0.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"humanized","type":"Boolean","defaultValue":"False","description":"Gunakan jalur melengkung untuk seluruh usapan jika ada SwipePoint dengan humanized=True.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"scale","type":"String","defaultValue":"fixed","description":"Penskalaan koordinat seperti Point: fixed, auto, width, height. Mewarisi dari point jika tidak diisi.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Posisi acuan seperti Point. Mewarisi dari point jika tidak diisi; tuple dimulai dengan none.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"point","type":"Point | tuple[Number, Number]","defaultValue":null,"description":"Point atau tuple (x, y) dalam piksel. Mempertahankan scale dan anchor Point kecuali diganti secara eksplisit di sini.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"speed","type":"String","defaultValue":"NORMAL","description":"Kecepatan gerakan dari titik ini ke titik berikutnya: VERY_SLOW, SLOW, NORMAL, FAST, VERY_FAST.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Jeda dalam milidetik; nilai negatif menjadi 0. Dengan parallel=False, tunggu sebelum mulai di titik pertama atau setelah mencapai titik berikutnya. Usapan paralel hanya memakai jeda titik pertama.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"random","type":"Number","defaultValue":"10","description":"Pergeseran acak maksimum dalam piksel pada setiap sumbu; 0 memakai posisi tepat. Nilai negatif menjadi 0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"humanized","type":"Boolean","defaultValue":"False","description":"Gunakan jalur melengkung untuk seluruh usapan jika ada SwipePoint dengan humanized=True.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"scale","type":"String","defaultValue":"fixed","description":"Penskalaan koordinat seperti Point: fixed, auto, width, height. Mewarisi dari point jika tidak diisi.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"Posisi acuan seperti Point. Mewarisi dari point jika tidak diisi; tuple dimulai dengan none.","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":"Kelola klik dan usap paralel dari skrip atau aksi makro: kelompokkan, lihat progres, tunggu, atau batalkan. Dalam skrip, gunakan click(..., parallel=True) atau swipe(..., parallel=True). Layanan Aksesibilitas CogniTab harus aktif untuk mengirim gerakan.","behavior":"Kelola klik dan usap paralel dari skrip atau aksi makro: kelompokkan, lihat progres, tunggu, atau batalkan. Dalam skrip, gunakan click(..., parallel=True) atau swipe(..., parallel=True). Layanan Aksesibilitas CogniTab harus aktif untuk mengirim gerakan.","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"parallel=True mengantrekan sentuhan; delay_before, delay_after tetap menunggu di luar collect. Touch.collect() mengumpulkan, send() mengirim, dan wait() menunggu selesai. Sentuhan antaralur dapat saling mengganggu."},"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":"Tahan klik/usap skrip berikutnya dengan parallel=True hingga Touch.send() agar dapat berjalan bersama. Panggilan lain tidak terpengaruh. Tanpa pengumpulan, panggilan paralel langsung dikirim. Panggil Touch.send() sebelum skrip berakhir; gerakan yang belum dikirim menimbulkan error.","behavior":"Tahan klik/usap skrip berikutnya dengan parallel=True hingga Touch.send() agar dapat berjalan bersama. Panggilan lain tidak terpengaruh. Tanpa pengumpulan, panggilan paralel langsung dikirim. Panggil Touch.send() sebelum skrip berakhir; gerakan yang belum dikirim menimbulkan error.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"Kembali sebelum gestur selesai. Sentuhan terkumpul baru berjalan setelah Touch.send(). Status menggambarkan saat pemeriksaan dan dapat langsung 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":"Kirim gerakan yang terkumpul bersama lalu akhiri pengumpulan. Mengembalikan ID numerik sesuai urutan pengumpulan, atau daftar kosong jika tidak ada. Lebih dari 10 gerakan menimbulkan error. Pengiriman tidak menunggu selesai; gunakan Touch.wait().","behavior":"Kirim gerakan yang terkumpul bersama lalu akhiri pengumpulan. Mengembalikan ID numerik sesuai urutan pengumpulan, atau daftar kosong jika tidak ada. Lebih dari 10 gerakan menimbulkan error. Pengiriman tidak menunggu selesai; gunakan Touch.wait().","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"Kembali sebelum gestur selesai. Sentuhan terkumpul baru berjalan setelah Touch.send(). Status menggambarkan saat pemeriksaan dan dapat langsung 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":"Mengembalikan status gerakan yang telah dikirim dan menunggu dimulai. Gerakan yang ditahan Touch.collect() belum termasuk hingga Touch.send().","behavior":"Mengembalikan status gerakan yang telah dikirim dan menunggu dimulai. Gerakan yang ditahan Touch.collect() belum termasuk hingga Touch.send().","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"Kembali sebelum gestur selesai. Sentuhan terkumpul baru berjalan setelah Touch.send(). Status menggambarkan saat pemeriksaan dan dapat langsung 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":"Mengembalikan status gerakan yang sedang berjalan.","behavior":"Mengembalikan status gerakan yang sedang berjalan.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"Kembali sebelum gestur selesai. Sentuhan terkumpul baru berjalan setelah Touch.send(). Status menggambarkan saat pemeriksaan dan dapat langsung 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":"Mengembalikan status gerakan antre dan aktif serta maksimal 64 status yang baru selesai. Gerakan yang belum dikirim lewat Touch.send() tidak disertakan.","behavior":"Mengembalikan status gerakan antre dan aktif serta maksimal 64 status yang baru selesai. Gerakan yang belum dikirim lewat Touch.send() tidak disertakan.","execution":{"blocking":"no","threadSafety":"limited","parallel":"conditional","details":"Kembali sebelum gestur selesai. Sentuhan terkumpul baru berjalan setelah Touch.send(). Status menggambarkan saat pemeriksaan dan dapat langsung 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":"Tunggu gerakan terkirim dengan ID numerik ini lalu kembalikan TouchState, atau None jika ID tidak dikenal atau tidak disimpan lagi. Dengan id=None, tunggu semua gerakan antre/aktif lalu kembalikan status yang masih disimpan, termasuk yang baru selesai. Kirim gerakan yang terkumpul terlebih dahulu.","behavior":"Tunggu gerakan terkirim dengan ID numerik ini lalu kembalikan TouchState, atau None jika ID tidak dikenal atau tidak disimpan lagi. Dengan id=None, tunggu semua gerakan antre/aktif lalu kembalikan status yang masih disimpan, termasuk yang baru selesai. Kirim gerakan yang terkumpul terlebih dahulu.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu durasi atau sentuhan selesai. Alur lain dapat lanjut; jeda dan stop tetap berlaku."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"TouchState | list[TouchState] | 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(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":"Batalkan gerakan terkirim yang antre/aktif berdasarkan ID numerik; kembalikan True jika diterima, selain itu False. Dengan id=None, batalkan semua gerakan antre/aktif dan kembalikan jumlah yang diterima. Membatalkan gerakan aktif memerlukan Android 8.0+ dan menimbulkan error di Android 7.x. Tidak membatalkan gerakan yang masih ditahan Touch.collect().","behavior":"Batalkan gerakan terkirim yang antre/aktif berdasarkan ID numerik; kembalikan True jika diterima, selain itu False. Dengan id=None, batalkan semua gerakan antre/aktif dan kembalikan jumlah yang diterima. Membatalkan gerakan aktif memerlukan Android 8.0+ dan menimbulkan error di Android 7.x. Tidak membatalkan gerakan yang masih ditahan Touch.collect().","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"parallel=True mengantrekan sentuhan; delay_before, delay_after tetap menunggu di luar collect. Touch.collect() mengumpulkan, send() mengirim, dan wait() menunggu selesai. Sentuhan antaralur dapat saling mengganggu."},"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":"Status klik atau usap paralel saat ditanyakan. Diperoleh dari metode Touch; tidak diperbarui otomatis.","behavior":"Status klik atau usap paralel saat ditanyakan. Diperoleh dari metode Touch; tidak diperbarui otomatis.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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: menunggu; active: berjalan; completed: berhasil selesai; cancelled: dibatalkan; failed: tidak dapat selesai.","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":"Urutan aksi makro yang mengirim gerakan ini.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"remaining_repeats","type":"Number","defaultValue":"0","description":"Pengulangan yang belum selesai.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"completed_repeats","type":"Number","defaultValue":"0","description":"Pengulangan yang sudah selesai.","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":"Pengaturan pencarian gambar templat di dalam Region. Berikan objek ini sebagai scale_param Region; pengaturan ini tidak mengubah koordinat area.","behavior":"Pengaturan pencarian gambar templat di dalam Region. Berikan objek ini sebagai scale_param Region; pengaturan ini tidak mengubah koordinat area.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Coba ukuran templat di sekitar hasil template_scale. Rentang menyesuaikan ukuran/kepadatan layar dan dapat meluas dari 0.70x hingga 1.30x. Tidak berpengaruh dengan template_scale=\"NONE\".","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"cache_scale","type":"Boolean","defaultValue":"True","description":"Ingat ukuran auto_scale yang berhasil untuk pencarian berikutnya dengan pengaturan yang sama. Hanya berlaku saat auto_scale=True.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"template_scale","type":"String","defaultValue":"SHORT_EDGE","description":"Cara mengubah ukuran templat untuk perangkat ini: SHORT_EDGE memakai sisi layar pendek; LONG_EDGE sisi panjang; DPI kepadatan piksel; SMALLEST_WIDTH_DP sisi pendek dalam dp. NONE mempertahankan ukuran gambar.","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":"Coba ukuran templat di sekitar hasil template_scale. Rentang menyesuaikan ukuran/kepadatan layar dan dapat meluas dari 0.70x hingga 1.30x. Tidak berpengaruh dengan template_scale=\"NONE\".","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"cache_scale","type":"Boolean","defaultValue":"True","description":"Ingat ukuran auto_scale yang berhasil untuk pencarian berikutnya dengan pengaturan yang sama. Hanya berlaku saat auto_scale=True.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"template_scale","type":"String","defaultValue":"SHORT_EDGE","description":"Cara mengubah ukuran templat untuk perangkat ini: SHORT_EDGE memakai sisi layar pendek; LONG_EDGE sisi panjang; DPI kepadatan piksel; SMALLEST_WIDTH_DP sisi pendek dalam dp. NONE mempertahankan ukuran gambar.","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":"Area layar berbentuk persegi panjang untuk mencari gambar atau warna, mengambil gambar, atau menggambar bingkai. Koordinat memakai piksel pada sumbu horizontal/vertikal saat ini; setelah penskalaan dan pergeseran, hanya bagian di dalam layar yang digunakan. Baca ukurannya dengan x, y, width, height = region.","behavior":"Area layar berbentuk persegi panjang untuk mencari gambar atau warna, mengambil gambar, atau menggambar bingkai. Koordinat memakai piksel pada sumbu horizontal/vertikal saat ini; setelah penskalaan dan pergeseran, hanya bagian di dalam layar yang digunakan. Baca ukurannya dengan x, y, width, height = region.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Membuat atau menghitung area layar tanpa tangkapan atau pengenalan. Pisahkan objek Region yang dapat diubah untuk tiap 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":"Cara menyesuaikan koordinat antarlayar penuh: fixed mempertahankan piksel; auto menskalakan X menurut lebar dan Y menurut tinggi; width atau height menskalakan kedua sumbu menurut dimensi itu. Memakai ukuran layar sumber makro, tanpa memutar sumbu atau memakai ukuran jendela aplikasi.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"anchor","type":"String","defaultValue":"none","description":"Posisi acuan untuk menyesuaikan koordinat: none (kiri atas), center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right. auto memilih tepi atau tengah terdekat.","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":"Cara menyesuaikan koordinat antarlayar penuh: fixed mempertahankan piksel; auto menskalakan X menurut lebar dan Y menurut tinggi; width atau height menskalakan kedua sumbu menurut dimensi itu. Memakai ukuran layar sumber makro, tanpa memutar sumbu atau memakai ukuran jendela aplikasi.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"anchor","type":"String","defaultValue":"none","description":"Posisi acuan untuk menyesuaikan koordinat: none (kiri atas), center, top, bottom, left, right, top_left, top_right, bottom_left, bottom_right. auto memilih tepi atau tengah terdekat.","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-from-center","kind":"STATIC_METHOD","parentKey":"class-region","name":"from_center","signature":"Region.from_center(cx, cy, width, height)","description":"Membuat Region fixed tanpa anchor dari koordinat pusat terbatas dan dimensi positif terbatas. Koordinat pecahan dipertahankan.","behavior":"Membuat Region fixed tanpa anchor dari koordinat pusat terbatas dan dimensi positif terbatas. Koordinat pecahan dipertahankan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung dari nilai tersimpan tanpa menangkap layar. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"cx","type":"Number","defaultValue":null,"description":"Koordinat X pusat.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"cy","type":"Number","defaultValue":null,"description":"Koordinat Y pusat.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"width","type":"Number","defaultValue":null,"description":"Lebar positif.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"height","type":"Number","defaultValue":null,"description":"Tinggi positif.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Region","returnDescription":"Koordinat dan tepi hasil perhitungan harus terbatas; jika tidak, terjadi error.","example":"# Buat area di sekitar pusat\narea = Region.from_center(100, 200, 50, 30)","aliases":[],"group":"FLOW"},{"key":"class-region-static-method-highlighted","kind":"STATIC_METHOD","parentKey":"class-region","name":"highlighted","signature":"Region.highlighted()","description":"Mengembalikan area layar yang sedang diberi bingkai oleh skrip, termasuk bingkai persegi dari Point.highlight().","behavior":"Mengembalikan area layar yang sedang diberi bingkai oleh skrip, termasuk bingkai persegi dari Point.highlight().","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Region","returnDescription":"Region yang mencakup seluruh layar saat ini dari (0, 0).","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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-intersection","kind":"METHOD","parentKey":"class-region","name":"intersection","signature":"region.intersection(other)","description":"Mengembalikan irisan berluas positif sebagai Region baru, atau None. Tepi yang hanya bersentuhan tidak beririsan. Menggunakan koordinat tersimpan dalam ruang yang sama tanpa menangkap layar, menskalakan, atau memotong; mempertahankan scale, anchor, dan scale_param Region ini tanpa mengubahnya.","behavior":"Mengembalikan irisan berluas positif sebagai Region baru, atau None. Tepi yang hanya bersentuhan tidak beririsan. Menggunakan koordinat tersimpan dalam ruang yang sama tanpa menangkap layar, menskalakan, atau memotong; mempertahankan scale, anchor, dan scale_param Region ini tanpa mengubahnya.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung dari nilai tersimpan tanpa menangkap layar. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Region","defaultValue":null,"description":"Area lainnya.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Region?","returnDescription":"Koordinat dan tepi hasil perhitungan harus terbatas; jika tidak, terjadi error.","example":"# Cari area yang bertumpang tindih\noverlap = Region(0, 0, 100, 100).intersection(Region(50, 50, 100, 100))","aliases":[],"group":"FLOW"},{"key":"class-region-method-intersects","kind":"METHOD","parentKey":"class-region","name":"intersects","signature":"region.intersects(other)","description":"Memeriksa irisan berluas positif dengan koordinat tersimpan dalam ruang yang sama. Tepi yang hanya bersentuhan tidak beririsan; tanpa menangkap layar, menskalakan, atau memotong.","behavior":"Memeriksa irisan berluas positif dengan koordinat tersimpan dalam ruang yang sama. Tepi yang hanya bersentuhan tidak beririsan; tanpa menangkap layar, menskalakan, atau memotong.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung dari nilai tersimpan tanpa menangkap layar. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Region","defaultValue":null,"description":"Area lainnya.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"Koordinat dan tepi hasil perhitungan harus terbatas; jika tidak, terjadi error.","example":"# Periksa apakah dua area bertumpang tindih\nprint(Region(0, 0, 100, 100).intersects(Region(50, 50, 20, 20)))","aliases":[],"group":"FLOW"},{"key":"class-region-method-contains","kind":"METHOD","parentKey":"class-region","name":"contains","signature":"region.contains(point_or_region)","description":"Memeriksa posisi di dalam area memakai koordinat tersimpan dalam ruang yang sama, tanpa menangkap layar, menskalakan, atau memotong. Titik pada tepi kiri dan atas termasuk, sedangkan pada tepi kanan dan bawah tidak. Region boleh berbagi batas; dimensi kosong atau negatif menghasilkan False.","behavior":"Memeriksa posisi di dalam area memakai koordinat tersimpan dalam ruang yang sama, tanpa menangkap layar, menskalakan, atau memotong. Titik pada tepi kiri dan atas termasuk, sedangkan pada tepi kanan dan bawah tidak. Region boleh berbagi batas; dimensi kosong atau negatif menghasilkan False.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung dari nilai tersimpan tanpa menangkap layar. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"point_or_region","type":"Point | Region","defaultValue":null,"description":"Titik atau area yang diperiksa.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"Koordinat dan tepi hasil perhitungan harus terbatas; jika tidak, terjadi error.","example":"# Periksa apakah titik berada di dalam area\nprint(Region(0, 0, 100, 100).contains(Point(10, 10)))","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":"Cari satu kemunculan templat dalam area ini. Ulangi hingga ditemukan atau batas waktu; timeout=0 memindai sekali. Penangkapan layar harus siap. ScreenCapture.cache_on() memakai ulang satu gambar hingga cache_off(); penggunaan ulang otomatis biasanya sampai 100 ms. Gunakan auto_cache_off() untuk gambar terbaru yang tersedia, dengan beban penangkapan lebih besar.","behavior":"Cari satu kemunculan templat dalam area ini. Ulangi hingga ditemukan atau batas waktu; timeout=0 memindai sekali. Penangkapan layar harus siap. ScreenCapture.cache_on() memakai ulang satu gambar hingga cache_off(); penggunaan ulang otomatis biasanya sampai 100 ms. Gunakan auto_cache_off() untuk gambar terbaru yang tersedia, dengan beban penangkapan lebih besar.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Nama templat atau jalur folder relatif tanpa ekstensi gambar dalam makro saat ini, atau objek Template. Nama yang tidak dikenal menimbulkan error.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match dengan found=True jika ditemukan; selain itu found=False setelah pemindaian atau batas waktu. Tidak pernah None.","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":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Nama templat atau jalur folder relatif tanpa ekstensi gambar dalam makro saat ini, atau objek Template. Nama yang tidak dikenal menimbulkan error.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","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":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Nama templat/jalur folder relatif tanpa ekstensi gambar, atau objek Template. Nama yang tidak dikenal menimbulkan error.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Satu Match per templat masukan sesuai urutan, jika ada yang ditemukan; sebagian dapat memiliki found=False. MatchList kosong jika tidak ada yang ditemukan sebelum batas waktu.","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":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Nama templat/jalur folder relatif tanpa ekstensi gambar, atau objek Template. Nama yang tidak dikenal menimbulkan error.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Satu Match berhasil per templat masukan sesuai urutan, atau MatchList kosong jika tidak ada pemindaian yang menemukan semuanya sebelum batas waktu.","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":"Cari satu piksel yang diperiksa dengan warna paling dekat ke target dalam area ini. Selisih setiap kanal merah, hijau, dan biru tidak boleh melebihi tolerance; dipilih titik dengan selisih kanal terbesar yang paling kecil. Ulangi hingga ditemukan atau batas waktu; timeout=0 memindai sekali. Memerlukan penangkapan layar yang siap.","behavior":"Cari satu piksel yang diperiksa dengan warna paling dekat ke target dalam area ini. Selisih setiap kanal merah, hijau, dan biru tidak boleh melebihi tolerance; dipilih titik dengan selisih kanal terbesar yang paling kecil. Ulangi hingga ditemukan atau batas waktu; timeout=0 memindai sekali. Memerlukan penangkapan layar yang siap.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Jarak yang diminta dalam piksel antarposisi yang diperiksa; minimal 1. Nilai lebih kecil memeriksa lebih banyak piksel dan dapat lebih lama. Jarak dapat bertambah otomatis untuk area besar.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match dengan maksimal satu Point di point, atau found=False dan daftar point kosong jika tidak ada piksel yang diperiksa cocok atau penangkapan tidak tersedia.","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":"Cari salah satu warna target dalam area ini dengan aturan toleransi RGB find_color. Kembalikan maksimal satu titik terbaik yang diperiksa per warna yang ditemukan, sesuai urutan masukan. Ulangi hingga ada warna ditemukan atau batas waktu; timeout=0 memindai sekali. Memerlukan penangkapan layar yang siap.","behavior":"Cari salah satu warna target dalam area ini dengan aturan toleransi RGB find_color. Kembalikan maksimal satu titik terbaik yang diperiksa per warna yang ditemukan, sesuai urutan masukan. Ulangi hingga ada warna ditemukan atau batas waktu; timeout=0 memindai sekali. Memerlukan penangkapan layar yang siap.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Jarak yang diminta dalam piksel antarposisi yang diperiksa; minimal 1. Nilai lebih kecil memeriksa lebih banyak piksel dan dapat lebih lama. Jarak dapat bertambah otomatis untuk area besar.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match dengan satu Point terbaik per warna yang ditemukan di point, sesuai urutan masukan. found=False dan daftar point kosong jika tidak ada yang cocok atau penangkapan tidak tersedia.","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":"Cari semua piksel yang diperiksa yang cocok dengan satu warna target memakai aturan toleransi RGB find_color. Daftar atau tuple warna menimbulkan error. Ulangi hingga minimal satu titik ditemukan atau batas waktu; timeout=0 memindai sekali. Memerlukan penangkapan layar yang siap.","behavior":"Cari semua piksel yang diperiksa yang cocok dengan satu warna target memakai aturan toleransi RGB find_color. Daftar atau tuple warna menimbulkan error. Ulangi hingga minimal satu titik ditemukan atau batas waktu; timeout=0 memindai sekali. Memerlukan penangkapan layar yang siap.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"interval","type":"Number","defaultValue":"10","description":"Jarak yang diminta dalam piksel antarposisi yang diperiksa; minimal 1. Nilai lebih kecil memeriksa lebih banyak piksel dan dapat lebih lama. Jarak dapat bertambah otomatis untuk area besar.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match berisi Points yang diperiksa dan cocok di point, dengan warna terdekat lebih dahulu. found=False dan daftar point kosong jika tidak ada yang cocok atau penangkapan tidak tersedia.","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":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Nama templat atau jalur folder relatif tanpa ekstensi gambar dalam makro saat ini, atau objek Template. Nama yang tidak dikenal menimbulkan error.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match terbaru: found=False berarti gambar tidak terlihat; found=True berarti gambar masih terlihat saat penantian berakhir. Tidak pernah None. Memerlukan penangkapan layar yang siap; penangkapan tidak tersedia juga dapat menghasilkan found=False.","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":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Nama templat/jalur folder relatif tanpa ekstensi gambar, atau objek Template. Nama yang tidak dikenal menimbulkan error.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Match terbaru untuk setiap templat masukan sesuai urutan, saat ada yang menghilang atau batas waktu. Periksa setiap nilai found; False berarti gambar itu tidak terlihat. Memerlukan penangkapan layar yang siap; penangkapan tidak tersedia juga dapat menghasilkan found=False.","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":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"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":"Nama templat/jalur folder relatif tanpa ekstensi gambar, atau objek Template. Nama yang tidak dikenal menimbulkan error.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"timeout","type":"Number","defaultValue":"0","description":"Waktu tunggu maksimum dalam milidetik. Tidak diisi, nol, atau negatif memindai sekali. Pemindaian yang sedang berjalan dapat selesai setelah waktu ini.","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":"Pemindaian yang diminta per detik saat menunggu, dibatasi 1-60. Kecepatan nyata bergantung pada waktu pengenalan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Match terbaru untuk setiap templat masukan sesuai urutan, saat gambar menghilang atau batas waktu. Semua nilai found adalah False hanya jika semua gambar tidak terlihat. Memerlukan penangkapan layar yang siap; penangkapan tidak tersedia juga dapat menghasilkan found=False.","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":"Ambil area layar ini sebagai Template. Memerlukan sesi penangkapan layar aktif yang telah disetujui pengguna. Penangkapan tidak tersedia atau area sepenuhnya di luar layar menimbulkan error.","behavior":"Ambil area layar ini sebagai Template. Memerlukan sesi penangkapan layar aktif yang telah disetujui pengguna. Penangkapan tidak tersedia atau area sepenuhnya di luar layar menimbulkan error.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu tangkapan layar bersama dan pengenalan. find* mencari kemunculan; wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; timeout/rate tidak menghapus penantian ini."},"limitations":[],"relatedApis":["class-screencapture","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String?","defaultValue":"None","description":"Nama menyimpan gambar langsung ke makro saat ini; None membuat gambar sementara. Menyimpan gambar bernama tidak diizinkan dalam makro terlindungi.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Template","returnDescription":"Template berisi gambar 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 area layar tanpa tangkapan atau pengenalan. Pisahkan objek Region yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Lebar yang dibuang: 0-1 adalah proporsi lebar saat ini; di atas 1 adalah piksel, maksimal selebar area. Nilai negatif menimbulkan error.","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 area layar tanpa tangkapan atau pengenalan. Pisahkan objek Region yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Lebar yang dibuang: 0-1 adalah proporsi lebar saat ini; di atas 1 adalah piksel, maksimal selebar area. Nilai negatif menimbulkan error.","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 area layar tanpa tangkapan atau pengenalan. Pisahkan objek Region yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Tinggi yang dibuang: 0-1 adalah proporsi tinggi saat ini; di atas 1 adalah piksel, maksimal setinggi area. Nilai negatif menimbulkan error.","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 area layar tanpa tangkapan atau pengenalan. Pisahkan objek Region yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Tinggi yang dibuang: 0-1 adalah proporsi tinggi saat ini; di atas 1 adalah piksel, maksimal setinggi area. Nilai negatif menimbulkan error.","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 area layar tanpa tangkapan atau pengenalan. Pisahkan objek Region yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Total lebar yang dibuang, dibagi sama rata di kedua sisi: 0-1 adalah proporsi, di atas 1 adalah piksel. Maksimal selebar area; nilai negatif menimbulkan error.","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 area layar tanpa tangkapan atau pengenalan. Pisahkan objek Region yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Total tinggi yang dibuang, dibagi sama rata di kedua sisi: 0-1 adalah proporsi, di atas 1 adalah piksel. Maksimal setinggi area; nilai negatif menimbulkan error.","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 area layar tanpa tangkapan atau pengenalan. Pisahkan objek Region yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Number","defaultValue":"0.5","description":"Jumlah yang dibuang dari setiap dimensi: 0-1 adalah proporsi dimensi itu; di atas 1 adalah piksel. Dibagi sama rata di sisi berlawanan, maksimal sebesar setiap dimensi. Nilai negatif menimbulkan error.","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":"Gambar bingkai persegi panjang di sekitar area ini. Pemanggilan ulang pada Region yang sama mengganti bingkainya. Kembali sebelum gambar selesai; hanya pembaruan terakhir sebelum penyegaran layar berikutnya yang ditampilkan.","behavior":"Gambar bingkai persegi panjang di sekitar area ini. Pemanggilan ulang pada Region yang sama mengganti bingkainya. Kembali sebelum gambar selesai; hanya pembaruan terakhir sebelum penyegaran layar berikutnya yang ditampilkan.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Ketebalan bingkai dalam dp; nilai di bawah 1 menjadi 1.","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":"Hapus bingkai yang dibuat oleh Region ini.","behavior":"Hapus bingkai yang dibuat oleh Region ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Gunakan gambar tersimpan sebagai target pengenalan. Anda dapat mengubah ukuran atau memotongnya menjadi Template terpisah, lalu menyimpan hasilnya dengan save_as().","behavior":"Gunakan gambar tersimpan sebagai target pengenalan. Anda dapat mengubah ukuran atau memotongnya menjadi Template terpisah, lalu menyimpan hasilnya dengan save_as().","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["name"],"fieldDocs":[{"name":"name","type":"String?","defaultValue":null,"description":"Nama templat atau jalur folder relatif di makro saat ini; None untuk gambar tanpa nama.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"name":"name","type":"String","defaultValue":null,"description":"Templat tersimpan di makro saat ini, misalnya \"buttons/top/attack\". Nama kosong, tidak ditemukan, atau ambigu menimbulkan error; ini tidak mengambil gambar baru.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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-similarity","kind":"METHOD","parentKey":"class-template","name":"similarity","signature":"template.similarity(other)","description":"Bandingkan pola terang dan gelap keseluruhan dua gambar. Gambar yang tidak terbaca atau berbeda dimensi menimbulkan error. Perbandingan mengabaikan transparansi dan bisa melewatkan perubahan warna, kecerahan, atau detail kecil; 100 tidak berarti piksel identik.","behavior":"Bandingkan pola terang dan gelap keseluruhan dua gambar. Gambar yang tidak terbaca atau berbeda dimensi menimbulkan error. Perbandingan mengabaikan transparansi dan bisa melewatkan perubahan warna, kecerahan, atau detail kecil; 100 tidak berarti piksel identik.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"Template","defaultValue":null,"description":"Template wajib dengan lebar dan tinggi gambar yang sama.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Number","returnDescription":"Kemiripan 0 hingga 100 dengan selisih tiap tingkat 1.5625; semakin tinggi nilainya, semakin mirip pola terang dan gelapnya.","example":"# Bandingkan dua template tersimpan dengan ukuran yang sama.\nbefore = Template(\"before\")\nafter = Template(\"after\")\nscore = before.similarity(after)\nprint(score)","aliases":[],"group":"FLOW"},{"key":"class-template-method-exists","kind":"METHOD","parentKey":"class-template","name":"exists","signature":"template.exists()","description":"Periksa apakah berkas gambar Template ini masih ada. Ini tidak memeriksa apakah gambar dapat dibaca.","behavior":"Periksa apakah berkas gambar Template ini masih ada. Ini tidak memeriksa apakah gambar dapat dibaca.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Ubah ukuran gambar dan kembalikan Template terpisah tanpa mengubah sumber. Gunakan save_as() untuk menyimpannya dengan nama pilihan.","behavior":"Ubah ukuran gambar dan kembalikan Template terpisah tanpa mengubah sumber. Gunakan save_as() untuk menyimpannya dengan nama pilihan.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"scale","type":"Number","defaultValue":null,"description":"Pengali lebar: 1 tetap, 0.5 menjadi setengah, 2 menjadi dua kali. Nilai di bawah 0.01 memakai 0.01. Juga berlaku untuk tinggi jika scale_y tidak diisi.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"scale_y","type":"Number","defaultValue":"scale","description":"Pengali tinggi, minimal 0.01. Jangan diisi untuk mempertahankan proporsi asli.","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":"Potong sebagian gambar dan kembalikan Template terpisah tanpa mengubah sumber. Gunakan save_as() untuk menyimpannya dengan nama pilihan.","behavior":"Potong sebagian gambar dan kembalikan Template terpisah tanpa mengubah sumber. Gunakan save_as() untuk menyimpannya dengan nama pilihan.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"region","type":"Region","defaultValue":null,"description":"Persegi potong dalam piksel gambar, dihitung dari sudut kiri atas gambar, bukan layar. Bagian desimal koordinat dibuang dan koordinat dibatasi ke tepi gambar.","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 gambar di makro saat ini dan kembalikan Template tersimpan. Makro terlindungi tidak dapat menyimpan templat; berkas sumber yang hilang menimbulkan error.","behavior":"Simpan gambar di makro saat ini dan kembalikan Template tersimpan. Makro terlindungi tidak dapat menyimpan templat; berkas sumber yang hilang menimbulkan error.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Nama tidak kosong atau jalur folder relatif, misalnya \"buttons/top/attack\". Gambar yang sudah ada di jalur itu akan diganti.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Baca hasil pencarian pengenalan. Periksa found sebelum mengetuk atau memakai lokasinya; pencarian gambar yang gagal masih bisa memuat lokasi kandidat paling mirip.","behavior":"Baca hasil pencarian pengenalan. Periksa found sebelum mengetuk atau memakai lokasinya; pencarian gambar yang gagal masih bisa memuat lokasi kandidat paling mirip.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Lokasi hasil: Point, daftar Point, atau None. Pencarian warna mengembalikan daftar yang bisa kosong. Periksa found dan bentuk nilainya sebelum membaca koordinat atau mengakses item daftar.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"bounds","type":"Region?","defaultValue":null,"description":"Persegi di sekitar hasil, atau None jika tidak tersedia. Pencarian gambar yang gagal masih bisa menyediakan persegi kandidat paling mirip; periksa found dahulu.","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":"Detail tambahan hasil, atau None. Hasil model dapat memuat class_id, class_name, kolom waktu berakhiran _ms (milidetik), serta input_width/input_height (piksel). Hasil warna dapat memuat target_color, sampled_color, max_channel_delta, match_count, dan matches. Kunci berbeda menurut pencarian; periksa keberadaan kunci sebelum membacanya.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":"# Baca detail opsional dan titik warna dengan aman.\nm = 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\nif info is not None:\n    info_class_id = info.get(\"class_id\")\n    info_class_name = info.get(\"class_name\")\n\ncolor_hit = Region(0, 0, 1080, 1920).find_color(\"#FFFFFF\", tolerance=4)\ncolor_name = color_hit.name\nif color_hit.found and color_hit.point:\n    first_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":"Tandai hasil yang ditemukan di layar. Gambar bounds jika tersedia, atau kotak di sekeliling tiap titik; tidak menggambar jika found=false. Penggambaran dijadwalkan, jadi pemanggilan dapat selesai sebelum bingkai muncul. Hanya pembaruan terbaru yang tertunda untuk objek yang sama yang digambar pada bingkai layar berikutnya.","behavior":"Tandai hasil yang ditemukan di layar. Gambar bounds jika tersedia, atau kotak di sekeliling tiap titik; tidak menggambar jika found=false. Penggambaran dijadwalkan, jadi pemanggilan dapat selesai sebelum bingkai muncul. Hanya pembaruan terbaru yang tertunda untuk objek yang sama yang digambar pada bingkai layar berikutnya.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Lebar garis tepi dalam piksel, minimal 1.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Lebar kotak dalam piksel jika hanya titik yang tersedia, minimal 1.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Waktu sebelum disembunyikan, dalam milidetik. 0 atau nilai negatif mempertahankan sorotan hingga highlight_off() dipanggil.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Match","returnDescription":"Match yang sama, agar Anda dapat melanjutkan pemanggilan metodenya.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Baca beberapa hasil pengenalan sebagai daftar Match. Gunakan len(matches), matches[index], atau perulangan for. Daftar yang tidak kosong dapat memuat hasil gagal, terutama setelah wait_any()/wait_all(); periksa found tiap item.","behavior":"Baca beberapa hasil pengenalan sebagai daftar Match. Gunakan len(matches), matches[index], atau perulangan for. Daftar yang tidak kosong dapat memuat hasil gagal, terutama setelah wait_any()/wait_all(); periksa found tiap item.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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-unique","kind":"METHOD","parentKey":"class-matchlist","name":"unique","signature":"matches.unique(iou_threshold=0.5)","description":"Mengembalikan MatchList baru dengan deteksi duplikat disaring secara greedy per nama saat IoU melebihi ambang. Match yang ditemukan dengan bounds berluas positif diproses menurut confidence menurun, dengan urutan tetap saat nilainya sama. Match gagal, tanpa bounds, atau berluas tidak positif diletakkan di akhir menurut urutan asal tanpa disaring. Bounds atau confidence yang diproses dan tidak terbatas menimbulkan error. Objek Match dan metadata asli dipertahankan tanpa perubahan.","behavior":"Mengembalikan MatchList baru dengan deteksi duplikat disaring secara greedy per nama saat IoU melebihi ambang. Match yang ditemukan dengan bounds berluas positif diproses menurut confidence menurun, dengan urutan tetap saat nilainya sama. Match gagal, tanpa bounds, atau berluas tidak positif diletakkan di akhir menurut urutan asal tanpa disaring. Bounds atau confidence yang diproses dan tidak terbatas menimbulkan error. Objek Match dan metadata asli dipertahankan tanpa perubahan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung dari nilai tersimpan tanpa menangkap layar. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iou_threshold","type":"Number","defaultValue":"0.5","description":"Ambang IoU terbatas dari 0 sampai 1, termasuk kedua batas.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"Match yang ditemukan dan memiliki bounds harus memiliki koordinat dan tepi hasil perhitungan yang terbatas, meskipun luasnya tidak positif.","example":"# Hapus deteksi bertumpang tindih dengan nama sama\nhits = Region.full_screen().find_all([\"enemy\", \"enemy\"], 1000)\nfiltered = hits.unique(iou_threshold=0.5)","aliases":[],"group":"FLOW"},{"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":"Tandai setiap hasil yang ditemukan di layar dengan bounds atau kotak di sekeliling titiknya. Lewati hasil tanpa lokasi. Penggambaran dijadwalkan, jadi pemanggilan dapat selesai sebelum bingkai muncul. Hanya pembaruan terbaru yang tertunda untuk objek yang sama yang digambar pada bingkai layar berikutnya.","behavior":"Tandai setiap hasil yang ditemukan di layar dengan bounds atau kotak di sekeliling titiknya. Lewati hasil tanpa lokasi. Penggambaran dijadwalkan, jadi pemanggilan dapat selesai sebelum bingkai muncul. Hanya pembaruan terbaru yang tertunda untuk objek yang sama yang digambar pada bingkai layar berikutnya.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Lebar garis tepi dalam piksel, minimal 1.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"region_width","type":"Number","defaultValue":"36","description":"Lebar kotak dalam piksel jika hanya titik yang tersedia, minimal 1.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"auto_hide_ms","type":"Number","defaultValue":"0","description":"Waktu sebelum disembunyikan, dalam milidetik. 0 atau nilai negatif mempertahankan sorotan hingga highlight_off() dipanggil.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MatchList","returnDescription":"MatchList yang sama, agar Anda dapat melanjutkan pemanggilan metodenya.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Simpan warna, ambil warna layar, atau bandingkan warna. ARGB berisi opasitas (A), merah (R), hijau (G), dan biru (B); compare(), distance_rgb(), dan delta_e() mengabaikan opasitas.","behavior":"Simpan warna, ambil warna layar, atau bandingkan warna. ARGB berisi opasitas (A), merah (R), hijau (G), dan biru (B); compare(), distance_rgb(), dan delta_e() mengabaikan opasitas.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Opasitas dari 0 (transparan) hingga 255 (sepenuhnya legap).","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":"Ambil warna layar sekali: Point mengembalikan satu Color, Region mengembalikan baris warna, dan list[Point] mengembalikan daftar Color dalam urutan yang sama. Semua titik memakai gambar layar yang sama. Jika tangkapan layar atau sampel tidak tersedia, hasilnya default tanpa mencoba ulang; pilih default yang dapat dibedakan dari warna target.","behavior":"Ambil warna layar sekali: Point mengembalikan satu Color, Region mengembalikan baris warna, dan list[Point] mengembalikan daftar Color dalam urutan yang sama. Semua titik memakai gambar layar yang sama. Jika tangkapan layar atau sampel tidak tersedia, hasilnya default tanpa mencoba ulang; pilih default yang dapat dibedakan dari warna target.","execution":{"blocking":"yes","threadSafety":"serialized","parallel":"conditional","details":"Menunggu tangkapan layar dan pembacaan warna. Pengaturan tangkapan dan pemakaian ulang gambar dibagikan antaralur."},"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":"Jarak antar titik sampel dalam satuan koordinat Region; nilai di bawah 1 memakai 1. Nilai lebih kecil menghasilkan lebih banyak warna. Diabaikan untuk Point dan list[Point].","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":"Warna sesuai bentuk target, dengan sampel yang tidak tersedia diganti default. Untuk Region, baca grid[row][column], dari atas ke bawah dan kiri ke kanan. Daftar titik kosong mengembalikan daftar kosong.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Perbedaan maksimum yang diizinkan per kanal RGB. 0 mensyaratkan kanal sama; 255 menerima semua warna RGB. Nilai negatif memakai 0. Naikkan bertahap memakai sampel layar nyata.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"true jika ketiga kanal RGB berada dalam tolerance; selain itu false.","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":"Ukur gabungan perbedaan merah, hijau, dan biru antara dua warna. Nilai lebih kecil berarti nilai RGB lebih dekat; transparansi diabaikan.","behavior":"Ukur gabungan perbedaan merah, hijau, dan biru antara dua warna. Nilai lebih kecil berarti nilai RGB lebih dekat; transparansi diabaikan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 0 hingga sekitar 441.67; 0 berarti kanal RGB identik. Pilih ambang memakai sampel dari layar Anda.","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":"Perkirakan perbedaan tampilan dua warna memakai CIE76 Delta E, ukuran perbedaan warna. Nilai lebih kecil berarti warna lebih mirip; transparansi diabaikan.","behavior":"Perkirakan perbedaan tampilan dua warna memakai CIE76 Delta E, ukuran perbedaan warna. Nilai lebih kecil berarti warna lebih mirip; transparansi diabaikan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 tidak negatif; 0 berarti kanal RGB identik. Uji ambang di layar Anda sendiri karena kemiripan yang terlihat dapat 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-in-range","kind":"METHOD","parentKey":"class-color","name":"in_range","signature":"color.in_range(min_color, max_color)","description":"Memeriksa apakah setiap kanal RGB berada dalam batas inklusif; alpha diabaikan. Batas bawah yang melebihi batas atas pada kanal mana pun menimbulkan error.","behavior":"Memeriksa apakah setiap kanal RGB berada dalam batas inklusif; alpha diabaikan. Batas bawah yang melebihi batas atas pada kanal mana pun menimbulkan error.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"min_color","type":"Color | String | Number","defaultValue":null,"description":"Batas bawah warna.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"max_color","type":"Color | String | Number","defaultValue":null,"description":"Batas atas warna.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":null,"example":"# Periksa apakah warna berada dalam rentang RGB\nprint(Color(\"#808080\").in_range(\"#606060\", \"#A0A0A0\"))","aliases":[],"group":"FLOW"},{"key":"class-color-method-is-gray","kind":"METHOD","parentKey":"class-color","name":"is_gray","signature":"color.is_gray(spread=15)","description":"Memeriksa apakah max(R, G, B) - min(R, G, B) paling besar sebesar spread; alpha diabaikan.","behavior":"Memeriksa apakah max(R, G, B) - min(R, G, B) paling besar sebesar spread; alpha diabaikan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"spread","type":"Int","defaultValue":"15","description":"Bilangan bulat terbatas dari 0 sampai 255, termasuk kedua batas.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":null,"example":"# Periksa apakah warna hampir abu-abu\nprint(Color(\"#808080\").is_gray())","aliases":[],"group":"FLOW"},{"key":"class-color-method-compare","kind":"METHOD","parentKey":"class-color","name":"compare","signature":"color.compare(other, tolerance=0)","description":"Periksa apakah warna ini dekat dengan warna lain. Perbedaan tiap kanal RGB tidak boleh melebihi tolerance; transparansi diabaikan.","behavior":"Periksa apakah warna ini dekat dengan warna lain. Perbedaan tiap kanal RGB tidak boleh melebihi tolerance; transparansi diabaikan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Perbedaan maksimum yang diizinkan per kanal RGB. 0 mensyaratkan kanal sama; 255 menerima semua warna RGB. Nilai negatif memakai 0. Naikkan bertahap memakai sampel layar nyata.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"true jika ketiga kanal RGB berada dalam tolerance; selain itu false.","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":"Ukur gabungan perbedaan RGB warna ini dengan warna lain, dengan mengabaikan transparansi.","behavior":"Ukur gabungan perbedaan RGB warna ini dengan warna lain, dengan mengabaikan transparansi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 0 hingga sekitar 441.67; 0 berarti kanal RGB identik. Pilih ambang memakai sampel dari layar Anda.","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":"Perkirakan perbedaan tampilan warna ini dengan warna lain memakai CIE76 Delta E, dengan mengabaikan transparansi.","behavior":"Perkirakan perbedaan tampilan warna ini dengan warna lain memakai CIE76 Delta E, dengan mengabaikan transparansi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 tidak negatif; 0 berarti kanal RGB identik. Uji ambang di layar Anda sendiri karena kemiripan yang terlihat dapat 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":"Buat teks di atas aplikasi lain. Panggil show() untuk menampilkan dan menerapkan perubahan berikutnya. Aktifkan pelacakan tekan, seret, atau tahan dengan track(). Baca nilai saat ini lewat state(); text() dan background() adalah metode.","behavior":"Buat teks di atas aplikasi lain. Panggil show() untuk menampilkan dan menerapkan perubahan berikutnya. Aktifkan pelacakan tekan, seret, atau tahan dengan track(). Baca nilai saat ini lewat state(); text() dan background() adalah metode.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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":"Isi teks. Pasangan tag <b>...</b> yang lengkap hanya menebalkan teks di dalamnya, termasuk lintas baris. Tag dan kode entitas lain ditampilkan apa adanya. Jika tag tebal tidak berpasangan, seluruh teks ditampilkan apa adanya. state()[\"text\"] mengembalikan teks asli.","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(\"<b>Status:</b> Ready\", Point(420, 220, scale=\"width\", anchor=\"top\"), background=None)\nbadge.show()","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":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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":"Atur isi teks. Panggil show() untuk memperbarui teks di layar.","behavior":"Atur isi teks. Panggil show() untuk memperbarui teks di layar.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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":"Isi teks. Pasangan tag <b>...</b> yang lengkap hanya menebalkan teks di dalamnya, termasuk lintas baris. Tag dan kode entitas lain ditampilkan apa adanya. Jika tag tebal tidak berpasangan, seluruh teks ditampilkan apa adanya. state()[\"text\"] mengembalikan teks asli.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"Mengembalikan overlay ini agar Anda dapat memanggil metode berikutnya.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.show()\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":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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 overlay ini agar Anda dapat memanggil metode berikutnya.","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":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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 overlay ini agar Anda dapat memanggil metode berikutnya.","example":"# Atur atau periksa overlay milik alur ini\nbadge = OverlayText(\"Ready\", (24, 120))\nbadge.background(\"#66000000\")\nbadge.show()\nbadge.background(None)\nbadge.show()","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":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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 overlay ini agar Anda dapat memanggil metode berikutnya.","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":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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 overlay ini agar Anda dapat memanggil metode berikutnya.","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":"Atur pelacakan ketukan, seretan, dan tekan lama. Jika semua opsi bernilai False, teks tetap diam dan sentuhan diteruskan ke elemen di bawahnya. Saat teks bertumpang tindih dengan highlight yang dapat digeser, teks dengan pelacakan aktif diprioritaskan menerima sentuhan. Gestur yang dimulai di luar teks tetap mengendalikan highlight.","behavior":"Atur pelacakan ketukan, seretan, dan tekan lama. Jika semua opsi bernilai False, teks tetap diam dan sentuhan diteruskan ke elemen di bawahnya. Saat teks bertumpang tindih dengan highlight yang dapat digeser, teks dengan pelacakan aktif diprioritaskan menerima sentuhan. Gestur yang dimulai di luar teks tetap mengendalikan highlight.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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":"Laporkan PRESSED saat tekanan singkat dilepas tanpa menyeret atau menahan lama.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"move","type":"Boolean","defaultValue":"False","description":"Izinkan teks diseret. Gerakan dalam ambang sentuh perangkat tidak memindahkan teks; penyeretan dimulai setelah melewati ambang.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"hold","type":"Boolean","defaultValue":"False","description":"Laporkan HOLDING setelah hold_ms, lalu HOLDED saat dilepas; menyeret mendapat prioritas.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"hold_ms","type":"Number","defaultValue":"600","description":"Waktu menahan sebelum HOLDING dalam milidetik. Nilai di bawah 150 menjadi 150.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"OverlayText","returnDescription":"Mengembalikan overlay ini agar Anda dapat memanggil metode berikutnya.","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. Panggilan ini tidak mengonsumsi peristiwa interaksi.","behavior":"Dapatkan titik kiri atas teks overlay ini. Posisi ini diperbarui setelah drag bergerak. Panggilan ini tidak mengonsumsi peristiwa interaksi.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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. Panggilan ini tidak mengonsumsi peristiwa interaksi.","behavior":"Dapatkan wilayah yang membungkus batas teks hamparan saat ini. Mengembalikan Tidak Ada bila overlay belum terlihat atau belum diukur. Panggilan ini tidak mengonsumsi peristiwa interaksi.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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 teks, termasuk setelah hide(), dan terapkan perubahan isi, gaya, posisi, pelacakan, atau atribut yang dapat diubah. Panggil show() lagi setiap kali konfigurasi berubah.\nJika hanya posisi berubah saat terlihat, hanya posisi terbaru yang disimpan untuk bingkai berikutnya. Panggilan selesai sebelum posisi tampil: x/y adalah posisi yang diterima, dan overlay_width_px/overlay_height_px bernilai None. Pembaruan lain menunggu hingga diterapkan.\nSaat terlihat, show() mempertahankan status dan peristiwa jika pelacakan tidak berubah. Menampilkan setelah hide() atau mengubah pelacakan mereset ke IDLE; perubahan pelacakan juga membatalkan gestur sebelumnya.","behavior":"Tampilkan teks, termasuk setelah hide(), dan terapkan perubahan isi, gaya, posisi, pelacakan, atau atribut yang dapat diubah. Panggil show() lagi setiap kali konfigurasi berubah.\nJika hanya posisi berubah saat terlihat, hanya posisi terbaru yang disimpan untuk bingkai berikutnya. Panggilan selesai sebelum posisi tampil: x/y adalah posisi yang diterima, dan overlay_width_px/overlay_height_px bernilai None. Pembaruan lain menunggu hingga diterapkan.\nSaat terlihat, show() mempertahankan status dan peristiwa jika pelacakan tidak berubah. Menampilkan setelah hide() atau mengubah pelacakan mereset ke IDLE; perubahan pelacakan juga membatalkan gestur sebelumnya.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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.text(\"Running\")\nprint(badge.show())","aliases":[],"group":"FLOW"},{"key":"class-overlaytext-method-hide","kind":"METHOD","parentKey":"class-overlaytext","name":"hide","signature":"overlay.hide()","description":"Sembunyikan teks. Panggil show() untuk menampilkannya lagi.","behavior":"Sembunyikan teks. Panggil show() untuk menampilkannya lagi.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"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":"Baca status terbaru. Saat pelacakan yang sesuai diaktifkan:\nTekan lalu lepas → PRESSED (1).\nSedang menyeret → MOVING (2); lepas → MOVED (4).\nTahan selama hold_ms → HOLDING (3); lepas → HOLDED (7).\nStatus lain: IDLE (0), HIDDEN (5), OFF (6). Menekan saja belum membuat peristiwa; menyeret lebih diprioritaskan daripada menahan.\nPRESSED, MOVED, dan HOLDED dikembalikan sekali lalu direset ke IDLE. MOVING dan HOLDING tetap selama interaksi berlangsung. Hanya status terbaru yang disimpan; peristiwa baru menggantikan yang belum dibaca. Pembatalan tidak membuat peristiwa penyelesaian. Perubahan posisi yang tertunda diterapkan sebelum membaca.\nHanya state() yang mengonsumsi peristiwa akhir. Peristiwa tidak kedaluwarsa, tetapi membaca setiap 100 ms tidak menjamin semua peristiwa di antara pembacaan tersimpan.","behavior":"Baca status terbaru. Saat pelacakan yang sesuai diaktifkan:\nTekan lalu lepas → PRESSED (1).\nSedang menyeret → MOVING (2); lepas → MOVED (4).\nTahan selama hold_ms → HOLDING (3); lepas → HOLDED (7).\nStatus lain: IDLE (0), HIDDEN (5), OFF (6). Menekan saja belum membuat peristiwa; menyeret lebih diprioritaskan daripada menahan.\nPRESSED, MOVED, dan HOLDED dikembalikan sekali lalu direset ke IDLE. MOVING dan HOLDING tetap selama interaksi berlangsung. Hanya status terbaru yang disimpan; peristiwa baru menggantikan yang belum dibaca. Pembatalan tidak membuat peristiwa penyelesaian. Perubahan posisi yang tertunda diterapkan sebelum membaca.\nHanya state() yang mengonsumsi peristiwa akhir. Peristiwa tidak kedaluwarsa, tetapi membaca setiap 100 ms tidak menjamin semua peristiwa di antara pembacaan tersimpan.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"off_all() hanya menghapus overlay alur saat ini. Pembaruan tampilan dapat menunggu. Buat dan ubah tiap OverlayText dalam satu alur."},"limitations":[],"relatedApis":["class-overlaytext-static-method-off-all","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Dictionary status berisi teks asli, supports_inline_bold=True, status/status_label, opsi pelacakan, serta lebar/tinggi teks mengambang dalam piksel jika tersedia.","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":"Ukur waktu yang berlalu dalam milidetik. Jeda dan lanjutkan tanpa kehilangan waktu yang sudah dihitung.","behavior":"Ukur waktu yang berlalu dalam milidetik. Jeda dan lanjutkan tanpa kehilangan waktu yang sudah dihitung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan timer ini agar Anda dapat memanggil metode berikutnya.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan timer ini agar Anda dapat memanggil metode berikutnya.","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 menghitung, atau mulai jika timer belum pernah berjalan.","behavior":"Lanjutkan menghitung, atau mulai jika timer belum pernah berjalan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan timer ini agar Anda dapat memanggil metode berikutnya.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan timer ini agar Anda dapat memanggil metode berikutnya.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan timer ini agar Anda dapat memanggil metode berikutnya.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Timer","returnDescription":"Mengembalikan timer ini agar Anda dapat memanggil metode berikutnya.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"time","type":"Number","defaultValue":null,"description":"Waktu pembanding dalam milidetik. Nilai negatif menjadi 0; bagian pecahan dibuang.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Gunakan model TFLite yang diimpor di Pengelola Template untuk mengenali objek atau mengklasifikasikan gambar. Pilih jenis model yang benar di sana.\nKeluaran yang didukung: deteksi YOLOv8/YOLO11 [1,N,4+C]/[1,4+C,N]; deteksi YOLO26 [1,N,6]/[N,6]; klasifikasi YOLO11/YOLO26 dan MobileNetV3 [1,C]. FLOAT32, INT8, dan UINT8 didukung otomatis.\nKlasifikasi menghasilkan skor dan metadata kelas tanpa titik atau batas layar. Inferensi membutuhkan file model lokal; kegagalan mendapatkannya menyebabkan error.","behavior":"Gunakan model TFLite yang diimpor di Pengelola Template untuk mengenali objek atau mengklasifikasikan gambar. Pilih jenis model yang benar di sana.\nKeluaran yang didukung: deteksi YOLOv8/YOLO11 [1,N,4+C]/[1,4+C,N]; deteksi YOLO26 [1,N,6]/[N,6]; klasifikasi YOLO11/YOLO26 dan MobileNetV3 [1,C]. FLOAT32, INT8, dan UINT8 didukung otomatis.\nKlasifikasi menghasilkan skor dan metadata kelas tanpa titik atau batas layar. Inferensi membutuhkan file model lokal; kegagalan mendapatkannya menyebabkan error.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Cara mengubah ukuran gambar: LETTERBOX menjaga proporsi dan menambah tepi; STRETCH meregangkan ke ukuran masukan; CROP_CENTER memotong bagian tengah.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"color_mode","type":"String","defaultValue":"RGB","description":"Format warna gambar untuk model: RGB, BGR, atau GRAYSCALE.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"norm_mode","type":"String","defaultValue":"ZERO_ONE","description":"Cara mengubah nilai piksel untuk model: ZERO_ONE, MINUS_ONE_ONE, IMAGENET, atau CUSTOM.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"padding_color","type":"Int","defaultValue":"114","description":"Nilai dari 0 sampai 255 untuk mengisi tepi yang ditambahkan LETTERBOX.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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 pada satu gambar layar saat ini atau region yang diberikan dan kembalikan MatchList semua kelas. List kosong berarti tidak ada kecocokan atau bingkai layar belum tersedia. Izin tangkapan layar tidak ada, kegagalan memuat atau menjalankan model menyebabkan error.\nRegion memotong gambar sebelum pemrosesan model. Gunakan gambar mirip data pelatihan; pemotongan dapat mengurangi akurasi. Hasil klasifikasi tidak memiliki titik atau batas.\nDalam mode Edit, pengaturan Bingkai Debug Pengenalan menampilkan area pemindaian berwarna merah dan kotak objek yang terdeteksi berwarna hijau, termasuk saat debug=False. Model klasifikasi hanya menampilkan area pemindaian.","behavior":"Jalankan model pada satu gambar layar saat ini atau region yang diberikan dan kembalikan MatchList semua kelas. List kosong berarti tidak ada kecocokan atau bingkai layar belum tersedia. Izin tangkapan layar tidak ada, kegagalan memuat atau menjalankan model menyebabkan error.\nRegion memotong gambar sebelum pemrosesan model. Gunakan gambar mirip data pelatihan; pemotongan dapat mengurangi akurasi. Hasil klasifikasi tidak memiliki titik atau batas.\nDalam mode Edit, pengaturan Bingkai Debug Pengenalan menampilkan area pemindaian berwarna merah dan kotak objek yang terdeteksi berwarna hijau, termasuk saat debug=False. Model klasifikasi hanya menampilkan area pemindaian.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"threshold","type":"Number","defaultValue":"0.5","description":"Keyakinan minimum dari 0 sampai 1. Saat menjalankan model, aplikasi menggunakan setidaknya 0.01.","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":"Jumlah hasil maksimum. Bagian pecahan dibuang, lalu nilai dibatasi ke 1..64.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"debug","type":"Boolean","defaultValue":"False","description":"True membuka pratinjau gambar dan hasil model dalam mode Edit. Deteksi menampilkan kotak dan kelas; klasifikasi menampilkan gambar masukan dan skor kelas. Mode Run-only mengabaikan opsi ini. Nilai Match tidak menyertakan debug_result.","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":"Jalankan alur makro bernama secara paralel dan kirim pesan antarnya. Setiap alur memiliki variabel sendiri. Berikan data awal lewat Flow.params; pesan berupa salinan mandiri yang dibaca sesuai urutan pengiriman.","behavior":"Jalankan alur makro bernama secara paralel dan kirim pesan antarnya. Setiap alur memiliki variabel sendiri. Berikan data awal lewat Flow.params; pesan berupa salinan mandiri yang dibaca sesuai urutan pengiriman.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"yes","details":"Flow.start() mengembalikan nomor urut Int positif. Maksimal dua alur latar berjalan bersama alur utama. Makro menunggunya; kesalahan alur mana pun atau System.stop() menghentikan semuanya."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-storage","class-screencapture"],"isCallable":false,"fields":[],"fieldDocs":[{"name":"params","type":"dict","defaultValue":null,"description":"Data awal untuk alur ini. Setiap pembacaan menghasilkan dict mandiri; mengubahnya tidak mengubah pengirim atau pembacaan berikutnya. Alur utama menerima dict kosong.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Simpan template enemy dan konfigurasikan watch_enemy sebelum dijalankan\n# Main: aktifkan watcher dan hentikan setelah tugas utama\nFlow.start(\"watch_enemy\")\nFlow.send(\"watch_enemy\", {\"command\": \"ARM\"})\nwait(1000)\nFlow.stop(\"watch_enemy\")","aliases":[],"group":null},{"key":"class-flow-static-method-start","kind":"STATIC_METHOD","parentKey":"class-flow","name":"start","signature":"Flow.start(name, params=None)","description":"Mulai alur yang sudah dikonfigurasi bersama alur utama. Pesan dapat dikirim begitu panggilan selesai. Maksimal dua alur latar dapat berjalan; keduanya juga dapat memulai alur lain.\nNama yang sama tidak dapat berjalan dua kali, termasuk saat dijeda atau sedang berhenti. Nama salah atau duplikat, batas alur penuh, atau error alur menghentikan seluruh Run. System.stop() dan Main Stop juga menghentikan semua alur.\nAlur utama menunggu alur latar sebelum Run selesai: hentikan secara eksplisit alur yang berjalan tanpa akhir. Data awal disalin dengan batas Flow.send().","behavior":"Mulai alur yang sudah dikonfigurasi bersama alur utama. Pesan dapat dikirim begitu panggilan selesai. Maksimal dua alur latar dapat berjalan; keduanya juga dapat memulai alur lain.\nNama yang sama tidak dapat berjalan dua kali, termasuk saat dijeda atau sedang berhenti. Nama salah atau duplikat, batas alur penuh, atau error alur menghentikan seluruh Run. System.stop() dan Main Stop juga menghentikan semua alur.\nAlur utama menunggu alur latar sebelum Run selesai: hentikan secara eksplisit alur yang berjalan tanpa akhir. Data awal disalin dengan batas Flow.send().","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"Memulai alur latar bernama dengan salinan masukan, lalu kembali tanpa menunggu selesai."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Nama tepat alur yang sudah dikonfigurasi.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"params","type":"dict?","defaultValue":"None","description":"Data awal opsional yang disalin untuk alur baru dan tersedia melalui Flow.params.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Int","returnDescription":"Angka positif yang bertambah setiap kali alur dimulai, digunakan pada status dock dan log. Angka ini tidak dapat digunakan untuk mengendalikan alur.","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-flow-static-method-send","kind":"STATIC_METHOD","parentKey":"class-flow","name":"send","signature":"Flow.send(name, data)","description":"Kirim salinan terpisah ke alur yang sedang berjalan tanpa menunggu. Beberapa alur dapat mengirim pesan dengan aman; pesan diterima sesuai urutan pengiriman, termasuk saat dijeda. Nilai yang diizinkan: None, Boolean, angka berhingga, String, list, tuple, dan dict dengan kunci String. Kedalaman maksimum 8, jumlah nilai maksimum 512, dan panjang teks total maksimum 65536. Fungsi, objek sumber daya atau aplikasi, dan referensi melingkar menyebabkan error. Setiap alur yang dimulai memiliki antrean pesan baru; pesan yang belum dibaca dibuang saat alur berhenti atau selesai.","behavior":"Kirim salinan terpisah ke alur yang sedang berjalan tanpa menunggu. Beberapa alur dapat mengirim pesan dengan aman; pesan diterima sesuai urutan pengiriman, termasuk saat dijeda. Nilai yang diizinkan: None, Boolean, angka berhingga, String, list, tuple, dan dict dengan kunci String. Kedalaman maksimum 8, jumlah nilai maksimum 512, dan panjang teks total maksimum 65536. Fungsi, objek sumber daya atau aplikasi, dan referensi melingkar menyebabkan error. Setiap alur yang dimulai memiliki antrean pesan baru; pesan yang belum dibaca dibuang saat alur berhenti atau selesai.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"Mengoordinasikan panggilan serentak tanpa menunggu pesan atau pembersihan. Flow.stop() menargetkan satu alur latar; alur utama dan lainnya lanjut."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Nama tepat alur tujuan yang sudah dikonfigurasi. Alur utama tidak diberi nama secara otomatis.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"data","type":"Any","defaultValue":null,"description":"Nilai yang akan dikirim. Nilai disalin sebelum dimasukkan ke antrean pesan.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"True jika diterima; False untuk target tidak dikenal, tidak aktif atau sedang dihentikan.","example":"# Kirim perintah ARM ke watcher yang dikonfigurasi\nFlow.start(\"watch_enemy\")\naccepted = Flow.send(\"watch_enemy\", {\"command\": \"ARM\"})\nprint(accepted)","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-receive","kind":"STATIC_METHOD","parentKey":"class-flow","name":"receive","signature":"Flow.receive(timeout=None)","description":"Tunggu lalu ambil pesan terlama untuk alur ini. Alur utama dan alur latar dapat menerima pesan. Grup bernama yang berjalan di dalam alur yang sama berbagi antreannya.\nPembatalan segera mengakhiri penantian; Pause menyimpan pesan dalam antrean. List dan dict yang diterima adalah salinan mandiri.","behavior":"Tunggu lalu ambil pesan terlama untuk alur ini. Alur utama dan alur latar dapat menerima pesan. Grup bernama yang berjalan di dalam alur yang sama berbagi antreannya.\nPembatalan segera mengakhiri penantian; Pause menyimpan pesan dalam antrean. List dan dict yang diterima adalah salinan mandiri.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"yes","details":"Menunggu pesan alur ini atau batas waktu. timeout=0 langsung memeriksa. Stop segera mengakhiri penantian."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"timeout","type":"Number?","defaultValue":"None","description":"Batas waktu opsional berupa angka terbatas dalam milidetik: 0 <= timeout < 2^63. Pecahan milidetik dibuang; None menunggu tanpa batas, 0 langsung memeriksa.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Any?","returnDescription":"Pesan paling lama, atau None jika waktu tunggu habis atau pemeriksaan langsung tidak menemukan pesan. Pesan berisi None juga menghasilkan None.","example":"# Alur watch_enemy terkonfigurasi: tunggu ARM lalu periksa perintah di sela pekerjaan\nmessage = Flow.receive()\nif message is not None and message.get(\"command\") == \"ARM\":\n    while True:\n        command = Flow.poll()\n        if command is not None:\n            print(command)\n        if Region().find(\"enemy\", timeout=0).found:\n            print(\"enemy\")\n        wait(100)","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-poll","kind":"STATIC_METHOD","parentKey":"class-flow","name":"poll","signature":"Flow.poll()","description":"Ambil pesan paling lama untuk alur ini segera tanpa menunggu. Menggunakan antrean pesan dan salinan terpisah yang sama seperti Flow.receive().","behavior":"Ambil pesan paling lama untuk alur ini segera tanpa menunggu. Menggunakan antrean pesan dan salinan terpisah yang sama seperti Flow.receive().","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"Mengoordinasikan panggilan serentak tanpa menunggu pesan atau pembersihan. Flow.stop() menargetkan satu alur latar; alur utama dan lainnya lanjut."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Any?","returnDescription":"Pesan paling lama, atau None jika tidak ada pesan. Pesan berisi None juga menghasilkan None.","example":"# Periksa perintah tanpa menunggu\nmessage = Flow.poll()\nif message is not None:\n    print(message)","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-running","kind":"STATIC_METHOD","parentKey":"class-flow","name":"running","signature":"Flow.running(name)","description":"Periksa apakah alur bernama tersebut sedang berjalan atau dijeda. Hasil dapat berubah segera setelah pemanggilan.","behavior":"Periksa apakah alur bernama tersebut sedang berjalan atau dijeda. Hasil dapat berubah segera setelah pemanggilan.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"Mengoordinasikan panggilan serentak tanpa menunggu pesan atau pembersihan. Flow.stop() menargetkan satu alur latar; alur utama dan lainnya lanjut."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Nama tepat alur tujuan yang sudah dikonfigurasi. Alur utama tidak diberi nama secara otomatis.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"True selama aktif; False jika tidak dikenal, sedang dihentikan atau selesai.","example":"print(Flow.running(\"watch_enemy\"))","aliases":[],"group":"FLOW"},{"key":"class-flow-static-method-stop","kind":"STATIC_METHOD","parentKey":"class-flow","name":"stop","signature":"Flow.stop(name)","description":"Minta satu alur latar berhenti; panggilan kembali tanpa menunggu pembersihan. Alur utama dan alur lain tetap berjalan. Ini tidak dapat menghentikan alur utama. Menghentikan diri sendiri mengakhiri alur pemanggil.\nUntuk grup bernama yang bersarang, hentikan alur latar pemiliknya. Tunggu pembersihan selesai sebelum memulai nama yang sama.\nKontrol dock latar menyediakan Pause/Resume. Main Pause/Resume memengaruhi semua alur; Main Resume juga menghapus pengaturan jeda masing-masing.","behavior":"Minta satu alur latar berhenti; panggilan kembali tanpa menunggu pembersihan. Alur utama dan alur lain tetap berjalan. Ini tidak dapat menghentikan alur utama. Menghentikan diri sendiri mengakhiri alur pemanggil.\nUntuk grup bernama yang bersarang, hentikan alur latar pemiliknya. Tunggu pembersihan selesai sebelum memulai nama yang sama.\nKontrol dock latar menyediakan Pause/Resume. Main Pause/Resume memengaruhi semua alur; Main Resume juga menghapus pengaturan jeda masing-masing.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"yes","details":"Mengoordinasikan panggilan serentak tanpa menunggu pesan atau pembersihan. Flow.stop() menargetkan satu alur latar; alur utama dan lainnya lanjut."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"name","type":"String","defaultValue":null,"description":"Nama tepat alur tujuan yang sudah dikonfigurasi. Alur utama tidak diberi nama secara otomatis.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"True untuk permintaan stop baru; False jika target tidak ada, tidak dikenal, sudah dihentikan atau main. True tidak memastikan pembersihan selesai.","example":"print(Flow.stop(\"watch_enemy\"))","aliases":[],"group":"FLOW"},{"key":"class-list","kind":"COLLECTION","parentKey":null,"name":"list","signature":"list(iterable=(), /)","description":"Simpan item secara berurutan, termasuk nilai berulang. Baca posisi mulai dari 0, ulangi tiap item, atau tambahkan, ganti, dan hapus item pada list yang sama.","behavior":"Simpan item secara berurutan, termasuk nilai berulang. Baca posisi mulai dari 0, ulangi tiap item, atau tambahkan, ganti, dan hapus item pada list yang sama.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 list kosong atau list baru dari sumber yang dapat diulang, seperti string, list, atau generator. Urutan item tetap sama; koleksi bersarang tetap dibagi dengan sumber.","behavior":"Buat list kosong atau list baru dari sumber yang dapat diulang, seperti string, list, atau generator. Urutan item tetap sama; koleksi bersarang tetap dibagi dengan sumber.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 list dengan menulis item di dalam kurung siku.","behavior":"Buat list dengan menulis item di dalam kurung siku.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"List baru dengan item sesuai urutan penulisan.","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 list dari nilai hasil expr saat mengulang sumber. Gunakan if untuk menyimpan item yang sesuai saja; beberapa klausa for/if diperbolehkan. Variabel perulangan hanya berlaku dalam ekspresi ini.","behavior":"Buat list dari nilai hasil expr saat mengulang sumber. Gunakan if untuk menyimpan item yang sesuai saja; beberapa klausa for/if diperbolehkan. Variabel perulangan hanya berlaku dalam ekspresi ini.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Variabel atau kelompok variabel yang menerima item saat ini. Target seperti *rest tidak didukung.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Sumber yang dapat diulang, seperti string, koleksi, atau generator; dictionary menghasilkan kunci-kuncinya.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Jumlah yang ditambahkan untuk item berikutnya. Nilai negatif menghitung mundur; 0 memunculkan error. Jika arah step menjauhi stop, hasilnya kosong.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 posisi: 0 adalah yang pertama, -1 yang terakhir, dan indeks negatif lain dihitung dari akhir.","behavior":"Baca satu item berdasarkan posisi: 0 adalah yang pertama, -1 yang terakhir, dan indeks negatif lain dihitung dari akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Posisi item: 0 adalah yang pertama, -1 yang terakhir.","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":"Kembalikan list baru dari start hingga sebelum end. Indeks negatif dihitung dari akhir. Batas yang dikosongkan memilih seluruh list sesuai arah step; koleksi bersarang tetap dibagi.","behavior":"Kembalikan list baru dari start hingga sebelum end. Indeks negatif dihitung dari akhir. Batas yang dikosongkan memilih seluruh list sesuai arah step; koleksi bersarang tetap dibagi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Tetapkan item list ke variabel dari kiri ke kanan. Jumlah variabel harus sama dengan jumlah item, atau akan muncul error. Kelompok variabel dapat bersarang; *rest tidak didukung.","behavior":"Tetapkan item list ke variabel dari kiri ke kanan. Jumlah variabel harus sama dengan jumlah item, atau akan muncul error. Kelompok variabel dapat bersarang; *rest tidak didukung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"a, b","type":"Targets","defaultValue":null,"description":"Variabel yang menerima item; jumlahnya harus sama dengan panjang list.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 sumber yang dapat diulang ke akhir list ini, sesuai urutan sumber.","behavior":"Tambahkan setiap item dari sumber yang dapat diulang ke akhir list ini, sesuai urutan sumber.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 item sebelum posisi yang diberikan. Posisi dimulai dari 0; indeks negatif dihitung dari akhir. Indeks sebelum list menyisipkan di awal; indeks setelah list menyisipkan di akhir.","behavior":"Sisipkan item sebelum posisi yang diberikan. Posisi dimulai dari 0; indeks negatif dihitung dari akhir. Indeks sebelum list menyisipkan di awal; indeks setelah list menyisipkan di akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Posisi awal pencarian, ikut disertakan. Posisi dimulai dari 0; nilai negatif dihitung dari akhir.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(list)","description":"Berhenti sebelum posisi ini. Nilai negatif dihitung dari akhir.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 list ini dari terkecil ke terbesar. Nilai pembanding yang sama mempertahankan urutan awal. Nilai harus dapat dibandingkan: angka dan boolean, string, atau list/tuple sejenis dengan item yang dapat dibandingkan; mencampur jenis yang tidak cocok memunculkan error.","behavior":"Urutkan list ini dari terkecil ke terbesar. Nilai pembanding yang sama mempertahankan urutan awal. Nilai harus dapat dibandingkan: angka dan boolean, string, atau list/tuple sejenis dengan item yang dapat dibandingkan; mencampur jenis yang tidak cocok memunculkan error.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Memproses nilai dalam alur saat ini. Fungsi key juga berjalan di sana; penantian dan perubahannya terjadi sebelum panggilan kembali."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Callable?","defaultValue":"None","description":"Fungsi opsional yang dipanggil sekali per item untuk menghasilkan nilai pengurutan. None membandingkan item itu sendiri.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Kembalikan list baru dengan item yang sama. Menambah, menghapus, atau mengganti item pada salinan tidak mengubah aslinya; koleksi bersarang tetap dibagi.","behavior":"Kembalikan list baru dengan item yang sama. Menambah, menghapus, atau mengganti item pada salinan tidak mengubah aslinya; koleksi bersarang tetap dibagi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"list","returnDescription":"List baru; koleksi bersarang tidak disalin.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Simpan item berurutan, termasuk duplikat, tanpa dapat menambah, menghapus, atau menggantinya setelah dibuat. List atau dictionary bersarang masih bisa berubah. Dalam kondisi, tuple kosong bernilai false dan tuple berisi bernilai true.","behavior":"Simpan item berurutan, termasuk duplikat, tanpa dapat menambah, menghapus, atau menggantinya setelah dibuat. List atau dictionary bersarang masih bisa berubah. Dalam kondisi, tuple kosong bernilai false dan tuple berisi bernilai true.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Buat tuple kosong atau salin item dari sumber yang dapat diulang ke dalam tuple. Koleksi bersarang tetap dibagi dengan sumber.","behavior":"Buat tuple kosong atau salin item dari sumber yang dapat diulang ke dalam tuple. Koleksi bersarang tetap dibagi dengan sumber.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":"()","description":"Sumber opsional yang dapat diulang, seperti string, list, atau generator.","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 dengan item yang dipisahkan koma. Gunakan (value,) untuk satu item; (value) saja bukan tuple.","behavior":"Buat tuple dengan item yang dipisahkan koma. Gunakan (value,) untuk satu item; (value) saja bukan tuple.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 posisi: 0 adalah yang pertama, -1 yang terakhir, dan indeks negatif lain dihitung dari akhir.","behavior":"Baca satu item tuple berdasarkan posisi: 0 adalah yang pertama, -1 yang terakhir, dan indeks negatif lain dihitung dari akhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Posisi item: 0 adalah yang pertama, -1 yang terakhir.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Item pada posisi tersebut. Memunculkan IndexError jika posisi di luar tuple.","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":"Kembalikan tuple baru dari start hingga sebelum end. Indeks negatif dihitung dari akhir. Batas yang dikosongkan memilih seluruh tuple sesuai arah step; koleksi bersarang tetap dibagi.","behavior":"Kembalikan tuple baru dari start hingga sebelum end. Indeks negatif dihitung dari akhir. Batas yang dikosongkan memilih seluruh tuple sesuai arah step; koleksi bersarang tetap dibagi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Tetapkan item tuple ke variabel dari kiri ke kanan. Jumlah variabel harus sama dengan jumlah item, atau akan muncul error. Kelompok variabel dapat bersarang; *rest tidak didukung.","behavior":"Tetapkan item tuple ke variabel dari kiri ke kanan. Jumlah variabel harus sama dengan jumlah item, atau akan muncul error. Kelompok variabel dapat bersarang; *rest tidak didukung.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"x, y","type":"Targets","defaultValue":null,"description":"Variabel yang menerima item; jumlahnya harus sama dengan panjang tuple.","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":"Kembalikan posisi kecocokan pertama dalam batas yang dipilih, atau munculkan ValueError jika nilainya tidak ada.","behavior":"Kembalikan posisi kecocokan pertama dalam batas yang dipilih, atau munculkan ValueError jika nilainya tidak ada.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Posisi awal pencarian, dimulai dari 0. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int","defaultValue":"len(tuple)","description":"Hentikan pencarian sebelum posisi ini. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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-motiontracker","kind":"CLASS","parentKey":null,"name":"MotionTracker","signature":"MotionTracker(region=None, exclude=None, max_displacement=80, max_gap_ms=850, max_frame_age_ms=250)","description":"Lacak pergeseran latar antara bingkai layar dengan pencocokan beberapa area OpenCV asli. Ini tidak mendeteksi pemain atau menentukan posisi pada atlas. Kecualikan HUD dan karakter; tangani zoom game di luar pelacak dengan pencocokan template dan skala. Dugaan zoom atau rotasi menghasilkan LOST, bukan perkiraan zoom. Pembuatan tidak menangkap bingkai; maksimal 16 tracker terbuka per flow.","behavior":"Lacak pergeseran latar antara bingkai layar dengan pencocokan beberapa area OpenCV asli. Ini tidak mendeteksi pemain atau menentukan posisi pada atlas. Kecualikan HUD dan karakter; tangani zoom game di luar pelacak dengan pencocokan template dan skala. Dugaan zoom atau rotasi menghasilkan LOST, bukan perkiraan zoom. Pembuatan tidak menangkap bingkai; maksimal 16 tracker terbuka per flow.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[{"name":"region","type":"Region | None","defaultValue":"None","description":"Persegi pelacakan dalam piksel layar, seluruhnya di dalam layar saat ini, dengan lebar dan tinggi positif serta terbatas. None memilih seluruh layar. Koordinat dibekukan saat dibuat. Area yang terlalu kecil atau sempit menimbulkan kesalahan; pilih area yang lebih besar.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"exclude","type":"list | tuple | None","defaultValue":"None","description":"Daftar Region yang dikecualikan, dipotong sesuai area pelacakan. Lebar dan tinggi tiap area harus positif dan terbatas; koordinat dibekukan saat dibuat. None tidak mengecualikan apa pun. Maksimal 32 Region dapat dikecualikan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max_displacement","type":"Number (1..256)","defaultValue":"80","description":"Pergeseran terbatas maksimum per sumbu dalam piksel layar; default 80.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max_gap_ms","type":"Number (1..5000)","defaultValue":"850","description":"Jeda maksimum antar bingkai sebagai bilangan bulat milidetik; default 850.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"max_frame_age_ms","type":"Number (1..5000)","defaultValue":"250","description":"Usia maksimum bingkai sebagai bilangan bulat milidetik; default 250.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"# Lacak gerakan latar antara bingkai yang ditangkap\ntracker = MotionTracker()\nfirst = tracker.update()\nwait(100)\nresult = tracker.update()\nif result.status == \"TRACKED\":\n    print(result.dx, result.dy)\ntracker.close()","aliases":[],"group":null},{"key":"class-motiontracker-method-update","kind":"METHOD","parentKey":"class-motiontracker","name":"update","signature":"tracker.update()","description":"Baca bingkai tangkapan saat ini dan kembalikan hasil gerak. Penangkapan layar harus sudah mendapat persetujuan dan siap. INITIALIZED membuat acuan; TRACKED melaporkan pergeseran yang diterima; STALE mempertahankan acuan; LOST menghapus kontinuitas agar bingkai baru yang valid berikutnya memulai ulang. Memanggil setelah close menimbulkan kesalahan. STALE berarti bingkai duplikat, dari masa depan, atau sudah terlalu lama sebelum diproses dan mempertahankan acuan. Jika bingkai menjadi terlalu lama saat diproses atau terjadi Pause sebelum penyerahan, hasilnya LOST dengan reason processing_frame_too_old dan kontinuitas dihapus.","behavior":"Baca bingkai tangkapan saat ini dan kembalikan hasil gerak. Penangkapan layar harus sudah mendapat persetujuan dan siap. INITIALIZED membuat acuan; TRACKED melaporkan pergeseran yang diterima; STALE mempertahankan acuan; LOST menghapus kontinuitas agar bingkai baru yang valid berikutnya memulai ulang. Memanggil setelah close menimbulkan kesalahan. STALE berarti bingkai duplikat, dari masa depan, atau sudah terlalu lama sebelum diproses dan mempertahankan acuan. Jika bingkai menjadi terlalu lama saat diproses atau terjadi Pause sebelum penyerahan, hasilnya LOST dengan reason processing_frame_too_old dan kontinuitas dihapus.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"MotionResult","returnDescription":null,"example":null,"aliases":[],"group":"FLOW"},{"key":"class-motiontracker-method-reset","kind":"METHOD","parentKey":"class-motiontracker","name":"reset","signature":"tracker.reset()","description":"Hapus acuan tanpa menutup pelacak. Memanggil setelah close menimbulkan kesalahan.","behavior":"Hapus acuan tanpa menutup pelacak. Memanggil setelah close menimbulkan kesalahan.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":null,"aliases":[],"group":"FLOW"},{"key":"class-motiontracker-method-close","kind":"METHOD","parentKey":"class-motiontracker","name":"close","signature":"tracker.close()","description":"Lepaskan pelacak; aman dipanggil berulang. Handle juga dilepas saat macro atau flow selesai, dihentikan, atau gagal. Handle dapat digunakan ulang antar action dalam executor yang sama dan terisolasi dari flow lain.","behavior":"Lepaskan pelacak; aman dipanggil berulang. Handle juga dilepas saat macro atau flow selesai, dihentikan, atau gagal. Handle dapat digunakan ulang antar action dalam executor yang sama dan terisolasi dari flow lain.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":null,"example":null,"aliases":[],"group":"FLOW"},{"key":"class-motionresult","kind":"READ_ONLY_CLASS","parentKey":null,"name":"MotionResult","signature":"MotionResult","description":"Hasil hanya baca dari MotionTracker.update(). Pergeseran menggambarkan gerak latar antar bingkai, bukan lokasi absolut. Pelacakan tidak mengeklik, mengirim input, mengunggah, atau menyimpan data.","behavior":"Hasil hanya baca dari MotionTracker.update(). Pergeseran menggambarkan gerak latar antar bingkai, bukan lokasi absolut. Pelacakan tidak mengeklik, mengirim input, mengunggah, atau menyimpan data.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":false,"fields":["status","dx","dy","frame_id","captured_at_ms","dt_ms","age_ms","inliers","residual_px","reason"],"fieldDocs":[{"name":"status","type":"String","defaultValue":null,"description":"INITIALIZED membuat acuan; TRACKED memiliki pergeseran yang diterima; STALE berarti bingkai duplikat, terlalu lama, atau dari masa depan; LOST berarti ada jeda, perubahan geometri, bingkai tidak berurutan, tekstur kurang, atau ambiguitas. STALE memeriksa bingkai sebelum diproses; bingkai yang menjadi terlalu lama saat diproses menghasilkan LOST.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"dx","type":"Number | None","defaultValue":null,"description":"Pergeseran horizontal latar dalam piksel layar resolusi penuh, hanya untuk TRACKED; gerak ke kiri bernilai negatif.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"dy","type":"Number | None","defaultValue":null,"description":"Pergeseran vertikal latar dalam piksel layar resolusi penuh, hanya untuk TRACKED.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"frame_id","type":"Number","defaultValue":null,"description":"Identitas unik bingkai, tetap sama saat bingkai cache yang sama dibaca ulang.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"captured_at_ms","type":"Number","defaultValue":null,"description":"Waktu akuisisi bingkai Android berdasarkan jam monoton dalam milidetik, bukan waktu tampilan.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"dt_ms","type":"Number | None","defaultValue":null,"description":"Milidetik yang berlalu sejak acuan, jika tersedia.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"age_ms","type":"Number","defaultValue":null,"description":"Usia akhir bingkai dalam milidetik.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"inliers","type":"Number","defaultValue":null,"description":"Jumlah area yang mendukung gerakan yang diterima.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"residual_px","type":"Number | None","defaultValue":null,"description":"Sisa kesalahan gerakan dalam piksel layar, jika tersedia.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"reason","type":"String","defaultValue":null,"description":"Alasan status hasil.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":null,"aliases":[],"group":null},{"key":"class-range","kind":"COLLECTION","parentKey":null,"name":"range","signature":"range(stop, /) | range(start, stop, step=1, /)","description":"Urutan bilangan bulat yang tidak dapat diubah, dibuat dengan range(). Urutan dapat digunakan kembali tanpa membuat seluruh daftar; gunakan list() saat membutuhkan daftar.","behavior":"Urutan bilangan bulat yang tidak dapat diubah, dibuat dengan range(). Urutan dapat digunakan kembali tanpa membuat seluruh daftar; gunakan list() saat membutuhkan daftar.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["start","stop","step"],"fieldDocs":[{"name":"start","type":"Int","defaultValue":null,"description":"Batas awal yang termasuk dalam rentang.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"stop","type":"Int","defaultValue":null,"description":"Batas akhir yang tidak termasuk dalam urutan.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"step","type":"Int","defaultValue":null,"description":"Selisih antara nilai yang berurutan.","suggestAsNamedArg":true,"requirement":null,"callingMode":null}],"constants":[],"constructorParams":[{"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":"Selisih antara nilai yang berurutan. Gunakan nilai negatif untuk menghitung mundur; 0 menimbulkan kesalahan.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"fieldExample":"numbers = range(2, 10, 2)\ntext(str(numbers.start))","constructorExample":null,"params":[],"returnType":null,"returnDescription":null,"example":"numbers = range(0, 10, 2)\ntext(str(list(numbers)))\ntext(str(numbers.index(4)))","aliases":[],"group":null},{"key":"class-range-method-count","kind":"METHOD","parentKey":"class-range","name":"count","signature":"range.count(value, /)","description":"Kembalikan jumlah kemunculan value: 0 atau 1.","behavior":"Kembalikan jumlah kemunculan value: 0 atau 1.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Nilai yang dicari. Nilai numerik dibandingkan berdasarkan nilainya, sehingga 1.0 sama dengan 1.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":null,"example":"range(0, 10, 2).count(4)","aliases":[],"group":"FLOW"},{"key":"class-range-method-index","kind":"METHOD","parentKey":"class-range","name":"index","signature":"range.index(value, /)","description":"Kembalikan indeks pertama value. Memunculkan ValueError jika nilai tidak ada.","behavior":"Kembalikan indeks pertama value. Memunculkan ValueError jika nilai tidak ada.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any?","defaultValue":null,"description":"Nilai yang dicari. Nilai numerik dibandingkan berdasarkan nilainya, sehingga 1.0 sama dengan 1.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Int","returnDescription":null,"example":"range(0, 10, 2).index(4)","aliases":[],"group":"FLOW"},{"key":"class-set","kind":"COLLECTION","parentKey":null,"name":"set","signature":"set(iterable=(), /)","description":"Simpan nilai tanpa duplikat dan tambahkan atau hapus nanti. Nilai yang sama hanya muncul sekali: True, 1, dan 1.0 sama. Item harus dapat menjadi kunci dictionary; list, dictionary, set, atau tuple yang memuatnya ditolak. Jangan bergantung pada urutan perulangan.","behavior":"Simpan nilai tanpa duplikat dan tambahkan atau hapus nanti. Nilai yang sama hanya muncul sekali: True, 1, dan 1.0 sama. Item harus dapat menjadi kunci dictionary; list, dictionary, set, atau tuple yang memuatnya ditolak. Jangan bergantung pada urutan perulangan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 set kosong atau kumpulkan nilai dari sumber yang dapat diulang, seperti list atau generator, dengan menyimpan kemunculan pertama dari setiap nilai yang sama.","behavior":"Buat set kosong atau kumpulkan nilai dari sumber yang dapat diulang, seperti list atau generator, dengan menyimpan kemunculan pertama dari setiap nilai yang sama.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":"()","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 set dengan menulis nilai di dalam kurung kurawal. Gunakan set() untuk set kosong; {} membuat dictionary kosong.","behavior":"Buat set dengan menulis nilai di dalam kurung kurawal. Gunakan set() untuk set kosong; {} membuat dictionary kosong.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Buat set dari nilai hasil expr saat mengulang sumber, dengan menghapus duplikat. Gunakan if untuk menyaring item; beberapa klausa for/if diperbolehkan. Variabel perulangan hanya berlaku dalam ekspresi ini.","behavior":"Buat set dari nilai hasil expr saat mengulang sumber, dengan menghapus duplikat. Gunakan if untuk menyaring item; beberapa klausa for/if diperbolehkan. Variabel perulangan hanya berlaku dalam ekspresi ini.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Variabel atau kelompok variabel yang menerima item saat ini. Target seperti *rest tidak didukung.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Sumber yang dapat diulang, seperti string, koleksi, atau generator; dictionary menghasilkan kunci-kuncinya.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 tempat mencari nilai.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 dari set ini, atau munculkan KeyError jika tidak ada.","behavior":"Hapus nilai dari set ini, atau munculkan KeyError jika tidak ada.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Hapus dan kembalikan sembarang nilai dari set ini. Set kosong memunculkan KeyError.","behavior":"Hapus dan kembalikan sembarang nilai dari set ini. Set kosong memunculkan KeyError.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Tambahkan nilai dari sumber yang dapat diulang ke set ini, dengan menyimpan setiap nilai yang sama hanya sekali.","behavior":"Tambahkan nilai dari sumber yang dapat diulang ke set ini, dengan menyimpan setiap nilai yang sama hanya sekali.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Kembalikan set baru yang menggabungkan set ini dengan sumber yang dapat diulang, tanpa duplikat. Set ini tidak berubah.","behavior":"Kembalikan set baru yang menggabungkan set ini dengan sumber yang dapat diulang, tanpa duplikat. Set ini tidak berubah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Kembalikan set baru berisi nilai dari set ini yang ada di setiap sumber yang diberikan. Tanpa sumber, kembalikan salinan. Set ini tidak berubah.","behavior":"Kembalikan set baru berisi nilai dari set ini yang ada di setiap sumber yang diberikan. Tanpa sumber, kembalikan salinan. Set ini tidak berubah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Kembalikan set baru berisi nilai dari set ini yang tidak ada di sumber mana pun yang diberikan. Tanpa sumber, kembalikan salinan. Set ini tidak berubah.","behavior":"Kembalikan set baru berisi nilai dari set ini yang tidak ada di sumber mana pun yang diberikan. Tanpa sumber, kembalikan salinan. Set ini tidak berubah.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Kembalikan set baru dengan nilai yang sama. Menambah atau menghapus nilai pada salinan tidak mengubah aslinya.","behavior":"Kembalikan set baru dengan nilai yang sama. Menambah atau menghapus nilai pada salinan tidak mengubah aslinya.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 setiap nilai sekali. Jangan bergantung pada urutan tertentu.","behavior":"Ulangi setiap nilai sekali. Jangan bergantung pada urutan tertentu.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Simpan nilai di bawah kunci dan baca berdasarkan kunci. Kunci mempertahankan urutan penambahan; menulis kunci yang sudah ada mengganti nilainya tanpa memindahkan kunci. Setiap kunci memiliki satu nilai.","behavior":"Simpan nilai di bawah kunci dan baca berdasarkan kunci. Kunci mempertahankan urutan penambahan; menulis kunci yang sudah ada mengganti nilainya tanpa memindahkan kunci. Setiap kunci memiliki satu nilai.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Buat dictionary kosong atau salin dictionary lain atau sumber pasangan (key, value). Argumen bernama menambahkan entri setelahnya dan mengganti kunci yang sama. Nilai bersarang tetap dibagi dengan sumber.","behavior":"Buat dictionary kosong atau salin dictionary lain atau sumber pasangan (key, value). Argumen bernama menambahkan entri setelahnya dan mengganti kunci yang sama. Nilai bersarang tetap dibagi dengan sumber.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"mapping_or_pairs","type":"dict | Iterable","defaultValue":"()","description":"dict atau sumber yang dapat diiterasi; setiap item harus berupa list atau tuple dengan tepat dua item: kunci dan nilai.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"},{"name":"key=value","type":"Any?","defaultValue":null,"description":"Entri berbentuk key=value, ditambahkan setelah sumber; kunci yang sama diganti nilainya.","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 dictionary dengan menulis pasangan key: value di dalam kurung kurawal. Kunci berulang menyimpan nilai terakhir.","behavior":"Buat dictionary dengan menulis pasangan key: value di dalam kurung kurawal. Kunci berulang menyimpan nilai terakhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"Any","defaultValue":null,"description":"Kunci yang mengidentifikasi nilai. Angka, string, dan tuple berisi kunci yang valid diperbolehkan; list, dictionary, dan set tidak. True, 1, dan 1.0 menunjuk kunci yang sama.","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":"Buat dictionary dari pasangan key: value yang dihitung saat mengulang sumber. Kunci berulang mengganti nilai sebelumnya. Gunakan if untuk menyaring item; beberapa klausa for/if diperbolehkan. Variabel perulangan hanya berlaku dalam ekspresi ini.","behavior":"Buat dictionary dari pasangan key: value yang dihitung saat mengulang sumber. Kunci berulang mengganti nilai sebelumnya. Gunakan if untuk menyaring item; beberapa klausa for/if diperbolehkan. Variabel perulangan hanya berlaku dalam ekspresi ini.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Variabel atau kelompok variabel yang menerima item saat ini. Target seperti *rest tidak didukung.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Sumber yang dapat diulang, seperti string, koleksi, atau generator; dictionary menghasilkan kunci-kuncinya.","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 nilai yang disimpan pada key. Kunci yang tidak ada memunculkan KeyError; gunakan get() untuk memberikan nilai default.","behavior":"Baca nilai yang disimpan pada key. Kunci yang tidak ada memunculkan KeyError; gunakan get() untuk memberikan nilai default.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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, yang bisa berupa None. Kunci yang tidak ada memunculkan KeyError.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nmode = settings[\"mode\"]        # mengembalikan farm\nmissing = settings.get(\"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Kembalikan view langsung dari tuple (key, value) sesuai urutan penambahan. View mencerminkan perubahan dictionary berikutnya. Ulangi view atau konversi dengan list() untuk memakai indeks.","behavior":"Kembalikan view langsung dari tuple (key, value) sesuai urutan penambahan. View mencerminkan perubahan dictionary berikutnya. Ulangi view atau konversi dengan list() untuk memakai indeks.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict_items","returnDescription":"View dict_items; tidak dapat diakses langsung dengan indeks.","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, /)\ndictionary.pop(key, default, /)","description":"Hapus kunci dan kembalikan nilainya. Jika kunci tidak ada, kembalikan default yang diberikan secara eksplisit, termasuk None; tanpa default akan muncul KeyError.","behavior":"Hapus kunci dan kembalikan nilainya. Jika kunci tidak ada, kembalikan default yang diberikan secara eksplisit, termasuk None; tanpa default akan muncul KeyError.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":null,"description":"Nilai yang dikembalikan untuk kunci yang tidak ada hanya jika argumen ini diberikan. Jika dihilangkan, kunci yang tidak ada memunculkan KeyError.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"Any?","returnDescription":"Nilai yang dihapus, atau default yang diberikan secara eksplisit jika kunci tidak ada.","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":"Kembalikan dictionary baru dengan entri yang sama. Menambah, menghapus, atau mengganti entri tidak mengubah aslinya; koleksi bersarang tetap dibagi.","behavior":"Kembalikan dictionary baru dengan entri yang sama. Menambah, menghapus, atau mengganti entri tidak mengubah aslinya; koleksi bersarang tetap dibagi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"dict baru; koleksi di dalamnya tidak disalin.","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":"Tambahkan entri ke dictionary ini dari dictionary lain atau sumber pasangan (key, value), lalu terapkan argumen bernama. Kunci yang sama diganti nilainya tanpa mengubah posisinya.","behavior":"Tambahkan entri ke dictionary ini dari dictionary lain atau sumber pasangan (key, value), lalu terapkan argumen bernama. Kunci yang sama diganti nilainya tanpa mengubah posisinya.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"other","type":"dict | Iterable","defaultValue":"()","description":"dict atau sumber list atau tuple dua item yang berisi kunci dan nilai.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"items","type":"Any?","defaultValue":null,"description":"Entri berbentuk key=value; entri ini mengganti entri berkunci sama dari other.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Kembalikan view langsung dari kunci sesuai urutan penambahan. View mencerminkan perubahan dictionary berikutnya. Ulangi view atau konversi dengan list() untuk memakai indeks.","behavior":"Kembalikan view langsung dari kunci sesuai urutan penambahan. View mencerminkan perubahan dictionary berikutnya. Ulangi view atau konversi dengan list() untuk memakai indeks.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict_keys","returnDescription":"View dict_keys; tidak dapat diakses langsung dengan indeks.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nkeys = settings.keys()\nfirst_key = list(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":"Kembalikan view langsung dari nilai sesuai urutan penambahan kunci. View mencerminkan perubahan dictionary berikutnya. Ulangi view atau konversi dengan list() untuk memakai indeks.","behavior":"Kembalikan view langsung dari nilai sesuai urutan penambahan kunci. View mencerminkan perubahan dictionary berikutnya. Ulangi view atau konversi dengan list() untuk memakai indeks.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict_values","returnDescription":"View dict_values; tidak dapat diakses langsung dengan indeks.","example":"settings = {\"mode\": \"farm\", \"retries\": 3}\nvalues = settings.values()\nlast_value = list(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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 dictionary sesuai urutan penambahan, termasuk kunci yang ditambahkan setelah dibuat.","behavior":"Ulangi kunci dictionary sesuai urutan penambahan, termasuk kunci yang ditambahkan setelah dibuat.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Simpan teks dalam tanda kutip atau hasil str(value). String tidak dapat diubah langsung; metodenya mengembalikan nilai baru. Posisi dan panjang menghitung titik kode Unicode: satu emoji menempati satu posisi, tetapi huruf dengan aksen terpisah atau emoji gabungan dapat menempati beberapa posisi.","behavior":"Simpan teks dalam tanda kutip atau hasil str(value). String tidak dapat diubah langsung; metodenya mengembalikan nilai baru. Posisi dan panjang menghitung titik kode Unicode: satu emoji menempati satu posisi, tetapi huruf dengan aksen terpisah atau emoji gabungan dapat menempati beberapa posisi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Ubah nilai menjadi teks. Koleksi besar atau nilai yang bersarang terlalu dalam dipersingkat dengan penanda bagian yang dihilangkan; string yang diberikan langsung tetap sama.","behavior":"Ubah nilai menjadi teks. Koleksi besar atau nilai yang bersarang terlalu dalam dipersingkat dengan penanda bagian yang dihilangkan; string yang diberikan langsung tetap sama.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 posisi, dimulai dari 0. Indeks negatif dihitung dari akhir: -1 adalah posisi terakhir.","behavior":"Baca satu karakter berdasarkan posisi, dimulai dari 0. Indeks negatif dihitung dari akhir: -1 adalah posisi terakhir.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Posisi karakter: 0 adalah yang pertama, -1 yang terakhir.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-only"}],"returnType":"String","returnDescription":"String satu karakter. Memunculkan IndexError jika posisi di luar string.","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":"Kembalikan string baru dari start hingga sebelum end. Indeks negatif dihitung dari akhir. Batas yang dikosongkan memilih seluruh string sesuai arah step.","behavior":"Kembalikan string baru dari start hingga sebelum end. Indeks negatif dihitung dari akhir. Batas yang dikosongkan memilih seluruh string sesuai arah step.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"Hapus setiap karakter yang termasuk dalam teks ini secara berulang pada ujung yang dipilih, bukan menghapus seluruh string chars sebagai awalan atau akhiran.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"Hapus setiap karakter yang termasuk dalam teks ini secara berulang pada ujung yang dipilih, bukan menghapus seluruh string chars sebagai awalan atau akhiran.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"chars","type":"String?","defaultValue":"None","description":"Hapus setiap karakter yang termasuk dalam teks ini secara berulang pada ujung yang dipilih, bukan menghapus seluruh string chars sebagai awalan atau akhiran.","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":"Periksa apakah bagian yang dipilih diawali prefix, dengan membedakan huruf besar dan kecil.","behavior":"Periksa apakah bagian yang dipilih diawali prefix, dengan membedakan huruf besar dan kecil.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"prefix","type":"String | tuple","defaultValue":null,"description":"Teks atau tuple berisi beberapa teks; True jika salah satunya cocok di awal.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int?","defaultValue":"0","description":"Posisi pertama yang disertakan, dimulai dari 0. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"Berhenti sebelum posisi ini. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","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":"Periksa apakah bagian yang dipilih diakhiri suffix, dengan membedakan huruf besar dan kecil.","behavior":"Periksa apakah bagian yang dipilih diakhiri suffix, dengan membedakan huruf besar dan kecil.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"suffix","type":"String | tuple","defaultValue":null,"description":"Teks atau tuple berisi beberapa teks; True jika salah satunya cocok di akhir.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int?","defaultValue":"0","description":"Posisi pertama yang disertakan, dimulai dari 0. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"Berhenti sebelum posisi ini. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Posisi awal pencarian, dimulai dari 0. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"Hentikan pencarian sebelum posisi ini. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Int","returnDescription":"Posisi kecocokan pertama dalam string asli, dimulai dari 0, atau -1 jika tidak ada.","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":"Kembalikan posisi kecocokan pertama dalam string asli, atau munculkan ValueError jika sub tidak ada pada bagian yang dipilih.","behavior":"Kembalikan posisi kecocokan pertama dalam string asli, atau munculkan ValueError jika sub tidak ada pada bagian yang dipilih.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Posisi awal pencarian, dimulai dari 0. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"Hentikan pencarian sebelum posisi ini. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"old","type":"String","defaultValue":null,"description":"Teks yang diganti, tanpa kecocokan yang tumpang tindih. String kosong menyisipkan new pada batas karakter, dibatasi oleh count.","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":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"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":"Kembalikan list bagian teks yang dipisahkan pada sep. Dengan sep=None, rangkaian karakter ruang putih menjadi satu pemisah dan ruang putih awal dilewati; setelah maxsplit pemisahan, sisanya disimpan sebagai satu bagian.","behavior":"Kembalikan list bagian teks yang dipisahkan pada sep. Dengan sep=None, rangkaian karakter ruang putih menjadi satu pemisah dan ruang putih awal dilewati; setelah maxsplit pemisahan, sisanya disimpan sebagai satu bagian.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sep","type":"String?","defaultValue":"None","description":"Teks pemisah; pemisah kosong memunculkan ValueError. None memisahkan berdasarkan rangkaian spasi atau karakter ruang putih lainnya.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"maxsplit","type":"Int","defaultValue":"-1","description":"Maximum split count; negative means all.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"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":"Gabungkan string dari sumber yang dapat diulang, dengan string ini di antaranya. Item yang bukan string memunculkan error.","behavior":"Gabungkan string dari sumber yang dapat diulang, dengan string ini di antaranya. Item yang bukan string memunculkan error.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"sub","type":"String","defaultValue":null,"description":"Teks yang dihitung. String kosong cocok pada setiap batas, sehingga jumlahnya adalah panjang bagian yang dipilih ditambah 1.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"start","type":"Int?","defaultValue":"0","description":"Posisi awal penghitungan, dimulai dari 0. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"},{"name":"stop","type":"Int?","defaultValue":"len(string)","description":"Hentikan penghitungan sebelum posisi ini. Nilai negatif dihitung dari akhir; batas di luar rentang disesuaikan ke rentang yang tersedia.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Periksa apakah string tidak kosong dan semua karakternya adalah digit Unicode, termasuk digit superskrip dan digit dalam lingkaran.","behavior":"Periksa apakah string tidak kosong dan semua karakternya adalah digit Unicode, termasuk digit superskrip dan digit dalam lingkaran.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Periksa apakah string tidak kosong dan setiap karakternya merupakan huruf atau karakter angka Unicode, termasuk pecahan.","behavior":"Periksa apakah string tidak kosong dan setiap karakternya merupakan huruf atau karakter angka Unicode, termasuk pecahan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"True jika hanya berisi huruf atau karakter angka; False untuk string kosong.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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 panel untuk meminta pengaturan makro dari pengguna. Tambahkan kolom, lalu panggil show() untuk menampilkannya.","behavior":"Buat panel untuk meminta pengaturan makro dari pengguna. Tambahkan kolom, lalu panggil show() untuk menampilkannya.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"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 untuk kompatibilitas; tidak mereset pengaturan native yang tersimpan atau mengubah identitasnya. 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 untuk kompatibilitas; tidak mereset pengaturan native yang tersimpan atau mengubah identitasnya.","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 pesan dan tunggu konfirmasi pengguna sebelum melanjutkan skrip. String ditampilkan apa adanya; nilai lain ditampilkan seperti str(value), dengan data bersarang pada beberapa baris.","behavior":"Tampilkan pesan dan tunggu konfirmasi pengguna sebelum melanjutkan skrip. String ditampilkan apa adanya; nilai lain ditampilkan seperti str(value), dengan data bersarang pada beberapa baris.","execution":{"blocking":"yes","threadSafety":"serialized","parallel":"conditional","details":"Menampilkan pesan dan menunggu konfirmasi. Pesan dan panel dialog dari semua alur muncul satu per satu."},"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":"Laporkan kesalahan dengan pesan ini dan hentikan skrip. Saat makro berjalan, tampilan kesalahan menyertakan alur dan jalur aksi. Nilai lain diubah menjadi teks yang mudah dibaca seperti str(value).","behavior":"Laporkan kesalahan dengan pesan ini dan hentikan skrip. Saat makro berjalan, tampilan kesalahan menyertakan alur dan jalur aksi. Nilai lain diubah menjadi teks yang mudah dibaca seperti str(value).","execution":{"blocking":"no","threadSafety":"serialized","parallel":"no","details":"Menghentikan semua alur dengan kesalahan skrip, tanpa menunggu 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 kolom yang dapat diedit. Input angka menerima desimal bertanda yang terbatas, notasi ilmiah, dan spasi di sekitarnya; nilai kosong, NaN, Infinity, luapan, dan heksadesimal tidak valid. Input dialog yang tidak valid menampilkan kesalahan dan menghalangi Run; draf panel mengambang yang tidak valid menampilkan kesalahan, mempertahankan nilai valid terakhir, dan tidak menyimpan draf.","behavior":"Tambahkan kolom yang dapat diedit. Input angka menerima desimal bertanda yang terbatas, notasi ilmiah, dan spasi di sekitarnya; nilai kosong, NaN, Infinity, luapan, dan heksadesimal tidak valid. Input dialog yang tidak valid menampilkan kesalahan dan menghalangi Run; draf panel mengambang yang tidak valid menampilkan kesalahan, mempertahankan nilai valid terakhir, dan tidak menyimpan draf.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"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":"Kunci kolom tidak kosong dalam dict hasil dan pengaturan persisten. Setiap kolom dalam satu panel harus memiliki kunci berbeda. Pengaturan native memakai cakupan makro dan namespace terlindungi (atau macroId lokal), varian, dan nama kolom; title, version, label terjemahan, dan instance runtime bukan bagian dari kunci.","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|Number","defaultValue":"\"\"","description":"Nilai input hanya digunakan jika tidak ada nilai native tersimpan atau nilai Storage yang cocok. Kolom angka pada panel mengambang memerlukan nilai awal yang valid dari pengaturan native, Storage, atau default ini; jika tidak, show() menimbulkan kesalahan.","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":"Gunakan \"text\" untuk String atau \"number\" untuk Number (float). Nilai native tersimpan diprioritaskan; jika tidak, string angka yang pernah disimpan di Storage dapat dipulihkan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama, sehingga metode panel lain dapat dipanggil pada hasilnya.","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 kotak yang dapat dicentang atau dikosongkan pengguna.","behavior":"Tambahkan kotak yang dapat dicentang atau dikosongkan pengguna.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"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":"Kunci kolom tidak kosong dalam dict hasil dan pengaturan persisten. Setiap kolom dalam satu panel harus memiliki kunci berbeda. Pengaturan native memakai cakupan makro dan namespace terlindungi (atau macroId lokal), varian, dan nama kolom; title, version, label terjemahan, dan instance runtime bukan bagian dari kunci.","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":"Nilai awal hanya digunakan jika tidak ada nilai native tersimpan atau nilai Storage yang cocok.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama, sehingga metode panel lain dapat dipanggil pada hasilnya.","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 sakelar yang dapat diaktifkan atau dinonaktifkan pengguna.","behavior":"Tambahkan sakelar yang dapat diaktifkan atau dinonaktifkan pengguna.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"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":"Kunci kolom tidak kosong dalam dict hasil dan pengaturan persisten. Setiap kolom dalam satu panel harus memiliki kunci berbeda. Pengaturan native memakai cakupan makro dan namespace terlindungi (atau macroId lokal), varian, dan nama kolom; title, version, label terjemahan, dan instance runtime bukan bagian dari kunci.","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":"Nilai awal hanya digunakan jika tidak ada nilai native tersimpan atau nilai Storage yang cocok.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama, sehingga metode panel lain dapat dipanggil pada hasilnya.","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, multi_select=False, depends_on=None)","description":"Add a radio-group selector, or render it as a single- or multi-select dropdown when dropdown=True. Options can be a list or a dict mapping parent option labels to sub-option lists when depends_on is set.","behavior":"Add a radio-group selector, or render it as a single- or multi-select dropdown when dropdown=True. Options can be a list or a dict mapping parent option labels to sub-option lists when depends_on is set.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"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":"Kunci kolom tidak kosong dalam dict hasil dan pengaturan persisten. Setiap kolom dalam satu panel harus memiliki kunci berbeda. Pengaturan native memakai cakupan makro dan namespace terlindungi (atau macroId lokal), varian, dan nama kolom; title, version, label terjemahan, dan instance runtime bukan bagian dari kunci.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"options","type":"list[String]|dict[String, list[String]]","defaultValue":null,"description":"Selectable options or dictionary mapping parent option labels to lists of options when depends_on is set.","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|list|None","defaultValue":"None","description":"Pilihan awal hanya digunakan jika tidak ada nilai native tersimpan atau nilai Storage yang cocok: label, indeks opsi berbasis 0, atau daftar label/indeks saat multi_select=True; None memilih pilihan pertama (atau tidak memilih saat multi_select=True).","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"},{"name":"multi_select","type":"Boolean","defaultValue":"False","description":"Allow selecting multiple options when rendered as a dropdown. The panel returns a list of 0-based option indices.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"depends_on","type":"String?","defaultValue":"None","description":"Variable name of the preceding parent selector this dropdown depends on for cascading dynamic options.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama, sehingga metode panel lain dapat dipanggil pada hasilnya.","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":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"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":"Kunci kolom tidak kosong dalam dict hasil dan pengaturan persisten. Setiap kolom dalam satu panel harus memiliki kunci berbeda. Pengaturan native memakai cakupan makro dan namespace terlindungi (atau macroId lokal), varian, dan nama kolom; title, version, label terjemahan, dan instance runtime bukan bagian dari kunci.","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":"Nilai maksimum; harus setidaknya min.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"step","type":"Number","defaultValue":"1","description":"Kenaikan positif antar nilai penggeser.","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":"Nilai awal hanya digunakan jika tidak ada nilai native tersimpan atau nilai Storage yang cocok, lalu dibatasi ke min/max.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama, sehingga metode panel lain dapat dipanggil pada hasilnya.","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":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"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":"Kunci kolom tidak kosong dalam dict hasil dan pengaturan persisten. Setiap kolom dalam satu panel harus memiliki kunci berbeda. Pengaturan native memakai cakupan makro dan namespace terlindungi (atau macroId lokal), varian, dan nama kolom; title, version, label terjemahan, dan instance runtime bukan bagian dari kunci.","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":"Nilai bilangan bulat maksimum; harus setidaknya min.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"step","type":"Number","defaultValue":"1","description":"Kenaikan bilangan bulat positif untuk setiap tekanan + atau -. Masukan angka diubah menjadi bilangan bulat.","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":"Nilai awal hanya digunakan jika tidak ada nilai native tersimpan atau nilai Storage yang cocok, lalu dibatasi ke min/max.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama, sehingga metode panel lain dapat dipanggil pada hasilnya.","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":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"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, sehingga metode panel lain dapat dipanggil pada hasilnya.","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-localize","kind":"METHOD","parentKey":"class-macropanel","name":"localize","signature":"panel.localize(selector, variants, *, locales=None)","description":"Daftarkan salinan panel terjemahan untuk panel mengambang. Perubahan pemilih langsung memperbarui tampilan, bahkan saat makro dijeda, tanpa callback Python atau membuka ulang panel; nilai, draf, dan posisi jendela tetap terjaga. Hanya teks yang boleh berbeda: judul, subjudul, label dan deskripsi kolom, HTML, serta teks pilihan. Pilihan dicocokkan berdasarkan posisi; nilai, Storage, dan nilai default tetap mengikuti panel dasar. Pilihan pada pemilih bahasa harus identik. Semua varian harus memiliki jumlah, urutan, jenis dan nama widget, batas angka, input_type, multi_select, struktur dependensi, dan jumlah pilihan yang sama, termasuk kunci dan urutan cabang dependensi. Lokalisasi bersarang tidak didukung. Panggilan berikutnya mengganti salinan; perubahan panel sumber tidak berpengaruh sampai didaftarkan ulang. Validasi dilakukan saat pemanggilan dan show(); perubahan yang tidak cocok menimbulkan kesalahan. Panel yang dilokalkan tidak dapat ditampilkan dalam mode dialog.","behavior":"Daftarkan salinan panel terjemahan untuk panel mengambang. Perubahan pemilih langsung memperbarui tampilan, bahkan saat makro dijeda, tanpa callback Python atau membuka ulang panel; nilai, draf, dan posisi jendela tetap terjaga. Hanya teks yang boleh berbeda: judul, subjudul, label dan deskripsi kolom, HTML, serta teks pilihan. Pilihan dicocokkan berdasarkan posisi; nilai, Storage, dan nilai default tetap mengikuti panel dasar. Pilihan pada pemilih bahasa harus identik. Semua varian harus memiliki jumlah, urutan, jenis dan nama widget, batas angka, input_type, multi_select, struktur dependensi, dan jumlah pilihan yang sama, termasuk kunci dan urutan cabang dependensi. Lokalisasi bersarang tidak didukung. Panggilan berikutnya mengganti salinan; perubahan panel sumber tidak berpengaruh sampai didaftarkan ulang. Validasi dilakukan saat pemanggilan dan show(); perubahan yang tidak cocok menimbulkan kesalahan. Panel yang dilokalkan tidak dapat ditampilkan dalam mode dialog.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"selector","type":"String","defaultValue":null,"description":"Nama radio_group atau dropdown pilihan tunggal yang sudah ditambahkan sebelumnya; multi_select dan depends_on tidak boleh digunakan pada pemilih ini.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"variants","type":"dict[String, MacroPanel]","defaultValue":null,"description":"Tepat satu panel untuk setiap label pilihan pemilih, dengan label tersebut sebagai kunci. Panel disalin saat dipanggil; nilai default varian tidak mengubah perilaku panel dasar.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"locales","type":"dict[String, String]?","defaultValue":"None","description":"Optional map from selector option labels to supported app language codes en, vi, th, id, or fil. It must cover every variant exactly and controls built-in panel labels such as Pause and select-all summaries; None keeps the app language.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"MacroPanel","returnDescription":"Panel yang sama, sehingga metode panel lain dapat dipanggil pada hasilnya.","example":"# Ganti bahasa panel mengambang antara Inggris dan Vietnam\nen = MacroPanel(\"Fishing\")\nen.radio_group(\"language\", [\"English\", \"Tiếng Việt\"], label=\"Language\")\nen.checkbox(\"enabled\", label=\"Enabled\", checked=True)\nvi = MacroPanel(\"Câu cá\")\nvi.radio_group(\"language\", [\"English\", \"Tiếng Việt\"], label=\"Ngôn ngữ\")\nvi.checkbox(\"enabled\", label=\"Bật\", checked=True)\nen.localize(\"language\", {\"English\": en, \"Tiếng Việt\": vi}, locales={\"English\": \"en\", \"Tiếng Việt\": \"vi\"})\nconfig = en.show(mode=\"floating\")","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-show","kind":"METHOD","parentKey":"class-macropanel","name":"show","signature":"panel.show(*, mode=\"dialog\", anchor=\"top_left\", stop_button=True, width=None, height=None, collapsed=None, dock_position=None, pause_on_expand=True)","description":"Tampilkan panel dan kembalikan dict berisi nama kolom dan nilainya. Nilai native tersimpan diprioritaskan, lalu entri Storage yang cocok, lalu nilai awal setiap kolom. Setiap perubahan yang diterima langsung menyimpan pengaturan native dan mencerminkannya ke Storage, termasuk saat makro dijeda; skrip tidak perlu memanggil Storage.set(), values(), atau close(). Kotak centang dan sakelar menghasilkan Boolean, penggeser dan kolom angka Number, stepper Int, pemilih indeks Int mulai 0, dan kolom teks String. Membuka show() yang sama berulang tanpa aksi runtime lain menghentikan skrip agar panel tidak terus terbuka tanpa akhir.","behavior":"Tampilkan panel dan kembalikan dict berisi nama kolom dan nilainya. Nilai native tersimpan diprioritaskan, lalu entri Storage yang cocok, lalu nilai awal setiap kolom. Setiap perubahan yang diterima langsung menyimpan pengaturan native dan mencerminkannya ke Storage, termasuk saat makro dijeda; skrip tidak perlu memanggil Storage.set(), values(), atau close(). Kotak centang dan sakelar menghasilkan Boolean, penggeser dan kolom angka Number, stepper Int, pemilih indeks Int mulai 0, dan kolom teks String. Membuka show() yang sama berulang tanpa aksi runtime lain menghentikan skrip agar panel tidak terus terbuka tanpa akhir.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"show() mode dialog menunggu pengguna. show(mode=\"floating\") lanjut tanpa konfirmasi; gunakan values() untuk membaca kontrol dan close() untuk menutup panel."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"mode","type":"String","defaultValue":"\"dialog\"","description":"dialog menunggu konfirmasi; Cancel mengembalikan dict kosong. floating langsung mengembalikan hasil dan tetap tampil sampai ditutup atau makro selesai. Panel mengambang lain menggantikan panel yang terlihat.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"anchor","type":"String","defaultValue":"\"top_left\"","description":"Posisi panel mengambang yang diperluas: top_left, top_right, bottom_left, bottom_right, atau free. free dimulai di kiri atas dan panel dapat diseret terpisah dari dock bersama. Menyeret dock hanya memindahkan dock. Pemanggilan show() berulang mempertahankan posisi saat ini.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"stop_button","type":"Boolean","defaultValue":"True","description":"Tampilkan tombol Berhenti pada panel mengambang yang diperluas. Panel yang diciutkan tidak memiliki tombol Berhenti terpisah; dock utama tetap memiliki tombol Berhenti biasa dalam mode row.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"width","type":"Int?","defaultValue":"None","description":"Lebar jendela mengambang saat diperluas dalam piksel layar saat ini; None memakai ukuran ringkas otomatis. Gunakan bilangan bulat positif. Overlay membatasi ukuran agar header dan jendela muat di layar; panel yang diciutkan tetap ringkas. Skala koordinat Point tidak berlaku.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"height","type":"Int?","defaultValue":"None","description":"Tinggi jendela mengambang saat diperluas dalam piksel layar saat ini; None mengikuti isi. Gunakan bilangan bulat positif. Overlay membatasi ukuran agar header dan jendela muat di area layar di atas keyboard; panel yang diciutkan tetap ringkas. Skala koordinat Point tidak berlaku.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"collapsed","type":"Boolean?","defaultValue":"None","description":"Hanya untuk mode floating; nilai selain None ditolak dalam mode dialog. True menciutkan panel menjadi tombol buka pada dock utama; False memperluasnya. None membuka panel baru dalam keadaan diperluas dan mempertahankan keadaan saat ini pada pemanggilan show() berulang. Berlaku juga saat pertama ditampilkan. Sertakan kembali anchor, width, atau height kustom dalam pemanggilan show() berikutnya untuk mempertahankan tata letak panel yang diperluas.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"dock_position","type":"Point | tuple[Number, Number] | list[Number] | None","defaultValue":"None","description":"Hanya untuk mode floating; nilai selain None ditolak dalam mode dialog. Atur posisi kiri atas dock utama bersama dalam piksel layar saat ini, termasuk saat panel diperluas atau sebelum pertama kali diciutkan. Dock bergerak dengan animasi 160 ms. Menerima Point(x, y) atau tuple/list berisi tepat dua angka berhingga dalam rentang -2147483648 hingga 2147483647; skala dan anchor Point tidak berlaku. Dock dibatasi agar tetap di layar setelah ukuran sebenarnya diukur. None mempertahankan posisi saat ini. Posisi panel yang diperluas tetap terpisah untuk semua anchor, termasuk free.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"pause_on_expand","type":"Boolean","defaultValue":"True","description":"Hanya untuk mode floating; memberikan argumen ini secara eksplisit pada mode dialog menimbulkan error. True menjeda makro saat panel mengambang sedang terbuka penuh dan terlihat. show() langsung mengembalikan hasil; eksekusi dijeda pada titik pemeriksaan runtime berikutnya hingga panel diciutkan, disembunyikan, atau ditutup. Gunakan collapsed=True atau pause_on_expand=False agar skrip tetap berjalan saat panel terbuka. False menonaktifkan jeda dari panel ini; jeda manual tetap berlaku. Setiap show() memakai nilai pada panggilan tersebut, kembali ke True jika tidak diberikan.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"dict","returnDescription":"dialog mengembalikan dict terpisah. floating mengembalikan dict yang sama saat show() dipanggil lagi; perubahan pengguna yang valid langsung memperbarui entrinya serta sudah disimpan secara native dan dicerminkan ke Storage. Variabel terpisah seperti speed = config[\"speed\"] menyimpan nilai saat dibaca. values() mengembalikan salinan terpisah; close() mempertahankan nilai terakhir. Mengedit dict di Python tidak mengubah panel atau pengaturan tersimpan, dan pembaruan panel berikutnya menimpa edit tersebut.","example":"# Mulai dalam keadaan diciutkan, lalu perluas, ciutkan, dan pindahkan dock\npanel = MacroPanel(\"Run config\")\npanel.show(mode=\"floating\", collapsed=True, dock_position=Point(20, 100))\nwait(1000)\npanel.show(mode=\"floating\", collapsed=False, pause_on_expand=False)\nwait(1000)\npanel.show(mode=\"floating\", collapsed=True, dock_position=(100, 200))","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-values","kind":"METHOD","parentKey":"class-macropanel","name":"values","signature":"panel.values()","description":"Salin nilai terakhir yang valid setelah show(). Perubahan panel selanjutnya tidak mengubah salinan ini. Perubahan valid pada panel mengambang sudah disimpan secara native dan langsung dicerminkan ke Storage; setelah close(), values() mengembalikan nilai terakhir. Memanggil sebelum show() menimbulkan kesalahan.","behavior":"Salin nilai terakhir yang valid setelah show(). Perubahan panel selanjutnya tidak mengubah salinan ini. Perubahan valid pada panel mengambang sudah disimpan secara native dan langsung dicerminkan ke Storage; setelah close(), values() mengembalikan nilai terakhir. Memanggil sebelum show() menimbulkan kesalahan.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Dict terpisah berisi nama kolom dan nilainya.","example":"# Baca pengaturan terkini dari jendela ringkas pada setiap iterasi\npanel = MacroPanel(\"Live controls\")\npanel.slider(\"speed\", min=1, max=10, default=5)\nconfig = panel.show(mode=\"floating\", anchor=\"free\", stop_button=True, width=320, height=240)\nfor index in range(10):\n    print(config[\"speed\"])\n    wait(1000)\nsnapshot = panel.values()\npanel.close()","aliases":[],"group":"FLOW"},{"key":"class-macropanel-method-close","kind":"METHOD","parentKey":"class-macropanel","name":"close","signature":"panel.close()","description":"Tutup panel mengambang ini. Nilai yang diterima sudah disimpan secara native dan dicerminkan ke Storage, termasuk saat makro dijeda. Makro tidak dihentikan. Aman dipanggil ulang setelah show(); values() tetap mengembalikan nilai terakhir. Memanggil sebelum show() menimbulkan kesalahan.","behavior":"Tutup panel mengambang ini. Nilai yang diterima sudah disimpan secara native dan dicerminkan ke Storage, termasuk saat makro dijeda. Makro tidak dihentikan. Aman dipanggil ulang setelah show(); values() tetap mengembalikan nilai terakhir. Memanggil sebelum show() menimbulkan kesalahan.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Buat tiap panel dalam satu alur. Dialog menunggu dan muncul satu per satu; panel mengambang membiarkan skrip lanjut. error() menghentikan semua alur."},"limitations":[],"relatedApis":["class-system-static-method-stop","class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"None","returnDescription":"Tidak ada nilai kembalian.","example":"# Baca pengaturan terkini dari jendela ringkas pada setiap iterasi\npanel = MacroPanel(\"Live controls\")\npanel.slider(\"speed\", min=1, max=10, default=5)\nconfig = panel.show(mode=\"floating\", anchor=\"free\", stop_button=True, width=320, height=240)\nfor index in range(10):\n    print(config[\"speed\"])\n    wait(1000)\nsnapshot = panel.values()\npanel.close()","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":true,"fields":["dev","battery","screen","memory"],"fieldDocs":[{"name":"dev","type":"dict","defaultValue":null,"description":"Detail perangkat saat ini: isEmulator, level API Android sdk, kode language, darkmode, dukungan touch, dan kesiapan capture. Baca lagi untuk mendapatkan detail terbaru.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"battery","type":"dict","defaultValue":null,"description":"Detail baterai saat ini: percent dari 0 hingga 100, charging, temperature dalam derajat Celsius, dan teks health. percent atau temperature yang tidak tersedia bernilai -1; health yang tidak diketahui adalah \"unknown\". Baca lagi untuk memperbarui.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"screen","type":"dict","defaultValue":null,"description":"Detail layar saat ini: width dan height dalam piksel, skala density, dpi, serta orientation sebagai rotasi layar dalam derajat (0, 90, 180, atau 270). Baca lagi setelah memutar perangkat.","suggestAsNamedArg":true,"requirement":null,"callingMode":null},{"name":"memory","type":"dict","defaultValue":null,"description":"Memori sistem saat ini: avail, total, dan ambang memori rendah threshold dalam byte; low menunjukkan memori tersedia sedikit. Baca lagi untuk memperbarui.","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":"Baca tanggal dan waktu saat ini dalam milidetik sejak 1970-01-01 00:00:00 UTC.","behavior":"Baca tanggal dan waktu saat ini dalam milidetik sejak 1970-01-01 00:00:00 UTC.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"Milidetik sejak 1970-01-01 00:00:00 UTC.","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":"Baca nama versi CogniTab yang terpasang.","behavior":"Baca nama versi CogniTab yang terpasang.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"String","returnDescription":"Nama versi CogniTab, atau \"unknown\" jika tidak tersedia.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Baca level API Android yang digunakan perangkat ini.","behavior":"Baca level API Android yang digunakan perangkat ini.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Number","returnDescription":"Level API Android berupa angka.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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 singkat Android. List, dict, dan nilai terstruktur lain diringkas agar mudah dibaca.","behavior":"Tampilkan pesan singkat Android. List, dict, dan nilai terstruktur lain diringkas agar mudah dibaca.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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 semua alur makro; baris berikutnya tidak berjalan. Gunakan Flow.stop(name) untuk menghentikan satu alur latar."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Lebar area dock yang diciutkan dalam piksel. Saat panel mengambang yang diciutkan terpasang, dock menggunakan ukuran alaminya; ukuran yang diminta disimpan dan diterapkan kembali saat panel tidak lagi terpasang.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"},{"name":"height","type":"Number?","defaultValue":"None","description":"Tinggi area dock yang diciutkan dalam piksel. Saat panel mengambang yang diciutkan terpasang, dock menggunakan ukuran alaminya; ukuran yang diminta disimpan dan diterapkan kembali saat panel tidak lagi terpasang.","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: icon, row, atau hidden. icon tetap menyediakan tombol buka untuk panel mengambang yang diciutkan. hidden berlaku selama proses ini dan mempertahankan tombol Berhenti di kiri bawah saat tidak ada tombol Berhenti pada panel mengambang yang terlihat; saat panel diciutkan, jendela darurat ini juga menyediakan tombol buka.","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-send-key","kind":"STATIC_METHOD","parentKey":"class-system","name":"send_key","signature":"System.send_key(key)","description":"Kirim sepasang peristiwa tekan dan lepas tombol Android ke editor teks yang sedang aktif melalui Accessibility di Android 13 atau lebih baru, tanpa mencari posisi tombol pada keyboard layar.","behavior":"Kirim sepasang peristiwa tekan dan lepas tombol Android ke editor teks yang sedang aktif melalui Accessibility di Android 13 atau lebih baru, tanpa mencari posisi tombol pada keyboard layar.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"key","type":"String|Number","defaultValue":null,"description":"Nama tombol Android tanpa membedakan huruf besar dan kecil, dengan awalan `KEYCODE_` opsional, misalnya `ENTER`, `TAB`, `ESCAPE`, `DEL`, `DPAD_LEFT`, `A`, atau `F1`; atau kode tombol Android berupa bilangan bulat positif, misalnya `66` untuk Enter. Spasi di awal dan akhir nama diabaikan.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"}],"returnType":"Boolean","returnDescription":"`True` jika kedua peristiwa tombol sudah dikirim; `False` di Android 12L atau lebih lama, jika tombol tidak didukung, tidak ada koneksi input editor yang aktif, atau pengiriman gagal. Aplikasi tujuan menentukan cara menangani tombol; periksa layarnya sebelum melanjutkan. Fungsi ini tidak mengirim tombol perangkat keras ke seluruh sistem atau memastikan bahwa aplikasi telah menanganinya.","example":"# Kirim tombol ke kolom teks yang sedang aktif dengan nama atau kode tombol Android\nsent = System.send_key(\"ENTER\")\nSystem.send_key(key=\"TAB\")\nSystem.send_key(66)","aliases":[],"group":"FLOW"},{"key":"class-system-static-method-back","kind":"STATIC_METHOD","parentKey":"class-system","name":"back","signature":"System.back()","description":"Minta Android kembali, seperti menekan tombol Back.","behavior":"Minta Android kembali, seperti menekan tombol Back.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` jika Android menerima tindakan, selain itu `False`.","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":"Minta Android membuka layar utama.","behavior":"Minta Android membuka layar utama.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` jika Android menerima tindakan, selain itu `False`.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` jika Android menerima tindakan, selain itu `False`.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` jika Android menerima tindakan, selain itu `False`.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` jika Android menerima tindakan, selain itu `False`.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` jika Android menerima tindakan, selain itu `False`.","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 pengaturan cepat Android.","behavior":"Buka pengaturan cepat Android.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` jika Android menerima tindakan, selain itu `False`.","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":"Minta Android mengambil tangkapan layar.","behavior":"Minta Android mengambil tangkapan layar.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"Boolean","returnDescription":"`True` jika Android menerima tindakan, selain itu `False`.","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":"Atur apakah pengenalan layar memakai ulang gambar tangkapan selama proses makro ini. Biasanya gambar dapat dipakai ulang hingga 100 ms. Panggil metode langsung pada ScreenCapture; jangan buat objeknya.","behavior":"Atur apakah pengenalan layar memakai ulang gambar tangkapan selama proses makro ini. Biasanya gambar dapat dipakai ulang hingga 100 ms. Panggil metode langsung pada ScreenCapture; jangan buat objeknya.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Mengubah pemakaian ulang gambar untuk semua alur, tanpa mengambil gambar, menunggu durasi, atau meminta izin tangkapan. Tangkapan berikutnya memakai pengaturan ini."},"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":"Simpan satu gambar layar untuk pemeriksaan berulang hingga cache_off() atau makro selesai. Gunakan gambar berikutnya yang tersedia, atau gambar valid terakhir jika belum ada yang baru. Ini diprioritaskan daripada pengaturan penggunaan ulang otomatis dan tidak meminta izin tangkapan layar.","behavior":"Simpan satu gambar layar untuk pemeriksaan berulang hingga cache_off() atau makro selesai. Gunakan gambar berikutnya yang tersedia, atau gambar valid terakhir jika belum ada yang baru. Ini diprioritaskan daripada pengaturan penggunaan ulang otomatis dan tidak meminta izin tangkapan layar.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Mengubah pemakaian ulang gambar untuk semua alur, tanpa mengambil gambar, menunggu durasi, atau meminta izin tangkapan. Tangkapan berikutnya memakai pengaturan ini."},"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":"Berhenti menyimpan gambar pilihan cache_on(). Pengaturan penggunaan ulang otomatis tidak berubah, sehingga gambar terbaru masih dapat dipakai ulang. Panggil juga auto_cache_off() jika setiap pemeriksaan membutuhkan gambar paling baru yang tersedia.","behavior":"Berhenti menyimpan gambar pilihan cache_on(). Pengaturan penggunaan ulang otomatis tidak berubah, sehingga gambar terbaru masih dapat dipakai ulang. Panggil juga auto_cache_off() jika setiap pemeriksaan membutuhkan gambar paling baru yang tersedia.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Mengubah pemakaian ulang gambar untuk semua alur, tanpa mengambil gambar, menunggu durasi, atau meminta izin tangkapan. Tangkapan berikutnya memakai pengaturan ini."},"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":"Matikan penggunaan ulang gambar otomatis agar permintaan tangkapan mencari gambar terbaru yang tersedia. Langsung kembali; durasi dimulai saat pemanggilan dan pemanggilan ulang menggantinya. Berlaku untuk bitmap, gambar mentah, TFLite, dan piksel. Ini bisa menambah pemrosesan serta penggunaan baterai tanpa mempercepat eksekusi atau memaksa Android menggambar piksel baru; waktu tunggu gambar tetap terbatas. Tidak membatalkan cache_on() atau meminta izin tangkapan.","behavior":"Matikan penggunaan ulang gambar otomatis agar permintaan tangkapan mencari gambar terbaru yang tersedia. Langsung kembali; durasi dimulai saat pemanggilan dan pemanggilan ulang menggantinya. Berlaku untuk bitmap, gambar mentah, TFLite, dan piksel. Ini bisa menambah pemrosesan serta penggunaan baterai tanpa mempercepat eksekusi atau memaksa Android menggambar piksel baru; waktu tunggu gambar tetap terbatas. Tidak membatalkan cache_on() atau meminta izin tangkapan.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Mengubah pemakaian ulang gambar untuk semua alur, tanpa mengambil gambar, menunggu durasi, atau meminta izin tangkapan. Tangkapan berikutnya memakai pengaturan ini."},"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":"Durasi dalam milidetik bulat positif (100 dan 100.0 valid). Abaikan atau gunakan None agar tetap mati hingga auto_cache_on() atau makro selesai. Nol, nilai negatif, pecahan, string, boolean, dan nilai melampaui batas menimbulkan kesalahan.","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":"Izinkan penggunaan ulang gambar otomatis segera, membatalkan masa penonaktifan sebelumnya. Makro juga memulihkannya saat selesai. Ini tidak membatalkan cache_on(), meminta izin tangkapan, atau menunggu.","behavior":"Izinkan penggunaan ulang gambar otomatis segera, membatalkan masa penonaktifan sebelumnya. Makro juga memulihkannya saat selesai. Ini tidak membatalkan cache_on(), meminta izin tangkapan, atau menunggu.","execution":{"blocking":"no","threadSafety":"serialized","parallel":"conditional","details":"Mengubah pemakaian ulang gambar untuk semua alur, tanpa mengambil gambar, menunggu durasi, atau meminta izin tangkapan. Tangkapan berikutnya memakai pengaturan ini."},"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":"Simpan nilai bernama untuk digunakan makro ini pada proses berikutnya. Semua alur dalam satu proses berbagi Storage; variabel biasa hanya dibagikan oleh aksi PYTHON_CODE berurutan dalam satu alur, termasuk GROUP. Alur paralel memiliki variabel terpisah. Storage bukan saluran pesan antarproses.","behavior":"Simpan nilai bernama untuk digunakan makro ini pada proses berikutnya. Semua alur dalam satu proses berbagi Storage; variabel biasa hanya dibagikan oleh aksi PYTHON_CODE berurutan dalam satu alur, termasuk GROUP. Alur paralel memiliki variabel terpisah. Storage bukan saluran pesan antarproses.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"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":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"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":"Simpan nilai pada sebuah kunci, mengganti nilai lama jika ada. Tipe yang didukung mencakup Number, String, Boolean, Point, Region, list, tuple, dict, set, dan None; koleksi boleh berisi koleksi lain.","behavior":"Simpan nilai pada sebuah kunci, mengganti nilai lama jika ada. Tipe yang didukung mencakup Number, String, Boolean, Point, Region, list, tuple, dict, set, dan None; koleksi boleh berisi koleksi lain.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"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 mengembalikan nilai. Pembacaan Storage lain langsung melihat perubahan. Perubahan disimpan ke perangkat setelah 2 detik tanpa penulisan baru dan sekali lagi saat makro serta semua alur latar selesai.","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":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"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":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"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":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"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":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"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":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"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":"Ambil dict yang digunakan Storage dalam proses ini. Semua alur berbagi dict tersebut: menambah, mengubah, atau menghapus entri langsung mengubah Storage. Edit disimpan setelah 2 detik tanpa penulisan baru dan sekali lagi saat makro serta semua alur latar selesai.","behavior":"Ambil dict yang digunakan Storage dalam proses ini. Semua alur berbagi dict tersebut: menambah, mengubah, atau menghapus entri langsung mengubah Storage. Edit disimpan setelah 2 detik tanpa penulisan baru dan sekali lagi saat makro serta semua alur latar selesai.","execution":{"blocking":"conditional","threadSafety":"serialized","parallel":"conditional","details":"Storage dibagikan antaralur. Tiap operasi, termasuk perubahan dalam koleksi tersimpan, dilindungi. Alur lain dapat menulis di antara get() dan set(); gunakan satu penulis agar pembaruannya tidak tertimpa."},"limitations":[],"relatedApis":["class-flow"],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Dict Storage itu sendiri, bukan salinan terpisah.","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":"Tekan lalu lepaskan pada setiap titik tujuan. Secara default, tunggu hingga klik selesai sebelum melanjutkan. Parameter menerima argumen berdasarkan posisi atau nama sesuai urutan yang didokumentasikan.","behavior":"Tekan lalu lepaskan pada setiap titik tujuan. Secara default, tunggu hingga klik selesai sebelum melanjutkan. Parameter menerima argumen berdasarkan posisi atau nama sesuai urutan yang didokumentasikan.","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"parallel=True mengantrekan sentuhan; delay_before, delay_after tetap menunggu di luar collect. Touch.collect() mengumpulkan, send() mengirim, dan wait() menunggu selesai. Sentuhan antaralur dapat saling mengganggu."},"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":"Point, koordinat piksel tetap (x, y), atau hasil pencarian. Gunakan Point untuk penskalaan atau penjangkaran. Klik setiap titik yang ditemukan; tidak melakukan apa pun jika tidak ada titik.","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"hold_ms","type":"Int","defaultValue":"0","description":"Durasi menahan dalam milidetik","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"offset","type":"tuple[Number, Number]","defaultValue":"(0, 0)","description":"Offset piksel horizontal dan vertikal yang ditambahkan ke koordinat tujuan akhir.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"random","type":"Number | tuple[Number, Number]","defaultValue":"0","description":"Offset piksel acak maksimum ke setiap arah dari tujuan. Satu angka berlaku untuk kedua sumbu; (x, y) mengatur setiap sumbu secara terpisah. Nilai negatif menjadi 0.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_before","type":"Number","defaultValue":"0","description":"Jeda sebelum klik dalam milidetik.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"delay_after","type":"Number","defaultValue":"0","description":"Jeda setelah klik dalam milidetik.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"},{"name":"parallel","type":"Boolean","defaultValue":"False","description":"True: masukkan sentuhan ke antrean dan kembalikan id numeriknya tanpa menunggu selesai. Setelah Touch.collect(), tunggu Touch.send(); sentuhan yang dikumpulkan dapat berlangsung bersamaan dengan nilai delay_before berbeda. Batalkan dengan Touch.cancel(id), atau batalkan semuanya dengan Touch.cancel().","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Number | list[Number] | None","returnDescription":"Dengan parallel=True: satu id sentuhan untuk satu titik, atau daftar id untuk beberapa titik. Jika tidak, atau tidak ada titik yang ditemukan: None.","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":"Gerakkan satu jari melalui nilai SwipePoint secara berurutan. Secara default, tunggu hingga geseran selesai sebelum melanjutkan.","behavior":"Gerakkan satu jari melalui nilai SwipePoint secara berurutan. Secara default, tunggu hingga geseran selesai sebelum melanjutkan.","execution":{"blocking":"conditional","threadSafety":"limited","parallel":"conditional","details":"parallel=True mengantrekan sentuhan; delay_before, delay_after tetap menunggu di luar collect. Touch.collect() mengumpulkan, send() mengirim, dan wait() menunggu selesai. Sentuhan antaralur dapat saling mengganggu."},"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":"True: masukkan geseran ke antrean tanpa menunggu selesai. Setelah Touch.collect(), tunggu Touch.send(). Batalkan dengan Touch.cancel(id), atau batalkan semuanya dengan Touch.cancel().","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 jumlah milidetik yang ditentukan.","behavior":"Jeda eksekusi skrip selama jumlah milidetik yang ditentukan.","execution":{"blocking":"yes","threadSafety":"limited","parallel":"conditional","details":"Menunggu durasi atau sentuhan selesai. Alur lain dapat lanjut; jeda dan stop tetap berlaku."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"ms","type":"Int","defaultValue":null,"description":"Durasi tunggu dalam milidetik; nilai negatif menjadi 0. Makro tetap dapat dijeda atau dihentikan selama menunggu.","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":"Ganti isi kolom teks yang dapat diedit dengan value.","behavior":"Ganti isi kolom teks yang dapat diedit dengan value.","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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: gunakan kolom yang dapat diedit dan sedang difokuskan, atau kolom pertama jika tidak ada yang difokuskan. N >= 1: fokuskan dan gunakan kolom yang dapat diedit ke-N.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"None","returnDescription":"None. Jika tidak ditemukan kolom yang dapat diedit, tidak ada teks yang dimasukkan.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Selisih antara nilai yang berurutan. Gunakan nilai negatif untuk menghitung mundur; 0 menimbulkan kesalahan.","suggestAsNamedArg":false,"requirement":"overload-dependent","callingMode":"positional-only"}],"returnType":"range","returnDescription":"Urutan bilangan bulat yang tidak dapat diubah dan dapat dibaca ulang, berakhir sebelum stop. Kosong jika step menjauhi stop. Gunakan list(result) untuk membuat daftar yang dapat diedit.","example":"# Klik berulang pada lima posisi dengan jarak yang sama\nnumbers = range(5)\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":"Beri nomor pada item masukan saat membacanya dalam perulangan.","behavior":"Beri nomor pada item masukan saat membacanya dalam perulangan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","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":"enumerate","returnDescription":"Iterator sekali pakai yang menghasilkan pasangan (index, item). Item hanya dibaca saat dibutuhkan. Gunakan list(result) untuk menyimpan pasangan tersebut.","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, strict=False)","description":"Pasangkan item pada posisi yang sama dari setiap masukan saat melakukan perulangan.","behavior":"Pasangkan item pada posisi yang sama dari setiap masukan saat melakukan perulangan.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterables","type":"Iterable","defaultValue":null,"description":"Values to combine. Dictionaries contribute keys.","suggestAsNamedArg":false,"requirement":"optional","callingMode":"variadic"},{"name":"strict","type":"Boolean","defaultValue":"False","description":"False: berhenti pada masukan terpendek. True: timbulkan kesalahan saat membaca jika panjang masukan berbeda. Berikan argumen berdasarkan nama.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"zip","returnDescription":"Iterator sekali pakai yang menghasilkan tuple, masing-masing berisi satu item dari setiap masukan. Gunakan list(result) untuk menyimpan tuple tersebut.","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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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-all","kind":"FUNCTION","parentKey":null,"name":"all","signature":"all(iterable, /)","description":"Mengembalikan False pada elemen falsy pertama, selain itu True, termasuk untuk iterable kosong. Menggunakan iterasi dan uji nilai kebenaran biasa; mendukung jeda dan penghentian.","behavior":"Mengembalikan False pada elemen falsy pertama, selain itu True, termasuk untuk iterable kosong. Menggunakan iterasi dan uji nilai kebenaran biasa; mendukung jeda dan penghentian.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Melakukan iterasi di alur saat ini dan berhenti pada nilai falsy pertama. Iterasi atau uji nilai dapat memanggil kode pengguna atau menunggu host; error diteruskan. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Koleksi atau iterable yang diperiksa.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":null,"example":"# Periksa semua skor lulus\nscores = [0.9, 0.95]\nprint(all(score >= 0.85 for score in scores))","aliases":[],"group":"COLLECTION"},{"key":"function-any","kind":"FUNCTION","parentKey":null,"name":"any","signature":"any(iterable, /)","description":"Kembalikan True jika setidaknya satu item dalam iterable bernilai truthy; berhenti pada item truthy pertama. Kembalikan False saat iterable kosong atau semua item bernilai falsy.","behavior":"Kembalikan True jika setidaknya satu item dalam iterable bernilai truthy; berhenti pada item truthy pertama. Kembalikan False saat iterable kosong atau semua item bernilai falsy.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"Iterable","defaultValue":null,"description":"Koleksi, String, range, iterator, atau ekspresi generator yang akan diperiksa. Nilai yang tidak dapat diiterasi akan memunculkan TypeError.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"True jika ada item yang truthy; False jika tidak ada.","example":"scores = [0.42, 0.91, 0.65]\nhas_match = any(score >= 0.85 for score in scores)\nif has_match:\n    text(\"found\")","aliases":[],"group":"COLLECTION"},{"key":"function-globals","kind":"FUNCTION","parentKey":null,"name":"globals","signature":"globals()","description":"Kembalikan dictionary langsung yang berisi variabel, fungsi, dan kelas global tingkat modul untuk jalannya skrip saat ini.","behavior":"Kembalikan dictionary langsung yang berisi variabel, fungsi, dan kelas global tingkat modul untuk jalannya skrip saat ini.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[],"returnType":"dict","returnDescription":"Dict langsung dari simbol global. Pembacaan dan pembaruan dengan kunci string berlaku langsung pada cakupan global; kunci bukan string dan perubahan pada Recognition akan memunculkan error.","example":"status = \"ready\"\nif \"status\" in globals():\n    text(str(globals()[\"status\"]))","aliases":[],"group":"COLLECTION"},{"key":"function-int","kind":"FUNCTION","parentKey":null,"name":"int","signature":"int(value=0, /)","description":"Ubah value menjadi bilangan bulat dengan membuang bagian desimal dari masukan numerik. Teks harus berisi bilangan bulat; teks desimal menimbulkan kesalahan. True menjadi 1 dan False menjadi 0.","behavior":"Ubah value menjadi bilangan bulat dengan membuang bagian desimal dari masukan numerik. Teks harus berisi bilangan bulat; teks desimal menimbulkan kesalahan. True menjadi 1 dan False menjadi 0.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float | Boolean | String","defaultValue":"0","description":"Value to cast","suggestAsNamedArg":false,"requirement":"optional","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=0.0, /)","description":"Ubah value menjadi bilangan desimal. Teks harus berisi angka yang valid; True menjadi 1.0 dan False menjadi 0.0.","behavior":"Ubah value menjadi bilangan desimal. Teks harus berisi angka yang valid; True menjadi 1.0 dan False menjadi 0.0.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Int | Float | Boolean | String","defaultValue":"0.0","description":"Value to cast","suggestAsNamedArg":false,"requirement":"optional","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":"Ubah value menjadi teks. String yang sudah ada tetap sama; angka dan koleksi bawaan menggunakan notasi teks Python.","behavior":"Ubah value menjadi teks. String yang sudah ada tetap sama; angka dan koleksi bawaan menggunakan notasi teks Python.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":"\"\"","description":"Value to convert","suggestAsNamedArg":false,"requirement":"optional","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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-isinstance","kind":"FUNCTION","parentKey":null,"name":"isinstance","signature":"isinstance(value, class_or_tuple, /)","description":"Periksa apakah nilai termasuk tipe bawaan, kelas nilai DSL, atau kelas yang ditentukan pengguna. Nilai tidak dikonversi.","behavior":"Periksa apakah nilai termasuk tipe bawaan, kelas nilai DSL, atau kelas yang ditentukan pengguna. Nilai tidak dikonversi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":null,"description":"Nilai yang akan diperiksa.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"class_or_tuple","type":"Type | tuple[Type, ...]","defaultValue":null,"description":"Gunakan referensi tipe tanpa tanda kutip: bool, int, float, str, list, tuple, dict, set, range, enumerate, zip; kelas nilai DSL seperti Point, Match, atau AudioMatch; atau kelas yang ditentukan pengguna. Tuple dapat bersarang dan diperiksa dari kiri ke kanan sampai ditemukan kecocokan. Entri tidak valid yang ditemukan sebelum kecocokan akan memunculkan TypeError. String dan type(value) ditolak karena type() mengembalikan teks. Flow, System, Storage, Touch, ScreenCapture, dan Recognition adalah namespace atau konteks, bukan tipe.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"True jika tipenya cocok; selain itu False, termasuk untuk tuple kosong. bool juga cocok dengan int; int dan float adalah tipe yang berbeda. Kelas yang ditentukan pengguna dicocokkan berdasarkan definisinya, meskipun namanya sama.","example":"# Periksa tipe nilai sebelum menggunakannya\nvalue = 42\nif isinstance(value, (int, float)):\n    print(value + 1)\nprint(isinstance(Point(10, 20), Point))","aliases":[],"group":"TYPE_CAST"},{"key":"function-hasattr","kind":"FUNCTION","parentKey":null,"name":"hasattr","signature":"hasattr(object, name, /)","description":"Periksa apakah objek memiliki atribut atau metode melalui pencarian atribut biasa di DSL. Metode tidak dipanggil.","behavior":"Periksa apakah objek memiliki atribut atau metode melalui pencarian atribut biasa di DSL. Metode tidak dipanggil.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menggunakan pencarian atribut biasa tanpa memanggil metode. Membaca atribut dapat membaca keadaan host saat ini. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"object","type":"Any","defaultValue":null,"description":"Objek atau namespace yang akan diperiksa.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"name","type":"String","defaultValue":null,"description":"Nama atribut atau metode. Nilai selain string menimbulkan TypeError.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"True jika atribut ada, meskipun nilainya None, False, atau 0. False hanya jika atribut tidak ada; error pencarian lainnya tetap diteruskan. Kunci dict mengikuti aturan akses titik DSL.","example":"# Baca koordinat hanya jika atributnya tersedia\nvalue = Point(10, 20)\nif hasattr(value, \"x\"):\n    print(value.x)\nprint(hasattr(value, \"missing\"))","aliases":[],"group":"TYPE_CAST"},{"key":"function-print","kind":"FUNCTION","parentKey":null,"name":"print","signature":"print(*values, sep=\" \", end=\"\\n\")","description":"Tulis nilai ke konsol skrip overlay lalu lanjutkan eksekusi. Nilai menggunakan teks yang sama dengan str(value).","behavior":"Tulis nilai ke konsol skrip overlay lalu lanjutkan eksekusi. Nilai menggunakan teks yang sama dengan str(value).","execution":{"blocking":"conditional","threadSafety":"not-guaranteed","parallel":"conditional","details":"Waktu tunggu bergantung pada API. Gunakan objek terpisah untuk tiap alur; perubahan satu objek dari beberapa alur dapat memberi hasil tak terduga."},"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=False, /)","description":"Ubah value menjadi True atau False untuk digunakan dalam kondisi.","behavior":"Ubah value menjadi True atau False untuk digunakan dalam kondisi.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"value","type":"Any","defaultValue":"False","description":"Value to convert","suggestAsNamedArg":false,"requirement":"optional","callingMode":"positional-only"}],"returnType":"Boolean","returnDescription":"False untuk None, False, 0, atau teks/koleksi kosong; Match menggunakan nilai found miliknya. Selain itu, True.","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Int | 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":"Tambahkan angka masukan ke start dan kembalikan totalnya.","behavior":"Tambahkan angka masukan ke start dan kembalikan totalnya.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"list | tuple | set | generator","defaultValue":null,"description":"Koleksi atau generator yang menyediakan angka satu per satu. Ekspresi generator memerlukan tanda kurung sendiri jika diikuti argumen lain atau koma di akhir.","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":"Memproses nilai dalam alur saat ini. Fungsi key juga berjalan di sana; penantian dan perubahannya terjadi sebelum panggilan kembali."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"Nilai yang itemnya dapat dibaca satu per satu, seperti daftar atau string. Untuk dict, bandingkan kunci.","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":"Fungsi yang dipanggil untuk setiap item; bandingkan hasilnya sebagai pengganti item. None membandingkan item secara langsung.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Any","returnDescription":"Item asli yang paling kecil, atau default jika masukan kosong. Masukan kosong tanpa default, atau nilai yang tidak dapat dibandingkan, menimbulkan kesalahan.","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":"Memproses nilai dalam alur saat ini. Fungsi key juga berjalan di sana; penantian dan perubahannya terjadi sebelum panggilan kembali."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict","defaultValue":null,"description":"Nilai yang itemnya dapat dibaca satu per satu, seperti daftar atau string. Untuk dict, bandingkan kunci.","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":"Fungsi yang dipanggil untuk setiap item; bandingkan hasilnya sebagai pengganti item. None membandingkan item secara langsung.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"keyword-only"}],"returnType":"Any","returnDescription":"Item asli yang paling besar, atau default jika masukan kosong. Masukan kosong tanpa default, atau nilai yang tidak dapat dibandingkan, menimbulkan kesalahan.","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 diurutkan dari terkecil ke terbesar. Item dengan nilai pembanding yang sama mempertahankan urutan aslinya, bahkan dengan reverse=True.","behavior":"Kembalikan daftar baru yang diurutkan dari terkecil ke terbesar. Item dengan nilai pembanding yang sama mempertahankan urutan aslinya, bahkan dengan reverse=True.","execution":{"blocking":"conditional","threadSafety":"isolated","parallel":"conditional","details":"Memproses nilai dalam alur saat ini. Fungsi key juga berjalan di sana; penantian dan perubahannya terjadi sebelum panggilan kembali."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"iterable","type":"String | list | tuple | dict | set","defaultValue":null,"description":"Nilai yang itemnya dapat dibaca satu per satu, seperti daftar atau string. Untuk dict, urutkan kunci.","suggestAsNamedArg":false,"requirement":"required","callingMode":"positional-only"},{"name":"key","type":"Callable?","defaultValue":"None","description":"Fungsi yang dipanggil untuk setiap item; bandingkan hasilnya sebagai pengganti item. None membandingkan item secara langsung.","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(number, ndigits=None)","description":"Membulatkan nilai ke sejumlah digit desimal tertentu.","behavior":"Membulatkan nilai ke sejumlah digit desimal tertentu.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"limitations":[],"relatedApis":[],"isCallable":null,"fields":[],"fieldDocs":[],"constants":[],"constructorParams":[],"fieldExample":null,"constructorExample":null,"params":[{"name":"number","type":"Int | Float","defaultValue":null,"description":"Input number","suggestAsNamedArg":true,"requirement":"required","callingMode":"positional-or-keyword"},{"name":"ndigits","type":"Int?","defaultValue":"None","description":"Jumlah tempat desimal yang dipertahankan; nilai negatif membulatkan puluhan, ratusan, dan seterusnya. None mengembalikan bilangan bulat. Nilai tepat di tengah dibulatkan ke hasil genap terdekat.","suggestAsNamedArg":true,"requirement":"optional","callingMode":"positional-or-keyword"}],"returnType":"Int | 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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Int | 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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Int","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Int","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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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":"Pertahankan value di antara min dan max: ganti nilai di luar rentang dengan batas terdekat. Urutan batas yang terbalik tetap diterima.","behavior":"Pertahankan value di antara min dan max: ganti nilai di luar rentang dengan batas terdekat. Urutan batas yang terbalik tetap diterima.","execution":{"blocking":"no","threadSafety":"isolated","parallel":"yes","details":"Menghitung atau mengubah nilai tanpa menunggu tangkapan, gestur, atau input pengguna. Pisahkan objek yang dapat diubah untuk tiap alur."},"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"}]}}