streamdeck-typescript
Version:
This library will help you build elgato stream deck plugins in typescript
378 lines (361 loc) • 56.7 kB
HTML
<!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.2.1</title>
<meta name="description" content="Documentation for streamdeck-typescript - v3.2.1">
<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.2.1</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.2.1</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'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">'../src'</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">'./actions/counter.action'</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">'fun.shiro.counter.action'</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"><!DOCTYPE</span><span style="color: #000000"> </span><span style="color: #FF0000">html</span><span style="color: #800000">></span>
<span style="color: #800000"><html</span><span style="color: #000000"> </span><span style="color: #FF0000">lang</span><span style="color: #000000">=</span><span style="color: #0000FF">"en"</span><span style="color: #800000">></span>
<span style="color: #800000"><head></span>
<span style="color: #000000"> </span><span style="color: #800000"><title></span><span style="color: #000000">Test Plugin</span><span style="color: #800000"></title></span>
<span style="color: #000000"> </span><span style="color: #800000"><meta</span><span style="color: #000000"> </span><span style="color: #FF0000">charset</span><span style="color: #000000">=</span><span style="color: #0000FF">"utf-8"</span><span style="color: #800000">></span>
<span style="color: #000000"> </span><span style="color: #800000"><script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">"dist/bundle.js"</span><span style="color: #800000">></script></span>
<span style="color: #800000"></head></span>
<span style="color: #800000"><body></span>
<span style="color: #800000"></body></span>
<span style="color: #800000"></html></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">'../src'</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">'./interfaces/settings.interface'</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">'documentLoaded'</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">'count'</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">'keyup'</span><span style="color: #000000">, () </span><span style="color: #0000FF">=></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">'steps'</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">'keyup'</span><span style="color: #000000">, () </span><span style="color: #0000FF">=></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"><</span><span style="color: #267F99">SettingsInterface</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: #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">'didReceiveSettings'</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"><</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">>) {</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"> <= </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"><!DOCTYPE</span><span style="color: #000000"> </span><span style="color: #FF0000">html</span><span style="color: #800000">></span>
<span style="color: #800000"><html</span><span style="color: #000000"> </span><span style="color: #FF0000">lang</span><span style="color: #000000">=</span><span style="color: #0000FF">"en"</span><span style="color: #800000">></span>
<span style="color: #800000"><head></span>
<span style="color: #000000"> </span><span style="color: #800000"><title></span><span style="color: #000000">Test Plugin Inspector</span><span style="color: #800000"></title></span>
<span style="color: #000000"> </span><span style="color: #800000"><meta</span><span style="color: #000000"> </span><span style="color: #FF0000">charset</span><span style="color: #000000">=</span><span style="color: #0000FF">"utf-8"</span><span style="color: #800000">></span>
<span style="color: #000000"> </span><span style="color: #800000"><link</span><span style="color: #000000"> </span><span style="color: #FF0000">rel</span><span style="color: #000000">=</span><span style="color: #0000FF">"stylesheet"</span><span style="color: #000000"> </span><span style="color: #FF0000">href</span><span style="color: #000000">=</span><span style="color: #0000FF">"sdpi.css"</span><span style="color: #800000">></span>
<span style="color: #000000"> </span><span style="color: #800000"><script</span><span style="color: #000000FF"> </span><span style="color: #FF0000">src</span><span style="color: #000000FF">=</span><span style="color: #0000FF">"dist/bundle-pi.js"</span><span style="color: #800000">></script></span>
<span style="color: #800000"></head></span>
<span style="color: #800000"><body></span>
<span style="color: #800000"><div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">"sdpi-wrapper"</span><span style="color: #000000"> </span><span style="color: #FF0000">id</span><span style="color: #000000">=</span><span style="color: #0000FF">"mainSettings"</span><span style="color: #800000">></span>
<span style="color: #000000"> </span><span style="color: #800000"><div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">"sdpi-item"</span><span style="color: #800000">></span>
<span style="color: #000000"> </span><span style="color: #800000"><div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">"sdpi-item-label"</span><span style="color: #800000">></span><span style="color: #000000">Count</span><span style="color: #800000"></div></span>
<span style="color: #000000"> </span><span style="color: #800000"><input</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">"sdpi-item-value"</span><span style="color: #000000"> </span><span style="color: #FF0000">type</span><span style="color: #000000">=</span><span style="color: #0000FF">"number"</span><span style="color: #000000"> </span><span style="color: #FF0000">id</span><span style="color: #000000">=</span><span style="color: #0000FF">"count"</span><span style="color: #000000"> </span><span style="color: #FF0000">value</span><span style="color: #000000">=</span><span style="color: #0000FF">"0"</span><span style="color: #800000">></span>
<span style="color: #000000"> </span><span style="color: #800000"></div></span>
<span style="color: #000000"> </span><span style="color: #800000"><div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">"sdpi-item"</span><span style="color: #800000">></span>
<span style="color: #000000"> </span><span style="color: #800000"><div</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">"sdpi-item-label"</span><span style="color: #800000">></span><span style="color: #000000">Steps</span><span style="color: #800000"></div></span>
<span style="color: #000000"> </span><span style="color: #800000"><input</span><span style="color: #000000"> </span><span style="color: #FF0000">class</span><span style="color: #000000">=</span><span style="color: #0000FF">"sdpi-item-value"</span><span style="color: #000000"> </span><span style="color: #FF0000">type</span><span style="color: #000000">=</span><span style="color: #0000FF">"number"</span><span style="color: #000000"> </span><span style="color: #FF0000">id</span><span style="color: #000000">=</span><span style="color: #0000FF">"steps"</span><span style="color: #000000"> </span><span style="color: #FF0000">value</span><span style="color: #000000">=</span><span style="color: #0000FF">"1"</span><span style="color: #800000">></span>
<span style="color: #000000"> </span><span style="color: #800000"></div></span>
<span style="color: #800000"></div></span>
<span style="color: #800000"></body></span>
<span style="color: #800000"></html></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">'../../src'</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">'../counter'</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">'../interfaces/settings.interface'</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"><</span><span style="color: #267F99">Counter</span><span style="color: #000000">, </span><span style="color: #267F99">CounterAction</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">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">'willAppear'</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"><</span><span style="color: #267F99">SettingsInterface</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">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">'keyUp'</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"><</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">>) {</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"><</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">>({</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">'keyDown'</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"><</span><span style="color: #267F99">SettingsInterface</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">keyUpTimer</span><span style="color: #000000"> = </span><span style="color: #795E26">setTimeout</span><span style="color: #000000">(() </span><span style="color: #0000FF">=></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"><</span><span style="color: #267F99">SettingsInterface</span><span style="color: #000000">>(</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">'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: #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">'didReceiveSettings'</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"><</span><span style="color: #267F99">SettingsInterface</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">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">"scripts"</span><span style="color: #000000">: {</span>
<span style="color: #000000"> </span><span style="color: #0451A5">"build"</span><span style="color: #000000">: </span><span style="color: #A31515">"tsc -p tsconfig.json"</span><span style="color: #000000">,</span>
<span style="color: #000000"> </span><span style="color: #0451A5">"build-example"</span><span style="color: #000000">: </span><span style="color: #A31515">"browserify -p tsify example/counter-pi.ts | terser -cm --comments false -o dist/bundle-pi.js && browserify -p tsify example/counter.ts | terser -cm --comments false -o dist/bundle.js"</span><span style="color: #000000">,</span>
<span style="color: #000000"> </span><span style="color: #0451A5">"watch"</span><span style="color: #000000">: </span><span style="color: #A31515">"start watchify --debug -p tsify example/counter.ts -o dist/bundle.js && start watchify --debug -p tsify example/counter-pi.ts -o dist/bundle-pi.js"</span><span style="color: #000000">,</span>
<span style="color: #000000"> </span><span style="color: #0451A5">"documentation"</span><span style="color: #000000">: </span><span style="color: #A31515">"typedoc src/index.ts"</span><span style="color: #000000">,</span>
<span style="color: #000000"> </span><span style="color: #0451A5">"test"</span><span style="color: #000000">: </span><span style="color: #A31515">"echo </span><span style="color: #EE0000">\"</span><span style="color: #A31515">Error: no test specified</span><span style="color: #EE0000">\"</span><span style="color: #A31515"> && exit 1"</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's, but we use
<a href="https://github.com/conventional-changelog/standard-version">standard-version</a> to optimal release the plugin.</p>
<p>standard-version is following 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>
</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 href="interfaces/didreceiveglobalsettingsevent.html" class="tsd-kind-icon">Did<wbr>Receive<wbr>Global<wbr>Settings<wbr>Event</a>
</li>
<li class=" tsd-ki