{"id":32483,"date":"2023-03-08T16:29:03","date_gmt":"2023-03-08T15:29:03","guid":{"rendered":"https:\/\/mimolive.com\/?post_type=user-manual&#038;p=32483"},"modified":"2025-06-16T19:35:00","modified_gmt":"2025-06-16T17:35:00","slug":"kendali-jarak-jauh-mengatur-api","status":"publish","type":"user-manual","link":"https:\/\/mimolive.com\/id\/user-manual\/custom-layers\/remote-control-presets-api\/","title":{"rendered":"API Preset Kontrol Jarak Jauh"},"content":{"rendered":"<p>Jika Anda membuat layer khusus, ada kemungkinan untuk menyertakan preset kontrol khusus pada layer Anda. Hal ini akan sangat berguna jika layer Anda memiliki tombol-tombol tekan yang mengontrol perilaku layer Anda saat ditayangkan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"data-structure\">Struktur Data<\/h3>\n\n\n\n<p>Struktur data berikut ini adalah contoh output yang perlu ada dalam komposisi Anda di bawah kunci output struktur `tvOut_ControlRepresentations`:<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code>{\n  \"tvOut_ControlRepresentations\": &#91;\n    {\n      \"title\": \"Compact Cut's\",\n      \"buttons\": &#91;\n        {\n          \"actions\": &#91;\n            {\n              \"layerId\": \"03627C25-CC8A-474F-A738-C4DEB3353FA4\",\n              \"variantId\": \"F6F52194-06DE-462E-983A-8D505C533A69\",\n              \"type\": \"signal\",\n              \"signalKey\": \"tvGroup_Control__Cut_1_TypeSignal\",\n              \"signalName\": \"Cut 1\"\n            }\n          ],\n          \"liveState\": {\n            \"layerId\": \"03627C25-CC8A-474F-A738-C4DEB3353FA4\",\n            \"variantId\": \"F6F52194-06DE-462E-983A-8D505C533A69\",\n            \"dynamicSourceId\": \"tvIn_VideoSourceAImage\"\n          },\n          \"sourcePreview\": {\n            \"layerId\": \"03627C25-CC8A-474F-A738-C4DEB3353FA4\",\n            \"variantId\": \"F6F52194-06DE-462E-983A-8D505C533A69\",\n            \"dynamicSourceId\": \"tvIn_VideoSourceAImage\"\n          },\n          \"color\": \"#BBBBBB\",\n          \"width\": 1,\n          \"height\": 1,\n          \"x\": 0,\n          \"y\": 0,\n          \"icon\": \"facetime-video\",\n          \"dynamicText\": {\n            \"template\": \"{{inputputValues.tvIn_VideoSourceAName}}\",\n            \"layerId\": \"03627C25-CC8A-474F-A738-C4DEB3353FA4\",\n            \"variantId\": \"F6F52194-06DE-462E-983A-8D505C533A69\"\n          }\n        }\n      ]\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<p>Preset memiliki \"judul\" dan serangkaian \"tombol\", tetapi satu tombol tunggal juga tidak masalah.<\/p>\n\n\n<section class=\"boinx_section\">\n    <div class=\"main_div\">\n        <div class=\"left_div_icon\">\n                <i class=\"icon_highlight\">*<\/i>\n        <\/div>\n\n        <div class=\"right_div_text\">\n                <div><p class=\"text_highlight_headline\"><\/p><\/div>\n                <div><p class=\"text_highlight\">Tombol `layerId` dan `variantId` harus diisi secara dinamis dengan data string dari tombol input komposisi `tvIn_LayerIdentifier` dan `tvIn_RuntimeIdentifier`.<\/p><\/div>\n        <\/div>    \n    <\/div>\n<\/section>\n\n\t\t<style>.boinx_section {\n    margin:30px 0;\n    padding:10px;\n    background-color:rgb(217,237,248);\n    border-radius: 8px;\n  \n}\n\n.icon_highlight {\n    display:block;\n    padding:5px;\n    font-size:80px;\n    color:rgb(58,134,172);\n    line-height:60px;\n}\n\n.text_highlight {\n    color:rgb(58,134,172);\n}\n\n.text_highlight_headline{\n    font-weight:bold;\n    color:rgb(58,134,172);\n}\n\n.main_div\n{\n    display:flex !IMPORTANT;\n    flex-wrap: wrap;\n    flex-direction: row;\n    justify-content : flex-start;\n    align-items : flex-start\n    align-content : flex-start;\n}\n.left_div_icon{\n    display:flex !IMPORTANT;\n    width:40px;\n    padding:0;\n    margin:10px 20px 10px 10px;\n    \n}\n.right_div_text{\n    display:flex !IMPORTANT;\n    flex-direction: column;\n    flex-grow: 1;\n    padding:10px;\n    margin:0;\n    width:200px;\n    }<\/style>\n\t\t\n\n\n<h3 class=\"wp-block-heading\" id=\"using-the-remote-control-preset-api-in-quartz-composer\">Menggunakan Preset Remote Control <span class=\"caps\">API<\/span> dalam Komposer Kuarsa<\/h3>\n\n\n\n\n\n<p>Pembangunan lapisan mimoLive menggunakan <span class=\"caps\">LUA<\/span> untuk menghasilkan struktur data ini secara dinamis karena Quartz Composer tidak mendukung pembuatan struktur data sendiri. Struktur data <span class=\"caps\">LUA<\/span> berisi fungsi kompleks addButton() yang dapat digunakan untuk membuat struktur untuk satu tombol. Biasanya Anda dapat menggunakan fungsi ini dan tidak perlu memodifikasinya. Oleh karena itu, cukup mudah untuk membuat pengaturan default kendali jarak jauh yang baru untuk layer Anda sendiri.<\/p>\n\n\n\n<p>Sebagai contoh, ini adalah <span class=\"caps\">LUA<\/span> untuk menghasilkan kendali jarak jauh untuk layer Stop Watch. Harap perhatikan bahwa Anda dapat menggunakan kode ini dengan hanya mengubah baris 15 sampai 29 dari kode tersebut.<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code>inLayerIdentifier = QC_STRING\ninVariantIdentifier = QC_STRING\noutControlRepresentations = QC_STRUCT\nmain = function()\n  controlRepresentations = {}\n  -- first representation\n  controlRepresenation = {}\n  -- {\n    controlRepresenation&#91;\"Title\"] = \"Stop Watch\"\n    buttons = {}\n    -- {\n      -- addButton(buttonsTable, buttonTitle, subTitle, positionX, positionY, width, height, color, icon, actionTarget, liveStateSource, previewSource)\n      -- first row\n      addButton(buttons, \"{{outputValues.tvOut_TimeString}}\", \"\", 0, 0, 2, 1, \"#333333\", \"\", \"\", \"\", \"\")\n      addButton(buttons, \"Live\", \"{\\{name\\}}\", 2, 0, 1, 1, \"#333333\", \"\", \"toggleLive\", \"layerVariant\", \"\")\n      -- second row\n      addButton(buttons, \"Start\", \"\", 0, 1, 1, 1, \"#33cc33\", \"play\", \"tvGroup_Control__Start_TypeSignal\", \"\", \"\")\n      addButton(buttons, \"Stop\", \"\", 1, 1, 1, 1, \"#cc3333\", \"pause\", \"tvGroup_Control__Stop_TypeSignal\", \"\", \"\")\n      addButton(buttons, \"Reset\", \"\", 2, 1, 1, 1, \"#cccc33\", \"stop\", \"tvGroup_Control__Reset_TypeSignal\", \"\", \"\")\n    -- }\n    controlRepresenation&#91;\"buttons\"] = buttons\n  -- }\n  table.insert(controlRepresentations , controlRepresenation)\n  outControlRepresentations = controlRepresentations\nend\nfunction addButton(buttonsTable, buttonTitle, buttonSubTitle, positionX, positionY, width, height, color, icon, actionTarget, liveStateSource, previewSource)\n  local button = {}\n  -- {\n  if #buttonTitle &amp;gt; 0 then\n    if string.find(buttonTitle, \"{{\") then\n      -- dynamic titel\n      local dynamicText = {}\n      -- {\n        dynamicText&#91;\"layerId\"] = inLayerIdentifier\n        dynamicText&#91;\"variantId\"] = inVariantIdentifier\n        dynamicText&#91;\"template\"] = buttonTitle\n      -- }\n      button&#91;\"dynamicText\"] = dynamicText\n    else\n      -- static title\n      button&#91;\"text\"] = buttonTitle\n    end -- if dynamic\n  end -- if buttonTitle\n  if #buttonSubTitle &amp;gt; 0 then\n    if string.find(buttonSubTitle, \"{{\") then\n      -- dynamic titel\n      local dynamicSubText = {}\n      -- {\n        dynamicSubText&#91;\"layerId\"] = inLayerIdentifier\n        dynamicSubText&#91;\"variantId\"] = inVariantIdentifier\n        dynamicSubText&#91;\"template\"] = buttonSubTitle\n      -- }\n      button&#91;\"dynamicSubText\"] = dynamicSubText\n    else\n      -- static title\n      button&#91;\"subtext\"] = buttonSubTitle\n    end -- if dynamic\n  end -- if buttonSubTitle\n  button&#91;\"x\"] = positionX\n  button&#91;\"y\"] = positionY\n  button&#91;\"width\"] = width\n  button&#91;\"height\"] = height\n  if #color &amp;gt; 0 then\n    button&#91;\"color\"] = color\n  end -- if\n  if #actionTarget &amp;gt; 0 then\n    local actions = {}\n    -- {\n      local action = {}\n      -- {\n        action&#91;\"layerId\"] = inLayerIdentifier\n        action&#91;\"variantId\"] = inVariantIdentifier\n        if string.ends(actionTarget, \"_TypeSignal\") then\n          action&#91;\"type\"] = \"signal\"\n          action&#91;\"signalKey\"] = actionTarget\n          action&#91;\"signalName\"] = buttonTitle\n        elseif actionTarget == \"toggleLive\" then\n          action&#91;\"type\"] = \"toggleLive\"\n        else\n          action&#91;\"type\"] = \"toggleSwitch\"\n          action&#91;\"toggleSwitchKey\"] = actionTarget\n          action&#91;\"toggleSwitchName\"] = buttonTitle\n        end -- if\n      -- }\n      table.insert(actions , action)\n    -- }\n    button&#91;\"actions\"] = actions\n  end -- if actionTarget\n  if #liveStateSource &amp;gt; 0 then\n    local liveState = {}\n    -- {\n      liveState&#91;\"layerId\"] = inLayerIdentifier\n      liveState&#91;\"variantId\"] = inVariantIdentifier\n      if string.starts(liveStateSource,\"tvIn_VideoSource\") then\n        -- get the live state from a dynamic video source\n        liveState&#91;\"dynamicSourceId\"] = liveStateSource\n      elseif liveStateSource == \"layerVariant\" then\n        -- nor more information needed\n      else\n        liveState&#91;\"propertyPath\"] = liveStateSource            end -- if\n    -- }\n    button&#91;\"liveState\"] = liveState\n  end -- if liveState Source\n  if #previewSource &amp;gt; 0 then\n    local sourcePreview = {}\n    -- {\n      sourcePreview&#91;\"layerId\"] = inLayerIdentifier\n      sourcePreview&#91;\"variantId\"] = inVariantIdentifier\n      sourcePreview&#91;\"dynamicSourceId\"] = previewSource\n    -- }\n    button&#91;\"sourcePreview\"] = sourcePreview\n  end -- if\n  if #icon &amp;gt; 0 then\n    -- See bottom of documentation page for list of avaiable icon names\n    button&#91;\"icon\"] = icon\n  end -- if\n  -- }\n  table.insert(buttonsTable, button)\nend -- func\nfunction string.starts(String,Start)\n   return string.sub(String,1,string.len(Start))==Start\nend\nfunction string.ends(String,End)\n   return End=='' or string.sub(String,-string.len(End))==End\nend<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Pemosisian Button<\/h3>\n\n\n\n<p>Apabila menggunakan banyak tombol, tata letak tombol harus dikontrol secara manual. Itu berarti, bahwa tombol diposisikan pada kisi-kisi dengan menggunakan atribut \"x\" dan \"y\", yang, seperti halnya atribut \"lebar\" dan \"tinggi\", diberikan dalam kelipatan sel kisi-kisi. Posisi relatif ke sel kisi-kisi kiri atas tempat kelompok tombol diseret.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"button-positioning\">Tindakan Button<\/h3>\n\n\n\n<p>Buttons dapat memiliki beberapa tindakan, satu tindakan tunggal, atau tidak sama sekali. Ada berbagai kombinasi yang valid dari target tindakan dan jenis tindakan.<br>Perhatikan bahwa tindakan \"textInput\" dan \"numericInput\" harus dilakukan sendiri-sendiri, karena pengalaman pengguna yang konsisten pada remote control tidak dijamin.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"action-targets\">Target Aksi<\/h4>\n\n\n\n<p>Target aksi adalah elemen-elemen di dalam dokumen mimoLive. Mereka ditangani dengan cara yang hirarkis:<\/p>\n\n\n\n<p>\"ID dokumen\" selalu diambil pada saat runtime, jadi tidak harus ada dalam preset.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jika \"layerId\" atau \"variantId\" tidak diberikan, tindakan akan dipicu pada dokumen itu sendiri.<\/li>\n\n\n\n<li>Jika \"layerId\" diberikan, tindakan akan dipicu pada layer yang ditentukan.<\/li>\n\n\n\n<li>Jika \"layerId\" <b>dan<\/b> \"variantId\" diberikan, tindakan akan dipicu pada varian yang ditentukan. Hanya dalam kasus ini, \"toggleSwitchKey\" atau \"signalKey\" tambahan dapat ditentukan (lihat Jenis Tindakan di bawah).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"action-types\">Jenis Tindakan<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><th>Jenis Tindakan<\/th><th>Penjelasan<\/th><th>Atribut Tambahan<\/th><th>Target yang Valid<\/th><\/tr><tr><td>toggleLive<\/td><td>Beralih status langsung<\/td><td>tidak ada<\/td><td>Dokumen (Tampilan Mulai\/Hentikan), Lapisan, Varian<\/td><\/tr><tr><td>setLive<\/td><td>Mengatur status live ke \"hidup\"<\/td><td>tidak ada<\/td><td>Dokumen (Mulai Tampilkan), Lapisan, Varian<\/td><\/tr><tr><td>setOff<\/td><td>Mengatur status live ke \"off\"<\/td><td>tidak ada<\/td><td>Dokumen (Hentikan Tayangan), Lapisan, Varian<\/td><\/tr><tr><td>sinyal<\/td><td>Memicu sinyal<\/td><td>signalKey, signalName (disarankan)<\/td><td>Varian<\/td><\/tr><tr><td>toggleSwitch<\/td><td>Mengalihkan nilai masukan boolean<\/td><td>toggleSwitchKey, toggleSwitchName (disarankan)<\/td><td>Varian<\/td><\/tr><tr><td>textInput<\/td><td>Membuka bidang input teks yang, pada saat pengiriman, memperbarui nilai di inputKey.<\/td><td>inputKey, inputName (disarankan)<\/td><td>Lapisan, Varian, Sumber<\/td><\/tr><tr><td>numericInput<\/td><td>Slider yang mengontrol nilai numerik pada inputKey.<\/td><td>inputKey, inputDescription (objek dengan nilai min dan maks), inputName (disarankan)<\/td><td>Lapisan, Varian, Sumber<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<section class=\"boinx_section\">\n    <div class=\"main_div\">\n        <div class=\"left_div_icon\">\n                <i class=\"icon_highlight\">*<\/i>\n        <\/div>\n\n        <div class=\"right_div_text\">\n                <div><p class=\"text_highlight_headline\"><\/p><\/div>\n                <div><p class=\"text_highlight\">Tipe aksi \"textInput\" dan \"numericInput\" tersedia sejak mimoLive 5.2.<\/p><\/div>\n        <\/div>    \n    <\/div>\n<\/section>\n\n\n\n\n<h3 class=\"wp-block-heading\" id=\"button-live-state\">Status Langsung Button<\/h3>\n\n\n\n<p>Objek \"liveState\" dapat digunakan untuk mengonfigurasi status lampu penghitungan tombol, yang dapat menyala (tanda merah), transisi (tanda kuning), atau mati (tanpa tanda).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"live-state-sources\">Sumber Status Langsung<\/h4>\n\n\n\n<p>Serupa dengan target aksi tombol, status live dapat diperoleh dari berbagai sumber:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\"ID dokumen\" selalu diambil pada saat runtime, jadi tidak harus ada dalam preset.<\/li>\n\n\n\n<li>Jika \"layerId\" atau \"variantId\" tidak diberikan, status live dokumen akan digunakan (tayangan telah dimulai atau belum).<\/li>\n\n\n\n<li>Jika \"layerId\" diberikan, status live layer akan digunakan.<\/li>\n\n\n\n<li>Jika \"layerId\" dan \"variantId\" diberikan, status live varian akan digunakan.<br>- Hanya dalam kasus ini, \"propertyPath\" tambahan dapat ditentukan untuk mengindikasikan bahwa properti boolean pada nilai input atau output varian harus digunakan.<br>- Kemungkinan lain (saling terpisah dengan propertyPath!) adalah menentukan properti \"dynamicSourceId\" yang mengalihkan pencarian live state ke sumber (diambil berdasarkan ID), yang menghargai perubahan dinamis dari sumber yang dipilih (misalnya dalam pengalih video). Nilai \"dynamicSourceId\" dicari dalam nilai input varian.<\/li>\n<\/ul>\n\n\n\n<p><i>*<\/i>Berikan jalur lengkap ke properti, dimulai dari varian sebagai root, misalnya \"inputValues.some_Boolean_Property\" atau \"outputValues.other_Property\".<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Jika \"sourceId\" diberikan, status hidup sumber akan digunakan.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"button-text\">Teks Button<\/h3>\n\n\n\n<p>Tombol aksi dapat menampilkan baris teks primer dan sekunder, keduanya bisa bersifat statis atau dinamis.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"primary-text\">Teks Primer<\/h4>\n\n\n\n<p>Teks ini akan menjadi indikator utama apa yang akan dilakukan tombol bagi pengguna. Jika preset tombol berisi properti teks, ini adalah teks statis yang akan ditampilkan apa adanya.<\/p>\n\n\n\n<p>Sebagai alternatif, dynamicText dapat diberikan yang memungkinkan penyertaan layer mimoLive atau properti varian menggunakan sintaks templating sederhana. Dalam string templat, karakter biasa dapat dikombinasikan dengan jalur properti yang diapit oleh tanda kurung kurawal:<\/p>\n\n\n\n<pre class=\"wp-block-code\" data-no-translation=\"\"><code>\"template\": \"{\\{propertyPath\\}}\"<\/code><\/pre>\n\n\n\n<p>Jalur properti dievaluasi relatif terhadap objek yang diselesaikan menggunakan \"layerId\", \"varianId\", \"sourceId\", dan \"filterId\". Resolusi target mengikuti aturan-aturan ini:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\"ID dokumen\" selalu diambil pada saat runtime, jadi tidak harus ada dalam preset.<\/li>\n\n\n\n<li>Jika \"layerId\" atau \"variantId\" tidak diberikan, jalur properti dievaluasi relatif terhadap dokumen<\/li>\n\n\n\n<li>Jika \"layerId\" (dan secara opsional \"variantId\") diberikan, jalur properti dievaluasi secara relatif terhadap layer\/variant.<\/li>\n\n\n\n<li>Layer induk varian dapat diakses dengan memulai jalur dengan \"layer\", seperti \"aslayer.name\".<\/li>\n<\/ul>\n\n\n<section class=\"boinx_section\">\n    <div class=\"main_div\">\n        <div class=\"left_div_icon\">\n                <i class=\"icon_highlight\">*<\/i>\n        <\/div>\n\n        <div class=\"right_div_text\">\n                <div><p class=\"text_highlight_headline\"><\/p><\/div>\n                <div><p class=\"text_highlight\">Segmen jalur pertama dari nilai input dan output harus berbentuk camelCased (\"inputValues.tvIn...\") dan bukan kebab-cased (\"input-values.tvIn...\") seperti pada dokumen API.<\/p><\/div>\n        <\/div>    \n    <\/div>\n<\/section>\n\n\n\n\n<ul class=\"wp-block-list\">\n<li>Teks statis akan selalu diutamakan daripada teks dinamis, karena hal ini memungkinkan pengguna untuk menimpa teks dinamis dengan beberapa teks khusus yang mungkin lebih berguna dalam situasi mereka.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"secondary-text\">Teks Sekunder<\/h4>\n\n\n\n<p>Untuk memberikan informasi lebih lanjut kepada pengguna tentang sebuah tombol, seperti nama layer induknya, teks sekunder dapat diberikan dengan menggunakan properti \"subtext\" atau \"dynamicSubText\".<\/p>\n\n\n\n<p>Sintaks templating dan resolusi objek mengikuti aturan yang sama persis dengan teks utama.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"button-text-and-icon-size\">Ukuran Teks dan Ikon Button<\/h4>\n\n\n\n<p>Teks pada ikon pada tombol dapat bervariasi ukurannya berdasarkan konteks. Dengan opsi \"fontScale\" Anda dapat menentukan skala relatif terhadap ukuran default yang dihitung untuk ukuran layar saat ini. \"1\" akan menjadi ukuran default. Kurang dari 1 (misalnya 0,8) akan memperkecil ukuran font dan lebih besar dari 1,5 akan memperbesarnya.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pratinjau Button<\/h3>\n\n\n\n<p>Tombol aksi dapat menampilkan gambar pratinjau dari sumber yang dikontrolnya, atau sumber lain yang tersedia di dalam dokumen.<\/p>\n\n\n\n<p>Tergantung pada apakah sumbernya statis (hanya gambar yang diseret ke mimoLive), sumber statis <span class=\"caps\">PNG<\/span> Representasi sumber dimuat sekali yang memang mendukung saluran alfa. Untuk sumber lainnya, sebuah <span class=\"caps\">JPEG<\/span> representasi sumber diperbarui secara teratur. Kecepatan refresh target untuk sumber dinamis adalah 5 frame per detik, tetapi kecepatan ini dikurangi apabila kecepatan koneksi jaringan ternyata tidak mencukupi untuk pemuatan frame pratinjau yang berulang-ulang.<\/p>\n\n\n\n<p>Saat ini tidak didukung untuk menampilkan output program dokumen pada tombol aksi. Gambar default layer, meskipun tidak terlihat dalam daftar sumber, tersedia untuk pratinjau.<\/p>\n\n\n\n<p>Untuk menentukan pratinjau sumber, digunakan mekanisme resolusi objek:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\"ID dokumen\" selalu diambil pada saat runtime, jadi tidak harus ada dalam preset.<\/li>\n\n\n\n<li>Jika \"sourceId\" diberikan, sumber dengan ID tersebut digunakan untuk pratinjau.<\/li>\n\n\n\n<li>Jika semua \"layerId\", \"variantId\", dan \"dynamicSourceId\" diberikan, ID sumber akan dicari pada varian layer yang ditentukan di bawah kunci di \"dynamicSourceId\". Ini dapat digunakan untuk mereferensikan sumber seperti sumber pengalih video A-G, bahkan ketika sumber tersebut diubah dalam dokumen.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Warna Button<\/h3>\n\n\n\n<p>Dengan menggunakan atribut \"color\", tombol dapat diwarnai dengan kode warna apa pun yang dapat direpresentasikan dalam <span class=\"caps\">HTML<\/span> (misalnya \"#f80\", \"#ff0088\", \"oranye\", atau \"rgb(255, 66, 88)\").<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ikon Button<\/h3>\n\n\n\n<p>Buttons dapat menampilkan ikon untuk menunjukkan fungsinya. Untuk melihat daftar semua ikon yang tersedia, buka http:\/\/localhost:8989\/icons\/demo.html ketika mimoLive sedang berjalan dan kontrol jarak jauh diaktifkan.<br>Gunakan nama sederhana dari ikon tersebut, misalnya \"mundur\" atau \"panah ke bawah\".<\/p>","protected":false},"excerpt":{"rendered":"<p>If you are creating a custom layer, there is the possibility of even including custom control presets with your layer. This come in handy if your layer has push buttons that controls the behaviour of your layer when its live. Data Structure The following data structure is a sample output which needs to be present [&hellip;]<\/p>","protected":false},"author":3,"featured_media":0,"parent":32482,"menu_order":1,"template":"","meta":{"_acf_changed":false,"_angie_page":false,"_lmt_disableupdate":"no","_lmt_disable":"","footnotes":""},"categories":[258],"tags":[],"class_list":["post-32483","user-manual","type-user-manual","status-publish","hentry","category-manual"],"acf":[],"_links":{"self":[{"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/user-manual\/32483","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/user-manual"}],"about":[{"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/types\/user-manual"}],"author":[{"embeddable":true,"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/users\/3"}],"version-history":[{"count":2,"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/user-manual\/32483\/revisions"}],"predecessor-version":[{"id":40973,"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/user-manual\/32483\/revisions\/40973"}],"up":[{"embeddable":true,"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/user-manual\/32482"}],"wp:attachment":[{"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/media?parent=32483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/categories?post=32483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mimolive.com\/id\/wp-json\/wp\/v2\/tags?post=32483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}