From 9be1136e88ea4454e5f639a22ba8d2084affd804 Mon Sep 17 00:00:00 2001 From: Aytackydln Date: Fri, 26 Jan 2024 21:17:05 +0000 Subject: [PATCH] deploy: b8cb064eae7d309b94054269587c0b4d70af446f --- advanced-topics/animation-editor/index.html | 4 ++-- advanced-topics/index.html | 4 ++-- advanced-topics/overrides-system/index.html | 4 ++-- advanced-topics/state-variables/index.html | 4 ++-- advanced-topics/visualizer-output/index.html | 16 ++++++++-------- ...ae6ab7430ed626ef2624452910aa997933bbf3c247.js | 2 -- ...bad464ce05bb4dd6530a146bba7d331dbf0273a7b6.js | 1 + basic-topics/games/index.html | 4 ++-- basic-topics/getting-started/index.html | 6 +++--- basic-topics/index.html | 4 ++-- basic-topics/installation/index.html | 4 ++-- basic-topics/user-data/index.html | 4 ++-- devices/alldevices/index.html | 4 ++-- devices/asus/index.html | 4 ++-- devices/corsair/index.html | 4 ++-- devices/dualsense/index.html | 4 ++-- devices/index.html | 4 ++-- devices/logitech/index.html | 8 ++++---- devices/openrgb/index.html | 4 ++-- devices/razer/index.html | 4 ++-- devices/steelseries/index.html | 4 ++-- devices/wooting/index.html | 4 ++-- index.html | 6 +++--- integrations/chroma/index.html | 4 ++-- integrations/index.html | 4 ++-- integrations/lightfx/index.html | 4 ++-- integrations/lightsync/index.html | 4 ++-- reference-expressions/index.html | 4 ++-- reference-expressions/input/index.html | 4 ++-- reference-expressions/logic/index.html | 4 ++-- reference-expressions/maths/index.html | 4 ++-- reference-expressions/misc/index.html | 4 ++-- reference-expressions/state/index.html | 4 ++-- reference-expressions/string/index.html | 4 ++-- reference-layers/ambilight/index.html | 4 ++-- reference-layers/animation/index.html | 4 ++-- reference-layers/audio-visualizer/index.html | 4 ++-- reference-layers/blinking/index.html | 4 ++-- reference-layers/breathing/index.html | 4 ++-- .../conditional-comparisons/index.html | 4 ++-- reference-layers/glitch-effect/index.html | 4 ++-- reference-layers/gradient-fill/index.html | 4 ++-- reference-layers/gradient/index.html | 4 ++-- reference-layers/image/index.html | 4 ++-- reference-layers/index.html | 4 ++-- reference-layers/interactive/index.html | 4 ++-- reference-layers/lock-color/index.html | 4 ++-- reference-layers/particle-interactive/index.html | 4 ++-- reference-layers/particle/index.html | 6 +++--- reference-layers/percent-effect/index.html | 4 ++-- .../percent-gradient-effect/index.html | 4 ++-- reference-layers/radial/index.html | 4 ++-- reference-layers/script/index.html | 4 ++-- reference-layers/shortcut-assistant/index.html | 4 ++-- reference-layers/solid-color/index.html | 4 ++-- reference-layers/solid-fill-color/index.html | 4 ++-- reference-layers/timer-key/index.html | 4 ++-- reference-layers/toggle-key/index.html | 4 ++-- reference-layers/toolbar/index.html | 4 ++-- reference-layers/wrapper/index.html | 4 ++-- ...4a3570f7d5efafbd28f7efc97fb221dad90771868.css | 1 - ...bf6b61c966617f64137617a97590bcb6fcdddfd39.css | 1 + search/index.html | 4 ++-- 63 files changed, 131 insertions(+), 132 deletions(-) delete mode 100644 app.min.f29a9c4e93f294fb875aaaae6ab7430ed626ef2624452910aa997933bbf3c247.js create mode 100644 app.min.f9fa024b89f3c1bd9e2b27bad464ce05bb4dd6530a146bba7d331dbf0273a7b6.js delete mode 100644 scss/main.min.3c5ea77ddce19b803ca06f14a3570f7d5efafbd28f7efc97fb221dad90771868.css create mode 100644 scss/main.min.b5545a3f033ceeac75d58c9bf6b61c966617f64137617a97590bcb6fcdddfd39.css diff --git a/advanced-topics/animation-editor/index.html b/advanced-topics/animation-editor/index.html index 94b56e2..0db2061 100644 --- a/advanced-topics/animation-editor/index.html +++ b/advanced-topics/animation-editor/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
+

Animation Editor


Last updated 10.01.2024

The Animation Layer allows you to add your own custom animated effects to your peripheral lights. To edit this animation, the Animation Editor used. This is a powerful tool, and fairly easy to use once you understand how it works. As with all unfamiliar things however, it may be daunting at first.

Concepts and Definitions

Before getting into the guide itself, let me define some of the concepts and features that are required to fully understand how the animations work.

  • Each frame, the animation is drawn onto a Canvas which is then sent to your connected peripherals. The canvas is a rectangle with a height and a width, this size of which depend on the position and size of the peripherals. Anything drawn to the canvas will be drawn at a specific point on the canvas, with x=0, y=0 being the coordinate of the top left.
  • An animation is built up of one or more Animation Tracks. Each of these tracks can represent a single shape (e.g. rectangle, filled circle, etc.)
  • Each shape has a number of Properties, depending on what sort of shape they are. For example, a circle has radius, center x, center y, color and width properties. These properties determine how the shape will be rendered to the canvas.
  • Each animation track will have one or more Keyframes which are points on the timeline where you can set the properties of a shape. The keyframes do not have to line up on each track. For example one track may only have one keyframe while another may have ten.
  • Between keyframes, the properties of a shape on a track will interpolate, forming a smooth transition.

The Editor

With that out of the way, lets move on to the creation of an animation. To open the animation editor, first add an animation layer to your profile. On the layer settings, click on the “Edit Animation” button. When you first open the animation editor you will be presented with a screen that looks like this:

The main screen of the Animation Editor labelled showing the main controls

There are 3 main areas to the editor:

  • The timeline which shows the tracks that currently make up the animation as well as also containing a seek line (the vertical red line) which dictates which how far through the animation the preview is.
  • The preview area which shows a skeleton of your peripheral setup and the various shapes that make up the animation at the given time.
  • The property editor which, when a keypoint is selected, allows for editing the properties of that shape for that keypoint.

Creating an Animation

First we need to add a track by clicking on the “Add Track” button just above and to the left of the timeline, then choosing the type of shape we wish to add. The manual color track allows you to set individual colors of the keyboard (see Closing Notes), rather than using shapes; the other tracks should be self-explanatory. For the purpose of the tutorial, I will add an (unfilled) circle track.

Adding a circle track to the timeline

You should now see a new row has appeared in the timeline. This is the new shape we’ve just created. The left-most grey box shows the name of the track, a delete button and an icon to indicate the type of the track. If you so desire you can double click on the name of the track to change it to something more helpful, though this has no effect on the actual animation itself.

The newly created circle track on the timeline

Next to the grey box you will see a pair of colored rectangles. These represent a keyframe on the track, the color being indicative of the color of the shape at that keyframe. Clicking this keyframe, we can edit the properties of the circle using the properties in the top right. I’m going to set them to the values in the image below.

Properties for the first keyframe

Next, we’ll need another keyframe to animate to, otherwise we will just have a static image! Double click on the timeline inline with the track to insert a new keyframe at that time. Unfortunately the properties are all reset so we have to enter them again from scratch. Like before though, single left click on the keyframe and set the properties in the properties panel. This time, I will use these settings:

Properties for the first keyframe

You can add as many other keyframes as you like and even add new tracks with their own keyframes using the steps from above, but I won’t bother.

Once done, you can close the animation editor window. Finally, to ensure the animation plays smoothly, we need to set the Animation Duration property of the Animation Layer to be the length of the animation you just created. If you set a value too small, your animation will appear to be cut off, but too long and you animation will not replay quickly.

Congratulations, you’ve made your first animation! :tada:


Page authored by
\ No newline at end of file +Aurora User Docs

Animation Editor


Last updated 10.01.2024

The Animation Layer allows you to add your own custom animated effects to your peripheral lights. To edit this animation, the Animation Editor used. This is a powerful tool, and fairly easy to use once you understand how it works. As with all unfamiliar things however, it may be daunting at first.

Concepts and Definitions

Before getting into the guide itself, let me define some of the concepts and features that are required to fully understand how the animations work.

  • Each frame, the animation is drawn onto a Canvas which is then sent to your connected peripherals. The canvas is a rectangle with a height and a width, this size of which depend on the position and size of the peripherals. Anything drawn to the canvas will be drawn at a specific point on the canvas, with x=0, y=0 being the coordinate of the top left.
  • An animation is built up of one or more Animation Tracks. Each of these tracks can represent a single shape (e.g. rectangle, filled circle, etc.)
  • Each shape has a number of Properties, depending on what sort of shape they are. For example, a circle has radius, center x, center y, color and width properties. These properties determine how the shape will be rendered to the canvas.
  • Each animation track will have one or more Keyframes which are points on the timeline where you can set the properties of a shape. The keyframes do not have to line up on each track. For example one track may only have one keyframe while another may have ten.
  • Between keyframes, the properties of a shape on a track will interpolate, forming a smooth transition.

The Editor

With that out of the way, lets move on to the creation of an animation. To open the animation editor, first add an animation layer to your profile. On the layer settings, click on the “Edit Animation” button. When you first open the animation editor you will be presented with a screen that looks like this:

The main screen of the Animation Editor labelled showing the main controls

There are 3 main areas to the editor:

  • The timeline which shows the tracks that currently make up the animation as well as also containing a seek line (the vertical red line) which dictates which how far through the animation the preview is.
  • The preview area which shows a skeleton of your peripheral setup and the various shapes that make up the animation at the given time.
  • The property editor which, when a keypoint is selected, allows for editing the properties of that shape for that keypoint.

Creating an Animation

First we need to add a track by clicking on the “Add Track” button just above and to the left of the timeline, then choosing the type of shape we wish to add. The manual color track allows you to set individual colors of the keyboard (see Closing Notes), rather than using shapes; the other tracks should be self-explanatory. For the purpose of the tutorial, I will add an (unfilled) circle track.

Adding a circle track to the timeline

You should now see a new row has appeared in the timeline. This is the new shape we’ve just created. The left-most grey box shows the name of the track, a delete button and an icon to indicate the type of the track. If you so desire you can double click on the name of the track to change it to something more helpful, though this has no effect on the actual animation itself.

The newly created circle track on the timeline

Next to the grey box you will see a pair of colored rectangles. These represent a keyframe on the track, the color being indicative of the color of the shape at that keyframe. Clicking this keyframe, we can edit the properties of the circle using the properties in the top right. I’m going to set them to the values in the image below.

Properties for the first keyframe

Next, we’ll need another keyframe to animate to, otherwise we will just have a static image! Double click on the timeline inline with the track to insert a new keyframe at that time. Unfortunately the properties are all reset so we have to enter them again from scratch. Like before though, single left click on the keyframe and set the properties in the properties panel. This time, I will use these settings:

Properties for the first keyframe

You can add as many other keyframes as you like and even add new tracks with their own keyframes using the steps from above, but I won’t bother.

Once done, you can close the animation editor window. Finally, to ensure the animation plays smoothly, we need to set the Animation Duration property of the Animation Layer to be the length of the animation you just created. If you set a value too small, your animation will appear to be cut off, but too long and you animation will not replay quickly.

Congratulations, you’ve made your first animation! :tada:


Page authored by
\ No newline at end of file diff --git a/advanced-topics/index.html b/advanced-topics/index.html index 99c80d9..52b4310 100644 --- a/advanced-topics/index.html +++ b/advanced-topics/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
\ No newline at end of file diff --git a/advanced-topics/overrides-system/index.html b/advanced-topics/overrides-system/index.html index 696d47d..376d152 100644 --- a/advanced-topics/overrides-system/index.html +++ b/advanced-topics/overrides-system/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
+

Overrides System


Last updated 10.01.2024

The overrides system is an an advanced system that allows you to override the properties of layers with other values that are evaluated each frame. This allows for a huge amount of control and customizability with your lighting that layers on their own cannot provide. You can still get fairly customization layers without this system, so do not worry if you don’t understand it. This is a feature mainly for advanced users.

The overrides system works by providing you, the user, the ability to use one of several techniques to override individual properties with custom values. If no override is provided, the value you’ve set on the normal properties editor panel will be used instead. Overrides are done on a per-property basis, so you can use one technique for one property, a different one for another property or no technique for a third for example.

The Editor

To open the overrides editor panel, first select the layer whose properties you want to override then click on the left-most button in the top right of the properties panel.

The button to open the overrides editor

The editor is split into two columns. The left column contains a list of all overridable properties on the selected layer, showing their name and type. Note that not all properties are overridable. The right hand (larger) column is where the main logic editor is. This area is how you choose and edit the override technique. Initially, only a drop down box will be shown with an empty area.

To actually setup an override for a property, select it from the property list, then choose an override mode from the drop down list.

Setting up an override on the Primary Color property of the breathing layer

Override Modes

Dynamic Value

The dynamic value override method allows you to dynamically create a value based on values of other variables.

A simple example for this could be assigning to opacity of a layer to be the health of a player, so it appears to fade in as the health lowers, showing a red warning when your character is close to death. A more complex example could be constructing a color based on the current time, with seconds being red, minutes green and hours blue. Whether you’d actually want this who knows, but it’s possible with this override technique.

Basic example of a dynamic value being used with opacity to make the layer flash in and then fade out

Depending on the type of property being edited, you will be asked to provide one or more expressions of different types. Descriptions of these expressions are available in the “Reference: Expression Types” section of the guide. For example, the “Enabled” property will require a boolean expression and “Opacity” will require a numeric expression.

Lookup Table

The lookup table is a list of condition-value pairs. When using this override technique, Aurora will evaluate the boolean condition expression of each item in the list until it finds one that is true. When it does so, it will override the requested property with the value of the pair.

Example lookup table that sets the color to red every once every three seconds

If you are familiar with the concept of programming, you can think of a lookup table as being like a switch statement or a collection of if else if blocks.

Demos

This profile contains a single solid fill layer that fades in and out every second, each second alternating between red, green and blue.

The demo layer running

You can download the demo profile here.


Page authored by
\ No newline at end of file +Aurora User Docs

Overrides System


Last updated 10.01.2024

The overrides system is an an advanced system that allows you to override the properties of layers with other values that are evaluated each frame. This allows for a huge amount of control and customizability with your lighting that layers on their own cannot provide. You can still get fairly customization layers without this system, so do not worry if you don’t understand it. This is a feature mainly for advanced users.

The overrides system works by providing you, the user, the ability to use one of several techniques to override individual properties with custom values. If no override is provided, the value you’ve set on the normal properties editor panel will be used instead. Overrides are done on a per-property basis, so you can use one technique for one property, a different one for another property or no technique for a third for example.

The Editor

To open the overrides editor panel, first select the layer whose properties you want to override then click on the left-most button in the top right of the properties panel.

The button to open the overrides editor

The editor is split into two columns. The left column contains a list of all overridable properties on the selected layer, showing their name and type. Note that not all properties are overridable. The right hand (larger) column is where the main logic editor is. This area is how you choose and edit the override technique. Initially, only a drop down box will be shown with an empty area.

To actually setup an override for a property, select it from the property list, then choose an override mode from the drop down list.

Setting up an override on the Primary Color property of the breathing layer

Override Modes

Dynamic Value

The dynamic value override method allows you to dynamically create a value based on values of other variables.

A simple example for this could be assigning to opacity of a layer to be the health of a player, so it appears to fade in as the health lowers, showing a red warning when your character is close to death. A more complex example could be constructing a color based on the current time, with seconds being red, minutes green and hours blue. Whether you’d actually want this who knows, but it’s possible with this override technique.

Basic example of a dynamic value being used with opacity to make the layer flash in and then fade out

Depending on the type of property being edited, you will be asked to provide one or more expressions of different types. Descriptions of these expressions are available in the “Reference: Expression Types” section of the guide. For example, the “Enabled” property will require a boolean expression and “Opacity” will require a numeric expression.

Lookup Table

The lookup table is a list of condition-value pairs. When using this override technique, Aurora will evaluate the boolean condition expression of each item in the list until it finds one that is true. When it does so, it will override the requested property with the value of the pair.

Example lookup table that sets the color to red every once every three seconds

If you are familiar with the concept of programming, you can think of a lookup table as being like a switch statement or a collection of if else if blocks.

Demos

This profile contains a single solid fill layer that fades in and out every second, each second alternating between red, green and blue.

The demo layer running

You can download the demo profile here.


Page authored by
\ No newline at end of file diff --git a/advanced-topics/state-variables/index.html b/advanced-topics/state-variables/index.html index 72e2ede..144eca6 100644 --- a/advanced-topics/state-variables/index.html +++ b/advanced-topics/state-variables/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
+

State Variables


Last updated 10.01.2024

What are State Variables?

State Variables are numeric, boolean (true/false) or string (sequence of letters) values that can be obtained and dynamically updated by Aurora as it is running. Layers such as the Percent Effect Layer or the Animation Layer can make use of these values to conditionally set the lights on the keyboard. The values depend on which profile is currently in use, for example the CSGO profile contains State Variables for health, current ammo, max ammo, etc. but these specific ones do not work for other profiles such as Minecraft.

Not all game profiles that come with Aurora have State Integration, and currently custom added profiles also do not support State Variables.

There are some State Variables that are operating system-wide (such as RAM/CPU usage and time values) and these are always available to use, regardless of the application a profile is on.

How do you use State Variables?

Any layers that support the use of State Variables will present you with a drop down box allowing you to select a State Variable from the current application profile.

An example of a drop down containing a list of State Variables for Minecraft

Note that in most circumstances, the drop down list is editable you are able to type a number into the field to use that instead of referencing a State Variable.

Another use for State Variables is in the Overrides System. This system allows you to override property values of the layers when certain conditions are met. These conditions can be based on State Variables, such as showing a layer when your health is less than 25%.


Page authored by
\ No newline at end of file +Aurora User Docs

State Variables


Last updated 10.01.2024

What are State Variables?

State Variables are numeric, boolean (true/false) or string (sequence of letters) values that can be obtained and dynamically updated by Aurora as it is running. Layers such as the Percent Effect Layer or the Animation Layer can make use of these values to conditionally set the lights on the keyboard. The values depend on which profile is currently in use, for example the CSGO profile contains State Variables for health, current ammo, max ammo, etc. but these specific ones do not work for other profiles such as Minecraft.

Not all game profiles that come with Aurora have State Integration, and currently custom added profiles also do not support State Variables.

There are some State Variables that are operating system-wide (such as RAM/CPU usage and time values) and these are always available to use, regardless of the application a profile is on.

How do you use State Variables?

Any layers that support the use of State Variables will present you with a drop down box allowing you to select a State Variable from the current application profile.

An example of a drop down containing a list of State Variables for Minecraft

Note that in most circumstances, the drop down list is editable you are able to type a number into the field to use that instead of referencing a State Variable.

Another use for State Variables is in the Overrides System. This system allows you to override property values of the layers when certain conditions are met. These conditions can be based on State Variables, such as showing a layer when your health is less than 25%.


Page authored by
\ No newline at end of file diff --git a/advanced-topics/visualizer-output/index.html b/advanced-topics/visualizer-output/index.html index e300f98..4c5dece 100644 --- a/advanced-topics/visualizer-output/index.html +++ b/advanced-topics/visualizer-output/index.html @@ -1,11 +1,11 @@ Aurora • Unified RGB Lighting, Docs -
+

Audio Visualizer Tweaks


Last updated 10.01.2024

The Audio Visualizer layer allows you to display a representation of whatever you’re listening to on your RGB devices.

Isolating applications

Why

One of the things that annoys me about the layer is that every single sound your computer emits will be shown on the keyboard, which isn’t very useful or appealing if you’re talking to someone on Discord for example. So I found a way to isolate a single application (in my case, Spotify) in the same audio output as Aurora.

This makes it so only sound emitted by Spotify is processed and displayed on the keyboard, and does make the visualization change if you change the volume of the music.

Prerequisites

  • Windows 19 build 1809 or above

    • Aurora doesn’t let you pick the audio output device yet. Windows now has a menu where you can force an application to use an output and input device of your choosing.
  • Virtual Audio Cable

    • We need this so we can listen to 2 output devices at once: The default output every application should emit to, and the virtual audio cable we need for Aurora’s visualizer.

How

  1. Open the Windows Settings app (Win + i). -Windows settings app
  2. Click the System button, then select the Sound tab. -Windows Sound tab
  3. Scroll down to the bottom and click “App volume and device preferences”. -App volume and device preferences
  4. Set both Aurora’s and whatever other application you want to be visible’s Output to “CABLE Input”. Then Input option does not need to be changed for this. -App Volumes
  5. Open the legacy Sound settings window. The easiest way is through Control Panel -> Icons view. -Control Panel
  6. Choose the Recording Tab and double-click “CABLE Output”. Select the Listen Tab.
  7. Tick “Listen to this device” and choose your headphones/speakers. You should now be able to listen to music! -Cable Output Properties

(Optional) Install Ear Trumpet from the Windows Store to more easily change the volume of Spotify. This method works best if you leave Spotify’s volume at 100% and adjust using the windows mixer instead. This way, Aurora sees every song at the same volume at all times, producing a more consistent effect. -Ear Trumpet


