UNPKG

streamdeck-typescript

Version:

This library will help you build elgato stream deck plugins in typescript

376 lines (359 loc) 56.8 kB
<!doctype html> <html class="default no-js"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>streamdeck-typescript - v3.3.4</title> <meta name="description" content="Documentation for streamdeck-typescript - v3.3.4"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="assets/css/main.css"> <script async src="assets/js/search.js" id="search-script"></script> </head> <body> <header> <div class="tsd-page-toolbar"> <div class="container"> <div class="table-wrap"> <div class="table-cell" id="tsd-search" data-index="assets/js/search.json" data-base="."> <div class="field"> <label for="tsd-search-field" class="tsd-widget search no-caption">Search</label> <input id="tsd-search-field" type="text" /> </div> <ul class="results"> <li class="state loading">Preparing search index...</li> <li class="state failure">The search index is not available</li> </ul> <a href="index.html" class="title">streamdeck-typescript - v3.3.4</a> </div> <div class="table-cell" id="tsd-widgets"> <div id="tsd-filter"> <a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a> <div class="tsd-filter-group"> <div class="tsd-select" id="tsd-filter-visibility"> <span class="tsd-select-label">All</span> <ul class="tsd-select-list"> <li data-value="public">Public</li> <li data-value="protected">Public/Protected</li> <li data-value="private" class="selected">All</li> </ul> </div> <input type="checkbox" id="tsd-filter-inherited" checked /> <label class="tsd-widget" for="tsd-filter-inherited">Inherited</label> <input type="checkbox" id="tsd-filter-externals" checked /> <label class="tsd-widget" for="tsd-filter-externals">Externals</label> </div> </div> <a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a> </div> </div> </div> </div> <div class="tsd-page-title"> <div class="container"> <h1>streamdeck-typescript - v3.3.4</h1> </div> </div> </header> <div class="container container-main"> <div class="row"> <div class="col-8 col-content"> <div class="tsd-panel tsd-typography"> <p><a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/network/members"><img src="https://img.shields.io/github/forks/XeroxDev/Stream-Deck-TS-SDK?color=blue&style=for-the-badge" alt="Forks"></a> <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/stargazers"><img src="https://img.shields.io/github/stars/XeroxDev/Stream-Deck-TS-SDK?color=yellow&style=for-the-badge" alt="Stars"></a> <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/watchers"><img src="https://img.shields.io/github/watchers/XeroxDev/Stream-Deck-TS-SDK?color=lightgray&style=for-the-badge" alt="Watchers"></a> <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/graphs/contributors"><img src="https://img.shields.io/github/contributors/XeroxDev/Stream-Deck-TS-SDK?color=green&style=for-the-badge" alt="Contributors"></a></p> <p><a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/issues"><img src="https://img.shields.io/github/issues/XeroxDev/Stream-Deck-TS-SDK?color=yellow&style=for-the-badge" alt="Issues"></a> <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/issues?q=is%3Aissue+is%3Aclosed"><img src="https://img.shields.io/github/issues-closed/XeroxDev/Stream-Deck-TS-SDK?color=yellow&style=for-the-badge" alt="Issues closed"></a></p> <p><a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/pulls"><img src="https://img.shields.io/github/issues-pr/XeroxDev/Stream-Deck-TS-SDK?color=yellow&style=for-the-badge" alt="Issues-pr"></a> <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/pulls?q=is%3Apr+is%3Aclosed"><img src="https://img.shields.io/github/issues-pr-closed/XeroxDev/Stream-Deck-TS-SDK?color=yellow&style=for-the-badge" alt="Issues-pr closed"></a> <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/compare"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=for-the-badge" alt="PRs welcome"></a></p> <p><a href="https://sonarcloud.io/dashboard?id=XeroxDev_Stream-Deck-TS-SDK"><img src="https://img.shields.io/sonar/quality_gate/XeroxDev_Stream-Deck-TS-SDK?server=https%3A%2F%2Fsonarcloud.io&style=for-the-badge" alt="Sonar Quality Gate"></a> <a href="https://www.npmjs.com/package/streamdeck-typescript"><img src="https://img.shields.io/npm/dt/streamdeck-typescript?style=for-the-badge&logo=npm" alt="npm"></a></p> <p><a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/blob/master/LICENSE"><img src="https://img.shields.io/github/license/XeroxDev/Stream-Deck-TS-SDK?style=for-the-badge" alt="GitHub license"></a> <a href="https://shields.io"><img src="https://img.shields.io/badge/badges-awesome-green?style=for-the-badge" alt="Awesome Badges"></a></p> <a href="#stream-deck-ts-sdk" id="stream-deck-ts-sdk" style="color: inherit; text-decoration: none;"> <h1>Stream Deck TS-SDK</h1> </a> <p>A library that helps you develop plugins for Elgato&#39;s Stream Deck.</p> <a href="#installation" id="installation" style="color: inherit; text-decoration: none;"> <h2>Installation</h2> </a> <ul> <li>Install via <a href="https://www.npmjs.com/"><code>npm</code></a>:</li> </ul> <pre><code class="language-bash"><span style="color: #000000">npm install --save streamdeck-typescript</span> </code></pre> <a href="#decorators" id="decorators" style="color: inherit; text-decoration: none;"> <h2>Decorators</h2> </a> <p>This Plugin adds a few decorators for classes and methods.</p> <a href="#available-decorators" id="available-decorators" style="color: inherit; text-decoration: none;"> <h3>Available decorators</h3> </a> <ul> <li>methods<ul> <li><code>@SDOnPiEvent(event)</code> - Listens for specified event in the property inspector context and if triggered, calls method<ul> <li>Overhands EventData (*NameOfEvent*Event; Example: KeyDownEvent, KeyUpEvent, WillAppearEvent)</li> </ul> </li> <li><code>@SDOnActionEvent(event)</code> - Listens for specified event in the action context and if triggered, calls method<ul> <li>Overhands EventData (*NameOfEvent*Event; Example: KeyDownEvent, KeyUpEvent, WillAppearEvent)</li> </ul> </li> </ul> </li> </ul> <a href="#usage" id="usage" style="color: inherit; text-decoration: none;"> <h2>Usage</h2> </a> <p>You can see an example in the <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/tree/master/example">example</a> folder or look through the <a href="https://xeroxdev.github.io/Stream-Deck-TS-SDK/">Source docs</a></p> <a href="#initializing-plugin" id="initializing-plugin" style="color: inherit; text-decoration: none;"> <h3>Initializing Plugin</h3> </a> <p>Elgato uses 2 different files. The Action file (which handels all actions), and the Property Inspector file (which is for settings)</p> <a href="#counterts" id="counterts" style="color: inherit; text-decoration: none;"> <h4>counter.ts</h4> </a> <pre><code class="language-typescript"><span style="color: #AF00DB">import</span><span style="color: #000000"> {</span><span style="color: #001080">StreamDeckPluginHandler</span><span style="color: #000000">} </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;../src&#039;</span><span style="color: #000000">;</span> <span style="color: #AF00DB">import</span><span style="color: #000000"> {</span><span style="color: #001080">CounterAction</span><span style="color: #000000">} </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;./actions/counter.action&#039;</span><span style="color: #000000">;</span> <span style="color: #AF00DB">export</span><span style="color: #000000"> </span><span style="color: #0000FF">class</span><span style="color: #000000"> </span><span style="color: #267F99">Counter</span><span style="color: #000000"> </span><span style="color: #0000FF">extends</span><span style="color: #000000"> </span><span style="color: #267F99">StreamDeckPluginHandler</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #0000FF">constructor</span><span style="color: #000000">() {</span> <span style="color: #000000"> </span><span style="color: #0000FF">super</span><span style="color: #000000">();</span> <span style="color: #000000"> </span><span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">CounterAction</span><span style="color: #000000">(</span><span style="color: #0000FF">this</span><span style="color: #000000">, </span><span style="color: #A31515">&#039;fun.shiro.counter.action&#039;</span><span style="color: #000000">);</span> <span style="color: #000000"> }</span> <span style="color: #000000">}</span> <span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">Counter</span><span style="color: #000000">();</span> </code></pre> <a href="#pluginhtml" id="pluginhtml" style="color: inherit; text-decoration: none;"> <h4>plugin.html</h4> </a> <pre><code class="language-html"><span style="color: #800000">&lt;!DOCTYPE</span><span style="color: #000000"> </span><span style="color: #FF0000">html</span><span style="color: #800000">&gt;</span> <span style="color: #800000">&lt;html</span><span style="color: #000000"> </span><span style="color: #FF0000">lang</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;en&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #800000">&lt;head&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;title&gt;</span><span style="color: #000000">Test Plugin</span><span style="color: #800000">&lt;/title&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;meta</span><span style="color: #000000"> </span><span style="color: #FF0000">charset</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;utf-8&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">&quot;dist/bundle.js&quot;</span><span style="color: #800000">&gt;&lt;/script&gt;</span> <span style="color: #800000">&lt;/head&gt;</span> <span style="color: #800000">&lt;body&gt;</span> <span style="color: #800000">&lt;/body&gt;</span> <span style="color: #800000">&lt;/html&gt;</span> </code></pre> <p>Here you can see. After the build you have only one file (bundle.js in this case) and this gets loaded.</p> <a href="#counter-pits" id="counter-pits" style="color: inherit; text-decoration: none;"> <h4>counter-pi.ts</h4> </a> <pre><code class="language-typescript"><span style="color: #AF00DB">import</span><span style="color: #000000"> {</span><span style="color: #001080">DidReceiveSettingsEvent</span><span style="color: #000000">, </span><span style="color: #001080">SDOnPiEvent</span><span style="color: #000000">, </span><span style="color: #001080">StreamDeckPropertyInspectorHandler</span><span style="color: #000000">} </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;../src&#039;</span><span style="color: #000000">;</span> <span style="color: #AF00DB">import</span><span style="color: #000000"> {</span><span style="color: #001080">SettingsInterface</span><span style="color: #000000">} </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;./interfaces/settings.interface&#039;</span><span style="color: #000000">;</span> <span style="color: #0000FF">class</span><span style="color: #000000"> </span><span style="color: #267F99">CounterPi</span><span style="color: #000000"> </span><span style="color: #0000FF">extends</span><span style="color: #000000"> </span><span style="color: #267F99">StreamDeckPropertyInspectorHandler</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #001080">count</span><span style="color: #000000">: </span><span style="color: #267F99">HTMLInputElement</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #001080">stepsCount</span><span style="color: #000000">: </span><span style="color: #267F99">HTMLInputElement</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">constructor</span><span style="color: #000000">() {</span> <span style="color: #000000"> </span><span style="color: #0000FF">super</span><span style="color: #000000">();</span> <span style="color: #000000"> }</span> <span style="color: #000000"> @</span><span style="color: #795E26">SDOnPiEvent</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;documentLoaded&#039;</span><span style="color: #000000">)</span> <span style="color: #000000"> </span><span style="color: #795E26">onDocumentReady</span><span style="color: #000000">() {</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000"> = </span><span style="color: #001080">document</span><span style="color: #000000">.</span><span style="color: #795E26">getElementById</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;count&#039;</span><span style="color: #000000">) </span><span style="color: #AF00DB">as</span><span style="color: #000000"> </span><span style="color: #267F99">HTMLInputElement</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000">.</span><span style="color: #795E26">addEventListener</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;keyup&#039;</span><span style="color: #000000">, () </span><span style="color: #0000FF">=&gt;</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">settingsManager</span><span style="color: #000000">.</span><span style="color: #795E26">setContextSettingsAttributes</span><span style="color: #000000">(</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">actionInfo</span><span style="color: #000000">.</span><span style="color: #001080">context</span><span style="color: #000000">, {</span><span style="color: #001080">count:</span><span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000">.</span><span style="color: #001080">valueAsNumber</span><span style="color: #000000">}, </span><span style="color: #098658">500</span><span style="color: #000000">));</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">stepsCount</span><span style="color: #000000"> = </span><span style="color: #001080">document</span><span style="color: #000000">.</span><span style="color: #795E26">getElementById</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;steps&#039;</span><span style="color: #000000">) </span><span style="color: #AF00DB">as</span><span style="color: #000000"> </span><span style="color: #267F99">HTMLInputElement</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">stepsCount</span><span style="color: #000000">.</span><span style="color: #795E26">addEventListener</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;keyup&#039;</span><span style="color: #000000">, () </span><span style="color: #0000FF">=&gt;</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">settingsManager</span><span style="color: #000000">.</span><span style="color: #795E26">setContextSettingsAttributes</span><span style="color: #000000">(</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">actionInfo</span><span style="color: #000000">.</span><span style="color: #001080">context</span><span style="color: #000000">, {</span><span style="color: #001080">steps:</span><span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">stepsCount</span><span style="color: #000000">.</span><span style="color: #001080">valueAsNumber</span><span style="color: #000000">}, </span><span style="color: #098658">500</span><span style="color: #000000">));</span> <span style="color: #000000"> </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">settings</span><span style="color: #000000"> = </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">settingsManager</span><span style="color: #000000">.</span><span style="color: #795E26">getContextSettings</span><span style="color: #000000">&lt;</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">&gt;(</span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">actionInfo</span><span style="color: #000000">.</span><span style="color: #001080">context</span><span style="color: #000000">);</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000">.</span><span style="color: #001080">value</span><span style="color: #000000"> = (</span><span style="color: #001080">settings</span><span style="color: #000000">?.</span><span style="color: #001080">count</span><span style="color: #000000"> ?? </span><span style="color: #098658">0</span><span style="color: #000000">).</span><span style="color: #795E26">toString</span><span style="color: #000000">();</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">stepsCount</span><span style="color: #000000">.</span><span style="color: #001080">value</span><span style="color: #000000"> = (</span><span style="color: #001080">settings</span><span style="color: #000000">?.</span><span style="color: #001080">steps</span><span style="color: #000000"> ?? </span><span style="color: #098658">1</span><span style="color: #000000">).</span><span style="color: #795E26">toString</span><span style="color: #000000">();</span> <span style="color: #000000"> }</span> <span style="color: #000000"> @</span><span style="color: #795E26">SDOnPiEvent</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;didReceiveSettings&#039;</span><span style="color: #000000">)</span> <span style="color: #000000"> </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #795E26">onSettingsReceived</span><span style="color: #000000">({</span><span style="color: #001080">payload</span><span style="color: #000000">: {</span><span style="color: #001080">settings</span><span style="color: #000000">}}: </span><span style="color: #267F99">DidReceiveSettingsEvent</span><span style="color: #000000">&lt;</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">&gt;) {</span> <span style="color: #000000"> </span><span style="color: #AF00DB">if</span><span style="color: #000000"> (</span><span style="color: #267F99">Object</span><span style="color: #000000">.</span><span style="color: #795E26">keys</span><span style="color: #000000">(</span><span style="color: #001080">settings</span><span style="color: #000000">).</span><span style="color: #001080">length</span><span style="color: #000000"> &lt;= </span><span style="color: #098658">0</span><span style="color: #000000">)</span> <span style="color: #000000"> </span><span style="color: #AF00DB">return</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000">.</span><span style="color: #001080">value</span><span style="color: #000000"> = </span><span style="color: #001080">settings</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000">.</span><span style="color: #795E26">toString</span><span style="color: #000000">() ?? </span><span style="color: #098658">0</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">stepsCount</span><span style="color: #000000">.</span><span style="color: #001080">value</span><span style="color: #000000"> = </span><span style="color: #001080">settings</span><span style="color: #000000">.</span><span style="color: #001080">steps</span><span style="color: #000000">.</span><span style="color: #795E26">toString</span><span style="color: #000000">() ?? </span><span style="color: #098658">1</span><span style="color: #000000">;</span> <span style="color: #000000"> }</span> <span style="color: #000000">}</span> <span style="color: #0000FF">new</span><span style="color: #000000"> </span><span style="color: #795E26">CounterPi</span><span style="color: #000000">();</span> </code></pre> <a href="#property-inspectorhtml" id="property-inspectorhtml" style="color: inherit; text-decoration: none;"> <h4>property-inspector.html</h4> </a> <pre><code class="language-html"><span style="color: #800000">&lt;!DOCTYPE</span><span style="color: #000000"> </span><span style="color: #FF0000">html</span><span style="color: #800000">&gt;</span> <span style="color: #800000">&lt;html</span><span style="color: #000000"> </span><span style="color: #FF0000">lang</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;en&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #800000">&lt;head&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;title&gt;</span><span style="color: #000000">Test Plugin Inspector</span><span style="color: #800000">&lt;/title&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;meta</span><span style="color: #000000"> </span><span style="color: #FF0000">charset</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;utf-8&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;link</span><span style="color: #000000"> </span><span style="color: #FF0000">rel</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;stylesheet&quot;</span><span style="color: #000000"> </span><span style="color: #FF0000">href</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;sdpi.css&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">&quot;dist/bundle-pi.js&quot;</span><span style="color: #800000">&gt;&lt;/script&gt;</span> <span style="color: #800000">&lt;/head&gt;</span> <span style="color: #800000">&lt;body&gt;</span> <span style="color: #800000">&lt;div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;sdpi-wrapper&quot;</span><span style="color: #000000"> </span><span style="color: #FF0000">id</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;mainSettings&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;sdpi-item&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;sdpi-item-label&quot;</span><span style="color: #800000">&gt;</span><span style="color: #000000">Count</span><span style="color: #800000">&lt;/div&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;input</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;sdpi-item-value&quot;</span><span style="color: #000000"> </span><span style="color: #FF0000">type</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;number&quot;</span><span style="color: #000000"> </span><span style="color: #FF0000">id</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;count&quot;</span><span style="color: #000000"> </span><span style="color: #FF0000">value</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;0&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;/div&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;sdpi-item&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;sdpi-item-label&quot;</span><span style="color: #800000">&gt;</span><span style="color: #000000">Steps</span><span style="color: #800000">&lt;/div&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;input</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;sdpi-item-value&quot;</span><span style="color: #000000"> </span><span style="color: #FF0000">type</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;number&quot;</span><span style="color: #000000"> </span><span style="color: #FF0000">id</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;steps&quot;</span><span style="color: #000000"> </span><span style="color: #FF0000">value</span><span style="color: #000000">=</span><span style="color: #0000FF">&quot;1&quot;</span><span style="color: #800000">&gt;</span> <span style="color: #000000"> </span><span style="color: #800000">&lt;/div&gt;</span> <span style="color: #800000">&lt;/div&gt;</span> <span style="color: #800000">&lt;/body&gt;</span> <span style="color: #800000">&lt;/html&gt;</span> </code></pre> <a href="#counteractionts" id="counteractionts" style="color: inherit; text-decoration: none;"> <h4>counter.action.ts</h4> </a> <pre><code class="language-typescript"><span style="color: #AF00DB">import</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">DidReceiveSettingsEvent</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">KeyDownEvent</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">KeyUpEvent</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">SDOnActionEvent</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">StreamDeckAction</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">WillAppearEvent</span> <span style="color: #000000">} </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;../../src&#039;</span><span style="color: #000000">;</span> <span style="color: #AF00DB">import</span><span style="color: #000000"> {</span><span style="color: #001080">Counter</span><span style="color: #000000">} </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;../counter&#039;</span><span style="color: #000000">;</span> <span style="color: #AF00DB">import</span><span style="color: #000000"> {</span><span style="color: #001080">SettingsInterface</span><span style="color: #000000">} </span><span style="color: #AF00DB">from</span><span style="color: #000000"> </span><span style="color: #A31515">&#039;../interfaces/settings.interface&#039;</span><span style="color: #000000">;</span> <span style="color: #AF00DB">export</span><span style="color: #000000"> </span><span style="color: #0000FF">class</span><span style="color: #000000"> </span><span style="color: #267F99">CounterAction</span><span style="color: #000000"> </span><span style="color: #0000FF">extends</span><span style="color: #000000"> </span><span style="color: #267F99">StreamDeckAction</span><span style="color: #000000">&lt;</span><span style="color: #267F99">Counter</span><span style="color: #000000">, </span><span style="color: #267F99">CounterAction</span><span style="color: #000000">&gt; {</span> <span style="color: #000000"> </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #001080">keyUpTimer</span><span style="color: #000000">: </span><span style="color: #267F99">any</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">constructor</span><span style="color: #000000">(</span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #001080">plugin</span><span style="color: #000000">: </span><span style="color: #267F99">Counter</span><span style="color: #000000">, </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #001080">actionName</span><span style="color: #000000">: </span><span style="color: #267F99">string</span><span style="color: #000000">) {</span> <span style="color: #000000"> </span><span style="color: #0000FF">super</span><span style="color: #000000">(</span><span style="color: #001080">plugin</span><span style="color: #000000">, </span><span style="color: #001080">actionName</span><span style="color: #000000">);</span> <span style="color: #000000"> }</span> <span style="color: #000000"> @</span><span style="color: #795E26">SDOnActionEvent</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;willAppear&#039;</span><span style="color: #000000">)</span> <span style="color: #000000"> </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #795E26">onAppear</span><span style="color: #000000">({</span><span style="color: #001080">context</span><span style="color: #000000">, </span><span style="color: #001080">payload</span><span style="color: #000000">: {</span><span style="color: #001080">settings</span><span style="color: #000000">}}: </span><span style="color: #267F99">WillAppearEvent</span><span style="color: #000000">&lt;</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">&gt;) {</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">plugin</span><span style="color: #000000">.</span><span style="color: #795E26">setTitle</span><span style="color: #000000">((</span><span style="color: #001080">settings</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000"> ?? </span><span style="color: #098658">0</span><span style="color: #000000">).</span><span style="color: #795E26">toString</span><span style="color: #000000">(), </span><span style="color: #001080">context</span><span style="color: #000000">);</span> <span style="color: #000000"> }</span> <span style="color: #000000"> @</span><span style="color: #795E26">SDOnActionEvent</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;keyUp&#039;</span><span style="color: #000000">)</span> <span style="color: #000000"> </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #795E26">onKeyUp</span><span style="color: #000000">({</span><span style="color: #001080">context</span><span style="color: #000000">, </span><span style="color: #001080">payload</span><span style="color: #000000">: {</span><span style="color: #001080">settings</span><span style="color: #000000">}}: </span><span style="color: #267F99">KeyUpEvent</span><span style="color: #000000">&lt;</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">&gt;) {</span> <span style="color: #000000"> </span><span style="color: #795E26">clearTimeout</span><span style="color: #000000">(</span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">keyUpTimer</span><span style="color: #000000">);</span> <span style="color: #000000"> </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">steps</span><span style="color: #000000"> = </span><span style="color: #001080">settings</span><span style="color: #000000">.</span><span style="color: #001080">steps</span><span style="color: #000000"> ?? </span><span style="color: #098658">1</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">count</span><span style="color: #000000"> = (</span><span style="color: #001080">settings</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000"> ?? </span><span style="color: #098658">0</span><span style="color: #000000">) + </span><span style="color: #001080">steps</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">plugin</span><span style="color: #000000">.</span><span style="color: #795E26">setTitle</span><span style="color: #000000">(</span><span style="color: #001080">count</span><span style="color: #000000">.</span><span style="color: #795E26">toString</span><span style="color: #000000">(), </span><span style="color: #001080">context</span><span style="color: #000000">);</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">plugin</span><span style="color: #000000">.</span><span style="color: #795E26">setSettings</span><span style="color: #000000">&lt;</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">&gt;({</span><span style="color: #001080">steps</span><span style="color: #000000">, </span><span style="color: #001080">count</span><span style="color: #000000">}, </span><span style="color: #001080">context</span><span style="color: #000000">);</span> <span style="color: #000000"> }</span> <span style="color: #000000"> @</span><span style="color: #795E26">SDOnActionEvent</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;keyDown&#039;</span><span style="color: #000000">)</span> <span style="color: #000000"> </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #795E26">onKeyDown</span><span style="color: #000000">({</span><span style="color: #001080">context</span><span style="color: #000000">, </span><span style="color: #001080">payload</span><span style="color: #000000">: {</span><span style="color: #001080">settings</span><span style="color: #000000">}}: </span><span style="color: #267F99">KeyDownEvent</span><span style="color: #000000">&lt;</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">&gt;) {</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">keyUpTimer</span><span style="color: #000000"> = </span><span style="color: #795E26">setTimeout</span><span style="color: #000000">(() </span><span style="color: #0000FF">=&gt;</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #0000FF">const</span><span style="color: #000000"> </span><span style="color: #0070C1">steps</span><span style="color: #000000"> = </span><span style="color: #001080">settings</span><span style="color: #000000">.</span><span style="color: #001080">steps</span><span style="color: #000000"> ?? </span><span style="color: #098658">1</span><span style="color: #000000">;</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">plugin</span><span style="color: #000000">.</span><span style="color: #795E26">setSettings</span><span style="color: #000000">&lt;</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">&gt;(</span> <span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">steps</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">count:</span><span style="color: #000000"> </span><span style="color: #001080">steps</span><span style="color: #000000"> * -</span><span style="color: #098658">1</span> <span style="color: #000000"> }, </span><span style="color: #001080">context</span> <span style="color: #000000"> );</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">plugin</span><span style="color: #000000">.</span><span style="color: #795E26">setTitle</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;0&#039;</span><span style="color: #000000">, </span><span style="color: #001080">context</span><span style="color: #000000">);</span> <span style="color: #000000"> }, </span><span style="color: #098658">2000</span><span style="color: #000000">);</span> <span style="color: #000000"> }</span> <span style="color: #000000"> @</span><span style="color: #795E26">SDOnActionEvent</span><span style="color: #000000">(</span><span style="color: #A31515">&#039;didReceiveSettings&#039;</span><span style="color: #000000">)</span> <span style="color: #000000"> </span><span style="color: #0000FF">private</span><span style="color: #000000"> </span><span style="color: #795E26">onSettings</span><span style="color: #000000">({</span><span style="color: #001080">context</span><span style="color: #000000">, </span><span style="color: #001080">payload</span><span style="color: #000000">: {</span><span style="color: #001080">settings</span><span style="color: #000000">}}: </span><span style="color: #267F99">DidReceiveSettingsEvent</span><span style="color: #000000">&lt;</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">&gt;) {</span> <span style="color: #000000"> </span><span style="color: #0000FF">this</span><span style="color: #000000">.</span><span style="color: #001080">plugin</span><span style="color: #000000">.</span><span style="color: #795E26">setTitle</span><span style="color: #000000">(</span><span style="color: #001080">settings</span><span style="color: #000000">.</span><span style="color: #001080">count</span><span style="color: #000000">.</span><span style="color: #795E26">toString</span><span style="color: #000000">() ?? </span><span style="color: #098658">0</span><span style="color: #000000">, </span><span style="color: #001080">context</span><span style="color: #000000">);</span> <span style="color: #000000"> }</span> <span style="color: #000000">}</span> </code></pre> <a href="#settingsinterfacets" id="settingsinterfacets" style="color: inherit; text-decoration: none;"> <h4>settings.interface.ts</h4> </a> <pre><code class="language-typescript"><span style="color: #AF00DB">export</span><span style="color: #000000"> </span><span style="color: #0000FF">interface</span><span style="color: #000000"> </span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000"> {</span> <span style="color: #000000"> </span><span style="color: #001080">count</span><span style="color: #000000">: </span><span style="color: #267F99">number</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #001080">steps</span><span style="color: #000000">: </span><span style="color: #267F99">number</span> <span style="color: #000000">}</span> </code></pre> <a href="#building-the-plugin" id="building-the-plugin" style="color: inherit; text-decoration: none;"> <h2>Building the Plugin</h2> </a> <p>I would suggest you to do it like in the example with browserify, terser, tsify, typescript and for development watchify</p> <p>See <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/blob/master/package.json"><strong>package.json</strong></a> and <a href="https://github.com/XeroxDev/Stream-Deck-TS-SDK/blob/master/tsconfig.json"><strong>tsconfig.json</strong></a></p> <pre><code class="language-json"><span style="color: #000000">{</span> <span style="color: #000000"> </span><span style="color: #0451A5">&quot;scripts&quot;</span><span style="color: #000000">: {</span> <span style="color: #000000"> </span><span style="color: #0451A5">&quot;build&quot;</span><span style="color: #000000">: </span><span style="color: #A31515">&quot;tsc -p tsconfig.json&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #0451A5">&quot;build-example&quot;</span><span style="color: #000000">: </span><span style="color: #A31515">&quot;browserify -p tsify example/counter-pi.ts | terser -cm --comments false -o dist/bundle-pi.js &amp;&amp; browserify -p tsify example/counter.ts | terser -cm --comments false -o dist/bundle.js&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #0451A5">&quot;watch&quot;</span><span style="color: #000000">: </span><span style="color: #A31515">&quot;start watchify --debug -p tsify example/counter.ts -o dist/bundle.js &amp;&amp; start watchify --debug -p tsify example/counter-pi.ts -o dist/bundle-pi.js&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #0451A5">&quot;documentation&quot;</span><span style="color: #000000">: </span><span style="color: #A31515">&quot;typedoc src/index.ts&quot;</span><span style="color: #000000">,</span> <span style="color: #000000"> </span><span style="color: #0451A5">&quot;test&quot;</span><span style="color: #000000">: </span><span style="color: #A31515">&quot;echo </span><span style="color: #EE0000">\&quot;</span><span style="color: #A31515">Error: no test specified</span><span style="color: #EE0000">\&quot;</span><span style="color: #A31515"> &amp;&amp; exit 1&quot;</span> <span style="color: #000000"> }</span> <span style="color: #000000">}</span> </code></pre> <a href="#how-to-contribute" id="how-to-contribute" style="color: inherit; text-decoration: none;"> <h2>How to contribute?</h2> </a> <p>Just fork the repository and create PR&#39;s. This project uses <a href="https://github.com/googleapis/release-please">release-please</a> to automatically manage releases.</p> <p>release-please follows the <a href="https://www.conventionalcommits.org">conventionalcommits</a> specification which follows the <a href="https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines">angular commit guidelines</a>.</p> <p>When commits are merged to the master branch, release-please will automatically create or update a release PR with the appropriate version bump and changelog updates.</p> </div> </div> <div class="col-4 col-menu menu-sticky-wrap menu-highlight"> <nav class="tsd-navigation primary"> <ul> <li class=" "> <a href="modules.html">Exports</a> </li> </ul> </nav> <nav class="tsd-navigation secondary menu-sticky"> <ul class="before-current"> <li class=" tsd-kind-enum"> <a href="enums/devicetype.html" class="tsd-kind-icon">Device<wbr>Type</a> </li> <li class=" tsd-kind-enum"> <a href="enums/eventtype.html" class="tsd-kind-icon">Event<wbr>Type</a> </li> <li class=" tsd-kind-enum"> <a href="enums/statetype.html" class="tsd-kind-icon">State<wbr>Type</a> </li> <li class=" tsd-kind-enum"> <a href="enums/targettype.html" class="tsd-kind-icon">Target<wbr>Type</a> </li> <li class=" tsd-kind-class"> <a href="classes/actionmanager.html" class="tsd-kind-icon">Action<wbr>Manager</a> </li> <li class=" tsd-kind-class"> <a href="classes/settingsmanager.html" class="tsd-kind-icon">Settings<wbr>Manager</a> </li> <li class=" tsd-kind-class tsd-has-type-parameter"> <a href="classes/streamdeckaction.html" class="tsd-kind-icon">Stream<wbr>Deck<wbr>Action</a> </li> <li class=" tsd-kind-class"> <a href="classes/streamdeckactionclass.html" class="tsd-kind-icon">Stream<wbr>Deck<wbr>Action<wbr>Class</a> </li> <li class=" tsd-kind-class tsd-has-type-parameter"> <a href="classes/streamdeckhandlerbase.html" class="tsd-kind-icon">Stream<wbr>Deck<wbr>Handler<wbr>Base</a> </li> <li class=" tsd-kind-class tsd-has-type-parameter"> <a href="classes/streamdeckpluginhandler.html" class="tsd-kind-icon">Stream<wbr>Deck<wbr>Plugin<wbr>Handler</a> </li> <li class=" tsd-kind-class tsd-has-type-parameter"> <a href="classes/streamdeckpropertyinspectorhandler.html" class="tsd-kind-icon">Stream<wbr>Deck<wbr>Property<wbr>Inspector<wbr>Handler</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/acddata.html" class="tsd-kind-icon">Acd<wbr>Data</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/applicationdidlaunchevent.html" class="tsd-kind-icon">Application<wbr>Did<wbr>Launch<wbr>Event</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/applicationdidterminateevent.html" class="tsd-kind-icon">Application<wbr>Did<wbr>Terminate<wbr>Event</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/coordinates.html" class="tsd-kind-icon">Coordinates</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/devicedidconnectevent.html" class="tsd-kind-icon">Device<wbr>Did<wbr>Connect<wbr>Event</a> </li> <li class=" tsd-kind-interface"> <a href="interfaces/devicediddisconnectevent.html" class="tsd-kind-icon">Device<wbr>Did<wbr>Disconnect<wbr>Event</a> </li> <li class=" tsd-kind-interface tsd-has-type-parameter"> <a href="interfaces/dialdownevent.html" class="tsd-kind-icon">Dial<wbr>Down<wbr>Event</a> </li> <li class=" tsd-kind-interface tsd-has-type-parameter"> <a href="interfaces/dialrotateevent.html" class="tsd-kind-icon">Dial<wbr>Rotate<wbr>Event</a> </li> <li class=" tsd-kind-interface tsd-has-type-parameter"> <a href="interfaces/dialupevent.html" class="tsd-kind-icon">Dial<wbr>UpEvent</a> </li> <li class=" tsd-kind-interface tsd-has-type-parameter"> <a hr