Page authored by
\ No newline at end of file +Windows settings app
  • Click the System button, then select the Sound tab. +Windows Sound tab
  • Scroll down to the bottom and click “App volume and device preferences”. +App volume and device preferences
  • Set both Aurora’s and whatever other application you want to be visible’s Output to “CABLE Input”. Then Input option does not need to be changed for this. +App Volumes
  • Open the legacy Sound settings window. The easiest way is through Control Panel -> Icons view. +Control Panel
  • Choose the Recording Tab and double-click “CABLE Output”. Select the Listen Tab.
  • Tick “Listen to this device” and choose your headphones/speakers. You should now be able to listen to music! +Cable Output Properties
  • (Optional) Install Ear Trumpet from the Windows Store to more easily change the volume of Spotify. This method works best if you leave Spotify’s volume at 100% and adjust using the windows mixer instead. This way, Aurora sees every song at the same volume at all times, producing a more consistent effect. +Ear Trumpet


    Page authored by \ No newline at end of file diff --git a/app.min.f29a9c4e93f294fb875aaaae6ab7430ed626ef2624452910aa997933bbf3c247.js b/app.min.f29a9c4e93f294fb875aaaae6ab7430ed626ef2624452910aa997933bbf3c247.js deleted file mode 100644 index 8ef616e..0000000 --- a/app.min.f29a9c4e93f294fb875aaaae6ab7430ed626ef2624452910aa997933bbf3c247.js +++ /dev/null @@ -1,2 +0,0 @@ -for(let e of document.querySelectorAll("main article a"))e.hostname!=window.location.hostname&&(e.target="_blank",e.rel="noreferrer noopener");(function(){document.querySelectorAll(".tabs").forEach(t=>e(t,0));function t(){let s=[...this.parentElement.children].indexOf(this),n=this.closest(".tabs");n.dataset.tabsSyncGroup?document.querySelectorAll(`.tabs[data-tabs-sync-group="${n.dataset.tabsSyncGroup}"]`).forEach(t=>e(t,s)):e(n,s)}function e(e,t){let n=e.querySelector(`.tab-content:nth-child(${t+1})`);n!=null&&(e.querySelectorAll(".tab-content.active, .tab-header.active").forEach(e=>e.classList.remove("active")),n.classList.add("active"),e.querySelector(`.tab-header:nth-child(${t+1})`).classList.add("active"))}document.querySelectorAll(".tab-header").forEach(e=>e.addEventListener("click",t))})(),function(){let t=document.querySelector("main nav");document.querySelector(".nav-burger").addEventListener("click",function(e){document.body.classList.contains("nav-open")||(e.stopPropagation(),document.body.classList.add("nav-open"))}),document.addEventListener("click",function(e){t.contains(e.target)||document.body.classList.remove("nav-open")});let e=document.querySelector(".toc .toc-header");e==null||e.addEventListener("click",function(){document.querySelector(".toc").classList.toggle("collapsed")})}(),function(e,t,n){var o=!!(t&&t.pushState),s={ANCHOR_REGEX:/^#[^ ]+$/,OFFSET_HEIGHT_PX:70,init:function(){this.scrollToCurrent(),window.addEventListener("hashchange",this.scrollToCurrent.bind(this)),e.body.addEventListener("click",this.delegateAnchors.bind(this))},getFixedOffset:function(){return this.OFFSET_HEIGHT_PX},scrollIfAnchor:function(s,i){var a,r,c;return!!this.ANCHOR_REGEX.test(s)&&(a=e.getElementById(s.slice(1)),a&&(r=a.getBoundingClientRect(),c=window.pageYOffset+r.top-this.getFixedOffset(),window.scrollTo(window.pageXOffset,c),o&&i&&t.pushState({},e.title,n.pathname+s)),!!a)},scrollToCurrent:function(){this.scrollIfAnchor(window.location.hash)},delegateAnchors:function(e){var t=e.target;t.nodeName==="A"&&this.scrollIfAnchor(t.getAttribute("href"),!0)&&e.preventDefault()}};window.addEventListener("DOMContentLoaded",s.init.bind(s))}(window.document,window.history,window.location),!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).SimpleBar=t()}(this,function(){"use strict";var m,v,j,W,st=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e},t=function(e){try{return!!e()}catch{return!0}},cs={}.toString,ue=function(e){return cs.call(e).slice(8,-1)},Jn="".split,A=t(function(){return!Object("z").propertyIsEnumerable(0)})?function(e){return"String"==ue(e)?Jn.call(e,""):Object(e)}:Object,c=function(e){if(e==null)throw TypeError("Can't call method on "+e);return e},S=function(e){return Object(c(e))},Yn=Math.ceil,Kn=Math.floor,H=function(e){return isNaN(e=+e)?0:(e>0?Kn:Yn)(e)},Pn=Math.min,p=function(e){return e>0?Pn(H(e),9007199254740991):0},s=function(e){return"object"==typeof e?null!==e:"function"==typeof e},ke=Array.isArray||function(e){return"Array"==ue(e)},n="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},bt,ye;function V(e,t){return e(t={exports:{}},t.exports),t.exports}var b,F,D,ie,e="object"==typeof window&&window&&window.Math==Math?window:"object"==typeof self&&self&&self.Math==Math?self:Function("return this")(),w=!t(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),le=e.document,zn=s(le)&&s(le.createElement),Fe=!w&&!t(function(){return 7!=Object.defineProperty((e="div",zn?le.createElement(e):{}),"a",{get:function(){return 7}}).a;var e}),h=function(e){if(!s(e))throw TypeError(String(e)+" is not an object");return e},Te=function(e,t){if(!s(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!s(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!s(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!s(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")},De=Object.defineProperty,ce={f:w?De:function(e,t,n){if(h(e),t=Te(t,!0),h(n),Fe)try{return De(e,t,n)}catch{}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},Le=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},r=w?function(e,t,n){return ce.f(e,t,Le(1,n))}:function(e,t,n){return e[t]=n,e},oe=function(t,n){try{r(e,t,n)}catch{e[t]=n}return n},x=V(function(t){var n=e["__core-js_shared__"]||oe("__core-js_shared__",{});(t.exports=function(e,t){return n[e]||(n[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.0.1",mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})}),En=0,Cn=Math.random(),Re=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++En+Cn).toString(36))},Ie=!t(function(){return!String(Symbol())}),Ge=x("wks"),Xe=e.Symbol,I=function(e){return Ge[e]||(Ge[e]=Ie&&Xe[e]||(Ie?Xe:Re)("Symbol."+e))},Pt=I("species"),mt=function(e,t){var n;return ke(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!ke(n.prototype)?s(n)&&null===(n=n[Pt])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===t?0:t)},fe=function(e,t){var s=1==e,a=2==e,r=3==e,n=4==e,o=6==e,c=5==e||o,i=t||mt;return function(t,l,d){for(var h,m,v=S(t),f=A(v),j=function(e,t,n){if(st(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,s){return e.call(t,n,s)};case 3:return function(n,s,o){return e.call(t,n,s,o)}}return function(){return e.apply(t,arguments)}}(l,d,3),b=p(f.length),u=0,g=s?i(t,b):a?i(t,0):void 0;b>u;u++)if((c||u in f)&&(m=j(h=f[u],u,v),e))if(s)g[u]=m;else if(m)switch(e){case 3:return!0;case 5:return h;case 6:return u;case 2:g.push(h)}else if(n)return!1;return o?-1:r||n?n:g}},jt=I("species"),ct={}.propertyIsEnumerable,at=Object.getOwnPropertyDescriptor,it={f:at&&!ct.call({1:2},1)?function(e){var t=at(this,e);return!!t&&t.enumerable}:ct},Y=function(e){return A(c(e))},Ht={}.hasOwnProperty,o=function(e,t){return Ht.call(e,t)},tt=Object.getOwnPropertyDescriptor,et={f:w?tt:function(e,t){if(e=Y(e),t=Te(t,!0),Fe)try{return tt(e,t)}catch{}if(o(e,t))return Le(!it.f.call(e,t),e[t])}},R=x("native-function-to-string",Function.toString),Je=e.WeakMap,tn="function"==typeof Je&&/native code/.test(R.call(Je)),qe=x("keys"),Ke={},on=e.WeakMap;if(tn){var d=new on,rn=d.get,vn=d.has,jn=d.set;D=function(e,t){return jn.call(d,e,t),t},b=function(e){return rn.call(d,e)||{}},F=function(e){return vn.call(d,e)}}else m=qe[ie="state"]||(qe[ie]=Re(ie)),Ke[m]=!0,D=function(e,t){return r(e,m,t),t},b=function(e){return o(e,m)?e[m]:{}},F=function(e){return o(e,m)};var _,ze,Ee={set:D,get:b,has:F,enforce:function(e){return F(e)?b(e):D(e,{})},getterFor:function(e){return function(t){var n;if(!s(t)||(n=b(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}},ne=V(function(t){var n=Ee.get,s=Ee.enforce,i=String(R).split("toString");x("inspectSource",function(e){return R.call(e)}),(t.exports=function(t,n,a,c){var d=!!c&&!!c.unsafe,l=!!c&&!!c.enumerable,u=!!c&&!!c.noTargetGet;"function"==typeof a&&("string"!=typeof n||o(a,"name")||r(a,"name",n),s(a).source=i.join("string"==typeof n?n:"")),t!==e?(d?!u&&t[n]&&(l=!0):delete t[n],l?t[n]=a:r(t,n,a)):l?t[n]=a:oe(n,a)})(Function.prototype,"toString",function(){return"function"==typeof this&&n(this).source||R.call(this)})}),Lt=Math.max,rs=Math.min,os=(_=!1,function(e,t,n){var a,o=Y(e),i=p(o.length),s=function(e,t){var n=H(e);return n<0?Lt(n+t,0):rs(n,t)}(n,i);if(_&&t!=t){for(;i>s;)if((a=o[s++])!=a)return!0}else for(;i>s;s++)if((_||s in o)&&o[s]===t)return _||s||0;return!_&&-1}),ve=function(e,t){var n,i=Y(e),a=0,s=[];for(n in i)!o(Ke,n)&&o(i,n)&&s.push(n);for(;t.length>a;)o(i,n=t[a++])&&(~os(s,n)||s.push(n));return s},be=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],ss=be.concat("length","prototype"),Qn={f:Object.getOwnPropertyNames||function(e){return ve(e,ss)}},_e={f:Object.getOwnPropertySymbols},we=e.Reflect,Gn=we&&we.ownKeys||function(e){var t=Qn.f(h(e)),n=_e.f;return n?t.concat(n(e)):t},qn=function(e,t){for(var n,i=Gn(t),a=ce.f,r=et.f,s=0;s=0:c>i;i+=l)i in a&&(s=t(s,a[i],i,r));return s}(this,e,arguments.length,arguments[1],!1)}});var bn=ce.f,re=Function.prototype,gn=re.toString,mn=/^\s*function ([^ (]*)/;!w||"name"in re||bn(re,"name",{configurable:!0,get:function(){try{return gn.call(this).match(mn)[1]}catch{return""}}});var ae=Object.keys||function(e){return ve(e,be)},T=Object.assign,Ue=!T||t(function(){var e={},t={},n=Symbol();return e[n]=7,"abcdefghijklmnopqrst".split("").forEach(function(e){t[e]=e}),7!=T({},e)[n]||"abcdefghijklmnopqrst"!=ae(T({},t)).join("")})?function(e){for(var o=S(e),l=arguments.length,i=1,a=_e.f,d=it.f;l>i;)for(var s,n=A(arguments[i++]),r=a?ae(n).concat(a(n)):ae(n),u=r.length,c=0;u>c;)d.call(n,s=r[c++])&&(o[s]=n[s]);return o}:T;f({target:"Object",stat:!0,forced:Object.assign!==Ue},{assign:Ue});var se=` -                

`,z="["+se+"]",sn=RegExp("^"+z+z+"*"),nn=RegExp(z+z+"*$"),L=e.parseInt,Vt=/^[-+]?0[xX]/,Ze=8!==L(se+"08")||22!==L(se+"0x16")?function(e,t){var n=function(e,t){return e=String(c(e)),1&t&&(e=e.replace(sn,"")),2&t&&(e=e.replace(nn,"")),e}(String(e),3);return L(n,t>>>0||(Vt.test(n)?16:10))}:L;f({global:!0,forced:parseInt!=Ze},{parseInt:Ze});var Z,ee,P=RegExp.prototype.exec,It=String.prototype.replace,me=P,G=(ee=/a/,Z=/b*/g,P.call(ee,"a"),P.call(Z,"a"),0!==ee.lastIndex||0!==Z.lastIndex),q=void 0!==/()??/.exec("")[1];(G||q)&&(me=function(e){var t,s,o,i,n=this;return q&&(i=new RegExp("^"+n.source+"$(?!\\s)",function(){var t=h(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}.call(n))),G&&(o=n.lastIndex),t=P.call(n,e),G&&t&&(n.lastIndex=n.global?t.index+t[0].length:o),q&&t&&t.length>1&&It.call(t[0],i,function(){for(s=1;s=r?n?"":void 0:(i=o.charCodeAt(s))<55296||i>56319||s+1===r||(a=o.charCodeAt(s+1))<56320||a>57343?n?o.charAt(s):i:n?o.slice(s,s+2):a-56320+(i-55296<<10)+65536}(e,t,!0).length:1)},U=function(e,t){var n,s=e.exec;if("function"==typeof s){if(n=s.call(e,t),"object"!=typeof n)throw TypeError("RegExp exec method returned something other than an Object or null");return n}if("RegExp"!==ue(e))throw TypeError("RegExp#exec called on incompatible receiver");return j.call(e,t)},Ot=I("species"),wt=!t(function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}),_t=!t(function(){var e,t=/(?:)/,n=t.exec;return t.exec=function(){return n.apply(this,arguments)},e="ab".split(t),2!==e.length||"a"!==e[0]||"b"!==e[1]}),ht=function(e,n,s,o){var i=I(e),a=!t(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)}),d=a&&!t(function(){var n=!1,t=/a/;return t.exec=function(){return n=!0,null},"split"===e&&(t.constructor={},t.constructor[Ot]=function(){return t}),t[i](""),!n});if(!a||!d||"replace"===e&&!wt||"split"===e&&!_t){var u=/./[i],c=s(i,""[e],function(e,t,n,s,o){return t.exec===j?a&&!o?{done:!0,value:u.call(t,n,s)}:{done:!0,value:e.call(n,t,s)}:{done:!1}}),h=c[0],l=c[1];ne(String.prototype,e,h),ne(RegExp.prototype,i,2==n?function(e,t){return l.call(e,this,t)}:function(e){return l.call(e,this)}),o&&r(RegExp.prototype[i],"sham",!0)}};ht("match",1,function(e,t,n){return[function(t){var n=c(this),s=t?.[e];return void 0!==s?s.call(t,n):new RegExp(t)[e](String(n))},function(e){if(i=n(t,e,this),i.done)return i.value;var o,i,r,c,l,d,s=h(e),a=String(this);if(!s.global)return U(s,a);l=s.unicode,s.lastIndex=0;for(r=[],o=0;null!==(d=U(s,a));)c=String(d[0]),r[o]=c,""===c&&(s.lastIndex=rt(a,p(s.lastIndex),l)),o++;return 0===o?null:r}]});var yt=Math.max,un=Math.min,pt=Math.floor,gt=/\$([$&`']|\d\d?|<[^>]*>)/g,vt=/\$([$&`']|\d\d?)/g;ht("replace",2,function(e,t,n){return[function(n,s){var o=c(this),i=n?.[e];return void 0!==i?i.call(n,o,s):t.call(String(o),n,s)},function(e,o){if(f=n(t,e,this,o),f.done)return f.value;var i,l,u,f,b,_,w,x,r=h(e),a=String(this),C="function"==typeof o;C||(o=String(o)),b=r.global,b&&(x=r.unicode,r.lastIndex=0);for(u=[];;){if(i=U(r,a),null===i)break;if(u.push(i),!b)break;""===String(i[0])&&(r.lastIndex=rt(a,p(r.lastIndex),x))}for(var m,O="",d=0,g=0;g=d&&(O+=a.slice(d,c)+w,d=c+v.length)}return O+a.slice(d)}];function s(e,n,s,o,i,a){var l=s+e.length,r=o.length,c=vt;return void 0!==i&&(i=S(i),c=gt),t.call(a,c,function(t,a){switch(a.charAt(0)){case"$":return"$";case"&":return e;case"`":return n.slice(0,s);case"'":return n.slice(l);case"<":d=i[a.slice(1,-1)];break;default:var c,d,u=+a;if(0===u)return t;if(u>r)return c=pt(u/10),0===c?t:c<=r?void 0===o[c-1]?a.charAt(1):o[c-1]+a.charAt(1):t;d=o[u-1]}return void 0===d?"":d})}});for(bt in{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0})if(W=e[bt],v=W&&W.prototype,v&&v.forEach!==y)try{r(v,"forEach",y)}catch{v.forEach=y}var ut=V(function(e){e.exports=function(){if("undefined"==typeof document)return 0;var n,s=document.body,t=document.createElement("div"),e=t.style;return e.position="absolute",e.top=e.left="-9999px",e.width=e.height="100px",e.overflow="scroll",s.appendChild(t),n=t.offsetWidth-t.clientWidth,s.removeChild(t),n}}),dt="Expected a function",lt=NaN,xt="[object Symbol]",Ct=/^\s+|\s+$/g,Et=/^[-+]0x[0-9a-f]+$/i,kt=/^0b[01]+$/i,At=/^0o[0-7]+$/i,St=parseInt,Mt="object"==typeof n&&n&&n.Object===Object&&n,Ft="object"==typeof self&&self&&self.Object===Object&&self,Tt=Mt||Ft||Function("return this")(),zt=Object.prototype.toString,Dt=Math.max,Nt=Math.min,K=function(){return Tt.Date.now()};function Rt(e,t,n){var s,o,i,r,c,l,a=0,p=!1,d=!1,h=!0;if("function"!=typeof e)throw new TypeError(dt);function m(t){var n=i,s=c;return i=c=void 0,a=t,r=e.apply(s,n)}function g(e){var n=e-o;return void 0===o||n>=t||n<0||d&&e-a>=l}function u(){var e=K();if(g(e))return v(e);s=setTimeout(u,function(e){var n=t-(e-o);return d?Nt(n,l-(e-a)):n}(e))}function v(e){return s=void 0,h&&i?m(e):(i=c=void 0,r)}function f(){var e=K(),n=g(e);if(i=arguments,c=this,o=e,n){if(void 0===s)return function(e){return a=e,s=setTimeout(u,t),p?m(e):r}(o);if(d)return s=setTimeout(u,t),m(o)}return void 0===s&&(s=setTimeout(u,t)),r}return t=ot(t)||0,B(n)&&(p=!!n.leading,l=(d="maxWait"in n)?Dt(ot(n.maxWait)||0,t):l,h="trailing"in n?!!n.trailing:h),f.cancel=function(){void 0!==s&&clearTimeout(s),a=0,i=o=c=s=void 0},f.flush=function(){return void 0===s?r:v(K())},f}function B(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function ot(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&zt.call(e)==xt}(e))return lt;if(B(e)){var n,t="function"==typeof e.valueOf?e.valueOf():e;e=B(t)?t+"":t}return"string"!=typeof e?0===e?e:+e:(e=e.replace(Ct,""),n=kt.test(e),n||At.test(e)?St(e.slice(2),n?2:8):Et.test(e)?lt:+e)}var nt=function(e,t,n){var s=!0,o=!0;if("function"!=typeof e)throw new TypeError(dt);return B(n)&&(s="leading"in n?!!n.leading:s,o="trailing"in n?!!n.trailing:o),Rt(e,t,{leading:s,maxWait:t,trailing:o})},Bt="Expected a function",Qe=NaN,$t="[object Symbol]",Wt=/^\s+|\s+$/g,Ut=/^[-+]0x[0-9a-f]+$/i,Kt=/^0b[01]+$/i,qt=/^0o[0-7]+$/i,Yt=parseInt,Gt="object"==typeof n&&n&&n.Object===Object&&n,Xt="object"==typeof self&&self&&self.Object===Object&&self,Qt=Gt||Xt||Function("return this")(),Zt=Object.prototype.toString,Jt=Math.max,en=Math.min,X=function(){return Qt.Date.now()};function Q(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ye(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&Zt.call(e)==$t}(e))return Qe;if(Q(e)){var n,t="function"==typeof e.valueOf?e.valueOf():e;e=Q(t)?t+"":t}return"string"!=typeof e?0===e?e:+e:(e=e.replace(Wt,""),n=Kt.test(e),n||qt.test(e)?Yt(e.slice(2),n?2:8):Ut.test(e)?Qe:+e)}var We=function(e,t,n){var s,o,i,r,c,l,a=0,p=!1,d=!1,h=!0;if("function"!=typeof e)throw new TypeError(Bt);function m(t){var n=i,s=c;return i=c=void 0,a=t,r=e.apply(s,n)}function g(e){var n=e-o;return void 0===o||n>=t||n<0||d&&e-a>=l}function u(){var e=X();if(g(e))return v(e);s=setTimeout(u,function(e){var n=t-(e-o);return d?en(n,l-(e-a)):n}(e))}function v(e){return s=void 0,h&&i?m(e):(i=c=void 0,r)}function f(){var e=X(),n=g(e);if(i=arguments,c=this,o=e,n){if(void 0===s)return function(e){return a=e,s=setTimeout(u,t),p?m(e):r}(o);if(d)return s=setTimeout(u,t),m(o)}return void 0===s&&(s=setTimeout(u,t)),r}return t=Ye(t)||0,Q(n)&&(p=!!n.leading,l=(d="maxWait"in n)?Jt(Ye(n.maxWait)||0,t):l,h="trailing"in n?!!n.trailing:h),f.cancel=function(){void 0!==s&&clearTimeout(s),a=0,i=o=c=s=void 0},f.flush=function(){return void 0===s?r:v(X())},f},an="Expected a function",$e="__lodash_hash_undefined__",cn="[object Function]",ln="[object GeneratorFunction]",dn=/^\[object .+?Constructor\]$/,ft="object"==typeof n&&n&&n.Object===Object&&n,hn="object"==typeof self&&self&&self.Object===Object&&self,Ve=ft||hn||Function("return this")(),fn=Array.prototype,pn=Function.prototype,Be=Object.prototype,J=Ve["__core-js_shared__"],He=function(){var e=/[^.]+$/.exec(J&&J.keys&&J.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}(),Pe=pn.toString,$=Be.hasOwnProperty,_n=Be.toString,wn=RegExp("^"+Pe.call($).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),On=fn.splice,xn=Me(Ve,"Map"),g=Me(Object,"create");function a(e){var t,n=-1,s=e?e.length:0;for(this.clear();++n-1},u.prototype.set=function(e,t){var n=this.__data__,s=k(n,e);return s<0?n.push([e,t]):n[s][1]=t,this},i.prototype.clear=function(){this.__data__={hash:new a,map:new(xn||u),string:new a}},i.prototype.delete=function(e){return N(this,e).delete(e)},i.prototype.get=function(e){return N(this,e).get(e)},i.prototype.has=function(e){return N(this,e).has(e)},i.prototype.set=function(e,t){return N(this,e).set(e,t),this},de.Cache=i;var Nn=de,Ae=function(){if("undefined"!=typeof Map)return Map;function e(e,t){var n=-1;return e.some(function(e,s){return e[0]===t&&(n=s,!0)}),n}return function(){function t(){this.__entries__=[]}return Object.defineProperty(t.prototype,"size",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),t.prototype.get=function(t){var s=e(this.__entries__,t),n=this.__entries__[s];return n&&n[1]},t.prototype.set=function(t,n){var s=e(this.__entries__,t);~s?this.__entries__[s][1]=n:this.__entries__.push([t,n])},t.prototype.delete=function(t){var n=this.__entries__,s=e(n,t);~s&&n.splice(s,1)},t.prototype.has=function(t){return!!~e(this.__entries__,t)},t.prototype.clear=function(){this.__entries__.splice(0)},t.prototype.forEach=function(e,t){void 0===t&&(t=null);for(var s,n=0,o=this.__entries__;n0},e.prototype.connect_=function(){te&&!this.connected_&&(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),$n?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},e.prototype.disconnect_=function(){te&&this.connected_&&(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(e){var t=e.propertyName,n=void 0===t?"":t;Vn.some(function(e){return!!~n.indexOf(e)})&&this.refresh()},e.getInstance=function(){return this.instance_||(this.instance_=new e),this.instance_},e.instance_=null,e}(),Ce=function(e,t){for(var s,n=0,o=Object.keys(t);n0},e}(),je="undefined"!=typeof WeakMap?new WeakMap:new Ae,ge=function(){return function e(t){if(!(this instanceof e))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=Wn.getInstance(),s=new ns(t,n,this);je.set(this,s)}}();["observe","unobserve","disconnect"].forEach(function(e){ge.prototype[e]=function(){var t;return(t=je.get(this))[e].apply(t,arguments)}});var is=void 0!==C.ResizeObserver?C.ResizeObserver:ge,pe=!("undefined"==typeof window||!window.document||!window.document.createElement),he=function(){function e(t,n){var s=this;this.onScroll=function(){s.scrollXTicking||(window.requestAnimationFrame(s.scrollX),s.scrollXTicking=!0),s.scrollYTicking||(window.requestAnimationFrame(s.scrollY),s.scrollYTicking=!0)},this.scrollX=function(){s.axis.x.isOverflowing&&(s.showScrollbar("x"),s.positionScrollbar("x")),s.scrollXTicking=!1},this.scrollY=function(){s.axis.y.isOverflowing&&(s.showScrollbar("y"),s.positionScrollbar("y")),s.scrollYTicking=!1},this.onMouseEnter=function(){s.showScrollbar("x"),s.showScrollbar("y")},this.onMouseMove=function(e){s.mouseX=e.clientX,s.mouseY=e.clientY,(s.axis.x.isOverflowing||s.axis.x.forceVisible)&&s.onMouseMoveForAxis("x"),(s.axis.y.isOverflowing||s.axis.y.forceVisible)&&s.onMouseMoveForAxis("y")},this.onMouseLeave=function(){s.onMouseMove.cancel(),(s.axis.x.isOverflowing||s.axis.x.forceVisible)&&s.onMouseLeaveForAxis("x"),(s.axis.y.isOverflowing||s.axis.y.forceVisible)&&s.onMouseLeaveForAxis("y"),s.mouseX=-1,s.mouseY=-1},this.onWindowResize=function(){s.scrollbarWidth=ut(),s.hideNativeScrollbar()},this.hideScrollbars=function(){s.axis.x.track.rect=s.axis.x.track.el.getBoundingClientRect(),s.axis.y.track.rect=s.axis.y.track.el.getBoundingClientRect(),s.isWithinBounds(s.axis.y.track.rect)||(s.axis.y.scrollbar.el.classList.remove(s.classNames.visible),s.axis.y.isVisible=!1),s.isWithinBounds(s.axis.x.track.rect)||(s.axis.x.scrollbar.el.classList.remove(s.classNames.visible),s.axis.x.isVisible=!1)},this.onPointerEvent=function(e){var t,n;s.axis.x.scrollbar.rect=s.axis.x.scrollbar.el.getBoundingClientRect(),s.axis.y.scrollbar.rect=s.axis.y.scrollbar.el.getBoundingClientRect(),(s.axis.x.isOverflowing||s.axis.x.forceVisible)&&(n=s.isWithinBounds(s.axis.x.scrollbar.rect)),(s.axis.y.isOverflowing||s.axis.y.forceVisible)&&(t=s.isWithinBounds(s.axis.y.scrollbar.rect)),(t||n)&&(e.preventDefault(),e.stopPropagation(),"mousedown"===e.type&&(t&&s.onDragStart(e,"y"),n&&s.onDragStart(e,"x")))},this.drag=function(t){var n,o=s.axis[s.draggedAxis].track,i=o.rect[s.axis[s.draggedAxis].sizeAttr],a=s.axis[s.draggedAxis].scrollbar;t.preventDefault(),t.stopPropagation(),n=(("y"===s.draggedAxis?t.pageY:t.pageX)-o.rect[s.axis[s.draggedAxis].offsetAttr]-s.axis[s.draggedAxis].dragOffset)/o.rect[s.axis[s.draggedAxis].sizeAttr]*s.contentWrapperEl[s.axis[s.draggedAxis].scrollSizeAttr],"x"===s.draggedAxis&&(n=s.isRtl&&e.getRtlHelpers().isRtlScrollbarInverted?n-(i+a.size):n,n=s.isRtl&&e.getRtlHelpers().isRtlScrollingInverted?-n:n),s.contentWrapperEl[s.axis[s.draggedAxis].scrollOffsetAttr]=n},this.onEndDrag=function(e){e.preventDefault(),e.stopPropagation(),s.el.classList.remove(s.classNames.dragging),document.removeEventListener("mousemove",s.drag,!0),document.removeEventListener("mouseup",s.onEndDrag,!0),s.removePreventClickId=window.setTimeout(function(){document.removeEventListener("click",s.preventClick,!0),document.removeEventListener("dblclick",s.preventClick,!0),s.removePreventClickId=null})},this.preventClick=function(e){e.preventDefault(),e.stopPropagation()},this.el=t,this.flashTimeout,this.contentEl,this.contentWrapperEl,this.offsetEl,this.maskEl,this.globalObserver,this.mutationObserver,this.resizeObserver,this.scrollbarWidth,this.minScrollbarWidth=20,this.options=Object.assign({},e.defaultOptions,n),this.classNames=Object.assign({},e.defaultOptions.classNames,this.options.classNames),this.isRtl,this.axis={x:{scrollOffsetAttr:"scrollLeft",sizeAttr:"width",scrollSizeAttr:"scrollWidth",offsetAttr:"left",overflowAttr:"overflowX",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}},y:{scrollOffsetAttr:"scrollTop",sizeAttr:"height",scrollSizeAttr:"scrollHeight",offsetAttr:"top",overflowAttr:"overflowY",dragOffset:0,isOverflowing:!0,isVisible:!1,forceVisible:!1,track:{},scrollbar:{}}},this.removePreventClickId=null,this.el.SimpleBar||(this.recalculate=nt(this.recalculate.bind(this),64),this.onMouseMove=nt(this.onMouseMove.bind(this),64),this.hideScrollbars=We(this.hideScrollbars.bind(this),this.options.timeout),this.onWindowResize=We(this.onWindowResize.bind(this),64,{leading:!0}),e.getRtlHelpers=Nn(e.getRtlHelpers),this.init())}e.getRtlHelpers=function(){n=document.createElement("div"),n.innerHTML='
    ',t=n.firstElementChild,document.body.appendChild(t),s=t.firstElementChild,t.scrollLeft=0;var t,n,s,a,i=e.getOffset(t),o=e.getOffset(s);return t.scrollLeft=999,a=e.getOffset(s),{isRtlScrollingInverted:i.left!==o.left&&o.left-a.left!=0,isRtlScrollbarInverted:i.left!==o.left}},e.initHtmlApi=function(){this.initDOMLoadedElements=this.initDOMLoadedElements.bind(this),"undefined"!=typeof MutationObserver&&(this.globalObserver=new MutationObserver(function(t){t.forEach(function(t){Array.prototype.forEach.call(t.addedNodes,function(t){1===t.nodeType&&(t.hasAttribute("data-simplebar")?!t.SimpleBar&&new e(t,e.getElOptions(t)):Array.prototype.forEach.call(t.querySelectorAll("[data-simplebar]"),function(t){!t.SimpleBar&&new e(t,e.getElOptions(t))}))}),Array.prototype.forEach.call(t.removedNodes,function(e){1===e.nodeType&&(e.hasAttribute("data-simplebar")?e.SimpleBar&&e.SimpleBar.unMount():Array.prototype.forEach.call(e.querySelectorAll("[data-simplebar]"),function(e){e.SimpleBar&&e.SimpleBar.unMount()}))})})}),this.globalObserver.observe(document,{childList:!0,subtree:!0})),"complete"===document.readyState||"loading"!==document.readyState&&!document.documentElement.doScroll?window.setTimeout(this.initDOMLoadedElements):(document.addEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.addEventListener("load",this.initDOMLoadedElements))},e.getElOptions=function(e){return Array.prototype.reduce.call(e.attributes,function(e,t){var n,s=t.name.match(/data-simplebar-(.+)/);if(s)switch(n=s[1].replace(/\W+(.)/g,function(e,t){return t.toUpperCase()}),t.value){case"true":e[n]=!0;break;case"false":e[n]=!1;break;case void 0:e[n]=!0;break;default:e[n]=t.value}return e},{})},e.removeObserver=function(){this.globalObserver.disconnect()},e.initDOMLoadedElements=function(){document.removeEventListener("DOMContentLoaded",this.initDOMLoadedElements),window.removeEventListener("load",this.initDOMLoadedElements),Array.prototype.forEach.call(document.querySelectorAll("[data-simplebar]"),function(t){t.SimpleBar||new e(t,e.getElOptions(t))})},e.getOffset=function(e){var t=e.getBoundingClientRect();return{top:t.top+(window.pageYOffset||document.documentElement.scrollTop),left:t.left+(window.pageXOffset||document.documentElement.scrollLeft)}};var t=e.prototype;return t.init=function(){this.el.SimpleBar=this,pe&&(this.initDOM(),this.scrollbarWidth=ut(),this.recalculate(),this.initListeners())},t.initDOM=function(){if(t=this,Array.prototype.filter.call(this.el.children,function(e){return e.classList.contains(t.classNames.wrapper)}).length)this.wrapperEl=this.el.querySelector("."+this.classNames.wrapper),this.contentWrapperEl=this.el.querySelector("."+this.classNames.contentWrapper),this.offsetEl=this.el.querySelector("."+this.classNames.offset),this.maskEl=this.el.querySelector("."+this.classNames.mask),this.contentEl=this.el.querySelector("."+this.classNames.contentEl),this.placeholderEl=this.el.querySelector("."+this.classNames.placeholder),this.heightAutoObserverWrapperEl=this.el.querySelector("."+this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl=this.el.querySelector("."+this.classNames.heightAutoObserverEl),this.axis.x.track.el=this.el.querySelector("."+this.classNames.track+"."+this.classNames.horizontal),this.axis.y.track.el=this.el.querySelector("."+this.classNames.track+"."+this.classNames.vertical);else{for(this.wrapperEl=document.createElement("div"),this.contentWrapperEl=document.createElement("div"),this.offsetEl=document.createElement("div"),this.maskEl=document.createElement("div"),this.contentEl=document.createElement("div"),this.placeholderEl=document.createElement("div"),this.heightAutoObserverWrapperEl=document.createElement("div"),this.heightAutoObserverEl=document.createElement("div"),this.wrapperEl.classList.add(this.classNames.wrapper),this.contentWrapperEl.classList.add(this.classNames.contentWrapper),this.offsetEl.classList.add(this.classNames.offset),this.maskEl.classList.add(this.classNames.mask),this.contentEl.classList.add(this.classNames.contentEl),this.placeholderEl.classList.add(this.classNames.placeholder),this.heightAutoObserverWrapperEl.classList.add(this.classNames.heightAutoObserverWrapperEl),this.heightAutoObserverEl.classList.add(this.classNames.heightAutoObserverEl);this.el.firstChild;)this.contentEl.appendChild(this.el.firstChild);this.contentWrapperEl.appendChild(this.contentEl),this.offsetEl.appendChild(this.contentWrapperEl),this.maskEl.appendChild(this.offsetEl),this.heightAutoObserverWrapperEl.appendChild(this.heightAutoObserverEl),this.wrapperEl.appendChild(this.heightAutoObserverWrapperEl),this.wrapperEl.appendChild(this.maskEl),this.wrapperEl.appendChild(this.placeholderEl),this.el.appendChild(this.wrapperEl)}if(!this.axis.x.track.el||!this.axis.y.track.el){var t,e=document.createElement("div"),n=document.createElement("div");e.classList.add(this.classNames.track),n.classList.add(this.classNames.scrollbar),e.appendChild(n),this.axis.x.track.el=e.cloneNode(!0),this.axis.x.track.el.classList.add(this.classNames.horizontal),this.axis.y.track.el=e.cloneNode(!0),this.axis.y.track.el.classList.add(this.classNames.vertical),this.el.appendChild(this.axis.x.track.el),this.el.appendChild(this.axis.y.track.el)}this.axis.x.scrollbar.el=this.axis.x.track.el.querySelector("."+this.classNames.scrollbar),this.axis.y.scrollbar.el=this.axis.y.track.el.querySelector("."+this.classNames.scrollbar),this.options.autoHide||(this.axis.x.scrollbar.el.classList.add(this.classNames.visible),this.axis.y.scrollbar.el.classList.add(this.classNames.visible)),this.el.setAttribute("data-simplebar","init")},t.initListeners=function(){var e=this;this.options.autoHide&&this.el.addEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick","touchstart","touchend","touchmove"].forEach(function(t){e.el.addEventListener(t,e.onPointerEvent,!0)}),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.addEventListener("scroll",this.onScroll),window.addEventListener("resize",this.onWindowResize),this.resizeObserver=new is(this.recalculate),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl)},t.recalculate=function(){var e=this.heightAutoObserverEl.offsetHeight<=1,t=this.heightAutoObserverEl.offsetWidth<=1;this.elStyles=window.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction,this.contentEl.style.padding=this.elStyles.paddingTop+" "+this.elStyles.paddingRight+" "+this.elStyles.paddingBottom+" "+this.elStyles.paddingLeft,this.wrapperEl.style.margin="-"+this.elStyles.paddingTop+" -"+this.elStyles.paddingRight+" -"+this.elStyles.paddingBottom+" -"+this.elStyles.paddingLeft,this.contentWrapperEl.style.height=e?"auto":"100%",this.placeholderEl.style.width=t?this.contentEl.offsetWidth+"px":"auto",this.placeholderEl.style.height=this.contentEl.scrollHeight+"px",this.axis.x.isOverflowing=this.contentWrapperEl.scrollWidth>this.contentWrapperEl.offsetWidth,this.axis.y.isOverflowing=this.contentWrapperEl.scrollHeight>this.contentWrapperEl.offsetHeight,this.axis.x.isOverflowing="hidden"!==this.elStyles.overflowX&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==this.elStyles.overflowY&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar(),this.axis.x.track.rect=this.axis.x.track.el.getBoundingClientRect(),this.axis.y.track.rect=this.axis.y.track.el.getBoundingClientRect(),this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el.style.width=this.axis.x.scrollbar.size+"px",this.axis.y.scrollbar.el.style.height=this.axis.y.scrollbar.size+"px",this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")},t.getScrollbarSize=function(e){void 0===e&&(e="y");var t,s,o=this.scrollbarWidth?this.contentWrapperEl[this.axis[e].scrollSizeAttr]:this.contentWrapperEl[this.axis[e].scrollSizeAttr]-this.minScrollbarWidth,n=this.axis[e].track.rect[this.axis[e].sizeAttr];if(this.axis[e].isOverflowing)return s=n/o,t=Math.max(~~(s*n),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(t=Math.min(t,this.options.scrollbarMaxSize)),t},t.positionScrollbar=function(t){void 0===t&&(t="y");var a=this.contentWrapperEl[this.axis[t].scrollSizeAttr],i=this.axis[t].track.rect[this.axis[t].sizeAttr],r=parseInt(this.elStyles[this.axis[t].sizeAttr],10),s=this.axis[t].scrollbar,o=this.contentWrapperEl[this.axis[t].scrollOffsetAttr],c=(o="x"===t&&this.isRtl&&e.getRtlHelpers().isRtlScrollingInverted?-o:o)/(a-r),n=~~((i-s.size)*c),n="x"===t&&this.isRtl&&e.getRtlHelpers().isRtlScrollbarInverted?n+(i-s.size):n;s.el.style.transform="x"===t?"translate3d("+n+"px, 0, 0)":"translate3d(0, "+n+"px, 0)"},t.toggleTrackVisibility=function(e){void 0===e&&(e="y");var t=this.axis[e].track.el,n=this.axis[e].scrollbar.el;this.axis[e].isOverflowing||this.axis[e].forceVisible?(t.style.visibility="visible",this.contentWrapperEl.style[this.axis[e].overflowAttr]="scroll"):(t.style.visibility="hidden",this.contentWrapperEl.style[this.axis[e].overflowAttr]="hidden"),this.axis[e].isOverflowing?n.style.display="block":n.style.display="none"},t.hideNativeScrollbar=function(){if(this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-"+(this.scrollbarWidth||this.minScrollbarWidth)+"px":0,this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-"+(this.scrollbarWidth||this.minScrollbarWidth)+"px":0,!this.scrollbarWidth){var e=[this.isRtl?"paddingLeft":"paddingRight"];this.contentWrapperEl.style[e]=this.axis.y.isOverflowing||this.axis.y.forceVisible?this.minScrollbarWidth+"px":0,this.contentWrapperEl.style.paddingBottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?this.minScrollbarWidth+"px":0}},t.onMouseMoveForAxis=function(e){void 0===e&&(e="y"),this.axis[e].track.rect=this.axis[e].track.el.getBoundingClientRect(),this.axis[e].scrollbar.rect=this.axis[e].scrollbar.el.getBoundingClientRect(),this.isWithinBounds(this.axis[e].scrollbar.rect)?this.axis[e].scrollbar.el.classList.add(this.classNames.hover):this.axis[e].scrollbar.el.classList.remove(this.classNames.hover),this.isWithinBounds(this.axis[e].track.rect)?(this.showScrollbar(e),this.axis[e].track.el.classList.add(this.classNames.hover)):this.axis[e].track.el.classList.remove(this.classNames.hover)},t.onMouseLeaveForAxis=function(e){void 0===e&&(e="y"),this.axis[e].track.el.classList.remove(this.classNames.hover),this.axis[e].scrollbar.el.classList.remove(this.classNames.hover)},t.showScrollbar=function(e){void 0===e&&(e="y");var t=this.axis[e].scrollbar.el;this.axis[e].isVisible||(t.classList.add(this.classNames.visible),this.axis[e].isVisible=!0),this.options.autoHide&&this.hideScrollbars()},t.onDragStart=function(e,t){void 0===t&&(t="y");var n=this.axis[t].scrollbar.el,s="y"===t?e.pageY:e.pageX;this.axis[t].dragOffset=s-n.getBoundingClientRect()[this.axis[t].offsetAttr],this.draggedAxis=t,this.el.classList.add(this.classNames.dragging),document.addEventListener("mousemove",this.drag,!0),document.addEventListener("mouseup",this.onEndDrag,!0),null===this.removePreventClickId?(document.addEventListener("click",this.preventClick,!0),document.addEventListener("dblclick",this.preventClick,!0)):(window.clearTimeout(this.removePreventClickId),this.removePreventClickId=null)},t.getContentElement=function(){return this.contentEl},t.getScrollElement=function(){return this.contentWrapperEl},t.removeListeners=function(){var e=this;this.options.autoHide&&this.el.removeEventListener("mouseenter",this.onMouseEnter),["mousedown","click","dblclick","touchstart","touchend","touchmove"].forEach(function(t){e.el.removeEventListener(t,e.onPointerEvent)}),this.el.removeEventListener("mousemove",this.onMouseMove),this.el.removeEventListener("mouseleave",this.onMouseLeave),this.contentWrapperEl.removeEventListener("scroll",this.onScroll),window.removeEventListener("resize",this.onWindowResize),this.mutationObserver&&this.mutationObserver.disconnect(),this.resizeObserver.disconnect(),this.recalculate.cancel(),this.onMouseMove.cancel(),this.hideScrollbars.cancel(),this.onWindowResize.cancel()},t.unMount=function(){this.removeListeners(),this.el.SimpleBar=null},t.isChildNode=function(e){return null!==e&&(e===this.el||this.isChildNode(e.parentNode))},t.isWithinBounds=function(e){return this.mouseX>=e.left&&this.mouseX<=e.left+e.width&&this.mouseY>=e.top&&this.mouseY<=e.top+e.height},e}();return he.defaultOptions={autoHide:!0,forceVisible:!1,classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging"},scrollbarMinSize:25,scrollbarMaxSize:0,timeout:1e3},pe&&he.initHtmlApi(),he}) \ No newline at end of file diff --git a/app.min.f9fa024b89f3c1bd9e2b27bad464ce05bb4dd6530a146bba7d331dbf0273a7b6.js b/app.min.f9fa024b89f3c1bd9e2b27bad464ce05bb4dd6530a146bba7d331dbf0273a7b6.js new file mode 100644 index 0000000..40c5134 --- /dev/null +++ b/app.min.f9fa024b89f3c1bd9e2b27bad464ce05bb4dd6530a146bba7d331dbf0273a7b6.js @@ -0,0 +1 @@ +for(let e of document.querySelectorAll("main article a"))e.hostname!=window.location.hostname&&(e.target="_blank",e.rel="noreferrer noopener");(function(){document.querySelectorAll(".tabs").forEach(t=>e(t,0));function t(){let s=[...this.parentElement.children].indexOf(this),n=this.closest(".tabs");n.dataset.tabsSyncGroup?document.querySelectorAll(`.tabs[data-tabs-sync-group="${n.dataset.tabsSyncGroup}"]`).forEach(t=>e(t,s)):e(n,s)}function e(e,t){let n=e.querySelector(`.tab-content:nth-child(${t+1})`);n!=null&&(e.querySelectorAll(".tab-content.active, .tab-header.active").forEach(e=>e.classList.remove("active")),n.classList.add("active"),e.querySelector(`.tab-header:nth-child(${t+1})`).classList.add("active"))}document.querySelectorAll(".tab-header").forEach(e=>e.addEventListener("click",t))})(),function(){let t=document.querySelector("main nav");document.querySelector(".nav-burger").addEventListener("click",function(e){document.body.classList.contains("nav-open")||(e.stopPropagation(),document.body.classList.add("nav-open"))}),document.addEventListener("click",function(e){t.contains(e.target)||document.body.classList.remove("nav-open")});let e=document.querySelector(".toc .toc-header");e==null||e.addEventListener("click",function(){document.querySelector(".toc").classList.toggle("collapsed")})}(),function(e,t,n){var o=!!(t&&t.pushState),s={ANCHOR_REGEX:/^#[^ ]+$/,OFFSET_HEIGHT_PX:70,init:function(){this.scrollToCurrent(),window.addEventListener("hashchange",this.scrollToCurrent.bind(this)),e.body.addEventListener("click",this.delegateAnchors.bind(this))},getFixedOffset:function(){return this.OFFSET_HEIGHT_PX},scrollIfAnchor:function(s,i){var a,r,c;return!!this.ANCHOR_REGEX.test(s)&&(a=e.getElementById(s.slice(1)),a&&(r=a.getBoundingClientRect(),c=window.pageYOffset+r.top-this.getFixedOffset(),window.scrollTo(window.pageXOffset,c),o&&i&&t.pushState({},e.title,n.pathname+s)),!!a)},scrollToCurrent:function(){this.scrollIfAnchor(window.location.hash)},delegateAnchors:function(e){var t=e.target;t.nodeName==="A"&&this.scrollIfAnchor(t.getAttribute("href"),!0)&&e.preventDefault()}};window.addEventListener("DOMContentLoaded",s.init.bind(s))}(window.document,window.history,window.location);var SimpleBar=function(){"use strict";var f,O,T,h=function(e,t){return h=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},h(e,t)},p=!("undefined"==typeof window||!window.document||!window.document.createElement),q="object"==typeof global&&global&&global.Object===Object&&global,K="object"==typeof self&&self&&self.Object===Object&&self,j=q||K||Function("return this")(),l=j.Symbol,C=Object.prototype,U=C.hasOwnProperty,W=C.toString,r=l?l.toStringTag:void 0,$=Object.prototype.toString,k=l?l.toStringTag:void 0;function V(e){return e==null?void 0===e?"[object Undefined]":"[object Null]":k&&k in Object(e)?function(e){var t,n,s=U.call(e,r),o=e[r];try{e[r]=void 0,t=!0}catch{}return n=W.call(e),t&&(s?e[r]=o:delete e[r]),n}(e):function(e){return $.call(e)}(e)}O=/\s/,T=/^\s+/;function B(e){return e&&e.slice(0,function(e){for(var t=e.length;t--&&O.test(e.charAt(t)););return t}(e)+1).replace(T,"")}function d(e){var t=typeof e;return e!=null&&("object"==t||"function"==t)}var I=/^[-+]0x[0-9a-f]+$/i,P=/^0b[01]+$/i,R=/^0o[0-7]+$/i,N=parseInt;function _(e){if("number"==typeof e)return e;if(function(e){return"symbol"==typeof e||function(e){return e!=null&&"object"==typeof e}(e)&&"[object Symbol]"==V(e)}(e))return NaN;if(d(e)){var n,t="function"==typeof e.valueOf?e.valueOf():e;e=d(t)?t+"":t}return"string"!=typeof e?0===e?e:+e:(e=B(e),n=P.test(e),n||R.test(e)?N(e.slice(2),n?2:8):I.test(e)?NaN:+e)}var g=function(){return j.Date.now()},D=Math.max,z=Math.min;function c(e,t,n){var s,o,i,r,c,u,a=0,v=!1,l=!1,m=!0;if("function"!=typeof e)throw new TypeError("Expected a function");function f(t){var n=i,s=r;return i=r=void 0,a=t,c=e.apply(s,n)}function y(e){return a=e,s=setTimeout(h,t),v?f(e):c}function b(e){var n=e-o;return void 0===o||n>=t||n<0||l&&e-a>=u}function h(){var e=g();if(b(e))return j(e);s=setTimeout(h,function(e){var n=t-(e-o);return l?z(n,u-(e-a)):n}(e))}function j(e){return s=void 0,m&&i?f(e):(i=r=void 0,c)}function p(){var e=g(),n=b(e);if(i=arguments,r=this,o=e,n){if(void 0===s)return y(o);if(l)return clearTimeout(s),s=setTimeout(h,t),f(o)}return void 0===s&&(s=setTimeout(h,t)),c}return t=_(t)||0,d(n)&&(v=!!n.leading,u=(l="maxWait"in n)?D(_(n.maxWait)||0,t):u,m="trailing"in n?!!n.trailing:m),p.cancel=function(){void 0!==s&&clearTimeout(s),a=0,i=o=r=s=void 0},p.flush=function(){return void 0===s?c:j(g())},p}var i=function(){return i=Object.assign||function(e){for(var t,s,n=1,o=arguments.length;n
    ';var n,o,i,a,e=n.firstElementChild,s=e?.firstElementChild;return s?(document.body.appendChild(e),e.scrollLeft=0,i=t.getOffset(e),o=t.getOffset(s),e.scrollLeft=-999,a=t.getOffset(s),document.body.removeChild(e),t.rtlHelpers={isScrollOriginAtZero:i.left!==o.left,isScrollingToNegative:o.left!==a.left},t.rtlHelpers):null},t.prototype.getScrollbarWidth=function(){try{return this.contentWrapperEl&&"none"===getComputedStyle(this.contentWrapperEl,"::-webkit-scrollbar").display||"scrollbarWidth"in document.documentElement.style||"-ms-overflow-style"in document.documentElement.style?0:S()}catch{return S()}},t.getOffset=function(e){var t=e.getBoundingClientRect(),s=m(e),o=n(e);return{top:t.top+(o.pageYOffset||s.documentElement.scrollTop),left:t.left+(o.pageXOffset||s.documentElement.scrollLeft)}},t.prototype.init=function(){p&&(this.initDOM(),this.rtlHelpers=t.getRtlHelpers(),this.scrollbarWidth=this.getScrollbarWidth(),this.recalculate(),this.initListeners())},t.prototype.initDOM=function(){var t,n;this.wrapperEl=this.el.querySelector(e(this.classNames.wrapper)),this.contentWrapperEl=this.options.scrollableNode||this.el.querySelector(e(this.classNames.contentWrapper)),this.contentEl=this.options.contentNode||this.el.querySelector(e(this.classNames.contentEl)),this.offsetEl=this.el.querySelector(e(this.classNames.offset)),this.maskEl=this.el.querySelector(e(this.classNames.mask)),this.placeholderEl=this.findChild(this.wrapperEl,e(this.classNames.placeholder)),this.heightAutoObserverWrapperEl=this.el.querySelector(e(this.classNames.heightAutoObserverWrapperEl)),this.heightAutoObserverEl=this.el.querySelector(e(this.classNames.heightAutoObserverEl)),this.axis.x.track.el=this.findChild(this.el,"".concat(e(this.classNames.track)).concat(e(this.classNames.horizontal))),this.axis.y.track.el=this.findChild(this.el,"".concat(e(this.classNames.track)).concat(e(this.classNames.vertical))),this.axis.x.scrollbar.el=(null===(t=this.axis.x.track.el)||void 0===t?void 0:t.querySelector(e(this.classNames.scrollbar)))||null,this.axis.y.scrollbar.el=(null===(n=this.axis.y.track.el)||void 0===n?void 0:n.querySelector(e(this.classNames.scrollbar)))||null,this.options.autoHide||(s(this.axis.x.scrollbar.el,this.classNames.visible),s(this.axis.y.scrollbar.el,this.classNames.visible))},t.prototype.initListeners=function(){var t,s,i,o=this,e=n(this.el);this.el.addEventListener("mouseenter",this.onMouseEnter),this.el.addEventListener("pointerdown",this.onPointerEvent,!0),this.el.addEventListener("mousemove",this.onMouseMove),this.el.addEventListener("mouseleave",this.onMouseLeave),null===(t=this.contentWrapperEl)||void 0===t||t.addEventListener("scroll",this.onScroll),e.addEventListener("resize",this.onWindowResize),this.contentEl&&(window.ResizeObserver&&(s=!1,i=e.ResizeObserver||ResizeObserver,this.resizeObserver=new i(function(){s&&e.requestAnimationFrame(function(){o.recalculate()})}),this.resizeObserver.observe(this.el),this.resizeObserver.observe(this.contentEl),e.requestAnimationFrame(function(){s=!0})),this.mutationObserver=new e.MutationObserver(function(){e.requestAnimationFrame(function(){o.recalculate()})}),this.mutationObserver.observe(this.contentEl,{childList:!0,subtree:!0,characterData:!0}))},t.prototype.recalculate=function(){if(this.heightAutoObserverEl&&this.contentEl&&this.contentWrapperEl&&this.wrapperEl&&this.placeholderEl){i=n(this.el),this.elStyles=i.getComputedStyle(this.el),this.isRtl="rtl"===this.elStyles.direction;var t,s,o,i,a,r,e=this.contentEl.offsetWidth,c=this.heightAutoObserverEl.offsetHeight<=1,l=this.heightAutoObserverEl.offsetWidth<=1||e>0,d=this.contentWrapperEl.offsetWidth,u=this.elStyles.overflowX,h=this.elStyles.overflowY;this.contentEl.style.padding="".concat(this.elStyles.paddingTop," ").concat(this.elStyles.paddingRight," ").concat(this.elStyles.paddingBottom," ").concat(this.elStyles.paddingLeft),this.wrapperEl.style.margin="-".concat(this.elStyles.paddingTop," -").concat(this.elStyles.paddingRight," -").concat(this.elStyles.paddingBottom," -").concat(this.elStyles.paddingLeft),t=this.contentEl.scrollHeight,s=this.contentEl.scrollWidth,this.contentWrapperEl.style.height=c?"auto":"100%",this.placeholderEl.style.width=l?"".concat(e||s,"px"):"auto",this.placeholderEl.style.height="".concat(t,"px"),o=this.contentWrapperEl.offsetHeight,this.axis.x.isOverflowing=0!==e&&s>e,this.axis.y.isOverflowing=t>o,this.axis.x.isOverflowing="hidden"!==u&&this.axis.x.isOverflowing,this.axis.y.isOverflowing="hidden"!==h&&this.axis.y.isOverflowing,this.axis.x.forceVisible="x"===this.options.forceVisible||!0===this.options.forceVisible,this.axis.y.forceVisible="y"===this.options.forceVisible||!0===this.options.forceVisible,this.hideNativeScrollbar(),a=this.axis.x.isOverflowing?this.scrollbarWidth:0,r=this.axis.y.isOverflowing?this.scrollbarWidth:0,this.axis.x.isOverflowing=this.axis.x.isOverflowing&&s>d-r,this.axis.y.isOverflowing=this.axis.y.isOverflowing&&t>o-a,this.axis.x.scrollbar.size=this.getScrollbarSize("x"),this.axis.y.scrollbar.size=this.getScrollbarSize("y"),this.axis.x.scrollbar.el&&(this.axis.x.scrollbar.el.style.width="".concat(this.axis.x.scrollbar.size,"px")),this.axis.y.scrollbar.el&&(this.axis.y.scrollbar.el.style.height="".concat(this.axis.y.scrollbar.size,"px")),this.positionScrollbar("x"),this.positionScrollbar("y"),this.toggleTrackVisibility("x"),this.toggleTrackVisibility("y")}},t.prototype.getScrollbarSize=function(e){if(void 0===e&&(e="y"),!this.axis[e].isOverflowing||!this.contentEl)return 0;var t,n,s,i=this.contentEl[this.axis[e].scrollSizeAttr],o=null!==(s=null===(n=this.axis[e].track.el)||void 0===n?void 0:n[this.axis[e].offsetSizeAttr])&&void 0!==s?s:0,a=o/i;return t=Math.max(~~(a*o),this.options.scrollbarMinSize),this.options.scrollbarMaxSize&&(t=Math.min(t,this.options.scrollbarMaxSize)),t},t.prototype.positionScrollbar=function(e){if(void 0===e&&(e="y"),o=this.axis[e].scrollbar,this.axis[e].isOverflowing&&this.contentWrapperEl&&o.el&&this.elStyles){var s,o,i,a,r,l,d=this.contentWrapperEl[this.axis[e].scrollSizeAttr],c=(null===(i=this.axis[e].track.el)||void 0===i?void 0:i[this.axis[e].offsetSizeAttr])||0,u=parseInt(this.elStyles[this.axis[e].sizeAttr],10),n=this.contentWrapperEl[this.axis[e].scrollOffsetAttr],n="x"===e&&this.isRtl&&(null===(a=t.getRtlHelpers())||void 0===a?void 0:a.isScrollOriginAtZero)?-n:n;"x"===e&&this.isRtl&&(n=(null===(r=t.getRtlHelpers())||void 0===r?void 0:r.isScrollingToNegative)?n:-n),l=n/(d-u),s=~~((c-o.size)*l),s="x"===e&&this.isRtl?-s+(c-o.size):s,o.el.style.transform="x"===e?"translate3d(".concat(s,"px, 0, 0)"):"translate3d(0, ".concat(s,"px, 0)")}},t.prototype.toggleTrackVisibility=function(e){void 0===e&&(e="y");var t=this.axis[e].track.el,n=this.axis[e].scrollbar.el;t&&n&&this.contentWrapperEl&&(this.axis[e].isOverflowing||this.axis[e].forceVisible?(t.style.visibility="visible",this.contentWrapperEl.style[this.axis[e].overflowAttr]="scroll",this.el.classList.add("".concat(this.classNames.scrollable,"-").concat(e))):(t.style.visibility="hidden",this.contentWrapperEl.style[this.axis[e].overflowAttr]="hidden",this.el.classList.remove("".concat(this.classNames.scrollable,"-").concat(e))),this.axis[e].isOverflowing?n.style.display="block":n.style.display="none")},t.prototype.showScrollbar=function(e){void 0===e&&(e="y"),this.axis[e].isOverflowing&&!this.axis[e].scrollbar.isVisible&&(s(this.axis[e].scrollbar.el,this.classNames.visible),this.axis[e].scrollbar.isVisible=!0)},t.prototype.hideScrollbar=function(e){void 0===e&&(e="y"),this.axis[e].isOverflowing&&this.axis[e].scrollbar.isVisible&&(o(this.axis[e].scrollbar.el,this.classNames.visible),this.axis[e].scrollbar.isVisible=!1)},t.prototype.hideNativeScrollbar=function(){this.offsetEl&&(this.offsetEl.style[this.isRtl?"left":"right"]=this.axis.y.isOverflowing||this.axis.y.forceVisible?"-".concat(this.scrollbarWidth,"px"):"0px",this.offsetEl.style.bottom=this.axis.x.isOverflowing||this.axis.x.forceVisible?"-".concat(this.scrollbarWidth,"px"):"0px")},t.prototype.onMouseMoveForAxis=function(e){void 0===e&&(e="y");var t=this.axis[e];t.track.el&&t.scrollbar.el&&(t.track.rect=t.track.el.getBoundingClientRect(),t.scrollbar.rect=t.scrollbar.el.getBoundingClientRect(),this.isWithinBounds(t.track.rect)?(this.showScrollbar(e),s(t.track.el,this.classNames.hover),this.isWithinBounds(t.scrollbar.rect)?s(t.scrollbar.el,this.classNames.hover):o(t.scrollbar.el,this.classNames.hover)):(o(t.track.el,this.classNames.hover),this.options.autoHide&&this.hideScrollbar(e)))},t.prototype.onMouseLeaveForAxis=function(e){void 0===e&&(e="y"),o(this.axis[e].track.el,this.classNames.hover),o(this.axis[e].scrollbar.el,this.classNames.hover),this.options.autoHide&&this.hideScrollbar(e)},t.prototype.onDragStart=function(e,t){void 0===t&&(t="y");var i,o=m(this.el),a=n(this.el),r=this.axis[t].scrollbar,c="y"===t?e.pageY:e.pageX;this.axis[t].dragOffset=c-((null===(i=r.rect)||void 0===i?void 0:i[this.axis[t].offsetAttr])||0),this.draggedAxis=t,s(this.el,this.classNames.dragging),o.addEventListener("mousemove",this.drag,!0),o.addEventListener("mouseup",this.onEndDrag,!0),null===this.removePreventClickId?(o.addEventListener("click",this.preventClick,!0),o.addEventListener("dblclick",this.preventClick,!0)):(a.clearTimeout(this.removePreventClickId),this.removePreventClickId=null)},t.prototype.onTrackClick=function(e,t){if(o=this,void 0===t&&(t="y"),c=this.axis[t],this.options.clickOnTrack&&c.scrollbar.el&&this.contentWrapperEl){e.preventDefault(),l=n(this.el),this.axis[t].scrollbar.rect=c.scrollbar.el.getBoundingClientRect();var o,i,a,r,c,l,d,h=null!==(d=null===(a=this.axis[t].scrollbar.rect)||void 0===a?void 0:a[this.axis[t].offsetAttr])&&void 0!==d?d:0,m=parseInt(null!==(i=null===(r=this.elStyles)||void 0===r?void 0:r[this.axis[t].sizeAttr])&&void 0!==i?i:"0px",10),s=this.contentWrapperEl[this.axis[t].scrollOffsetAttr],f=("y"===t?this.mouseY-h:this.mouseX-h)<0?-1:1,p=-1===f?s-m:s+m,u=function(){o.contentWrapperEl&&(-1===f?s>p&&(s-=40,o.contentWrapperEl[o.axis[t].scrollOffsetAttr]=s,l.requestAnimationFrame(u)):s=e.left&&this.mouseX<=e.left+e.width&&this.mouseY>=e.top&&this.mouseY<=e.top+e.height},t.prototype.findChild=function(e,t){var n=e.matches||e.webkitMatchesSelector||e.mozMatchesSelector||e.msMatchesSelector;return Array.prototype.filter.call(e.children,function(e){return n.call(e,t)})[0]},t.rtlHelpers=null,t.defaultOptions={forceVisible:!1,clickOnTrack:!0,scrollbarMinSize:25,scrollbarMaxSize:0,ariaLabel:"scrollable content",classNames:{contentEl:"simplebar-content",contentWrapper:"simplebar-content-wrapper",offset:"simplebar-offset",mask:"simplebar-mask",wrapper:"simplebar-wrapper",placeholder:"simplebar-placeholder",scrollbar:"simplebar-scrollbar",track:"simplebar-track",heightAutoObserverWrapperEl:"simplebar-height-auto-observer-wrapper",heightAutoObserverEl:"simplebar-height-auto-observer",visible:"simplebar-visible",horizontal:"simplebar-horizontal",vertical:"simplebar-vertical",hover:"simplebar-hover",dragging:"simplebar-dragging",scrolling:"simplebar-scrolling",scrollable:"simplebar-scrollable",mouseEntered:"simplebar-mouse-entered"},scrollableNode:null,contentNode:null,autoHide:!0},t.getOptions=H,t.helpers=L,t}(),w=u.helpers,v=w.getOptions,t=w.addClasses,E=function(e){function n(){for(var o,s=[],t=0;tAurora • Unified RGB Lighting, Docs -

    Natively Supported Games


    Last updated 02.01.2024

    Aurora supports these games natively:

    Aurora supports these games/softwares via mods:

    • Discord (via BetterDiscord)
    • Minecraft (with version specific mods)
    • OSU
    • Witcher 3
    • Terraria
    • Rocket League

    See Wiki for details, as some models can be incompatible.


    Page authored by
    \ No newline at end of file diff --git a/basic-topics/getting-started/index.html b/basic-topics/getting-started/index.html index b5f7d6f..bcb9e2e 100644 --- a/basic-topics/getting-started/index.html +++ b/basic-topics/getting-started/index.html @@ -1,6 +1,6 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Getting Started


    Last updated 10.01.2024

    When you first open Aurora, you will be presented with a window that looks like the following. -Annotated picture of the main Aurora UI

    Applications

    On the far left is the application list, with each application shown as an icon. All the applications and games you will see here by default have some sort of integration or preset profile. You are not limited to just these ones however; by scrolling to the bottom of the list and clicking the plus icon you will be able to specify new applications either by selecting from the running process list or by browsing to the exe. You can disable applications if you don’t want your lighting changing when you open that app by going onto the overview and un-checking the “Enable Aurora to provide lighting effects…” box. You can also right-click on the application icons to hide them if you do not have that game and don’t want it cluttering up the list.

    Aurora works by detecting the application that is currently focused and checking if it has an application entry for that application. If it does, it will render the active profile (we’ll see what a profile is in the next section) to your peripherals. If it does not, it will render the “Desktop” application’s selected profile. -Each application can have one or more profiles, and each profile can have as many layers as you wish

    Profiles

    Profiles are a collection of layers that will be drawn to the keyboard whenever that application is currently open (and in the foreground). An application can have one or more profiles, but only one profile can be active at once. You can assign keys to each profile allowing you to switch between them when a specific button is pressed.

    To view the profiles for the currently selected application, click on the “Profiles” button in the list view buttons near the top left of the window. The list below this button will then show you all the profiles of the application. From here you can:

    • Add a new profile by clicking the “Add” button.
    • Delete profiles by clicking the red “X” button.
    • Import a profile from .cueprofile or .json file.
    • Export your profile as a .json file.
    • Copy/paste profiles to duplicate them or add them to another application.
    • Reset the profile to the default state.
    • Rename a profile by clicking on it, then typing a name in the “Profile name” box in the properties panel
    • Assign a key to select a profile by clicking on it, then clicking “Assign” next to “Keybind to active profile” in the properties panel then pressing the keys on your keyboard you want.

    Layers

    A Layer is an instruction for Aurora to set the color of some specific keys on your keyboard. Each layer has different functionality which is detailed in a later section of this guide. The layers are drawn from bottom-to-top, therefore anything higher up the list will take priority over the colors of anything lower down.

    Annoted picture of the Layer controls

    To show the layers list, click the “Layers” list view button that will be at the top left or bottom left of the window (depending on whether the profile list is open or not). A list will appear below this button showing you all your layers. From here you can:

    • Add new layers by clicking on the “Add” button above the layer list.
    • Select a layer and press the copy and paste buttons (or press Ctrl + C, Ctrl + V) to duplicate it or copy it to another profile.
    • Change the layer properties by clicking on a layer and using the properties panel.
    • Delete the layer by selecting it and clicking the red “X” button.
    • Re-order layers by clicking and dragging the triple horizontal line (burger) button next to the layer.

    Overlay Layers

    Overlay layers are different from regular layers in that they appear whenever a particular process is running (or in the case of desktop overlay layers, always). For example, if you create a profile for Spotify and add a audio visualizer as an overlay, the visualizer will always appear whenever Spotify is open, regardless of whether you have it in the foreground or not.

    Note that the layers and overlay layers for a profile can be enabled/disabled independently. With the Spotify example, if you disable the regular layers for the profile but keep the overlay layers, your desktop profile will stay active when Spotify is in the foreground instead of going blank with only the overlay layers.

    Layer Properties

    Each layer will have a set of properties that you can change such as color or the keys it affects. This can be changed in the bottom right panel, the Properties Panel. The properties available to each layer are listed in the reference section of this guide that can be accessed in the navigation list.


    Page authored by
    \ No newline at end of file +Annotated picture of the main Aurora UI

    Applications

    On the far left is the application list, with each application shown as an icon. All the applications and games you will see here by default have some sort of integration or preset profile. You are not limited to just these ones however; by scrolling to the bottom of the list and clicking the plus icon you will be able to specify new applications either by selecting from the running process list or by browsing to the exe. You can disable applications if you don’t want your lighting changing when you open that app by going onto the overview and un-checking the “Enable Aurora to provide lighting effects…” box. You can also right-click on the application icons to hide them if you do not have that game and don’t want it cluttering up the list.

    Aurora works by detecting the application that is currently focused and checking if it has an application entry for that application. If it does, it will render the active profile (we’ll see what a profile is in the next section) to your peripherals. If it does not, it will render the “Desktop” application’s selected profile. +Each application can have one or more profiles, and each profile can have as many layers as you wish

    Profiles

    Profiles are a collection of layers that will be drawn to the keyboard whenever that application is currently open (and in the foreground). An application can have one or more profiles, but only one profile can be active at once. You can assign keys to each profile allowing you to switch between them when a specific button is pressed.

    To view the profiles for the currently selected application, click on the “Profiles” button in the list view buttons near the top left of the window. The list below this button will then show you all the profiles of the application. From here you can:

    • Add a new profile by clicking the “Add” button.
    • Delete profiles by clicking the red “X” button.
    • Import a profile from .cueprofile or .json file.
    • Export your profile as a .json file.
    • Copy/paste profiles to duplicate them or add them to another application.
    • Reset the profile to the default state.
    • Rename a profile by clicking on it, then typing a name in the “Profile name” box in the properties panel
    • Assign a key to select a profile by clicking on it, then clicking “Assign” next to “Keybind to active profile” in the properties panel then pressing the keys on your keyboard you want.

    Layers

    A Layer is an instruction for Aurora to set the color of some specific keys on your keyboard. Each layer has different functionality which is detailed in a later section of this guide. The layers are drawn from bottom-to-top, therefore anything higher up the list will take priority over the colors of anything lower down.

    Annoted picture of the Layer controls

    To show the layers list, click the “Layers” list view button that will be at the top left or bottom left of the window (depending on whether the profile list is open or not). A list will appear below this button showing you all your layers. From here you can:

    • Add new layers by clicking on the “Add” button above the layer list.
    • Select a layer and press the copy and paste buttons (or press Ctrl + C, Ctrl + V) to duplicate it or copy it to another profile.
    • Change the layer properties by clicking on a layer and using the properties panel.
    • Delete the layer by selecting it and clicking the red “X” button.
    • Re-order layers by clicking and dragging the triple horizontal line (burger) button next to the layer.

    Overlay Layers

    Overlay layers are different from regular layers in that they appear whenever a particular process is running (or in the case of desktop overlay layers, always). For example, if you create a profile for Spotify and add a audio visualizer as an overlay, the visualizer will always appear whenever Spotify is open, regardless of whether you have it in the foreground or not.

    Note that the layers and overlay layers for a profile can be enabled/disabled independently. With the Spotify example, if you disable the regular layers for the profile but keep the overlay layers, your desktop profile will stay active when Spotify is in the foreground instead of going blank with only the overlay layers.

    Layer Properties

    Each layer will have a set of properties that you can change such as color or the keys it affects. This can be changed in the bottom right panel, the Properties Panel. The properties available to each layer are listed in the reference section of this guide that can be accessed in the navigation list.


    Page authored by \ No newline at end of file diff --git a/basic-topics/index.html b/basic-topics/index.html index 2df45e8..3ff41df 100644 --- a/basic-topics/index.html +++ b/basic-topics/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    \ No newline at end of file diff --git a/basic-topics/installation/index.html b/basic-topics/installation/index.html index 4cd89dd..b04380d 100644 --- a/basic-topics/installation/index.html +++ b/basic-topics/installation/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Installation


    Last updated 16.01.2024

    To install Aurora, the easiest way is to download the installer from our GitHub page and simply run it.

    After this, you will find Aurora in your start menu. Opening the Aurora program will show you some simple steps you will need to take with detected existing RGB to allow Aurora to take priority when it needs to. It’s important you follows these steps otherwise Aurora may not work correctly.

    Dev Version

    The Aurora software is constantly evolving thanks to submissions from various contributors. Before these changes hit the main release, they are added to a special “dev” version of Aurora (after being bug-tested).

    If you would like to, it is possible to download the dev version to access some new additional features and bug fixes.

    Other Versions

    Since there are several contributors contributing to Aurora, there are several different branches of Aurora. A developer will often ask their branch to be tested by users, either through Discord or on a Pull Request on GitHub.

    Because of all the separate versions with different functionality, it is advisable NOT to install these versions using the exe, but instead to download the zip file and extract them to a place other than your main Aurora installation. Like with the dev version, it’s highly recommended to backup profiles and settings.

    Downloading a GitHub Pull Request

    A pull request is where a developer has made changes to Aurora and would like to merge these into the main Aurora release. These pull requests will contain a description of exactly what changes have been made and will automatically create a build of that version. This version will likely be based on a recent dev version of Aurora (as opposed to the main version).

    Once you have found a Pull Request you wish to download and test, you should be presented with a screen such as this.

    PR GitHub page

    Scroll down until you find a section with green ticks (a maybe red crosses). There should be an item that says “All checks have passed”. Next to this item, click on “Show all checks” button to reveal a small panel below this item. Click on the “Details” link. If you do not have an “All checks have passed” option, the automatic build process has failed and you will not be able to download a pre-built version.

    The panel that will take you to the build artefacts

    You should be taken to the website “AppVeyor” and should see a large blue block of text. Just above this text, click the “Artifacts” tab, and you will be presented with the built installer and ZIP file for that PR.

    The download link for the artefacts


    Page authored by
    \ No newline at end of file +Aurora User Docs

    Installation


    Last updated 16.01.2024

    To install Aurora, the easiest way is to download the installer from our GitHub page and simply run it.

    After this, you will find Aurora in your start menu. Opening the Aurora program will show you some simple steps you will need to take with detected existing RGB to allow Aurora to take priority when it needs to. It’s important you follows these steps otherwise Aurora may not work correctly.

    Dev Version

    The Aurora software is constantly evolving thanks to submissions from various contributors. Before these changes hit the main release, they are added to a special “dev” version of Aurora (after being bug-tested).

    If you would like to, it is possible to download the dev version to access some new additional features and bug fixes.

    Other Versions

    Since there are several contributors contributing to Aurora, there are several different branches of Aurora. A developer will often ask their branch to be tested by users, either through Discord or on a Pull Request on GitHub.

    Because of all the separate versions with different functionality, it is advisable NOT to install these versions using the exe, but instead to download the zip file and extract them to a place other than your main Aurora installation. Like with the dev version, it’s highly recommended to backup profiles and settings.

    Downloading a GitHub Pull Request

    A pull request is where a developer has made changes to Aurora and would like to merge these into the main Aurora release. These pull requests will contain a description of exactly what changes have been made and will automatically create a build of that version. This version will likely be based on a recent dev version of Aurora (as opposed to the main version).

    Once you have found a Pull Request you wish to download and test, you should be presented with a screen such as this.

    PR GitHub page

    Scroll down until you find a section with green ticks (a maybe red crosses). There should be an item that says “All checks have passed”. Next to this item, click on “Show all checks” button to reveal a small panel below this item. Click on the “Details” link. If you do not have an “All checks have passed” option, the automatic build process has failed and you will not be able to download a pre-built version.

    The panel that will take you to the build artefacts

    You should be taken to the website “AppVeyor” and should see a large blue block of text. Just above this text, click the “Artifacts” tab, and you will be presented with the built installer and ZIP file for that PR.

    The download link for the artefacts


    Page authored by
    \ No newline at end of file diff --git a/basic-topics/user-data/index.html b/basic-topics/user-data/index.html index 6b19d47..cf7145e 100644 --- a/basic-topics/user-data/index.html +++ b/basic-topics/user-data/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    User Data


    Last updated 10.01.2024

    Aurora stores all user data in a directory in the roaming application data folder. This user data includes all your settings (such as preferred devices, bitmap accuracy, etc) as well as all your lighting profiles and recent logs that Aurora has created. You can see the Aurora folder by navigating to %APPDATA%\Aurora in Windows file explorer.

    Importing Profiles

    Profiles that others have made can be imported easily into Aurora using the import button on the “Profiles” section. Pressing this button will open a dialog asking you to choose a file to import. JSON files that have been exported from Aurora (see exporting profiles) are fully supported through import. In addition, Aurora has partial support for implementing iCUE profiles, however due to the nature of it being a different program with different layers and formats, imported profiles may not look identical.

    When importing a profile, a new profile will appear in the profile list - you do not need to worry about it overwriting the profile you currently have selected. If you wish to merge the imported profile with an existing one you have, you can select the layers from one profile and copy and paste them using the relevant buttons or by pressing the Ctrl + C and Ctrl + V keys on the keyboard.

    Exporting Profiles

    If you have created a profile that you wish to share with other people, you can easily export it by clicking the export button on the “Profiles” section. Clicking this button will open a window where you will be asked to save the profile as a JSON file. This JSON file can then be sent to other people who can import it into Aurora using the method described above. There is no way to export Aurora profiles into other applications such as LGS or iCUE.

    Taking a Backup

    There may be times when it would be wise to take a backup of your entire Aurora data folder (for example when you are installing a test build of Aurora). Doing this is a very simple matter of duplicating a folder.

    1. First, open up Windows file explorer.
    2. In the address bar, type %APPDATA% and press enter. This will take you to the folder where various installed programs can store data for your user account.
    3. There will be a folder called “Aurora” in here. Simply copy that folder to a different location (for example your Documents).

    Finding the Aurora user data directory

    1. Should you need to restore data that’s been backed up in future, you can simply replace the sane Aurora direction with the backup folder.

    Clearing User Data

    Clearing your user data may be required if you start using test versions of Aurora or need to downgrade your Aurora installation for whatever reason. To do this, you can simply delete (or rename/move if you intend to reuse to this data some time) the Aurora folder.

    1. First, ensure that you have closed Aurora. Deleting data while Aurora is running may cause it to crash. Additionally, Aurora will write some data to it’s user data folder when it closes.
    2. Next, open up Windows file explorer and in the address bar, type %APPDATA% and press enter. This will take you to the roaming application data folder.
    3. There will be a folder called “Aurora” in here. Simply delete, move or rename that folder.
    4. When you next re-open Aurora, it will recreate all the necessary data with the default configuration: default settings, default profiles, etc.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    User Data


    Last updated 10.01.2024

    Aurora stores all user data in a directory in the roaming application data folder. This user data includes all your settings (such as preferred devices, bitmap accuracy, etc) as well as all your lighting profiles and recent logs that Aurora has created. You can see the Aurora folder by navigating to %APPDATA%\Aurora in Windows file explorer.

    Importing Profiles

    Profiles that others have made can be imported easily into Aurora using the import button on the “Profiles” section. Pressing this button will open a dialog asking you to choose a file to import. JSON files that have been exported from Aurora (see exporting profiles) are fully supported through import. In addition, Aurora has partial support for implementing iCUE profiles, however due to the nature of it being a different program with different layers and formats, imported profiles may not look identical.

    When importing a profile, a new profile will appear in the profile list - you do not need to worry about it overwriting the profile you currently have selected. If you wish to merge the imported profile with an existing one you have, you can select the layers from one profile and copy and paste them using the relevant buttons or by pressing the Ctrl + C and Ctrl + V keys on the keyboard.

    Exporting Profiles

    If you have created a profile that you wish to share with other people, you can easily export it by clicking the export button on the “Profiles” section. Clicking this button will open a window where you will be asked to save the profile as a JSON file. This JSON file can then be sent to other people who can import it into Aurora using the method described above. There is no way to export Aurora profiles into other applications such as LGS or iCUE.

    Taking a Backup

    There may be times when it would be wise to take a backup of your entire Aurora data folder (for example when you are installing a test build of Aurora). Doing this is a very simple matter of duplicating a folder.

    1. First, open up Windows file explorer.
    2. In the address bar, type %APPDATA% and press enter. This will take you to the folder where various installed programs can store data for your user account.
    3. There will be a folder called “Aurora” in here. Simply copy that folder to a different location (for example your Documents).

    Finding the Aurora user data directory

    1. Should you need to restore data that’s been backed up in future, you can simply replace the sane Aurora direction with the backup folder.

    Clearing User Data

    Clearing your user data may be required if you start using test versions of Aurora or need to downgrade your Aurora installation for whatever reason. To do this, you can simply delete (or rename/move if you intend to reuse to this data some time) the Aurora folder.

    1. First, ensure that you have closed Aurora. Deleting data while Aurora is running may cause it to crash. Additionally, Aurora will write some data to it’s user data folder when it closes.
    2. Next, open up Windows file explorer and in the address bar, type %APPDATA% and press enter. This will take you to the roaming application data folder.
    3. There will be a folder called “Aurora” in here. Simply delete, move or rename that folder.
    4. When you next re-open Aurora, it will recreate all the necessary data with the default configuration: default settings, default profiles, etc.

    Page authored by
    \ No newline at end of file diff --git a/devices/alldevices/index.html b/devices/alldevices/index.html index 8956a36..6776dfb 100644 --- a/devices/alldevices/index.html +++ b/devices/alldevices/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    All Supported Devices


    Last updated 02.01.2024

    You can use Aurora with these Brands:

    • Asus
    • AtmoOrb
    • Bloody
    • Clevo
    • CoolerMaster
    • Corsair
    • Drevo
    • Ducky
    • Alienware
    • Logitech
    • OMEN
    • Razer
    • Roccat
    • Sony DS4 & DualSense
    • SoundBlasterX
    • Steelseries
    • Vulcan
    • Wooting
    • Yeelight
    • And by OpenRGB with “Direct Mode” support

    See Wiki for details, as some models can be incompatible.


    Page authored by
    \ No newline at end of file diff --git a/devices/asus/index.html b/devices/asus/index.html index ecff9b1..ae434b4 100644 --- a/devices/asus/index.html +++ b/devices/asus/index.html @@ -1,8 +1,8 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Asus


    Last updated 05.01.2024

    Required Software

    One of:

    • Asus Aura Sync 1.01.79_V2.1 or later - Download or,
    • Asus Armory Crate

    Version 1.07.79 of Asus Aura Sync will NOT work for most users.

    Using OpenRGB instead of Asus software is highly recommended.

    Needed configuration

    By default, all Asus lights that are not a keyboard will default to the mouse logo color. To change this behaviour, you must open the Aurora settings, get to the “Devices and Wrappers” tab and click the “Configure Asus Peripheral Devices” button, which will open an interface to assign each individual light to a certain key or zone, such as mousepad lights.

    Known issues

    Items controlled by both Aura and another supported app can create conflicts. A common example would be Corsair RAM in the system with Asus Aura and iCue both trying to control it at the same time. The fix for that is rather simple : Open up the Aura app and disable sync for that peripheral/component by clicking the unlink button under its icon, at the top.

    Supported Devices

    Most Asus devices supported by Asus Aura. -Most components plugged in directly to an Aura enabled motherboard (Notable exceptions include the Corsair Vengeance PRO ram, which needs to be controlled via iCue instead)


    Page authored by
    \ No newline at end of file +Most components plugged in directly to an Aura enabled motherboard (Notable exceptions include the Corsair Vengeance PRO ram, which needs to be controlled via iCue instead)


    Page authored by \ No newline at end of file diff --git a/devices/corsair/index.html b/devices/corsair/index.html index 27d220b..fa8678b 100644 --- a/devices/corsair/index.html +++ b/devices/corsair/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    Corsair


    Last updated 10.01.2024

    You can have brand specific integrations (like Chroma and Lightsync) with Corsair devices using Aurora.

    Required Software

    • Corsair iCUE

    Needed configuration

    The SDK should come enabled by default when you install iCUE, but in case it doesn’t connect, make sure it is enabled.

    Turning on the SDK in Corsair iCUE

    Supported Devices

    All devices that a version of iCUE is supported.


    Page authored by
    \ No newline at end of file diff --git a/devices/dualsense/index.html b/devices/dualsense/index.html index 3dd3267..0003cf4 100644 --- a/devices/dualsense/index.html +++ b/devices/dualsense/index.html @@ -1,5 +1,5 @@ Aurora • Unified RGB Lighting, Docs -
    +

    DualShock4 & DualSense


    Last updated 05.01.2024

    You can use Aurora to change your controller’s color depending on games and other variables.

    Required Software

    • OpenRGB (for DualSense)

    Needed configuration

    DualShock 4 or DualSense should be enabled in OpenRGB. Remapping controller led to correct led may be needed.

    Known issues

    PlayStation specific features like Vibration, Haptic and Adaptive Triggers won’t work while your color is being updated. -Color updating is recommended to be disabled with supported games by setting a static color to it from Aurora.


    Page authored by
    \ No newline at end of file +Color updating is recommended to be disabled with supported games by setting a static color to it from Aurora.


    Page authored by \ No newline at end of file diff --git a/devices/index.html b/devices/index.html index 7c4dec5..e373585 100644 --- a/devices/index.html +++ b/devices/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    \ No newline at end of file diff --git a/devices/logitech/index.html b/devices/logitech/index.html index 1ab0c57..a149837 100644 --- a/devices/logitech/index.html +++ b/devices/logitech/index.html @@ -1,6 +1,6 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Logitech


    Last updated 16.01.2024

    Required Software

    One of:

    • Logitech Gaming Software 9.02.65+
    • Logitech G Hub

    Needed configuration

    The SDK should come enabled by default when you install LGS or GHUB, but in case it doesn’t connect, make sure it is enabled.

    For GHUB:

    Turning on the SDK in Logitech G HUB

    For LGS:

    1. Open Logitech Gaming Software and go into Settings

    Opening Settings in Logitech Gaming Software

    1. Enable Game Integration Settings

    Enabling Game Integration Settings in Logitech Gaming Software

    1. Open the Game Integration Configuration menu

    Opening the Game Integration Menu in Logitech Gaming Software

    1. Disable Conflicting Settings and Applets

    Disabling CS:GO in Logitech Gaming Software -Disabling DotA2 in Logitech Gaming Software

    Known issues

    Logitech device integration does not work when Lightsync Wrapper is enabled

    • Lightsync wrapper will be automatically disabled if Logitech software autorun is detected. -If you want to use Logitech devices with other brands and have Lightsync integration on all devices, you have to replace Logitech software with OpenRGB

    • G HUB can take a very long time to fully open and start receiving SDK requests. Because of this, on some systems Aurora tries to connect to G HUB before it has the chance to completely start. This causes any following connections to fail until both G HUB and Aurora are restarted. This can be fixed on boot by adding a delay to the task Aurora uses to startup. This can be done in the General Settings:

    Adding a delay to Aurora’s startup task

    • Sometimes G HUB will only display Aurora’s lighting when the window is open on the foreground. To fix this, setting the desktop profile to permanent may be needed.

    Setting the desktop profile as the persistent one in GHUB

    Supported Devices

    Keyboards

    All per-key RGB keyboards are supposed to work. These are confirmed keyboards:

    • G910
    • G410
    • G810
    • GPRO
    • G815
    • G513

    Mice

    All mice are supposed to work, these are confirmed mice:

    • G900
    • G502

    Mousepads

    Most other Logitech LIGHTSYNC devices should work fine, even if they don't have a layout available in Aurora. Simply choose a keyboard with the same layout!


    Page authored by
    \ No newline at end of file +Aurora User Docs

    Logitech


    Last updated 16.01.2024

    Required Software

    One of:

    • Logitech Gaming Software 9.02.65+
    • Logitech G Hub

    Needed configuration

    The SDK should come enabled by default when you install LGS or GHUB, but in case it doesn’t connect, make sure it is enabled.

    For GHUB:

    Turning on the SDK in Logitech G HUB

    For LGS:

    1. Open Logitech Gaming Software and go into Settings

    Opening Settings in Logitech Gaming Software

    1. Enable Game Integration Settings

    Enabling Game Integration Settings in Logitech Gaming Software

    1. Open the Game Integration Configuration menu

    Opening the Game Integration Menu in Logitech Gaming Software

    1. Disable Conflicting Settings and Applets

    Disabling CS:GO in Logitech Gaming Software +Disabling DotA2 in Logitech Gaming Software

    Known issues

    Logitech device integration does not work when Lightsync Wrapper is enabled

    • Lightsync wrapper will be automatically disabled if Logitech software autorun is detected. +If you want to use Logitech devices with other brands and have Lightsync integration on all devices, you have to replace Logitech software with OpenRGB

    • G HUB can take a very long time to fully open and start receiving SDK requests. Because of this, on some systems Aurora tries to connect to G HUB before it has the chance to completely start. This causes any following connections to fail until both G HUB and Aurora are restarted. This can be fixed on boot by adding a delay to the task Aurora uses to startup. This can be done in the General Settings:

    Adding a delay to Aurora’s startup task

    • Sometimes G HUB will only display Aurora’s lighting when the window is open on the foreground. To fix this, setting the desktop profile to permanent may be needed.

    Setting the desktop profile as the persistent one in GHUB

    Supported Devices

    Keyboards

    All per-key RGB keyboards are supposed to work. These are confirmed keyboards:

    • G910
    • G410
    • G810
    • GPRO
    • G815
    • G513

    Mice

    All mice are supposed to work, these are confirmed mice:

    • G900
    • G502

    Mousepads

    Most other Logitech LIGHTSYNC devices should work fine, even if they don't have a layout available in Aurora. Simply choose a keyboard with the same layout!


    Page authored by
    \ No newline at end of file diff --git a/devices/openrgb/index.html b/devices/openrgb/index.html index 433c48f..d7b5e85 100644 --- a/devices/openrgb/index.html +++ b/devices/openrgb/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    OpenRGB


    Last updated 16.01.2024

    Required Software

    OpenRGB

    Needed configuration

    This page is not complete yet

    SDK server in OpenRGB needs to be started. This can be done automatically at boot from OpenRGB settings.


    Page authored by
    \ No newline at end of file diff --git a/devices/razer/index.html b/devices/razer/index.html index 0a3a625..475fdf0 100644 --- a/devices/razer/index.html +++ b/devices/razer/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Razer


    Last updated 21.01.2024

    You can have brand specific integrations (like LightFX and Lightsync) with Razer devices using Aurora.

    Required Software

    One of:

    • Synapse
    • OpenRGB

    Tips

    • After installing Synapse, you can disable all Razer services and only leave “Razer Chroma SDK Service” running to reduce background usage.
    • Using Chroma SDK Service and a Chroma integrated game make Razer devices flicker. In this case using OpenRGB and “Disabling Device Control” in “Devices & Wrappers” menu of Aurora is recommended

    Needed configuration

    The SDK should come enabled by default when you install Synapse.

    Supported Devices

    All devices except really recent devices should work. For really recent devices, small update to the SDK library is needed.


    Page authored by
    \ No newline at end of file +Aurora User Docs

    Razer


    Last updated 21.01.2024

    You can have brand specific integrations (like LightFX and Lightsync) with Razer devices using Aurora.

    Required Software

    One of:

    • Synapse
    • OpenRGB

    Tips

    • After installing Synapse, you can disable all Razer services and only leave “Razer Chroma SDK Service” running to reduce background usage.
    • Using Chroma SDK Service and a Chroma integrated game make Razer devices flicker. In this case using OpenRGB and “Disabling Device Control” in “Devices & Wrappers” menu of Aurora is recommended

    Needed configuration

    The SDK should come enabled by default when you install Synapse.

    Supported Devices

    All devices except really recent devices should work. For really recent devices, small update to the SDK library is needed.


    Page authored by
    \ No newline at end of file diff --git a/devices/steelseries/index.html b/devices/steelseries/index.html index c2f3153..fec26a0 100644 --- a/devices/steelseries/index.html +++ b/devices/steelseries/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    SteelSeries


    Last updated 10.01.2024

    Required Software

    One of:

    • SteelSeries Engine 3
    • OpenRGB

    Needed configuration

    The SDK should be enabled by default, but in case it’s not, make sure the ‘Project Aurora’ custom application is enabled.

    Enabling custom app in SSE3

    If you still cannot control your keyboard or mouse illumination, check if Color Special Event is enabled in Aurora applet in SSE.

    Color Special Event in Aurora applet

    Known Issues

    Devices with number of zones other than 1, 2 or 12 are not fully supported (ex. Rival 600) - they may still work but not all zones can be controlled.

    Supported Devices

    Most devices supported by SteelSeries Engine. Notable exceptions are zone based keyboards like Apex M350 or Apex 3.


    Page authored by
    \ No newline at end of file +Aurora User Docs

    SteelSeries


    Last updated 10.01.2024

    Required Software

    One of:

    • SteelSeries Engine 3
    • OpenRGB

    Needed configuration

    The SDK should be enabled by default, but in case it’s not, make sure the ‘Project Aurora’ custom application is enabled.

    Enabling custom app in SSE3

    If you still cannot control your keyboard or mouse illumination, check if Color Special Event is enabled in Aurora applet in SSE.

    Color Special Event in Aurora applet

    Known Issues

    Devices with number of zones other than 1, 2 or 12 are not fully supported (ex. Rival 600) - they may still work but not all zones can be controlled.

    Supported Devices

    Most devices supported by SteelSeries Engine. Notable exceptions are zone based keyboards like Apex M350 or Apex 3.


    Page authored by
    \ No newline at end of file diff --git a/devices/wooting/index.html b/devices/wooting/index.html index a51924d..aba3d82 100644 --- a/devices/wooting/index.html +++ b/devices/wooting/index.html @@ -1,5 +1,5 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Wooting


    Last updated 05.01.2024

    Required Software

    None. Aurora will connect directly to your keyboard

    Needed configuration

    None. Connection should be automatic. If Aurora fails to connect at first, replug the keyboard and start Aurora again.

    Known issues

    Aurora overrides any lighting profiles on the keyboard. Due to this, it becomes impossible to tell which profile (digital, analog 1-3) is active at any time. -There is currently no fix / workaround for this, but this data might be a game state variable in the future.

    Sometimes having Aurora and Wootility open at the same time can cause the keyboard to stop sending inputs. Replug the keyboard to fix this.

    Supported Devices

    All keyboards should work fine as long as they have per-key RGB.


    Page authored by
    \ No newline at end of file +There is currently no fix / workaround for this, but this data might be a game state variable in the future.

    Sometimes having Aurora and Wootility open at the same time can cause the keyboard to stop sending inputs. Replug the keyboard to fix this.

    Supported Devices

    All keyboards should work fine as long as they have per-key RGB.


    Page authored by \ No newline at end of file diff --git a/index.html b/index.html index bb6bf37..4da0822 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ -Aurora • Unified RGB Lighting, Docs -
    \ No newline at end of file diff --git a/integrations/chroma/index.html b/integrations/chroma/index.html index eb7776f..7c59543 100644 --- a/integrations/chroma/index.html +++ b/integrations/chroma/index.html @@ -1,5 +1,5 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Razer Chroma


    Last updated 02.01.2024

    You can use Chroma integration with all supported devices

    Note that this is reverse engineered and may not work as the original.

    You can have Synapse installed and Aurora will automatically apply game effects to your devices. -Then, “Razer Chroma SDK Service” needs to be running for the integration to work.

    • RAZER is the trademark or registered trademark of Razer Inc.

    Page authored by
    \ No newline at end of file +Then, “Razer Chroma SDK Service” needs to be running for the integration to work.

    • RAZER is the trademark or registered trademark of Razer Inc.

    Page authored by \ No newline at end of file diff --git a/integrations/index.html b/integrations/index.html index ca942eb..927a77c 100644 --- a/integrations/index.html +++ b/integrations/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    \ No newline at end of file diff --git a/integrations/lightfx/index.html b/integrations/lightfx/index.html index 7486349..9976344 100644 --- a/integrations/lightfx/index.html +++ b/integrations/lightfx/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    Alienware LightFX


    Last updated 02.01.2024

    You can use Lightsync integration with all supported devices

    You must install LightFX wrapper dll to the game directory from Aurora settings.

    Note that this is reverse engineered and may not work as the original.


    Page authored by
    \ No newline at end of file diff --git a/integrations/lightsync/index.html b/integrations/lightsync/index.html index a9ee937..7c25ecb 100644 --- a/integrations/lightsync/index.html +++ b/integrations/lightsync/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    Logitech Lightsync


    Last updated 02.01.2024

    You can use Lightsync integration with all supported devices

    Note that this is reverse engineered and may not work as the original.

    You can have LGS installed and Aurora will automatically apply game effects to your devices.

    LGS must be fully closed before Aurora is launched.


    Page authored by
    \ No newline at end of file diff --git a/reference-expressions/index.html b/reference-expressions/index.html index 3d9ae6a..1c037a7 100644 --- a/reference-expressions/index.html +++ b/reference-expressions/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    \ No newline at end of file diff --git a/reference-expressions/input/index.html b/reference-expressions/input/index.html index 97e3474..fe9fcfc 100644 --- a/reference-expressions/input/index.html +++ b/reference-expressions/input/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Input


    Last updated 28.04.2020

    This page lists all the standard evaluatables that are under the ‘Input’ category.

    Away Time number

    Outputs the amount of time the user has been inactivate. This is determined based on mouse or keyboard interaction.

    Away Timer boolean

    Outputs true if the user has been inactivate for the the amount of time specified. Whether the user is away is determined based on mouse or keyboard interaction.

    Key Held boolean

    Outputs true if the specified keyboard button is currently pressed.

    Key Press (Retain for duration) boolean

    Outputs true if the specified keyboard button was down within the given period of time. For example, if a key was pressed and the duration was 3 seconds, this would return still true for 3 seconds after the key is released.

    Lock Key Active boolean

    Outputs whether or not a lock key (caps lock, num lock or scroll lock) is currently in the locked or unlocked state.

    Mouse Button Held boolean

    Outputs whether or not the specified mouse button is currently being pressed down.


    Page authored by
    \ No newline at end of file +Aurora User Docs

    Input


    Last updated 28.04.2020

    This page lists all the standard evaluatables that are under the ‘Input’ category.

    Away Time number

    Outputs the amount of time the user has been inactivate. This is determined based on mouse or keyboard interaction.

    Away Timer boolean

    Outputs true if the user has been inactivate for the the amount of time specified. Whether the user is away is determined based on mouse or keyboard interaction.

    Key Held boolean

    Outputs true if the specified keyboard button is currently pressed.

    Key Press (Retain for duration) boolean

    Outputs true if the specified keyboard button was down within the given period of time. For example, if a key was pressed and the duration was 3 seconds, this would return still true for 3 seconds after the key is released.

    Lock Key Active boolean

    Outputs whether or not a lock key (caps lock, num lock or scroll lock) is currently in the locked or unlocked state.

    Mouse Button Held boolean

    Outputs whether or not the specified mouse button is currently being pressed down.


    Page authored by
    \ No newline at end of file diff --git a/reference-expressions/logic/index.html b/reference-expressions/logic/index.html index 1f05b74..7bdc639 100644 --- a/reference-expressions/logic/index.html +++ b/reference-expressions/logic/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Logic


    Last updated 06.06.2020

    This page lists all the standard evaluatables that are under the ‘Logic’ category.

    And boolean

    Takes two input booleans and outputs true only if both these inputs are also true.

    Boolean Change Detector boolean

    Watches an input boolean evaluatable and outputs true on a frame if the value of the child is different than it was last frame. Otherwise it outputs false.

    Can also be configured to only output when the new value of the input is true or the new value is false.

    Boolean Constant boolean

    Outputs a boolean of your choice, either true or false.

    Flip-flop (Set-Reset) boolean

    A special kind of evaluatable that can store and toggle a boolean value.

    It has two boolean inputs, a “Set” and “Reset”.

    When Set becomes true, the flip-flop starts outputting a true value. It will keep outputting true until Reset becomes true (even if Set becomes false in the mean time).

    SetResetOutput
    00no change
    101
    010
    111

    This can be used to make simple toggles. For example, you could have a layer whose enabled property is based on a flip-flop whose Set was bound to the user pressing the ‘A’ key and Reset bound to the user pressing the ‘Space’ key. Now, whenever the A key is tapped or held, the layer will activate and remain activate until the space key is pressed or held.

    Flip-flop (Toggle) boolean

    A expression that stores a boolean value and outputs it. Each frame, the value of the input evaluatable is evaluated and if the result is true, the stored value of the flip-flop changes from true to false or vice-versa.

    If - Else If - Else booleannumberstring

    Not boolean

    Takes a boolean and outputs the opposite value.

    Or boolean

    Takes two booleans and outputs true if either or both of them are also true.

    True Extender boolean

    Extends the length of a true signal from the input boolean by the amount specified in the expression’s UI.

    Note that the timer starts as soon as the input becomes false. So, if the input was true for 1 second and the duration was 3 seconds, the length of the output true would be effectively 4 seconds.

    This is commonly used for extending the length of a single-frame output such as the numeric change detector.

    For delaying a bool signal (without changing its length), see the delay expression.


    Page authored by
    \ No newline at end of file +Aurora User Docs

    Logic


    Last updated 06.06.2020

    This page lists all the standard evaluatables that are under the ‘Logic’ category.

    And boolean

    Takes two input booleans and outputs true only if both these inputs are also true.

    Boolean Change Detector boolean

    Watches an input boolean evaluatable and outputs true on a frame if the value of the child is different than it was last frame. Otherwise it outputs false.

    Can also be configured to only output when the new value of the input is true or the new value is false.

    Boolean Constant boolean

    Outputs a boolean of your choice, either true or false.

    Flip-flop (Set-Reset) boolean

    A special kind of evaluatable that can store and toggle a boolean value.

    It has two boolean inputs, a “Set” and “Reset”.

    When Set becomes true, the flip-flop starts outputting a true value. It will keep outputting true until Reset becomes true (even if Set becomes false in the mean time).

    SetResetOutput
    00no change
    101
    010
    111

    This can be used to make simple toggles. For example, you could have a layer whose enabled property is based on a flip-flop whose Set was bound to the user pressing the ‘A’ key and Reset bound to the user pressing the ‘Space’ key. Now, whenever the A key is tapped or held, the layer will activate and remain activate until the space key is pressed or held.

    Flip-flop (Toggle) boolean

    A expression that stores a boolean value and outputs it. Each frame, the value of the input evaluatable is evaluated and if the result is true, the stored value of the flip-flop changes from true to false or vice-versa.

    If - Else If - Else booleannumberstring

    Not boolean

    Takes a boolean and outputs the opposite value.

    Or boolean

    Takes two booleans and outputs true if either or both of them are also true.

    True Extender boolean

    Extends the length of a true signal from the input boolean by the amount specified in the expression’s UI.

    Note that the timer starts as soon as the input becomes false. So, if the input was true for 1 second and the duration was 3 seconds, the length of the output true would be effectively 4 seconds.

    This is commonly used for extending the length of a single-frame output such as the numeric change detector.

    For delaying a bool signal (without changing its length), see the delay expression.


    Page authored by
    \ No newline at end of file diff --git a/reference-expressions/maths/index.html b/reference-expressions/maths/index.html index 34e800d..61dfe58 100644 --- a/reference-expressions/maths/index.html +++ b/reference-expressions/maths/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Maths


    Last updated 10.01.2024

    This page lists all the standard evaluatables that are under the ‘Maths’ category.

    Absolute number

    Takes a number and outputs the absolute (positive) value. E.G. 5 outputs 5 (no change), but -10 would output 10.

    Arithmetic Comparison boolean

    Compares two numbers together and outputs a boolean indicating the result of the comparison. Can choose a comparison from: equal, not equal, less than, less than or equal, greater than, greater than or equal.

    Arithmetic Operation number

    Performs a binary operation on two numbers, such as: adding them together, subtracting one from the other, multiplying them together, dividing one by the other or finding the modulus (remainder of one when divided by the other).

    Lerp number

    Maps a value from one range onto it’s interpolated value in another range.

    For example, mapping the value 0.7 from a range of 0 to 1 onto the range of 50 to 100 would output 85. This is because 0.7 is 70% of the way between 0 and 1, and the number that is 70% of the way between 50 and 100 is 85.

    Number Change Detector boolean

    Outputs a true value on a frame whenever the value of the input number changes. If you require the boolean to be true for longer than a single frame, use this in conjunction with the true extender.

    Can also be set up to only output true when the value increases or decreases (instead of any change) and can also provide a minimum threshold that the change must be. For example, if you tick “Trigger on increase”, untick “Trigger on decrease” and set the threshold to 5, the only time a true will be output is when the current value of the number is 5 or higher more than the value it was last frame.

    Number Constant number

    Constantly outputs the specified number.

    Wave Function number

    Creates a wave output based on the given input.

    Note that all waves are normalized to accept a value in the range 0 - 1 and also output a value in the range 0 - 1.

    Sine

    Triangle


    Page authored by
    \ No newline at end of file +Aurora User Docs

    Maths


    Last updated 10.01.2024

    This page lists all the standard evaluatables that are under the ‘Maths’ category.

    Absolute number

    Takes a number and outputs the absolute (positive) value. E.G. 5 outputs 5 (no change), but -10 would output 10.

    Arithmetic Comparison boolean

    Compares two numbers together and outputs a boolean indicating the result of the comparison. Can choose a comparison from: equal, not equal, less than, less than or equal, greater than, greater than or equal.

    Arithmetic Operation number

    Performs a binary operation on two numbers, such as: adding them together, subtracting one from the other, multiplying them together, dividing one by the other or finding the modulus (remainder of one when divided by the other).

    Lerp number

    Maps a value from one range onto it’s interpolated value in another range.

    For example, mapping the value 0.7 from a range of 0 to 1 onto the range of 50 to 100 would output 85. This is because 0.7 is 70% of the way between 0 and 1, and the number that is 70% of the way between 50 and 100 is 85.

    Number Change Detector boolean

    Outputs a true value on a frame whenever the value of the input number changes. If you require the boolean to be true for longer than a single frame, use this in conjunction with the true extender.

    Can also be set up to only output true when the value increases or decreases (instead of any change) and can also provide a minimum threshold that the change must be. For example, if you tick “Trigger on increase”, untick “Trigger on decrease” and set the threshold to 5, the only time a true will be output is when the current value of the number is 5 or higher more than the value it was last frame.

    Number Constant number

    Constantly outputs the specified number.

    Wave Function number

    Creates a wave output based on the given input.

    Note that all waves are normalized to accept a value in the range 0 - 1 and also output a value in the range 0 - 1.

    Sine

    Triangle


    Page authored by
    \ No newline at end of file diff --git a/reference-expressions/misc/index.html b/reference-expressions/misc/index.html index b4aa7d2..629fd38 100644 --- a/reference-expressions/misc/index.html +++ b/reference-expressions/misc/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    Misc


    Last updated 28.04.2020

    This page lists all the standard evaluatables that are under the ‘Misc’ category.

    Delay booleannumberstring

    Takes an input and delays it by the given time period.

    Process Running boolean

    Checks if a process with the given name is currently running.


    Page authored by
    \ No newline at end of file diff --git a/reference-expressions/state/index.html b/reference-expressions/state/index.html index 74c0da8..1d4365d 100644 --- a/reference-expressions/state/index.html +++ b/reference-expressions/state/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    State


    Last updated 28.04.2020

    This page lists all the standard evaluatables that are under the ‘State’ category.

    Boolean State Variable boolean

    Gets a boolean value from the game state.

    Enum State Variable boolean

    Gets a enum value from the game state and compares it to a specified value.

    An enum is a discrete set of possible options. For example in Terraria, the biome the player is in is an enum as there are only certain distinct possibilities.

    Numeric State Variable number

    Gets a numeric value from the game state.

    Numeric State Variable boolean

    Gets a numeric value from the game state and compares it to a given number, outputting the result of the comparison.

    String State Variable string

    Gets a string value from the game state.


    Page authored by
    \ No newline at end of file +Aurora User Docs

    State


    Last updated 28.04.2020

    This page lists all the standard evaluatables that are under the ‘State’ category.

    Boolean State Variable boolean

    Gets a boolean value from the game state.

    Enum State Variable boolean

    Gets a enum value from the game state and compares it to a specified value.

    An enum is a discrete set of possible options. For example in Terraria, the biome the player is in is an enum as there are only certain distinct possibilities.

    Numeric State Variable number

    Gets a numeric value from the game state.

    Numeric State Variable boolean

    Gets a numeric value from the game state and compares it to a given number, outputting the result of the comparison.

    String State Variable string

    Gets a string value from the game state.


    Page authored by
    \ No newline at end of file diff --git a/reference-expressions/string/index.html b/reference-expressions/string/index.html index ca84b99..50f44c4 100644 --- a/reference-expressions/string/index.html +++ b/reference-expressions/string/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    String


    Last updated 28.04.2020

    This page lists all the standard evaluatables that are under the ‘String’ category.

    String Comparison boolean

    Compares the values of two strings together. Can compare based on length, alphabetical position, etc. Can be configured to do a case insensitive comparison.

    String Constant string

    Constantly outputs the given string of characters.


    Page authored by
    \ No newline at end of file diff --git a/reference-layers/ambilight/index.html b/reference-layers/ambilight/index.html index e11eef9..27b4989 100644 --- a/reference-layers/ambilight/index.html +++ b/reference-layers/ambilight/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Ambilight Layer


    Last updated 10.01.2024

    The ambilight layer takes the average color of the monitor (or specific areas of the monitor) and displays them on the keys.

    This can be a very intensive operation and so may not perform well on all machines. You may find that Aurora is lagging or using too much CPU when you use one of these layers.

    Ambilight Layer in use on a dual-monitor setup with a white background on one and blue on the other

    Properties

    NameDescription
    Ambilight Effect Type
    • Default - Takes the image from the target and sets the keys to the color at points on that image (see above for an example).
    • Average Color - Takes the entire image and gets the average color of the image and sets all keys to be that color.
    Ambilight Capture Type
    • Everything - Takes entire screen output (including multiple monitors if you have them).
    • Main Monitor Only - Takes screen output only from the monitor designated as number 1.
    • Foreground Application - Takes output from whichever application currently has focus.
    • Specific Process - Takes output only from the process with the specified name.
    Specific Process NameUsed with Capture Type "Specific Process" to restrict the ambilight layer to only use output from a specific application.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Ambilight Layer


    Last updated 10.01.2024

    The ambilight layer takes the average color of the monitor (or specific areas of the monitor) and displays them on the keys.

    This can be a very intensive operation and so may not perform well on all machines. You may find that Aurora is lagging or using too much CPU when you use one of these layers.

    Ambilight Layer in use on a dual-monitor setup with a white background on one and blue on the other

    Properties

    NameDescription
    Ambilight Effect Type
    • Default - Takes the image from the target and sets the keys to the color at points on that image (see above for an example).
    • Average Color - Takes the entire image and gets the average color of the image and sets all keys to be that color.
    Ambilight Capture Type
    • Everything - Takes entire screen output (including multiple monitors if you have them).
    • Main Monitor Only - Takes screen output only from the monitor designated as number 1.
    • Foreground Application - Takes output from whichever application currently has focus.
    • Specific Process - Takes output only from the process with the specified name.
    Specific Process NameUsed with Capture Type "Specific Process" to restrict the ambilight layer to only use output from a specific application.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/animation/index.html b/reference-layers/animation/index.html index 8895c00..d63444e 100644 --- a/reference-layers/animation/index.html +++ b/reference-layers/animation/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Animation Layer


    Last updated 10.01.2024

    The animation layer is another very powerful but very complex and hard-to-use layer. It allows for you to create custom animations using shapes and by creating key-frames in the animation editor. There is a basic guide on how to create animations here.

    This layer can also be triggered when certain events happen. You can select it for when a game-state value changes or when you press/release a key. When in a key-mode, the animation can optionally be translated to the location of the pressed key. This basically provides a means of creating a custom interactive layer if you don’t like that layer’s default effects.

    An very basic example animation that has a rectangle that grows in width, then in height

    Properties

    NameDescription
    Display Only on Key Sequence KeysIf this is selected, the animation will only be displayed on the keys in the Affect Keys list.
    Scale to Key Sequence boundsIf this is checked, the animation bitmap will be scaled and translated so that it covers the keys in the Affected Keys list.
    Affected KeysIf Display Only on Key Sequence Keys is checked, the animation will only be displayed on these keys.
    Animation DurationThe length of time an animation takes to play. If you do not set this value high enough, the animation will appear to be cut off as it ends too early.
    Repeat TimesThe amount of times the animation will repeat. If set to 0, it will repeat indefinitely. When the trigger is not “Always on”, this should not be set to 0 as once triggered the animation will carry on forever.
    TriggerThis option is how you set when the animations should be played. The sub-properties for each of these trigger modes are detailed in the tabs below. “Always On” does not have any additional properties.

    Value Change Trigger Properties

    NameDescription
    Trigger pathA path to a number State Variable that should be watched for the value to change.
    Stack modeWhat should happen if the state variable changes again while an animation is already playing.
    • Ignore - The currently playing animation will keep playing as if nothing happened.
    • Restart - Restart the currently playing animation.
    • Play Multiple - Play another instance of the animation in addition to the currently running one.

    Boolean Change Trigger Properties

    NameDescription
    Trigger pathA path to a boolean State Variable that should be watched for it to either become true, become false or run while true.
    Stack modeWhat should happen if the state variable changes again while an animation is already playing.
    • Ignore - The currently playing animation will keep playing as if nothing happened.
    • Restart - Restart the currently playing animation.
    • Play Multiple - Play another instance of the animation in addition to the currently running one.

    Key Trigger Properties

    NameDescription
    Trigger for any keyIf this is checked, any key press will trigger an animation. If unchecked, only the keys in Trigger Keys will cause an animation to play.
    Translate to pressed keyIf this is checked, the animation's origin point (0, 0) (top left) will be translated to the center point of the pressed key.
    Trigger keysThe keys that should trigger an animation. Not needed if Trigger for any Key is checked.
    Stack modeWhat should happen if the state variable changes again while an animation is already playing.
    • Ignore - The currently playing animation will keep playing as if nothing happened.
    • Restart - Restart the currently playing animation.
    • Play Multiple - Play another instance of the animation in addition to the currently running one.
    Stop as soon as key releasedIf this is checked, the animation will immediately stop when the key is released. I.E. it will not wait for the animation to finish playing.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Animation Layer


    Last updated 10.01.2024

    The animation layer is another very powerful but very complex and hard-to-use layer. It allows for you to create custom animations using shapes and by creating key-frames in the animation editor. There is a basic guide on how to create animations here.

    This layer can also be triggered when certain events happen. You can select it for when a game-state value changes or when you press/release a key. When in a key-mode, the animation can optionally be translated to the location of the pressed key. This basically provides a means of creating a custom interactive layer if you don’t like that layer’s default effects.

    An very basic example animation that has a rectangle that grows in width, then in height

    Properties

    NameDescription
    Display Only on Key Sequence KeysIf this is selected, the animation will only be displayed on the keys in the Affect Keys list.
    Scale to Key Sequence boundsIf this is checked, the animation bitmap will be scaled and translated so that it covers the keys in the Affected Keys list.
    Affected KeysIf Display Only on Key Sequence Keys is checked, the animation will only be displayed on these keys.
    Animation DurationThe length of time an animation takes to play. If you do not set this value high enough, the animation will appear to be cut off as it ends too early.
    Repeat TimesThe amount of times the animation will repeat. If set to 0, it will repeat indefinitely. When the trigger is not “Always on”, this should not be set to 0 as once triggered the animation will carry on forever.
    TriggerThis option is how you set when the animations should be played. The sub-properties for each of these trigger modes are detailed in the tabs below. “Always On” does not have any additional properties.

    Value Change Trigger Properties

    NameDescription
    Trigger pathA path to a number State Variable that should be watched for the value to change.
    Stack modeWhat should happen if the state variable changes again while an animation is already playing.
    • Ignore - The currently playing animation will keep playing as if nothing happened.
    • Restart - Restart the currently playing animation.
    • Play Multiple - Play another instance of the animation in addition to the currently running one.

    Boolean Change Trigger Properties

    NameDescription
    Trigger pathA path to a boolean State Variable that should be watched for it to either become true, become false or run while true.
    Stack modeWhat should happen if the state variable changes again while an animation is already playing.
    • Ignore - The currently playing animation will keep playing as if nothing happened.
    • Restart - Restart the currently playing animation.
    • Play Multiple - Play another instance of the animation in addition to the currently running one.

    Key Trigger Properties

    NameDescription
    Trigger for any keyIf this is checked, any key press will trigger an animation. If unchecked, only the keys in Trigger Keys will cause an animation to play.
    Translate to pressed keyIf this is checked, the animation's origin point (0, 0) (top left) will be translated to the center point of the pressed key.
    Trigger keysThe keys that should trigger an animation. Not needed if Trigger for any Key is checked.
    Stack modeWhat should happen if the state variable changes again while an animation is already playing.
    • Ignore - The currently playing animation will keep playing as if nothing happened.
    • Restart - Restart the currently playing animation.
    • Play Multiple - Play another instance of the animation in addition to the currently running one.
    Stop as soon as key releasedIf this is checked, the animation will immediately stop when the key is released. I.E. it will not wait for the animation to finish playing.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/audio-visualizer/index.html b/reference-layers/audio-visualizer/index.html index 31d763b..37e7ecd 100644 --- a/reference-layers/audio-visualizer/index.html +++ b/reference-layers/audio-visualizer/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Audio Visualizer Layer


    Last updated 10.01.2024

    This layer takes in audio data from your computer and visualizes the volume at various frequencies. There are many different customization options for this layer including which frequencies should be detected. Which frequencies are best depends on the type of audio you expect to be playing (rock will be different from classical) but the default frequencies provide a good starting point.

    An equalizer layer in gradient mode while playing a music track

    Properties

    NameDescription
    Equalizer Effect Type
    • Power Bars
    • Waveform
    • Waveform (From bottom)
    View Type
    • Solid Color - The waveform/bars are displayed in a single color (Primary Color)
    • Alternating Colors - Each bar alternates between Primary and Secondary color.
    • Gradient Notched Color - Each bar is a single color based on the Gradient provided.
    • Gradient Color Shift - The whole waveform is a single color as given by the gradient. The color gradually changes over time.
    • Gradient (Horizontal) - The waveform is colored as the Gradient provided.
    • Gradient (Vertical) - The waveform is colored as the Gradient provided vertically.
    Primary ColorThe color used when View Type is "Solid Color" or used for every other bar when View Type is "Alternating Colors".
    Secondary ColorThe color used for every other bar when View Type is "Alternating Colors".
    GradientThe gradient used when View Type isn't "Solid Color" or "Alternating Colors".
    Max AmplitudeThe value that will be used as the maximum value of the waveform. If the bars frequently clip off the top/bottom of the bitmap, try decreasing this value.
    Scale with System VolumeWhether or not the max amplitude should automatically scale with the system volume.
    Dim Background on SoundIf this is selected, when a sound is played the Dim Color will be used to dim the background.
    Dim ColorThe color used to dim the background by when Dim Background on Sound is selected.
    FrequenciesA list of all frequencies that will be represented by bars when the Effect Type is set to "Power Bars". You may need to tweak or add/remove this values to get the best experience depending on the type of audio you expect to be played.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Audio Visualizer Layer


    Last updated 10.01.2024

    This layer takes in audio data from your computer and visualizes the volume at various frequencies. There are many different customization options for this layer including which frequencies should be detected. Which frequencies are best depends on the type of audio you expect to be playing (rock will be different from classical) but the default frequencies provide a good starting point.

    An equalizer layer in gradient mode while playing a music track

    Properties

    NameDescription
    Equalizer Effect Type
    • Power Bars
    • Waveform
    • Waveform (From bottom)
    View Type
    • Solid Color - The waveform/bars are displayed in a single color (Primary Color)
    • Alternating Colors - Each bar alternates between Primary and Secondary color.
    • Gradient Notched Color - Each bar is a single color based on the Gradient provided.
    • Gradient Color Shift - The whole waveform is a single color as given by the gradient. The color gradually changes over time.
    • Gradient (Horizontal) - The waveform is colored as the Gradient provided.
    • Gradient (Vertical) - The waveform is colored as the Gradient provided vertically.
    Primary ColorThe color used when View Type is "Solid Color" or used for every other bar when View Type is "Alternating Colors".
    Secondary ColorThe color used for every other bar when View Type is "Alternating Colors".
    GradientThe gradient used when View Type isn't "Solid Color" or "Alternating Colors".
    Max AmplitudeThe value that will be used as the maximum value of the waveform. If the bars frequently clip off the top/bottom of the bitmap, try decreasing this value.
    Scale with System VolumeWhether or not the max amplitude should automatically scale with the system volume.
    Dim Background on SoundIf this is selected, when a sound is played the Dim Color will be used to dim the background.
    Dim ColorThe color used to dim the background by when Dim Background on Sound is selected.
    FrequenciesA list of all frequencies that will be represented by bars when the Effect Type is set to "Power Bars". You may need to tweak or add/remove this values to get the best experience depending on the type of audio you expect to be played.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/blinking/index.html b/reference-layers/blinking/index.html index 315cbcf1..5e6eea9 100644 --- a/reference-layers/blinking/index.html +++ b/reference-layers/blinking/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Blinking Layer


    Last updated 10.01.2024

    The blinking layer sets the colors of the specified keys to flash between two alternatives, with no fading between the colors. Like to the breathing layer, it allows either or both of these colors to be randomized if you wish.

    A blinking layer with cyan and a random secondary color

    Properties

    NameDescription
    Primary ColorThe solid color to set all the affected keys to during the first phase.
    Use Random PrimaryTick this to use a random color during first phase instead of Primary Color.
    Secondary ColorThe solid color to set all the affected keys to during the second phase.
    Use Random SecondaryTick this to use a random color during second phase instead of Secondary Color.
    Effect SpeedHow fast the keys swap between primary and secondary colors.
    Affected KeysA collection of keys that will be set to the target color.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Blinking Layer


    Last updated 10.01.2024

    The blinking layer sets the colors of the specified keys to flash between two alternatives, with no fading between the colors. Like to the breathing layer, it allows either or both of these colors to be randomized if you wish.

    A blinking layer with cyan and a random secondary color

    Properties

    NameDescription
    Primary ColorThe solid color to set all the affected keys to during the first phase.
    Use Random PrimaryTick this to use a random color during first phase instead of Primary Color.
    Secondary ColorThe solid color to set all the affected keys to during the second phase.
    Use Random SecondaryTick this to use a random color during second phase instead of Secondary Color.
    Effect SpeedHow fast the keys swap between primary and secondary colors.
    Affected KeysA collection of keys that will be set to the target color.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/breathing/index.html b/reference-layers/breathing/index.html index 1736393..063a7a7 100644 --- a/reference-layers/breathing/index.html +++ b/reference-layers/breathing/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Breathing Layer


    Last updated 10.01.2024

    The breathing layer fades the colors of the specified keys between two colors. In that regard it is similar to the Gradient Fill Layer, however this layer also allows the colors to be randomized, so that the keyboard fades between unpredictable colors.

    A breathing layer with two random colors

    Properties

    NameDescription
    Primary ColorThe solid color to set all the affected keys to during the first phase.
    Use Random PrimaryTick this to use a random color during first phase instead of Primary Color.
    Secondary ColorThe solid color to set all the affected keys to during the second phase.
    Use Random SecondaryTick this to use a random color during second phase instead of Secondary Color.
    Effect SpeedHow fast the keys swap between primary and secondary colors.
    Affected KeysA collection of keys that will be set to the target color.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Breathing Layer


    Last updated 10.01.2024

    The breathing layer fades the colors of the specified keys between two colors. In that regard it is similar to the Gradient Fill Layer, however this layer also allows the colors to be randomized, so that the keyboard fades between unpredictable colors.

    A breathing layer with two random colors

    Properties

    NameDescription
    Primary ColorThe solid color to set all the affected keys to during the first phase.
    Use Random PrimaryTick this to use a random color during first phase instead of Primary Color.
    Secondary ColorThe solid color to set all the affected keys to during the second phase.
    Use Random SecondaryTick this to use a random color during second phase instead of Secondary Color.
    Effect SpeedHow fast the keys swap between primary and secondary colors.
    Affected KeysA collection of keys that will be set to the target color.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/conditional-comparisons/index.html b/reference-layers/conditional-comparisons/index.html index ea1d675..2dc366d 100644 --- a/reference-layers/conditional-comparisons/index.html +++ b/reference-layers/conditional-comparisons/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Conditional & Comparison Layers


    Last updated 27.04.2020

    These layers are no longer necessary and the Overrides System should be used instead as it has more functionality than these layers. They will remain in Aurora so as not to break existing profiles.

    Conditional Layer

    The conditional layer sets the color of the given keys to one of two colors, based on whether the a boolean value (a yes/no) from the game or system or is true or false. Not all games have boolean properties available. Like the percent layers, a drop down is provided allowing you to select from a list the variable you want to reference.

    An example of this layer in use is whether or not the indicators are on in Euro Truck Sim 2.

    Comparison Layer

    The comparison layer allows for comparing two values (known as operands) from the system or the game state and changing the color of the specified keys based on this comparison. To use this layer, select a variable for the two operands from the drop down lists or type in a number if you want a specific value. Then select the relevant operator, such as equals, greater than, etc.

    An example of this layer could be to highlight the function keys when your health is less than 25%.


    Page authored by
    \ No newline at end of file +Aurora User Docs

    Conditional & Comparison Layers


    Last updated 27.04.2020

    These layers are no longer necessary and the Overrides System should be used instead as it has more functionality than these layers. They will remain in Aurora so as not to break existing profiles.

    Conditional Layer

    The conditional layer sets the color of the given keys to one of two colors, based on whether the a boolean value (a yes/no) from the game or system or is true or false. Not all games have boolean properties available. Like the percent layers, a drop down is provided allowing you to select from a list the variable you want to reference.

    An example of this layer in use is whether or not the indicators are on in Euro Truck Sim 2.

    Comparison Layer

    The comparison layer allows for comparing two values (known as operands) from the system or the game state and changing the color of the specified keys based on this comparison. To use this layer, select a variable for the two operands from the drop down lists or type in a number if you want a specific value. Then select the relevant operator, such as equals, greater than, etc.

    An example of this layer could be to highlight the function keys when your health is less than 25%.


    Page authored by
    \ No newline at end of file diff --git a/reference-layers/glitch-effect/index.html b/reference-layers/glitch-effect/index.html index 9432f5a..9fbfc42 100644 --- a/reference-layers/glitch-effect/index.html +++ b/reference-layers/glitch-effect/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    Glitch Effect Layer


    Last updated 10.01.2024

    The glitch layer simply randomizes each key’s color every time it updates. The frequency of the update is configurable.

    Properties

    NameDescription
    Update IntervalThe time in seconds between the key’s randomization.
    Allow TransparencyIf true, the random color may be transparent.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/gradient-fill/index.html b/reference-layers/gradient-fill/index.html index 6566d64..ecc54b3 100644 --- a/reference-layers/gradient-fill/index.html +++ b/reference-layers/gradient-fill/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Gradient Fill Layer


    Last updated 10.01.2024

    This layer sets all the specified keys to the same color, determined by the gradient. Unlike the regular gradient layer, all keys are the same color. You can think of the gradient as being a “timeline”, and the colors of all the keys are set based on how far through the timeline we are. This can be used to create a fade effect between multiple different colors.

    A rainbow Gradient Fill Layer on the alphabetical keys of the keyboard

    Properties

    NameDescription
    GradientThe gradient that will be used to set the keys’ color to.
    Effect SpeedThe speed that the colors of the keys change. Higher = faster.
    Fill keyboard canvasTick this to fill the whole keyboard with the gradient instead of the affected keys.
    Affected KeysA collection of keys that will be set to the target color.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Gradient Fill Layer


    Last updated 10.01.2024

    This layer sets all the specified keys to the same color, determined by the gradient. Unlike the regular gradient layer, all keys are the same color. You can think of the gradient as being a “timeline”, and the colors of all the keys are set based on how far through the timeline we are. This can be used to create a fade effect between multiple different colors.

    A rainbow Gradient Fill Layer on the alphabetical keys of the keyboard

    Properties

    NameDescription
    GradientThe gradient that will be used to set the keys’ color to.
    Effect SpeedThe speed that the colors of the keys change. Higher = faster.
    Fill keyboard canvasTick this to fill the whole keyboard with the gradient instead of the affected keys.
    Affected KeysA collection of keys that will be set to the target color.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/gradient/index.html b/reference-layers/gradient/index.html index c05b494..7e4132c 100644 --- a/reference-layers/gradient/index.html +++ b/reference-layers/gradient/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Gradient Layer


    Last updated 10.01.2024

    The Gradient Layer shows a gradient effect on the specified keys. The gradient can also be animated to move across the keyboard to give a wave effect. If it helps to understand how it works, you can imagine the gradient to be displayed on a (possibly moving) rectangle, and each key acts as a “window” onto that rectangle.

    A rainbow Gradient Layer on the alphabetical keys

    Properties

    NameDescription
    GradientThe solid color to set all the affected keys to.
    Effect SpeedThe speed at which the animation (as given by Animation Type) moves.
    Effect AngleThe angle of the gradient.
    Animation Type
    • None - No animation, static gradient.
    • Translate X and Y - Moves the gradient X and Y (depending on angle).
    • (Radial only) Zoom In
    • (Radial only) Zoom Out
    Reverse DirectionWhether or not to reverse the direction the gradient animation plays.
    Affected KeysA collection of keys that will be set to the above solid color.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Gradient Layer


    Last updated 10.01.2024

    The Gradient Layer shows a gradient effect on the specified keys. The gradient can also be animated to move across the keyboard to give a wave effect. If it helps to understand how it works, you can imagine the gradient to be displayed on a (possibly moving) rectangle, and each key acts as a “window” onto that rectangle.

    A rainbow Gradient Layer on the alphabetical keys

    Properties

    NameDescription
    GradientThe solid color to set all the affected keys to.
    Effect SpeedThe speed at which the animation (as given by Animation Type) moves.
    Effect AngleThe angle of the gradient.
    Animation Type
    • None - No animation, static gradient.
    • Translate X and Y - Moves the gradient X and Y (depending on angle).
    • (Radial only) Zoom In
    • (Radial only) Zoom Out
    Reverse DirectionWhether or not to reverse the direction the gradient animation plays.
    Affected KeysA collection of keys that will be set to the above solid color.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/image/index.html b/reference-layers/image/index.html index 56df09e..7e81a83 100644 --- a/reference-layers/image/index.html +++ b/reference-layers/image/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Image Layer


    Last updated 10.01.2024

    The image layer takes an image saved on your computer and attempts to replicate it on the keyboard by averaging the nearby color at different points. Obviously one should not expect to get the same fidelity you would get with a high-res image, but some images can provide nice effects. In addition, Aurora supports the use of animated GIF images.

    An image layer displaying a picture of a landscape

    Properties

    NameDescription
    Selected ImageThe file path to the image you wish to display.
    Affected KeysThe collection of keys that will be set to colors that imitate the given image.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Image Layer


    Last updated 10.01.2024

    The image layer takes an image saved on your computer and attempts to replicate it on the keyboard by averaging the nearby color at different points. Obviously one should not expect to get the same fidelity you would get with a high-res image, but some images can provide nice effects. In addition, Aurora supports the use of animated GIF images.

    An image layer displaying a picture of a landscape

    Properties

    NameDescription
    Selected ImageThe file path to the image you wish to display.
    Affected KeysThe collection of keys that will be set to colors that imitate the given image.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/index.html b/reference-layers/index.html index a49418a..34cbc70 100644 --- a/reference-layers/index.html +++ b/reference-layers/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    \ No newline at end of file diff --git a/reference-layers/interactive/index.html b/reference-layers/interactive/index.html index 0e1a2d1..e19833f 100644 --- a/reference-layers/interactive/index.html +++ b/reference-layers/interactive/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Interactive Layer


    Last updated 10.01.2024

    The interactive layer listens for key presses on the keyboard and plays an animation from that key. This can be used to make ripple effects (as shown in the GIF below) or have the key light up and slowly fade out when it’s been pressed.

    Pressing keys on an interactive layer with key wave mode

    Properties

    NameDescription
    Interactive Effect Type
    • Key Wave - A circle emerges from the pressed key and slowly expands. It is initially Primary Color, then fades to Secondary Color.
    • Key Fade - The pressed key turns the into the Primary Color then fades to Secondary Color then fades out.
    • Key Wave (Filled) - The same as "Key Wave" but is a filled circle rather than only a border.
    • Arrow Flow - A rectangle with a constant height is created at the location of the pressed key and it slowly increases in width.
    • Key Wave (Rainbow) - Same as "Key Wave" but the circle takes on a gradient color, with blue in the inner side and red on the outer side.
    Primary ColorThe solid color to set all the affected keys to during the first half of the animation.
    Use Random PrimaryTick this to use a random color during first part of the animation instead of using Primary Color.
    Secondary ColorThe solid color to set all the affected keys to during the second half of the animation.
    Use Random SecondaryTick this to use a random color during second half of the animation instead of using Secondary Color.
    Effect SpeedHow quick the animation plays. Higher = faster.
    Effect WidthHow thick the circle lines are for the "Key Wave"s, or how tall the rectangle is for "Arrow Flow".
    Start when key releasedWhether to star the animation when the key is released, instead of when it is first pressed.
    Excluded KeysA collection of keys that will not trigger the animations (but will still show the animation if it passes over).

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Interactive Layer


    Last updated 10.01.2024

    The interactive layer listens for key presses on the keyboard and plays an animation from that key. This can be used to make ripple effects (as shown in the GIF below) or have the key light up and slowly fade out when it’s been pressed.

    Pressing keys on an interactive layer with key wave mode

    Properties

    NameDescription
    Interactive Effect Type
    • Key Wave - A circle emerges from the pressed key and slowly expands. It is initially Primary Color, then fades to Secondary Color.
    • Key Fade - The pressed key turns the into the Primary Color then fades to Secondary Color then fades out.
    • Key Wave (Filled) - The same as "Key Wave" but is a filled circle rather than only a border.
    • Arrow Flow - A rectangle with a constant height is created at the location of the pressed key and it slowly increases in width.
    • Key Wave (Rainbow) - Same as "Key Wave" but the circle takes on a gradient color, with blue in the inner side and red on the outer side.
    Primary ColorThe solid color to set all the affected keys to during the first half of the animation.
    Use Random PrimaryTick this to use a random color during first part of the animation instead of using Primary Color.
    Secondary ColorThe solid color to set all the affected keys to during the second half of the animation.
    Use Random SecondaryTick this to use a random color during second half of the animation instead of using Secondary Color.
    Effect SpeedHow quick the animation plays. Higher = faster.
    Effect WidthHow thick the circle lines are for the "Key Wave"s, or how tall the rectangle is for "Arrow Flow".
    Start when key releasedWhether to star the animation when the key is released, instead of when it is first pressed.
    Excluded KeysA collection of keys that will not trigger the animations (but will still show the animation if it passes over).

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/lock-color/index.html b/reference-layers/lock-color/index.html index 56683f3..d09c561 100644 --- a/reference-layers/lock-color/index.html +++ b/reference-layers/lock-color/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Lock Color Layer


    Last updated 10.01.2024

    The lock layer allows you to have keys light up (or pulse) in a color when one of the “lock” keys is active (caps lock, num lock or scroll lock). You can use this to make a warning for when caps lock is on for example, or perhaps turn off the lights on the numpad when the numpad is off.

    This layer functionality can be incorporated using the Overrides System. That said, it is simpler to use this layer for the pulse feature than to use the Override System alternative.

    Lock layer flashing alphabetical key when the caps lock is on

    Lock layer turning off the numpad lights when the numlock is off

    Properties

    NameDescription
    Lock KeyThe type of key to check whether it is locked or not. Valid options are: Capital, Scroll and NumLock.
    Off ColorThe solid color to use when the lock key is disabled/off.
    On ColorThe solid color to use when the lock key is enabled/on.
    PulseIf checked, the On Color will fade in and out when the lock key is active (as shown in the first screencap above).

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Lock Color Layer


    Last updated 10.01.2024

    The lock layer allows you to have keys light up (or pulse) in a color when one of the “lock” keys is active (caps lock, num lock or scroll lock). You can use this to make a warning for when caps lock is on for example, or perhaps turn off the lights on the numpad when the numpad is off.

    This layer functionality can be incorporated using the Overrides System. That said, it is simpler to use this layer for the pulse feature than to use the Override System alternative.

    Lock layer flashing alphabetical key when the caps lock is on

    Lock layer turning off the numpad lights when the numlock is off

    Properties

    NameDescription
    Lock KeyThe type of key to check whether it is locked or not. Valid options are: Capital, Scroll and NumLock.
    Off ColorThe solid color to use when the lock key is disabled/off.
    On ColorThe solid color to use when the lock key is enabled/on.
    PulseIf checked, the On Color will fade in and out when the lock key is active (as shown in the first screencap above).

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/particle-interactive/index.html b/reference-layers/particle-interactive/index.html index 66aacec..6eb56dc 100644 --- a/reference-layers/particle-interactive/index.html +++ b/reference-layers/particle-interactive/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -

    Particle (Interactive) Layer


    Last updated 27.04.2020

    This layer is very similar to the regular particle layer, however instead of constantly spawning particle it does so for each pressed key. If set to region mode, the region will automatically be changed to be the keys that are pressed which allows for effects emanating from where you press.

    Properties

    See particle layer properties.


    Page authored by
    \ No newline at end of file diff --git a/reference-layers/particle/index.html b/reference-layers/particle/index.html index 18522f8..c186c69 100644 --- a/reference-layers/particle/index.html +++ b/reference-layers/particle/index.html @@ -1,5 +1,5 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Particle Layer


    Last updated 10.01.2024

    The particle layer spawns a number of particles which can independently move (based on the layer’s settings) and have a color. After a specified amount of time, the particles are removed from the canvas.

    Some examples of what can be done with this layer are shown below (both are available as presets), but this is by no means all that can be achieved. Experiment with it!

    A particle layer with the fire preset -A particle layer with the matrix preset

    There is no limit on the number of particles that can be spawned at once. If it is setup to spawn far too many at a time, you may see issues with CPU or memory usage or the program may crash. Be sensible with it.

    Properties

    Many of the properties listed here have a “min” and “max” value. For every particle, a random value between the two given values will be chosen when it is spawned.

    NameDescription
    Spawn locationThe location in which to spawn the particle. Either on an edge, randomly on the entire canvas or randomly within a specified region.
    Color (over time)A gradient that defines the color a particle should be at any given point in it’s lifespan. When the particle is newly spawned, it’s color will be at the far left of the gradient. At the end of it’s life, the particle’s color will be the value at the far right of the gradient.
    Spawn timeThe amount of time in seconds between a single particle (or a group of particles if spawn amount > 1) spawning.
    Spawn amountThe number of particles to spawn at a time.
    LifetimeNumber of seconds the particle will stay active before being removed.
    Initial horizontal velocityThe initial horizontal velocity of the particle in units per second. Can be negative to make the particle move left.
    Initial vertical velocityThe initial vertical velocity of the particle in units per second. Can be negative to make the particle move up.
    Horizontal accelerationThe acceleration of the particle in the horizontal direction. Applies the given value to the particle’s velocity per second. For example, if this was 1.5 and the particle’s velocity was 5, after 2 seconds the velocity will be 8. If positive, the particle will accelerate to the right; if negative it will accelerate to the left.
    Vertical accelerationThe acceleration of the particle in the vertical direction. Applies the given value to the particle’s velocity per second. For example, if this was 1.5 and the particle’s velocity was 5, after 2 seconds the velocity will be 8. If positive, the particle will accelerate downwards; if negative it will accelerate upwards.
    Horizontal dragA value between 0-1 which the horizontal velocity of the particle will be multiplied by. This allows for making the particle appear to naturally slow down.
    Vertical dragA value between 0-1 which the vertical velocity of the particle will be multiplied by. This allows for making the particle appear to naturally slow down.
    Initial particle sizeThe initial size of the particle.
    Size changeThe rate of change in the size of the particle measured in units per second.
    PresetsYou can choose a preset and press ‘Apply’ to set all the values of the particle layer from some predefined values.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Particle Layer


    Last updated 10.01.2024

    The particle layer spawns a number of particles which can independently move (based on the layer’s settings) and have a color. After a specified amount of time, the particles are removed from the canvas.

    Some examples of what can be done with this layer are shown below (both are available as presets), but this is by no means all that can be achieved. Experiment with it!

    A particle layer with the fire preset +A particle layer with the matrix preset

    There is no limit on the number of particles that can be spawned at once. If it is setup to spawn far too many at a time, you may see issues with CPU or memory usage or the program may crash. Be sensible with it.

    Properties

    Many of the properties listed here have a “min” and “max” value. For every particle, a random value between the two given values will be chosen when it is spawned.

    NameDescription
    Spawn locationThe location in which to spawn the particle. Either on an edge, randomly on the entire canvas or randomly within a specified region.
    Color (over time)A gradient that defines the color a particle should be at any given point in it’s lifespan. When the particle is newly spawned, it’s color will be at the far left of the gradient. At the end of it’s life, the particle’s color will be the value at the far right of the gradient.
    Spawn timeThe amount of time in seconds between a single particle (or a group of particles if spawn amount > 1) spawning.
    Spawn amountThe number of particles to spawn at a time.
    LifetimeNumber of seconds the particle will stay active before being removed.
    Initial horizontal velocityThe initial horizontal velocity of the particle in units per second. Can be negative to make the particle move left.
    Initial vertical velocityThe initial vertical velocity of the particle in units per second. Can be negative to make the particle move up.
    Horizontal accelerationThe acceleration of the particle in the horizontal direction. Applies the given value to the particle’s velocity per second. For example, if this was 1.5 and the particle’s velocity was 5, after 2 seconds the velocity will be 8. If positive, the particle will accelerate to the right; if negative it will accelerate to the left.
    Vertical accelerationThe acceleration of the particle in the vertical direction. Applies the given value to the particle’s velocity per second. For example, if this was 1.5 and the particle’s velocity was 5, after 2 seconds the velocity will be 8. If positive, the particle will accelerate downwards; if negative it will accelerate upwards.
    Horizontal dragA value between 0-1 which the horizontal velocity of the particle will be multiplied by. This allows for making the particle appear to naturally slow down.
    Vertical dragA value between 0-1 which the vertical velocity of the particle will be multiplied by. This allows for making the particle appear to naturally slow down.
    Initial particle sizeThe initial size of the particle.
    Size changeThe rate of change in the size of the particle measured in units per second.
    PresetsYou can choose a preset and press ‘Apply’ to set all the values of the particle layer from some predefined values.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/percent-effect/index.html b/reference-layers/percent-effect/index.html index 9668bf0..d45097f 100644 --- a/reference-layers/percent-effect/index.html +++ b/reference-layers/percent-effect/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Percent Effect Layer


    Last updated 10.01.2024

    The percent effect layer allows you to have the color of some set keys dependent on a numeric variable that can be provided by the computer (such as how much RAM or CPU is in use) or by the game if it is supported (e.g. health in CS:GO or speed in Euro Truck Sim).

    A percent layer with current value set to the current time’s milliseconds

    Properties

    NameDescription
    Current ValueThe path of a State Variable or a number. This value represents the current value of whichever variable you are watching, e.g. health, ammo, etc.
    Maximum ValueThe path of a State Variable or a number. This value represents the value that is the maximum value of the percent layer. This will be your max health, or max ammo etc.
    Progress ColorIn the case of progressive effect types: the color that the active keys will take. For example, if current was 50 and max was 100, then the first half of the keys will be lit this color. For "all at once": the color that will be mixed with the background color depending on the current/max ratio.
    Background ColorFor progressive effect types: the color that will appear if the key is not being shown in progress color. For "all at once": the color that will be mixed with the progress color depending on the current/max ratio.
    Effect Type
    • All at once - All keys in the affected keys sequence share the same color. This color will be given by a blend of progress and background depending on the current/max ratio. For example: if progress is green, background is blue, current is 30 and max is 100: all the keys will be set to a blend of 30% green, 70% blue.
    • Progressive - The keys will light up in progress color when they are active. For example: if there are 10 keys in the affected key list, progress is green, background is blue, current is 30 and max is 100: the first 3 keys will be green, the others blue.
    • Progressive (Gradual) - Same as progressive, but any keys that are partially active will have their color interpolated.
    Blink ThresholdIf the current/max percentage is less than this value, the "active" keys will fade in and out.
    Reverse Blink ThresholdIf this is true, the current/max percentage must be greater than the threshold for the active keys to flash.
    Blink BackgroundIf this is selected, the background will fade in and out instead of the active keys.
    Affected KeysA collection of keys that will display the progress bar or color. Note that for progressive effect types, the order of the keys in the list matters.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Percent Effect Layer


    Last updated 10.01.2024

    The percent effect layer allows you to have the color of some set keys dependent on a numeric variable that can be provided by the computer (such as how much RAM or CPU is in use) or by the game if it is supported (e.g. health in CS:GO or speed in Euro Truck Sim).

    A percent layer with current value set to the current time’s milliseconds

    Properties

    NameDescription
    Current ValueThe path of a State Variable or a number. This value represents the current value of whichever variable you are watching, e.g. health, ammo, etc.
    Maximum ValueThe path of a State Variable or a number. This value represents the value that is the maximum value of the percent layer. This will be your max health, or max ammo etc.
    Progress ColorIn the case of progressive effect types: the color that the active keys will take. For example, if current was 50 and max was 100, then the first half of the keys will be lit this color. For "all at once": the color that will be mixed with the background color depending on the current/max ratio.
    Background ColorFor progressive effect types: the color that will appear if the key is not being shown in progress color. For "all at once": the color that will be mixed with the progress color depending on the current/max ratio.
    Effect Type
    • All at once - All keys in the affected keys sequence share the same color. This color will be given by a blend of progress and background depending on the current/max ratio. For example: if progress is green, background is blue, current is 30 and max is 100: all the keys will be set to a blend of 30% green, 70% blue.
    • Progressive - The keys will light up in progress color when they are active. For example: if there are 10 keys in the affected key list, progress is green, background is blue, current is 30 and max is 100: the first 3 keys will be green, the others blue.
    • Progressive (Gradual) - Same as progressive, but any keys that are partially active will have their color interpolated.
    Blink ThresholdIf the current/max percentage is less than this value, the "active" keys will fade in and out.
    Reverse Blink ThresholdIf this is true, the current/max percentage must be greater than the threshold for the active keys to flash.
    Blink BackgroundIf this is selected, the background will fade in and out instead of the active keys.
    Affected KeysA collection of keys that will display the progress bar or color. Note that for progressive effect types, the order of the keys in the list matters.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/percent-gradient-effect/index.html b/reference-layers/percent-gradient-effect/index.html index ed08919..7db98c3 100644 --- a/reference-layers/percent-gradient-effect/index.html +++ b/reference-layers/percent-gradient-effect/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Percent (Gradient) Effect Layer


    Last updated 10.01.2024

    This layer is very similar to the Percent Effect Layer, but makes use of a gradient instead of a progress/background color. This layer does not have a background.

    A gradient layer in progressive mode, with a red-green gradient assigned to the current millisecond

    Properties

    NameDescription
    Current ValueThe path of a State Variable or a number. This value represents the current value of whichever variable you are watching, e.g. health, ammo, etc.
    Maximum ValueThe path of a State Variable or a number. This value represents the value that is the maximum value of the percent layer. This will be your max health, or max ammo etc.
    Percent GradientA gradient brush whose color will define the color the affected keys will take.
    Background ColorFor progressive effect types: the color that will appear if the key is not being shown in progress color. For "all at once": the color that will be mixed with the progress color depending on the current/max ratio.
    Effect Type
    • All at once - All keys in the affected keys sequence share the same color. This color will be given by a blend of progress and background depending on the current/max ratio. For example: if progress is green, background is blue, current is 30 and max is 100: all the keys will be set to a blend of 30% green, 70% blue.
    • Progressive/Progressive (Gradual) - The keys will light up in percent gradient pattern when they are active. For example: if there are 10 keys in the affected key list, current is 30 and max is 100: the first 3 keys will be set to the color of the gradient, the others will not be set.
    Blink ThresholdIf the current/max percentage is less than this value, the "active" keys will fade in and out.
    Reverse Blink ThresholdIf this is true, the current/max percentage must be greater than the threshold for the active keys to flash.
    Affected KeysA collection of keys that will display the progress bar or color. Note that for progressive effect types, the order of the keys in the list matters.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Percent (Gradient) Effect Layer


    Last updated 10.01.2024

    This layer is very similar to the Percent Effect Layer, but makes use of a gradient instead of a progress/background color. This layer does not have a background.

    A gradient layer in progressive mode, with a red-green gradient assigned to the current millisecond

    Properties

    NameDescription
    Current ValueThe path of a State Variable or a number. This value represents the current value of whichever variable you are watching, e.g. health, ammo, etc.
    Maximum ValueThe path of a State Variable or a number. This value represents the value that is the maximum value of the percent layer. This will be your max health, or max ammo etc.
    Percent GradientA gradient brush whose color will define the color the affected keys will take.
    Background ColorFor progressive effect types: the color that will appear if the key is not being shown in progress color. For "all at once": the color that will be mixed with the progress color depending on the current/max ratio.
    Effect Type
    • All at once - All keys in the affected keys sequence share the same color. This color will be given by a blend of progress and background depending on the current/max ratio. For example: if progress is green, background is blue, current is 30 and max is 100: all the keys will be set to a blend of 30% green, 70% blue.
    • Progressive/Progressive (Gradual) - The keys will light up in percent gradient pattern when they are active. For example: if there are 10 keys in the affected key list, current is 30 and max is 100: the first 3 keys will be set to the color of the gradient, the others will not be set.
    Blink ThresholdIf the current/max percentage is less than this value, the "active" keys will fade in and out.
    Reverse Blink ThresholdIf this is true, the current/max percentage must be greater than the threshold for the active keys to flash.
    Affected KeysA collection of keys that will display the progress bar or color. Note that for progressive effect types, the order of the keys in the list matters.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/radial/index.html b/reference-layers/radial/index.html index d953bfe..438eb19 100644 --- a/reference-layers/radial/index.html +++ b/reference-layers/radial/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Radial Layer


    Last updated 10.01.2024

    A layer that provides a gradient that rotates around a single point and optionally spins.

    A rainbow radial layer

    Note that this gradient is generated using discrete pie-shaped segments of colour. This color is determined by the median color at a particular point on the gradient. For example, if there were 4 segments, each would have a 90 degree arc. The first would use the color at 45 degrees (90 / 2) the second at 135 degrees, etc. If you do not get the colors you expect when using small numbers of segments, this is likely the reason.

    Properties

    NameDescription
    GradientThe gradient of the layer.
    Rotation speedThe rotation speed of the layer, in degrees per second. Positive will spin clockwise, negative for counter-clockwise.
    Segment countThe number of segments (see above) that are used to create the gradient. A lower number will result in distinct blocks of colour whereas a higher number will result in a smoother transition.
    Affected keysThe keys or region to apply the gradient to.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Radial Layer


    Last updated 10.01.2024

    A layer that provides a gradient that rotates around a single point and optionally spins.

    A rainbow radial layer

    Note that this gradient is generated using discrete pie-shaped segments of colour. This color is determined by the median color at a particular point on the gradient. For example, if there were 4 segments, each would have a 90 degree arc. The first would use the color at 45 degrees (90 / 2) the second at 135 degrees, etc. If you do not get the colors you expect when using small numbers of segments, this is likely the reason.

    Properties

    NameDescription
    GradientThe gradient of the layer.
    Rotation speedThe rotation speed of the layer, in degrees per second. Positive will spin clockwise, negative for counter-clockwise.
    Segment countThe number of segments (see above) that are used to create the gradient. A lower number will result in distinct blocks of colour whereas a higher number will result in a smoother transition.
    Affected keysThe keys or region to apply the gradient to.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/script/index.html b/reference-layers/script/index.html index f632169..e6e9b6b 100644 --- a/reference-layers/script/index.html +++ b/reference-layers/script/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Script Layer


    Last updated 03.01.2024

    The script layer on its own will do nothing, however it is one of the most powerful, advanced layers. It provides an interface for users to create custom effects using the Aurora API in either C# or Python. More details can be found on the project’s Old-Wiki and example scripts can be found in the Script Examples folder on GitHub. The limits of what this layer can do really are up to you.

    Scripts can be placed in the relevant directory for the profile you wish to use them on:

    • For default profiles: %appdata%\Aurora\Profiles\<game>\Scripts
    • For custom applications: %appdata%\Aurora\AdditionalProfiles\<application>\Scripts

    Properties

    NameDescription
    ScriptSelect the script you wish to use from here. If the script does not appear in the drop down list, it is either in the wrong directory or has an error in the code.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Script Layer


    Last updated 03.01.2024

    The script layer on its own will do nothing, however it is one of the most powerful, advanced layers. It provides an interface for users to create custom effects using the Aurora API in either C# or Python. More details can be found on the project’s Old-Wiki and example scripts can be found in the Script Examples folder on GitHub. The limits of what this layer can do really are up to you.

    Scripts can be placed in the relevant directory for the profile you wish to use them on:

    • For default profiles: %appdata%\Aurora\Profiles\<game>\Scripts
    • For custom applications: %appdata%\Aurora\AdditionalProfiles\<application>\Scripts

    Properties

    NameDescription
    ScriptSelect the script you wish to use from here. If the script does not appear in the drop down list, it is either in the wrong directory or has an error in the code.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/shortcut-assistant/index.html b/reference-layers/shortcut-assistant/index.html index 4374af6..d736b97 100644 --- a/reference-layers/shortcut-assistant/index.html +++ b/reference-layers/shortcut-assistant/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Shortcut Assistant Layer


    Last updated 10.01.2024

    The Shortcut Assistant layer shows possible key presses when a modifier key is pressed. The defined shortcuts will set the keyboard lights when they are partially pressed. For example, if you had a shortcut defined for Ctrl + C and Ctrl + V, whenever you press control, the other layers below are dimmed and the C and V letter light up in whichever color is specified.

    A shortcut layer with common Ctrl and Ctrl + Shift shortcuts on top of a gradient layer

    Properties

    NameDescription
    Dim BackgroundIf this is checked, when Aurora detects you a pressing a modifier key (Ctrl, Shift, Alt) then it will display Dimming Color over all keys before rendering the shortcut keys.
    ShortcutsA list of all shortcuts that should be displayed by the layer. To create a shortcut, click on the "New Shortcut" button, then "Assign" next to the new row of the table and press the keys on your keyboard. Once done, click the button again (now "Stop"). Multiple keys can be pressed at the same time and will appear in the shortcut.
    Dimming ColorIf Dim Background, this color is used to dim the background. A semi-transparent dark color is recommended.
    ColorThe color that the keys representing the shortcuts will be displayed.
    Presentation TypeFor shortcuts with longer sequences of keys, this option will dictate which keys become active and when. As an example, we shall consider the sequence Ctrl + Shift + A.
    • Show All Keys - Shows any shortcut that can be pressed that has the currently pressed buttons in its key list. In the example with this mode, when Ctrl is pressed, both Shift and A will light up.
    • Progressive Suggestion - Shows a shortcut only when all it's previous keys in the list are pressed. In the example, when Ctrl is pressed, only Shift will light up. When Ctrl + Shift are pressed, A will also light up.
    Trigger When Same Modifier Keys PressedIf this is checked, both control keys (left and right) and both shift keys (left and right) will trigger a shortcut bound to one of the keys. E.G. if there is a shortcut bound to LControlKey + A, then the right control key would also trigger this shortcut if this option was selected.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Shortcut Assistant Layer


    Last updated 10.01.2024

    The Shortcut Assistant layer shows possible key presses when a modifier key is pressed. The defined shortcuts will set the keyboard lights when they are partially pressed. For example, if you had a shortcut defined for Ctrl + C and Ctrl + V, whenever you press control, the other layers below are dimmed and the C and V letter light up in whichever color is specified.

    A shortcut layer with common Ctrl and Ctrl + Shift shortcuts on top of a gradient layer

    Properties

    NameDescription
    Dim BackgroundIf this is checked, when Aurora detects you a pressing a modifier key (Ctrl, Shift, Alt) then it will display Dimming Color over all keys before rendering the shortcut keys.
    ShortcutsA list of all shortcuts that should be displayed by the layer. To create a shortcut, click on the "New Shortcut" button, then "Assign" next to the new row of the table and press the keys on your keyboard. Once done, click the button again (now "Stop"). Multiple keys can be pressed at the same time and will appear in the shortcut.
    Dimming ColorIf Dim Background, this color is used to dim the background. A semi-transparent dark color is recommended.
    ColorThe color that the keys representing the shortcuts will be displayed.
    Presentation TypeFor shortcuts with longer sequences of keys, this option will dictate which keys become active and when. As an example, we shall consider the sequence Ctrl + Shift + A.
    • Show All Keys - Shows any shortcut that can be pressed that has the currently pressed buttons in its key list. In the example with this mode, when Ctrl is pressed, both Shift and A will light up.
    • Progressive Suggestion - Shows a shortcut only when all it's previous keys in the list are pressed. In the example, when Ctrl is pressed, only Shift will light up. When Ctrl + Shift are pressed, A will also light up.
    Trigger When Same Modifier Keys PressedIf this is checked, both control keys (left and right) and both shift keys (left and right) will trigger a shortcut bound to one of the keys. E.G. if there is a shortcut bound to LControlKey + A, then the right control key would also trigger this shortcut if this option was selected.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/solid-color/index.html b/reference-layers/solid-color/index.html index ed804ee..4ef0cd6 100644 --- a/reference-layers/solid-color/index.html +++ b/reference-layers/solid-color/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Solid Color Layer


    Last updated 10.01.2024

    The Solid Color Layer is for setting static colors for specific keys. The keys will constantly be lit in the given color (providing they aren’t overridden by a higher-up layer). This is one of the most simple layers in Aurora, but can be useful for things such as highlighting controls such as WASD in video games.

    A Solid Color Layer lighting common video game control keys

    If you want to set the color of the entire (or most) of the keyboard, consider using the Solid Fill Color Layer instead.

    Properties

    NameDescription
    ColorThe solid color to set all the affected keys to.
    Affected KeysA collection of keys that will be set to the above solid color.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Solid Color Layer


    Last updated 10.01.2024

    The Solid Color Layer is for setting static colors for specific keys. The keys will constantly be lit in the given color (providing they aren’t overridden by a higher-up layer). This is one of the most simple layers in Aurora, but can be useful for things such as highlighting controls such as WASD in video games.

    A Solid Color Layer lighting common video game control keys

    If you want to set the color of the entire (or most) of the keyboard, consider using the Solid Fill Color Layer instead.

    Properties

    NameDescription
    ColorThe solid color to set all the affected keys to.
    Affected KeysA collection of keys that will be set to the above solid color.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/solid-fill-color/index.html b/reference-layers/solid-fill-color/index.html index d6f1d89..3a78ea1 100644 --- a/reference-layers/solid-fill-color/index.html +++ b/reference-layers/solid-fill-color/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Solid Fill Color Layer


    Last updated 10.01.2024

    Similar to the Solid Color layer, however it does not have fine control over which keys are lit and so fills the entire canvas (keyboard, mouse and any other peripherals) with the given color. This layer is useful for setting static backgrounds, saving you from having to manually add each key.

    A Solid Fill Layer setting the entire keyboard to cyan

    Properties

    NameDescription
    ColorThe solid color to set all the affected keys to.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Solid Fill Color Layer


    Last updated 10.01.2024

    Similar to the Solid Color layer, however it does not have fine control over which keys are lit and so fills the entire canvas (keyboard, mouse and any other peripherals) with the given color. This layer is useful for setting static backgrounds, saving you from having to manually add each key.

    A Solid Fill Layer setting the entire keyboard to cyan

    Properties

    NameDescription
    ColorThe solid color to set all the affected keys to.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/timer-key/index.html b/reference-layers/timer-key/index.html index 02437d0..f45a9a8 100644 --- a/reference-layers/timer-key/index.html +++ b/reference-layers/timer-key/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Timer Key Layer


    Last updated 10.01.2024

    The timer layer waits for one or more keys to be pressed (do not have to be the keys displaying the lights) and sets the color of the keys to be something else for a set duration, after which they return to their original color. This layer can be used for things such as ability timers for games that have no game state integration.

    A timer layer on the alphabetical keys

    Properties

    NameDescription
    Default ColorThe color that the keys are by default and when the timer is not active.
    Active ColorThe color the keys turn when one of the triggers has been pressed.
    DurationThe duration (in milliseconds) that the timer takes.
    Animation Type
    • OnOff - When the trigger is pressed, the Affected Keys turn to active color and stays there for the Duration then immediately goes back to default.
    • Fade - When the trigger is pressed, the Affected Keys turn to active colors and then slowly fades back to the default color.
    Repeat Action
    • Reset - When a trigger is pressed while the timer is running, it will restart the timer anew.
    • Extend - When a trigger is pressed while the timer is running, it will extend the timer by Duration. E.G. if duration is 5000ms, and you press a trigger again 3000ms after pressing it for a first time, it would take 8000ms from the second press to completely reset.
    • Ignore - If a trigger is pressed while the timer is running, nothing will happen. The original timer will keep running as normal.
    Trigger KeysThe list of keybinds that will cause the timer to run. These keys won't light up (unless you add them to the Affected Keys)
    Affected KeysThe list of keys that will light up in default or active color. These keys will not trigger the timer.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Timer Key Layer


    Last updated 10.01.2024

    The timer layer waits for one or more keys to be pressed (do not have to be the keys displaying the lights) and sets the color of the keys to be something else for a set duration, after which they return to their original color. This layer can be used for things such as ability timers for games that have no game state integration.

    A timer layer on the alphabetical keys

    Properties

    NameDescription
    Default ColorThe color that the keys are by default and when the timer is not active.
    Active ColorThe color the keys turn when one of the triggers has been pressed.
    DurationThe duration (in milliseconds) that the timer takes.
    Animation Type
    • OnOff - When the trigger is pressed, the Affected Keys turn to active color and stays there for the Duration then immediately goes back to default.
    • Fade - When the trigger is pressed, the Affected Keys turn to active colors and then slowly fades back to the default color.
    Repeat Action
    • Reset - When a trigger is pressed while the timer is running, it will restart the timer anew.
    • Extend - When a trigger is pressed while the timer is running, it will extend the timer by Duration. E.G. if duration is 5000ms, and you press a trigger again 3000ms after pressing it for a first time, it would take 8000ms from the second press to completely reset.
    • Ignore - If a trigger is pressed while the timer is running, nothing will happen. The original timer will keep running as normal.
    Trigger KeysThe list of keybinds that will cause the timer to run. These keys won't light up (unless you add them to the Affected Keys)
    Affected KeysThe list of keys that will light up in default or active color. These keys will not trigger the timer.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/toggle-key/index.html b/reference-layers/toggle-key/index.html index aebd28a..fdaaeaa 100644 --- a/reference-layers/toggle-key/index.html +++ b/reference-layers/toggle-key/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Toggle Key Layer


    Last updated 27.04.2020

    The toggle key layer allows for the turning on or off some lights based on the key press of another specific key. This layer can be useful for things such as indicators for whether something is toggled on/off in a game.

    If you are using caps lock, num lock or scroll lock as a trigger key it is probably better to use the Lock Layer to ensure the key light state stays synced with the lock state properly.

    Note: Currently there is no way of syncing the toggle status across profiles, so you cannot have persistent states between different games or applications.

    Properties

    NameDescription
    Default ColorThe starting color of the Affected Keys.
    Toggle ColorThe color of the Affected Keys after one of the Trigger Keys has been pressed.
    Trigger KeysA list of key triggers that can cause the Affected Keys to toggle between the default and toggle color. These do not have to share any of the same keys as the keys that actually change color.
    Affected KeysThe keys that do the color change. These keys do not trigger a change.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Toggle Key Layer


    Last updated 27.04.2020

    The toggle key layer allows for the turning on or off some lights based on the key press of another specific key. This layer can be useful for things such as indicators for whether something is toggled on/off in a game.

    If you are using caps lock, num lock or scroll lock as a trigger key it is probably better to use the Lock Layer to ensure the key light state stays synced with the lock state properly.

    Note: Currently there is no way of syncing the toggle status across profiles, so you cannot have persistent states between different games or applications.

    Properties

    NameDescription
    Default ColorThe starting color of the Affected Keys.
    Toggle ColorThe color of the Affected Keys after one of the Trigger Keys has been pressed.
    Trigger KeysA list of key triggers that can cause the Affected Keys to toggle between the default and toggle color. These do not have to share any of the same keys as the keys that actually change color.
    Affected KeysThe keys that do the color change. These keys do not trigger a change.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/toolbar/index.html b/reference-layers/toolbar/index.html index 1d89b9c..c6a9a93 100644 --- a/reference-layers/toolbar/index.html +++ b/reference-layers/toolbar/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Toolbar Layer


    Last updated 10.01.2024

    The toolbar layer is a layer that shows one key as “active” and all others assigned to it as “inactive”. When a different key is pressed, the pressed key becomes the active one instead. This works similarly to how toolbars/item bars work in video games such as Factorio or Minecraft.

    The layer can also be toggled to listen for the scroll wheel to allow scrolling through the toolbar by turning on the Enable Scroll configuration option. The order the keys are scrolled through is given by their order in the Affected Keys option, so if scrolling through is in the incorrect order, check the order of the keys here.

    The toolbar layer affecting the number keys

    Properties

    NameDescription
    Default ColorThe color of the inactive keys.
    Active ColorThe color of the active key.
    Enable ScrollWhether or not to allow the active key to be moved up and down when you scroll the mouse scroll wheel.
    Scroll LoopWhether or not to allow the scrolling to wrap from one end of the toolbar to the other. Only has an effect when Enable Scroll is true.
    Affected KeysThe keys that make up the toolbar layer. Note that if Enable Scroll is checked, the order of the keys matters.

    Page authored by
    \ No newline at end of file +Aurora User Docs

    Toolbar Layer


    Last updated 10.01.2024

    The toolbar layer is a layer that shows one key as “active” and all others assigned to it as “inactive”. When a different key is pressed, the pressed key becomes the active one instead. This works similarly to how toolbars/item bars work in video games such as Factorio or Minecraft.

    The layer can also be toggled to listen for the scroll wheel to allow scrolling through the toolbar by turning on the Enable Scroll configuration option. The order the keys are scrolled through is given by their order in the Affected Keys option, so if scrolling through is in the incorrect order, check the order of the keys here.

    The toolbar layer affecting the number keys

    Properties

    NameDescription
    Default ColorThe color of the inactive keys.
    Active ColorThe color of the active key.
    Enable ScrollWhether or not to allow the active key to be moved up and down when you scroll the mouse scroll wheel.
    Scroll LoopWhether or not to allow the scrolling to wrap from one end of the toolbar to the other. Only has an effect when Enable Scroll is true.
    Affected KeysThe keys that make up the toolbar layer. Note that if Enable Scroll is checked, the order of the keys matters.

    Page authored by
    \ No newline at end of file diff --git a/reference-layers/wrapper/index.html b/reference-layers/wrapper/index.html index 34e86c2..83ad6eb 100644 --- a/reference-layers/wrapper/index.html +++ b/reference-layers/wrapper/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +

    Wrapper Lights Layer (LightFX)


    Last updated 05.01.2024

    The wrapper layer is a special layer that is able to display lighting received from games that have been patched with the relevant wrapper patch and that have native lighting of some sort.

    To patch a game, navigate to “Settings” -> “Devices & Wrappers” -> “Install Wrapper Patch for xxx”, where xxx is the name of the native lighting provided by that game. Do not patch the game with their own device’s brand (unless that is also the provider of the in game lighting). For example, if I am using a Logitech keyboard, and I wish to get the lights from Killing Floor 2, I need to patch using the LightFX wrapper, since Killing Floor uses LightFX library to provide it’s lighting.

    Note that some more recent and multiplayer titles have been shipping with anti-cheat or signature checking on the lighting DLL file. In these cases, the game will not load our modified wrapper. Unfortunately there's nothing we are able to do about this. Examples of these games include Apex Legends, Fortnite and Division 2.

    Aurora is not able to directly control the affects these games apply, since Aurora is unable to get values from the game (such as health/ammo/etc.). The only data the lighting engine sends is which keys should be which color.

    Key Cloning

    The key cloning option of the wrapper layer is useful for if the device you are using has some keys that aren’t handled by the wrapper layer, often this is lights such as macro keys or the peripheral logo.

    You can add an item to the source keys list, then clicking it, then adding one or more keys to the destination keys list. The layer will then take whatever value the source key is and apply it to the destination key(s). You can have multiple source keys, each with their own destination keys if you desire.


    Page authored by
    \ No newline at end of file +Aurora User Docs

    Wrapper Lights Layer (LightFX)


    Last updated 05.01.2024

    The wrapper layer is a special layer that is able to display lighting received from games that have been patched with the relevant wrapper patch and that have native lighting of some sort.

    To patch a game, navigate to “Settings” -> “Devices & Wrappers” -> “Install Wrapper Patch for xxx”, where xxx is the name of the native lighting provided by that game. Do not patch the game with their own device’s brand (unless that is also the provider of the in game lighting). For example, if I am using a Logitech keyboard, and I wish to get the lights from Killing Floor 2, I need to patch using the LightFX wrapper, since Killing Floor uses LightFX library to provide it’s lighting.

    Note that some more recent and multiplayer titles have been shipping with anti-cheat or signature checking on the lighting DLL file. In these cases, the game will not load our modified wrapper. Unfortunately there's nothing we are able to do about this. Examples of these games include Apex Legends, Fortnite and Division 2.

    Aurora is not able to directly control the affects these games apply, since Aurora is unable to get values from the game (such as health/ammo/etc.). The only data the lighting engine sends is which keys should be which color.

    Key Cloning

    The key cloning option of the wrapper layer is useful for if the device you are using has some keys that aren’t handled by the wrapper layer, often this is lights such as macro keys or the peripheral logo.

    You can add an item to the source keys list, then clicking it, then adding one or more keys to the destination keys list. The layer will then take whatever value the source key is and apply it to the destination key(s). You can have multiple source keys, each with their own destination keys if you desire.


    Page authored by
    \ No newline at end of file diff --git a/scss/main.min.3c5ea77ddce19b803ca06f14a3570f7d5efafbd28f7efc97fb221dad90771868.css b/scss/main.min.3c5ea77ddce19b803ca06f14a3570f7d5efafbd28f7efc97fb221dad90771868.css deleted file mode 100644 index 57fb358..0000000 --- a/scss/main.min.3c5ea77ddce19b803ca06f14a3570f7d5efafbd28f7efc97fb221dad90771868.css +++ /dev/null @@ -1 +0,0 @@ -.italic{font-style:italic}.date-info{font-family:amiri,times new roman,georgia,serif;font-size:1.13rem}html,body{margin:0;padding:0;color:#eee;background:#282c34;font-family:open sans,sans-serif;font-size:16px;font-weight:300;scroll-behavior:smooth}html{overflow-y:scroll;overflow-x:hidden}body{margin-top:60px}*{box-sizing:border-box}header{position:fixed;z-index:10;top:0;width:100%;height:60px;border-bottom:1px solid #2f333d;background:#282c34;box-shadow:0 0 7px 1px #0007}header .container{display:flex;flex-flow:row wrap;align-items:center;margin:auto;max-width:1268px}header .site-links{list-style:none;padding:0 16px;white-space:nowrap;overflow-y:auto}header .site-links li{display:inline-block}header .site-links a{text-decoration:none;color:#eee;font-size:1.2rem;font-weight:400;padding:0 4px}@media only screen and (max-width:1040px){header .site-links{display:none}.site-title{width:auto;flex-grow:1;text-align:center}.site-logo{order:1}}@media only screen and (max-width:1320px){.site-search{display:none}}@media only screen and (min-width:1321px){.header-spacer{flex:1}}.site-title{font-size:1.4rem;font-weight:700;width:240px;color:#fff}.site-logo{width:40px;height:40px;margin:8px}.site-search{width:380px;position:relative;top:2px}nav#main-nav{flex:1 1 268px;overflow-y:auto;overflow-x:hidden;border-right:1px solid rgba(238,238,238,.15);background:#1f2228;font-weight:700}nav#main-nav .inner-nav{width:268px;margin-left:auto;padding-left:9px}nav#main-nav .nav-title{text-transform:uppercase;opacity:.4;font-size:.9rem}nav#main-nav .nav-list{padding:0 0 0 8px;list-style:none;font-size:.85rem}nav#main-nav .nav-list a{display:block;padding:6px;text-decoration:none;color:#eee;border:1px solid transparent;border-right:none}nav#main-nav .nav-list :not(.active) a:hover{background:rgba(238,238,238,.1)}nav#main-nav .nav-list .active a{color:#b2b200;border:1px solid rgba(238,238,238,.15);border-right:none;background:#282c34}nav#main-nav .inner-nav>div{height:100%}.nav-background{position:absolute;right:100%;width:9999px;height:9999px;background:#1f2228}.nav-burger{display:none;background:rgba(238,238,238,2%);position:relative;width:38px;height:38px;min-width:0;padding:0;box-shadow:0 0 2px 1px #00000012}.nav-burger div,.nav-burger div::after,.nav-burger div::before{content:'';display:block;position:absolute;background:rgba(238,238,238,.8);height:2px;width:20px}.nav-burger div{margin:9px;top:1px}.nav-burger div::after{top:8px}.nav-burger div::before{top:16px}.mobile-site-search{display:none}@media only screen and (max-width:1320px){header>div{z-index:0}nav#main-nav{flex-grow:0;position:fixed;z-index:100;top:0;bottom:0;width:268px;transform:translateX(-100%)}nav#main-nav .inner-nav>div{padding:0}.nav-burger{display:block}body{position:relative;transition:left 200ms ease-out;left:0}body.nav-open{left:268px}.mobile-site-search{display:block}.mobile-site-search input{padding:21px 12px 20px;border-radius:0;border-top:none;border-left:none;border-right:none}}main{display:flex}article{padding:12px 56px;text-rendering:optimizeLegibility;line-height:1.7rem;flex:0 1 780px}article.wide{flex:0 1 1000px}@media only screen and (max-width:1040px){article{padding:12px}}@media only screen and (max-width:1320px){main{flex-direction:column}article{flex-grow:1}}hr{margin:0 100px;opacity:.4}strong{font-weight:700}article a:not(.button){color:#bebe30;text-decoration:none}article a:not(.button):hover{border-bottom:1px solid}.alert{position:relative;display:block;padding:12px;border:1px solid transparent;border-left-width:36px;border-radius:6px;background:#1f2228;font-size:95%}.alert::after{position:absolute;top:50%;left:-30px;display:block;width:24px;height:24px;content:" ";transform:translateY(-50%);background:url(../img/alert-icons.png);background-size:48px}.alert.danger{border-color:#d04}.alert.danger::after{background-position:0 24px}.alert.warning{border-color:#b40}.alert.info{border-color:#07c}.alert.info::after{background-position:24px 0}.alert.success{border-color:#0b3}.alert.success::after{background-position:24px 24px}.author-list{padding:0;list-style:none}.author-list li{position:relative;display:inline}.author-list li .avatar{display:inline-block;width:32px;height:32px;border-radius:50%}.author-list li a:hover{border:none}.author-list li::after{position:absolute;z-index:99;bottom:38px;left:50%;display:block;padding:4px;content:attr(data-username);transition:opacity 300ms ease-in-out;transform:translateX(-50%);pointer-events:none;opacity:0;border-radius:6px;background:#000;font-size:.8rem}.author-list li:hover::after{opacity:.8}.author-text-label{position:relative;top:-24px;opacity:.2;font-size:90%}pre{padding:12px;border:1px solid #0005;border-radius:6px;background:#0003!important;box-shadow:2px 3px 10px -2px #0008 inset}code{font-family:Hack,Consolas,courier new,monospace;font-size:13px;text-rendering:optimizeLegibility}.highlighttable,.post-content>.highlight{background:#282c34;border-radius:6px;font-size:.675em;-webkit-font-smoothing:subpixel-antialiased;width:100%}.highlight .c{color:#5b6370;font-style:italic}.highlight .err{color:#960050;background-color:#1e0010}.highlight .k{color:#c776df}.highlight .cm{color:#5b6370;font-style:italic}.highlight .cp{color:#5b6370}.highlight .c1{color:#5b6370;font-style:italic}.highlight .cs{color:#5b6370;font-style:italic}.highlight .gd{color:#000;background-color:#fdd}.highlight .gd .x{color:#000;background-color:#faa}.highlight .ge{font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#5b6370}.highlight .gi{color:#a6e22e;background-color:#dfd}.highlight .gi .x{color:#a6e22e;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gu{color:#aaa}.highlight .gt{color:#a00}.highlight .kd{color:#c776df}.highlight .kt{color:#458}.highlight .m{color:#4fb6c3}.highlight .s{color:#a2bd40}.highlight .na{color:#e2964a}.highlight .nb{color:#4fb6c3}.highlight .nc{color:#e2964a}.highlight .nd{color:#4fb6be}.highlight .no{color:#4fb6be}.highlight .ni{color:#e2964a}.highlight .ne{color:#900}.highlight .nf{color:#52a5eb}.highlight .nn{color:#555}.highlight .nt{color:#de5442}.highlight .nv{color:#de5442}.highlight .w{color:#bbb}.highlight .mf{color:#4fb6c3}.highlight .mh{color:#4fb6c3}.highlight .mi{color:#4fb6c3}.highlight .mo{color:#4fb6c3}.highlight .sb{color:#a2bd40}.highlight .sc{color:#a2bd40}.highlight .sd{color:#5b6370}.highlight .s2{color:#a2bd40}.highlight .se{color:#a2bd40}.highlight .sh{color:#a2bd40}.highlight .si{color:#a2bd40}.highlight .sx{color:#a2bd40}.highlight .sr{color:#009926}.highlight .s1{color:#a2bd40}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc{color:teal}.highlight .vg{color:teal}.highlight .vi{color:teal}.highlight .il{color:#4fb6c3}.post-content>.highlight{line-height:1;overflow-x:scroll;padding:10px}.post-content>.highlight pre{margin:0;white-space:pre}.post-content>.highlight .lineno{border-right:solid 1px #3c4049;padding-left:10px;padding-right:10px;text-align:right}.post-content>.highlight span{display:inline-block;padding:.3em 0}.highlighttable .linenos{border-right:solid 1px #3c4049;padding-left:10px;padding-right:10px;text-align:right;width:3em}.highlighttable .code .highlight{padding-left:10px}.highlighttable .code .highlight pre{white-space:pre}.form-input{position:relative;margin:12px 0}input{display:block;width:100%;padding:8px 16px;transition:border 200ms ease-in-out,box-shadow 200ms ease-in-out;color:#fff;color:#eee;border:1px solid rgba(238,238,238,.1);border-radius:4px;background:#1f2228;font-size:1rem}input:focus{border-color:#b2b200;box-shadow:0 0 4px -1px rgba(178,178,0,.7)}button,.button{margin:0 12px;padding:8px 28px;cursor:pointer;text-decoration:none;color:#eee;border:none;border-radius:3px;box-shadow:0 0 6px #0008;font-size:.9rem;background:linear-gradient(to right,#2f323d,#2a2f37)}button:hover,.button:hover{background:linear-gradient(to right,#3c404e,#313740)}button:active,.button:active{background:linear-gradient(to right,#21242b,#1d2126);box-shadow:none}button.primary,.button.primary{background:linear-gradient(to right,#bbcc00,#b2a300)}button.primary:hover,.button.primary:hover{background:linear-gradient(to right,#e9ff00,#e5d200)}button.primary:active,.button.primary:active{background:linear-gradient(to right,#8c9900,#7f7400)}input,button,.button{font-family:open sans,sans-serif}.search{padding-left:34px}.search+div{position:absolute;top:11px;left:9px;width:18px;height:18px;background:url(../img/search-icon.png);background-size:18px}form.inline-form{display:flex;align-items:center}form.inline-form>*:not(:last-child){flex:1}.page-title{display:inline-block;margin-top:24px;font-size:3rem;line-height:normal}article h1,article h2,article h3,article h4,article h5{line-height:normal}article h1,article h2,article h3{font-weight:100}article h1{margin:2rem 0 0;font-size:2rem}article h2{margin:1.8rem 0 0;font-size:1.8rem}article h3{margin:1.6rem 0 0;font-size:1.6rem}article h4{margin:1.2rem 0 0;font-size:1.2rem;font-weight:400}article h5{margin:1rem 0 0;font-size:1rem;font-weight:700}article img:not(.avatar):not(.emoji){display:block;max-width:100%;height:auto;margin:auto;cursor:zoom-in}.img-caption{display:block;text-align:center;color:rgba(238,238,238,.7);font-size:90%;font-style:italic}.lightbox-image{position:fixed;z-index:100;transition:width 400ms ease-in-out,height 400ms ease-in-out,top 400ms ease-in-out,left 400ms ease-in-out;pointer-events:none}.lightbox-image-backdrop{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;cursor:zoom-out;transition:opacity 400ms ease-in-out;background:rgba(40,44,52,.9)}.lightbox-image-backdrop.out{pointer-events:none;opacity:0}.index-list{display:grid;list-style:none;padding:0;grid-template-columns:33% 33% 33%;margin:4px -8px}.index-list .button{position:relative;overflow:hidden;padding:8px 16px;margin:8px}.index-list img{pointer-events:none}.index-list .img-caption{display:none}.index-list .item-title{padding:0 8px;margin:8px;font-size:1.15rem;text-align:center;text-shadow:none}.index-list.with-images .button{height:135px}.index-list.with-images .item-title{position:absolute;bottom:0;left:0;right:0;text-shadow:0 0 10px #000,0 0 6px #000,0 0 2px #000}@media only screen and (max-width:1040px){.index-list{grid-template-columns:100%}}.typetag{font-size:.9rem;padding:4px 8px;vertical-align:middle}.typetag.boolean{background-color:#214359}.typetag.number{background-color:#215929}.typetag.string{background-color:#59212c}.typetag:first-of-type{border-top-left-radius:4px;border-bottom-left-radius:4px}.typetag:last-of-type{border-top-right-radius:4px;border-bottom-right-radius:4px}#TableOfContents .typetag{display:none}.search-results{list-style:none;padding:0}.search-results a{font-size:1.8rem}.search-results a .highlight{font-weight:700}.search-results .highlight{margin:-3px -2px;padding:3px 2px;background:#a448c529}table{width:100%;margin:16px 0;margin-bottom:12px;border-spacing:0;border:1px solid rgba(238,238,238,.15);border-radius:2px;font-size:92%}table thead{text-align:left;background:rgba(238,238,238,.15)}table tbody tr:not(:last-child) td{border-bottom:1px solid rgba(238,238,238,7%)}table td,table th{padding:8px}table ul,table ol{margin:0;padding:0 0 0 20px}.tabs .tab-header{position:relative;box-shadow:none;border:1px solid #0006;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.tabs .tab-header:not(:first-child){margin-left:-8px}.tabs .tab-header.active::after{position:absolute;display:block;content:" ";bottom:0;left:0;right:0;height:3px;background-color:#b2b200}.tabs .tab-contents{margin-top:-18px}.tabs .tab-content{margin-top:18px}.tabs .tab-content:not(.active){display:none}.toc{flex:1 1 220px}.toc ul{padding-left:12px;list-style:none}.toc ul a{text-decoration:none;color:rgba(238,238,238,.9);font-size:.85rem;font-weight:500;line-height:2}.toc ul a:hover{color:#b2b200}#TableOfContents{position:sticky;top:76px}.toc.wide-article{flex:1}@media only screen and (min-width:1321px){.toc-header{display:none}}@media only screen and (max-width:1320px){.toc{order:-1;flex:auto}.toc ul{padding-left:36px;margin-bottom:0;max-height:500px;overflow:auto;transition:max-height 150ms cubic-bezier(1,0,1,.5),margin-top 150ms ease-out}.toc .toc-header{position:relative;margin:24px 12px 0;font-size:1.3rem;opacity:1;transition:opacity 150ms ease-out;cursor:pointer}.toc .toc-header::after{content:" ";display:block;position:absolute;top:50%;right:12px;transform:translateY(-25%)rotate(315deg);border-top:2px solid #eee;border-right:2px solid #eee;width:8px;height:8px;transition:transform 150ms ease-out}.toc.collapsed ul{max-height:0;overflow:hidden;margin-top:0;transition:max-height 150ms cubic-bezier(0,1,.5,1),margin-top 150ms ease-out}.toc.collapsed .toc-header{opacity:.4}.toc.collapsed .toc-header::after{transform:translateY(-75%)rotate(135deg);opacity:.4}}[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;visibility:visible;overflow:auto;max-width:100%;max-height:100%}.simplebar-content:before,.simplebar-content:after{content:" ";display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:inherit;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;right:2px;width:7px;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:"";background:#fff;border-radius:7px;left:0;right:0;opacity:.1;transition:opacity .2s linear}.simplebar-track .simplebar-scrollbar.simplebar-visible:before{opacity:.5}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll} \ No newline at end of file diff --git a/scss/main.min.b5545a3f033ceeac75d58c9bf6b61c966617f64137617a97590bcb6fcdddfd39.css b/scss/main.min.b5545a3f033ceeac75d58c9bf6b61c966617f64137617a97590bcb6fcdddfd39.css new file mode 100644 index 0000000..57f6af6 --- /dev/null +++ b/scss/main.min.b5545a3f033ceeac75d58c9bf6b61c966617f64137617a97590bcb6fcdddfd39.css @@ -0,0 +1 @@ +.italic{font-style:italic}.date-info{font-family:amiri,times new roman,georgia,serif;font-size:1.13rem}html,body{margin:0;padding:0;color:#eee;background:#282c34;font-family:open sans,sans-serif;font-size:16px;font-weight:300;scroll-behavior:smooth}html{overflow-y:scroll;overflow-x:hidden}body{margin-top:60px}*{box-sizing:border-box}header{position:fixed;z-index:10;top:0;width:100%;height:60px;border-bottom:1px solid #2f333d;background:#282c34;box-shadow:0 0 7px 1px #0007}header .container{display:flex;flex-flow:row wrap;align-items:center;margin:auto;max-width:1268px}header .site-links{list-style:none;padding:0 16px;white-space:nowrap;overflow-y:auto}header .site-links li{display:inline-block}header .site-links a{text-decoration:none;color:#eee;font-size:1.2rem;font-weight:400;padding:0 4px}@media only screen and (max-width:1040px){header .site-links{display:none}.site-title{width:auto;flex-grow:1;text-align:center}.site-logo{order:1}}@media only screen and (max-width:1320px){.site-search{display:none}}@media only screen and (min-width:1321px){.header-spacer{flex:1}}.site-title{font-size:1.4rem;font-weight:700;width:240px;color:#fff}.site-logo{width:40px;height:40px;margin:8px}.site-search{width:380px;position:relative;top:2px}nav#main-nav{flex:1 1 268px;overflow-y:auto;overflow-x:hidden;border-right:1px solid rgba(238,238,238,.15);background:#1f2228;font-weight:700}nav#main-nav .inner-nav{width:268px;margin-left:auto;padding-left:9px}nav#main-nav .nav-title{text-transform:uppercase;opacity:.4;font-size:.9rem}nav#main-nav .nav-list{padding:0 0 0 8px;list-style:none;font-size:.85rem}nav#main-nav .nav-list a{display:block;padding:6px;text-decoration:none;color:#eee;border:1px solid transparent;border-right:none}nav#main-nav .nav-list :not(.active) a:hover{background:rgba(238,238,238,.1)}nav#main-nav .nav-list .active a{color:#b2b200;border:1px solid rgba(238,238,238,.15);border-right:none;background:#282c34}nav#main-nav .inner-nav>div{height:100%}.nav-background{position:absolute;right:100%;width:9999px;height:9999px;background:#1f2228}.nav-burger{display:none;background:rgba(238,238,238,2%);position:relative;width:38px;height:38px;min-width:0;padding:0;box-shadow:0 0 2px 1px #00000012}.nav-burger div,.nav-burger div::after,.nav-burger div::before{content:'';display:block;position:absolute;background:rgba(238,238,238,.8);height:2px;width:20px}.nav-burger div{margin:9px;top:1px}.nav-burger div::after{top:8px}.nav-burger div::before{top:16px}.mobile-site-search{display:none}@media only screen and (max-width:1320px){header>div{z-index:0}nav#main-nav{flex-grow:0;position:fixed;z-index:100;top:0;bottom:0;width:268px;transform:translateX(-100%)}nav#main-nav .inner-nav>div{padding:0}.nav-burger{display:block}body{position:relative;transition:left 200ms ease-out;left:0}body.nav-open{left:268px}.mobile-site-search{display:block}.mobile-site-search input{padding:21px 12px 20px;border-radius:0;border-top:none;border-left:none;border-right:none}}main{display:flex}article{padding:12px 56px;text-rendering:optimizeLegibility;line-height:1.7rem;flex:0 1 780px;flex-direction:row}article.wide{flex:0 1 1000px;flex-direction:row}@media only screen and (max-width:1040px){[data-simplebar]{max-height:100vh}article{padding:12px}}@media only screen and (max-width:1320px){main{flex-direction:column}article{flex-grow:1}}hr{margin:0 100px;opacity:.4}strong{font-weight:700}article a:not(.button){color:#bebe30;text-decoration:none}article a:not(.button):hover{border-bottom:1px solid}.alert{position:relative;display:block;padding:12px;border:1px solid transparent;border-left-width:36px;border-radius:6px;background:#1f2228;font-size:95%}.alert::after{position:absolute;top:50%;left:-30px;display:block;width:24px;height:24px;content:" ";transform:translateY(-50%);background:url(../img/alert-icons.png);background-size:48px}.alert.danger{border-color:#d04}.alert.danger::after{background-position:0 24px}.alert.warning{border-color:#b40}.alert.info{border-color:#07c}.alert.info::after{background-position:24px 0}.alert.success{border-color:#0b3}.alert.success::after{background-position:24px 24px}.author-list{padding:0;list-style:none}.author-list li{position:relative;display:inline}.author-list li .avatar{display:inline-block;width:32px;height:32px;border-radius:50%}.author-list li a:hover{border:none}.author-list li::after{position:absolute;z-index:99;bottom:38px;left:50%;display:block;padding:4px;content:attr(data-username);transition:opacity 300ms ease-in-out;transform:translateX(-50%);pointer-events:none;opacity:0;border-radius:6px;background:#000;font-size:.8rem}.author-list li:hover::after{opacity:.8}.author-text-label{position:relative;top:-24px;opacity:.2;font-size:90%}pre{padding:12px;border:1px solid #0005;border-radius:6px;background:#0003!important;box-shadow:2px 3px 10px -2px #0008 inset}code{font-family:Hack,Consolas,courier new,monospace;font-size:13px;text-rendering:optimizeLegibility}.highlighttable,.post-content>.highlight{background:#282c34;border-radius:6px;font-size:.675em;-webkit-font-smoothing:subpixel-antialiased;width:100%}.highlight .c{color:#5b6370;font-style:italic}.highlight .err{color:#960050;background-color:#1e0010}.highlight .k{color:#c776df}.highlight .cm{color:#5b6370;font-style:italic}.highlight .cp{color:#5b6370}.highlight .c1{color:#5b6370;font-style:italic}.highlight .cs{color:#5b6370;font-style:italic}.highlight .gd{color:#000;background-color:#fdd}.highlight .gd .x{color:#000;background-color:#faa}.highlight .ge{font-style:italic}.highlight .gr{color:#a00}.highlight .gh{color:#5b6370}.highlight .gi{color:#a6e22e;background-color:#dfd}.highlight .gi .x{color:#a6e22e;background-color:#afa}.highlight .go{color:#888}.highlight .gp{color:#555}.highlight .gu{color:#aaa}.highlight .gt{color:#a00}.highlight .kd{color:#c776df}.highlight .kt{color:#458}.highlight .m{color:#4fb6c3}.highlight .s{color:#a2bd40}.highlight .na{color:#e2964a}.highlight .nb{color:#4fb6c3}.highlight .nc{color:#e2964a}.highlight .nd{color:#4fb6be}.highlight .no{color:#4fb6be}.highlight .ni{color:#e2964a}.highlight .ne{color:#900}.highlight .nf{color:#52a5eb}.highlight .nn{color:#555}.highlight .nt{color:#de5442}.highlight .nv{color:#de5442}.highlight .w{color:#bbb}.highlight .mf{color:#4fb6c3}.highlight .mh{color:#4fb6c3}.highlight .mi{color:#4fb6c3}.highlight .mo{color:#4fb6c3}.highlight .sb{color:#a2bd40}.highlight .sc{color:#a2bd40}.highlight .sd{color:#5b6370}.highlight .s2{color:#a2bd40}.highlight .se{color:#a2bd40}.highlight .sh{color:#a2bd40}.highlight .si{color:#a2bd40}.highlight .sx{color:#a2bd40}.highlight .sr{color:#009926}.highlight .s1{color:#a2bd40}.highlight .ss{color:#990073}.highlight .bp{color:#999}.highlight .vc{color:teal}.highlight .vg{color:teal}.highlight .vi{color:teal}.highlight .il{color:#4fb6c3}.post-content>.highlight{line-height:1;overflow-x:scroll;padding:10px}.post-content>.highlight pre{margin:0;white-space:pre}.post-content>.highlight .lineno{border-right:solid 1px #3c4049;padding-left:10px;padding-right:10px;text-align:right}.post-content>.highlight span{display:inline-block;padding:.3em 0}.highlighttable .linenos{border-right:solid 1px #3c4049;padding-left:10px;padding-right:10px;text-align:right;width:3em}.highlighttable .code .highlight{padding-left:10px}.highlighttable .code .highlight pre{white-space:pre}.form-input{position:relative;margin:12px 0}input{display:block;width:100%;padding:8px 16px;transition:border 200ms ease-in-out,box-shadow 200ms ease-in-out;color:#fff;color:#eee;border:1px solid rgba(238,238,238,.1);border-radius:4px;background:#1f2228;font-size:1rem}input:focus{border-color:#b2b200;box-shadow:0 0 4px -1px rgba(178,178,0,.7)}button,.button{margin:0 12px;padding:8px 28px;cursor:pointer;text-decoration:none;color:#eee;border:none;border-radius:3px;box-shadow:0 0 6px #0008;font-size:.9rem;background:linear-gradient(to right,#2f323d,#2a2f37)}button:hover,.button:hover{background:linear-gradient(to right,#3c404e,#313740)}button:active,.button:active{background:linear-gradient(to right,#21242b,#1d2126);box-shadow:none}button.primary,.button.primary{background:linear-gradient(to right,#bbcc00,#b2a300)}button.primary:hover,.button.primary:hover{background:linear-gradient(to right,#e9ff00,#e5d200)}button.primary:active,.button.primary:active{background:linear-gradient(to right,#8c9900,#7f7400)}input,button,.button{font-family:open sans,sans-serif}.search{padding-left:34px}.search+div{position:absolute;top:11px;left:9px;width:18px;height:18px;background:url(../img/search-icon.png);background-size:18px}form.inline-form{display:flex;align-items:center}form.inline-form>*:not(:last-child){flex:1}.page-title{display:inline-block;margin-top:24px;font-size:3rem;line-height:normal}article h1,article h2,article h3,article h4,article h5{line-height:normal}article h1,article h2,article h3{font-weight:100}article h1{margin:2rem 0 0;font-size:2rem}article h2{margin:1.8rem 0 0;font-size:1.8rem}article h3{margin:1.6rem 0 0;font-size:1.6rem}article h4{margin:1.2rem 0 0;font-size:1.2rem;font-weight:400}article h5{margin:1rem 0 0;font-size:1rem;font-weight:700}article img:not(.avatar):not(.emoji){display:block;max-width:100%;height:auto;margin:auto;cursor:zoom-in}.img-caption{display:block;text-align:center;color:rgba(238,238,238,.7);font-size:90%;font-style:italic}.lightbox-image{position:fixed;z-index:100;transition:width 400ms ease-in-out,height 400ms ease-in-out,top 400ms ease-in-out,left 400ms ease-in-out;pointer-events:none}.lightbox-image-backdrop{position:fixed;z-index:99;top:0;right:0;bottom:0;left:0;cursor:zoom-out;transition:opacity 400ms ease-in-out;background:rgba(40,44,52,.9)}.lightbox-image-backdrop.out{pointer-events:none;opacity:0}.index-list{display:grid;list-style:none;padding:0;grid-template-columns:33% 33% 33%;margin:4px -8px}.index-list .button{position:relative;overflow:hidden;padding:8px 16px;margin:8px}.index-list img{pointer-events:none}.index-list .img-caption{display:none}.index-list .item-title{padding:0 8px;margin:8px;font-size:1.15rem;text-align:center;text-shadow:none}.index-list.with-images .button{height:135px}.index-list.with-images .item-title{position:absolute;bottom:0;left:0;right:0;text-shadow:0 0 10px #000,0 0 6px #000,0 0 2px #000}@media only screen and (max-width:1040px){.index-list{grid-template-columns:100%}}.typetag{font-size:.9rem;padding:4px 8px;vertical-align:middle}.typetag.boolean{background-color:#214359}.typetag.number{background-color:#215929}.typetag.string{background-color:#59212c}.typetag:first-of-type{border-top-left-radius:4px;border-bottom-left-radius:4px}.typetag:last-of-type{border-top-right-radius:4px;border-bottom-right-radius:4px}#TableOfContents .typetag{display:none}.search-results{list-style:none;padding:0}.search-results a{font-size:1.8rem}.search-results a .highlight{font-weight:700}.search-results .highlight{margin:-3px -2px;padding:3px 2px;background:#a448c529}table{width:100%;margin:16px 0;margin-bottom:12px;border-spacing:0;border:1px solid rgba(238,238,238,.15);border-radius:2px;font-size:92%}table thead{text-align:left;background:rgba(238,238,238,.15)}table tbody tr:not(:last-child) td{border-bottom:1px solid rgba(238,238,238,7%)}table td,table th{padding:8px}table ul,table ol{margin:0;padding:0 0 0 20px}.tabs .tab-header{position:relative;box-shadow:none;border:1px solid #0006;border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.tabs .tab-header:not(:first-child){margin-left:-8px}.tabs .tab-header.active::after{position:absolute;display:block;content:" ";bottom:0;left:0;right:0;height:3px;background-color:#b2b200}.tabs .tab-contents{margin-top:-18px}.tabs .tab-content{margin-top:18px}.tabs .tab-content:not(.active){display:none}.toc{flex:1 1 220px}.toc ul{padding-left:12px;list-style:none}.toc ul a{text-decoration:none;color:rgba(238,238,238,.9);font-size:.85rem;font-weight:500;line-height:2}.toc ul a:hover{color:#b2b200}#TableOfContents{position:sticky;top:76px}.toc.wide-article{flex:1}@media only screen and (min-width:1321px){.toc-header{display:none}}@media only screen and (max-width:1320px){.toc{order:-1;flex:auto}.toc ul{padding-left:36px;margin-bottom:0;max-height:500px;overflow:auto;transition:max-height 150ms cubic-bezier(1,0,1,.5),margin-top 150ms ease-out}.toc .toc-header{position:relative;margin:24px 12px 0;font-size:1.3rem;opacity:1;transition:opacity 150ms ease-out;cursor:pointer}.toc .toc-header::after{content:" ";display:block;position:absolute;top:50%;right:12px;transform:translateY(-25%)rotate(315deg);border-top:2px solid #eee;border-right:2px solid #eee;width:8px;height:8px;transition:transform 150ms ease-out}.toc.collapsed ul{max-height:0;overflow:hidden;margin-top:0;transition:max-height 150ms cubic-bezier(0,1,.5,1),margin-top 150ms ease-out}.toc.collapsed .toc-header{opacity:.4}.toc.collapsed .toc-header::after{transform:translateY(-75%)rotate(135deg);opacity:.4}}[data-simplebar]{position:relative;flex-direction:column;flex-wrap:wrap;justify-content:flex-start;align-content:flex-start;align-items:flex-start}.simplebar-wrapper{overflow:hidden;width:inherit;height:inherit;max-width:inherit;max-height:inherit}.simplebar-mask{direction:inherit;position:absolute;overflow:hidden;padding:0;margin:0;left:0;top:0;bottom:0;right:0;width:auto!important;height:auto!important;z-index:0}.simplebar-offset{direction:inherit!important;box-sizing:inherit!important;resize:none!important;position:absolute;top:0;left:0;bottom:0;right:0;padding:0;margin:0;-webkit-overflow-scrolling:touch}.simplebar-content-wrapper{direction:inherit;box-sizing:border-box!important;position:relative;display:block;height:100%;width:auto;visibility:visible;overflow:auto;max-width:100%;max-height:100%}.simplebar-content:before,.simplebar-content:after{content:" ";display:table}.simplebar-placeholder{max-height:100%;max-width:100%;width:100%;pointer-events:none}.simplebar-height-auto-observer-wrapper{box-sizing:inherit!important;height:100%;width:inherit;max-width:1px;position:relative;float:left;max-height:1px;overflow:hidden;z-index:-1;padding:0;margin:0;pointer-events:none;flex-grow:inherit;flex-shrink:0;flex-basis:0}.simplebar-height-auto-observer{box-sizing:inherit;display:block;opacity:0;position:absolute;top:0;left:0;height:1000%;width:1000%;min-height:1px;min-width:1px;overflow:hidden;pointer-events:none;z-index:-1}.simplebar-track{z-index:1;position:absolute;right:0;bottom:0;pointer-events:none;overflow:hidden}[data-simplebar].simplebar-dragging .simplebar-track{pointer-events:all}.simplebar-scrollbar{position:absolute;right:2px;width:7px;min-height:10px}.simplebar-scrollbar:before{position:absolute;content:"";background:#fff;border-radius:7px;left:0;right:0;opacity:.1;transition:opacity .2s linear}.simplebar-track .simplebar-scrollbar.simplebar-visible:before{opacity:.5}.simplebar-track.simplebar-vertical{top:0;width:11px}.simplebar-track.simplebar-vertical .simplebar-scrollbar:before{top:2px;bottom:2px}.simplebar-track.simplebar-horizontal{left:0;height:11px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before{height:100%;left:2px;right:2px}.simplebar-track.simplebar-horizontal .simplebar-scrollbar{right:auto;left:0;top:2px;height:7px;min-height:0;min-width:10px;width:auto}[data-simplebar-direction=rtl] .simplebar-track.simplebar-vertical{right:auto;left:0}.hs-dummy-scrollbar-size{direction:rtl;position:fixed;opacity:0;visibility:hidden;height:500px;width:500px;overflow-y:hidden;overflow-x:scroll} \ No newline at end of file diff --git a/search/index.html b/search/index.html index 3dd54ff..b88cfd4 100644 --- a/search/index.html +++ b/search/index.html @@ -1,4 +1,4 @@ Aurora • Unified RGB Lighting, Docs -
    +
    Search Results
      \ No newline at end of file +Aurora User Docs
      Search Results
        \ No newline at end of file