diff --git a/daemon/web-content/css/app.c01cd29b.css b/daemon/web-content/css/app.39183e8d.css similarity index 100% rename from daemon/web-content/css/app.c01cd29b.css rename to daemon/web-content/css/app.39183e8d.css diff --git a/daemon/web-content/index.html b/daemon/web-content/index.html index 5fb192c3..1e208a3c 100644 --- a/daemon/web-content/index.html +++ b/daemon/web-content/index.html @@ -1,4 +1,4 @@ -GoXLR Utility
\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","//this component is to show the notifications\r\n\r\n","import { reactive } from \"vue\";\r\nimport { applyOperation } from \"fast-json-patch\";\r\n\r\n\r\nexport const store = reactive({\r\n is_connected: false,\r\n has_connected: false,\r\n have_device: false,\r\n active: true,\r\n activeSerial: \"\",\r\n\r\n pausedPaths: [],\r\n\r\n // Set a 'base' status struct..\r\n status: {\r\n \"mixers\": {},\r\n \"files\": {}\r\n },\r\n a11y: {\r\n notifications: {\r\n enabled: true,\r\n assertive: \"\",\r\n polite: \"\"\r\n }\r\n },\r\n\r\n socketDisconnected() {\r\n this.activeSerial = \"\";\r\n this.status = {\r\n \"mixers\": {},\r\n \"files\": {}\r\n };\r\n\r\n this.is_connected = false;\r\n },\r\n\r\n\r\n socketConnected(status) {\r\n this.has_connected = true;\r\n this.replaceData(status);\r\n this.is_connected = true;\r\n },\r\n\r\n daemonVersion() {\r\n if (this.status !== undefined) {\r\n if (this.status.config !== undefined) {\r\n return this.status.config.daemon_version;\r\n }\r\n return undefined;\r\n } else {\r\n return undefined;\r\n }\r\n },\r\n\r\n isConnected() {\r\n return this.is_connected;\r\n },\r\n\r\n // These methods determine whether at any point in the past we've connected..\r\n hasConnected() {\r\n return this.has_connected;\r\n },\r\n\r\n getConfig() {\r\n return this.status.config;\r\n },\r\n\r\n getVersion() {\r\n return this.status.config.daemon_version;\r\n },\r\n\r\n getDeviceCount() {\r\n return Object.keys(this.status.mixers).length;\r\n },\r\n\r\n setActiveSerial(serial) {\r\n this.activeSerial = serial;\r\n },\r\n\r\n getActiveDevice() {\r\n if (this.activeSerial === \"\") {\r\n return undefined;\r\n }\r\n return this.status.mixers[this.activeSerial];\r\n },\r\n\r\n hasActiveDevice() {\r\n return this.activeSerial !== \"\";\r\n },\r\n\r\n getActiveSerial() {\r\n return this.activeSerial;\r\n },\r\n\r\n getProfileFiles() {\r\n return this.status.files.profiles;\r\n },\r\n\r\n getMicProfileFiles() {\r\n return this.status.files.mic_profiles;\r\n },\r\n\r\n getPresetFiles() {\r\n return this.status.files.presets;\r\n },\r\n\r\n getSampleFiles() {\r\n return this.status.files.samples;\r\n },\r\n\r\n getIconFiles() {\r\n return this.status.files.icons;\r\n },\r\n\r\n replaceData(json) {\r\n if (this.active) {\r\n Object.assign(this.status, json.Status);\r\n this.have_device = true;\r\n this.validateActive();\r\n }\r\n },\r\n\r\n pausePatchPath(path) {\r\n if (path === undefined) {\r\n console.error(\"Attempted to Stop Patches for Undefined!\");\r\n return;\r\n }\r\n let paths = path.split(\";\");\r\n for (path of paths) {\r\n console.log(\"Pausing Path: \" + path);\r\n this.pausedPaths.push(path);\r\n }\r\n },\r\n\r\n resumePatchPath(path) {\r\n let paths = path.split(\";\");\r\n for (path of paths) {\r\n let index = this.pausedPaths.indexOf(path);\r\n if (index !== -1) {\r\n // We don't care about key organisation, just that the entry is gone!\r\n delete this.pausedPaths[index];\r\n }\r\n }\r\n },\r\n\r\n // eslint-disable-next-line no-unused-vars\r\n patchData(json) {\r\n if (this.have_device) {\r\n for (let patch of json.Patch) {\r\n if (this.pausedPaths.includes(patch.path)) {\r\n continue;\r\n }\r\n\r\n applyOperation(this.status, patch, true, true, false);\r\n }\r\n this.validateActive();\r\n }\r\n },\r\n\r\n validateActive() {\r\n if (this.status.mixers[this.activeSerial] === undefined) {\r\n // We've lost our device, stop being active.\r\n this.activeSerial = \"\";\r\n }\r\n },\r\n\r\n pause() {\r\n this.active = false;\r\n },\r\n\r\n resume() {\r\n this.active = true;\r\n },\r\n\r\n isPaused() {\r\n return !this.active;\r\n },\r\n getAccessibilityNotification(type) {\r\n if (this.a11y.notifications.enabled) {\r\n return this.a11y.notifications[type];\r\n }\r\n return \"\";\r\n },\r\n setAccessibilityNotification(type, message) {\r\n this.a11y.notifications[type] = message;\r\n }\r\n});\r\n","import { render } from \"./A11yNotifications.vue?vue&type=template&id=1a3be3b1\"\nimport script from \"./A11yNotifications.vue?vue&type=script&lang=js\"\nexport * from \"./A11yNotifications.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","/**\r\n * A class designed to help manage request and responses to the GoXLR Utility via Websockets and HTTP.\r\n *\r\n * A lot of commands do not require responses as they're 'fire and forget', the only response that could possibly\r\n * be returned is an error which means that something has likely gone *SERIOUSLY* wrong, and we should abandon\r\n * all hope. As such, the daemon doesn't provide a response for most requests, and will only send errors, and\r\n * responses to GetStatus up the pipe to us, which we simply handle here. If you absolutely require a response from\r\n * a request (eg, profile management), send it as a standard command, and not a websocket command.\r\n *\r\n * Commands are sent via JSON, and are handled by serde on the rear end, this class will include some\r\n * helper methods for sending commands but the command structure will need to be understood first.\r\n *\r\n * Commands are documented in ipc/src/lib.rs under the GoXLRCommand enum, as an example, the Command to\r\n * change a volume level is defined as:\r\n * SetVolume(ChannelName, u8)\r\n *\r\n * Following the ChannelName to types/src/lib.rs, we get a list of channel names in the enum. Unless otherwise\r\n * stated by a #[repr] macro (See CompressorRatio), Serde expects these to be sent as Strings. Values to a\r\n * command are expected to be sent as an array of values. Using the above, SetVolume can be represented in JSON as:\r\n * { \"SetVolume\": [\"Chat\", 145] }\r\n *\r\n * If there is only one parameter for a command, an array isn't required.\r\n *\r\n * Extra Technical Stuff (not needed for most people), Obviously a command requires a serial, and the actual message\r\n * sent to the Daemon is a Command object, in this case, the same rules as above apply. Command is defined as:\r\n * Command(String, GoXLRCommand)\r\n *\r\n * With String being the serial. So expanding out the above, you end up with JSON that looks like:\r\n * {\"Command\": [\"serial\", { \"SetVolume\": [\"Chat\", 145]}]}\r\n *\r\n * The websocket class will abstract away the need to build a complete message.\r\n */\r\nimport {store} from \"@/store\";\r\n\r\n// TODO: Error checking and handling!\r\nexport class Websocket {\r\n #connection_promise = [];\r\n #disconnect_callback = undefined;\r\n #message_queue = []\r\n #websocket = undefined;\r\n #command_index = 0;\r\n\r\n connect() {\r\n this.#websocket = new WebSocket(getWebsocketAddress());\r\n\r\n let self = this;\r\n self.#websocket.addEventListener('message', function (event) {\r\n // A message can be one of two things, either a DaemonStatus, or an error..\r\n let json = JSON.parse(event.data);\r\n\r\n let message_id = json.id;\r\n let message_data = json.data;\r\n if (message_data[\"Status\"] !== undefined) {\r\n self.#fulfill_promise(message_id, message_data, true);\r\n } else if (message_data[\"Patch\"] !== undefined) {\r\n // Nothing ever requests patch data, so we can ignore this.\r\n store.patchData(message_data);\r\n } else if (message_data[\"MicLevel\"] !== undefined) {\r\n self.#fulfill_promise(message_id, message_data, true);\r\n } else if (message_data === \"Ok\") {\r\n self.#fulfill_promise(message_id, message_data, true);\r\n } else {\r\n self.#fulfill_promise(message_id, message_data, false);\r\n console.log(\"Received Error from Websocket: \" + event.data);\r\n }\r\n });\r\n\r\n self.#websocket.addEventListener('open', function () {\r\n console.log(\"OPEN\");\r\n if (self.#connection_promise[0] !== undefined) {\r\n self.#connection_promise[0]();\r\n }\r\n self.#connection_promise = [];\r\n });\r\n\r\n self.#websocket.addEventListener('close', function () {\r\n if (self.#connection_promise[1] !== undefined) {\r\n self.#connection_promise[1]();\r\n }\r\n self.#connection_promise = [];\r\n\r\n if (self.#disconnect_callback !== undefined) {\r\n self.#disconnect_callback();\r\n self.#disconnect_callback = undefined;\r\n }\r\n\r\n self.#websocket.close();\r\n });\r\n\r\n self.#websocket.addEventListener('error', function () {\r\n if (self.#connection_promise[1] !== undefined) {\r\n self.#connection_promise[1]();\r\n }\r\n self.#connection_promise = [];\r\n\r\n if (self.#disconnect_callback !== undefined) {\r\n self.#disconnect_callback();\r\n self.#disconnect_callback = undefined;\r\n }\r\n self.#websocket.close();\r\n });\r\n\r\n return new Promise((resolve, reject) => {\r\n self.#connection_promise[0] = resolve;\r\n self.#connection_promise[1] = reject;\r\n });\r\n }\r\n\r\n on_disconnect(func) {\r\n this.#disconnect_callback = func;\r\n }\r\n\r\n get_status() {\r\n return this.#sendRequest(\"GetStatus\");\r\n }\r\n\r\n open_path(type) {\r\n let request = {\r\n \"OpenPath\": type\r\n }\r\n\r\n return this.send_daemon_command(request);\r\n }\r\n\r\n send_daemon_command(command) {\r\n let request = {\r\n \"Daemon\":\r\n command\r\n\r\n }\r\n return this.#sendRequest(request);\r\n }\r\n\r\n send_command(serial, command) {\r\n let request = {\r\n \"Command\": [\r\n serial,\r\n command\r\n ]\r\n }\r\n return this.#sendRequest(request);\r\n }\r\n\r\n get_mic_level(serial) {\r\n let request = {\r\n \"GetMicLevel\": serial,\r\n }\r\n return this.#sendRequest(request);\r\n }\r\n\r\n #sendRequest(request) {\r\n let id = this.#command_index++;\r\n\r\n // Wrap this request with an ID\r\n let final_request = {\r\n id: id,\r\n data: request,\r\n }\r\n\r\n this.#websocket.send(JSON.stringify(final_request));\r\n\r\n // Create and return a response promise...\r\n let self = this;\r\n return new Promise((resolve, reject) => {\r\n self.#message_queue[id] = [];\r\n self.#message_queue[id][0] = resolve;\r\n self.#message_queue[id][1] = reject;\r\n });\r\n }\r\n\r\n #fulfill_promise(id, data, is_success) {\r\n if (this.#message_queue[id] !== undefined) {\r\n this.#message_queue[id][is_success ? 0 : 1](data);\r\n delete this.#message_queue[id];\r\n }\r\n }\r\n}\r\n\r\nexport const websocket = new Websocket();\r\n\r\nexport function runWebsocket() {\r\n console.log(\"Connecting..\");\r\n // Let's attempt to connect the websocket...\r\n websocket.connect().then(() => {\r\n // We got a connection, try fetching the status...\r\n websocket.get_status().then((data) => {\r\n store.socketConnected(data);\r\n\r\n websocket.on_disconnect(() => {\r\n store.socketDisconnected();\r\n setTimeout(runWebsocket, 1000);\r\n })\r\n });\r\n }).catch(() => {\r\n // Wait 1 second, then try again..\r\n setTimeout(runWebsocket, 1000);\r\n });\r\n}\r\n\r\n/*\r\n * This function simply sends a command via HTTP and returns a promise of a response.\r\n *\r\n * The GoXLR Daemon simply handles a DaemonRequest and returns a DaemonResponse, it doesn't do anything special for\r\n * errors, so we'll handle fulfill or reject here based on what comes back.\r\n */\r\nexport function sendHttpCommand(serial, command) {\r\n let request = {\r\n \"Command\": [\r\n serial,\r\n command\r\n ]\r\n }\r\n return executeHttpRequest(request);\r\n}\r\n\r\nfunction executeHttpRequest(request) {\r\n let cmd_resolve, cmd_reject;\r\n\r\n fetch(getHTTPAddress(), {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(request)\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if (data[\"Error\"] !== undefined) {\r\n cmd_reject(data[\"Error\"]);\r\n }\r\n cmd_resolve();\r\n })\r\n .catch((error) => {\r\n cmd_reject(\"HTTP Error: \" + error);\r\n });\r\n\r\n return new Promise((resolve, reject) => {\r\n cmd_resolve = resolve;\r\n cmd_reject = reject;\r\n });\r\n}\r\n\r\n/*\r\nThis is here to calculate the address. The dev environment is always on a different port to the daemon, so\r\nwe need to bounce requests across to the default port of the daemon. If we're running in production, we need\r\nto convert the HTTP request to a websocket request on the same port (this can be changed), so work it out here.\r\n */\r\nfunction getWebsocketAddress() {\r\n if (process.env.NODE_ENV === \"development\") {\r\n return \"ws://localhost:14564/api/websocket\";\r\n }\r\n return \"ws://\" + window.location.host + \"/api/websocket\";\r\n}\r\n\r\n// Same as above, except for HTTP request...\r\nfunction getHTTPAddress() {\r\n return getBaseHTTPAddress() + \"api/command\";\r\n}\r\n\r\nexport function getBaseHTTPAddress() {\r\n if (process.env.NODE_ENV === \"development\") {\r\n return \"http://localhost:14564/\";\r\n }\r\n return \"/\";\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./WidgetContainer.vue?vue&type=template&id=799f2278&scoped=true\"\nimport script from \"./WidgetContainer.vue?vue&type=script&lang=js\"\nexport * from \"./WidgetContainer.vue?vue&type=script&lang=js\"\n\nimport \"./WidgetContainer.vue?vue&type=style&index=0&id=799f2278&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-799f2278\"]])\n\nexport default __exports__","\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n\r\n","import { render } from \"./VerticalScrollingContainer.vue?vue&type=template&id=4bf82814&scoped=true\"\nimport script from \"./VerticalScrollingContainer.vue?vue&type=script&lang=js\"\nexport * from \"./VerticalScrollingContainer.vue?vue&type=script&lang=js\"\n\nimport \"./VerticalScrollingContainer.vue?vue&type=style&index=0&id=4bf82814&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4bf82814\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./RadioItem.vue?vue&type=template&id=15d478d7&scoped=true\"\nimport script from \"./RadioItem.vue?vue&type=script&lang=js\"\nexport * from \"./RadioItem.vue?vue&type=script&lang=js\"\n\nimport \"./RadioItem.vue?vue&type=style&index=0&id=15d478d7&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-15d478d7\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./DropMenu.vue?vue&type=template&id=d3088ef8&scoped=true\"\nimport script from \"./DropMenu.vue?vue&type=script&lang=js\"\nexport * from \"./DropMenu.vue?vue&type=script&lang=js\"\n\nimport \"./DropMenu.vue?vue&type=style&index=0&id=d3088ef8&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-d3088ef8\"]])\n\nexport default __exports__","import { render } from \"./RadioList.vue?vue&type=template&id=bbcf45ca&scoped=true\"\nimport script from \"./RadioList.vue?vue&type=script&lang=js\"\nexport * from \"./RadioList.vue?vue&type=script&lang=js\"\n\nimport \"./RadioList.vue?vue&type=style&index=0&id=bbcf45ca&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bbcf45ca\"]])\n\nexport default __exports__","import { render } from \"./ScrollingRadioList.vue?vue&type=template&id=737bb15c\"\nimport script from \"./ScrollingRadioList.vue?vue&type=script&lang=js\"\nexport * from \"./ScrollingRadioList.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./RadioSelection.vue?vue&type=template&id=e55c0876\"\nimport script from \"./RadioSelection.vue?vue&type=script&lang=js\"\nexport * from \"./RadioSelection.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./GroupContainer.vue?vue&type=template&id=78b23cc5&scoped=true\"\nimport script from \"./GroupContainer.vue?vue&type=script&lang=js\"\nexport * from \"./GroupContainer.vue?vue&type=script&lang=js\"\n\nimport \"./GroupContainer.vue?vue&type=style&index=0&id=78b23cc5&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-78b23cc5\"]])\n\nexport default __exports__","import { render } from \"./Faders.vue?vue&type=template&id=7ccb2986\"\nimport script from \"./Faders.vue?vue&type=script&lang=js\"\nexport * from \"./Faders.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Label.vue?vue&type=template&id=655a8462&scoped=true\"\nimport script from \"./Label.vue?vue&type=script&lang=js\"\nexport * from \"./Label.vue?vue&type=script&lang=js\"\n\nimport \"./Label.vue?vue&type=style&index=0&id=655a8462&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-655a8462\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Range.vue?vue&type=template&id=68eec8f9&scoped=true\"\nimport script from \"./Range.vue?vue&type=script&lang=js\"\nexport * from \"./Range.vue?vue&type=script&lang=js\"\n\nimport \"./Range.vue?vue&type=style&index=0&id=68eec8f9&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-68eec8f9\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Input.vue?vue&type=template&id=57646b72&scoped=true\"\nimport script from \"./Input.vue?vue&type=script&lang=js\"\nexport * from \"./Input.vue?vue&type=script&lang=js\"\n\nimport \"./Input.vue?vue&type=style&index=0&id=57646b72&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-57646b72\"]])\n\nexport default __exports__","import { render } from \"./Slider.vue?vue&type=template&id=058f83a0&scoped=true\"\nimport script from \"./Slider.vue?vue&type=script&lang=js\"\nexport * from \"./Slider.vue?vue&type=script&lang=js\"\n\nimport \"./Slider.vue?vue&type=style&index=0&id=058f83a0&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-058f83a0\"]])\n\nexport default __exports__","/**\r\n * This file primarily contains mappings from Utility Enums to Javascript representations, they're used for checking\r\n * values against the DaemonStatus, as well as sending updates, so order and naming is important! Some parts of the\r\n * code (such as faders and mixers) will directly reference array values, it's not ideal, but until some cleaner\r\n * representation can happen it's more efficient than constantly bouncing back and forward between array indexes.\r\n */\r\n\r\nexport const ScribbleNames = {\r\n \"A\": \"Scribble1\",\r\n \"B\": \"Scribble2\",\r\n \"C\": \"Scribble3\",\r\n \"D\": \"Scribble4\",\r\n}\r\n\r\nexport const MuteButtonNamesForFader = {\r\n \"A\": \"Fader1Mute\",\r\n \"B\": \"Fader2Mute\",\r\n \"C\": \"Fader3Mute\",\r\n \"D\": \"Fader4Mute\",\r\n}\r\n\r\nexport const InputDevice = {\r\n \"Microphone\": \"Microphone\",\r\n \"Chat\": \"Chat\",\r\n \"Music\": \"Music\",\r\n \"Game\": \"Game\",\r\n \"Console\": \"Console\",\r\n \"Line In\": \"LineIn\",\r\n \"System\": \"System\",\r\n \"Samples\": \"Samples\"\r\n}\r\n\r\nexport const OutputDevice = {\r\n \"Headphones\": \"Headphones\",\r\n \"Stream Mix\": \"BroadcastMix\",\r\n \"Line Out\": \"LineOut\",\r\n \"Chat Mic\": \"ChatMic\",\r\n \"Sampler\": \"Sampler\",\r\n}\r\n\r\nexport const ChannelName = [\r\n \"Mic\",\r\n \"LineIn\",\r\n \"Console\",\r\n \"System\",\r\n \"Game\",\r\n \"Chat\",\r\n \"Sample\",\r\n \"Music\",\r\n \"Headphones\",\r\n \"MicMonitor\",\r\n \"LineOut\",\r\n]\r\n\r\n/**\r\n * TODO: This might need to be handled in the Daemon, we've hit a situation where the the ChannelName and InputDevice\r\n * enums aren't synced correctly, despite almost representing the same thing, which can cause weirdness.\r\n * @param name\r\n * @returns {*|string}\r\n */\r\nexport function channelNameToInputDevice(name) {\r\n if (name === 'Mic') {\r\n return 'Microphone';\r\n }\r\n if (name === 'Sample') {\r\n return 'Samples';\r\n }\r\n return name;\r\n}\r\n\r\nexport const ChannelNameReadable = {\r\n \"Mic\": \"Mic\",\r\n \"LineIn\": \"Line In\",\r\n \"Console\": \"Console\",\r\n \"System\": \"System\",\r\n \"Game\": \"Game\",\r\n \"Chat\": \"Voice Chat\",\r\n \"Sample\": \"Sample\",\r\n \"Music\": \"Music\",\r\n \"Headphones\": \"Headphones\",\r\n \"MicMonitor\": \"Mic Monitor\",\r\n \"LineOut\": \"Line Out\",\r\n}\r\n\r\nexport const EffectPresets = [\r\n \"Preset1\",\r\n \"Preset2\",\r\n \"Preset3\",\r\n \"Preset4\",\r\n \"Preset5\",\r\n \"Preset6\",\r\n]\r\n\r\nexport const EffectLightingPresets = [\r\n \"EffectSelect1\",\r\n \"EffectSelect2\",\r\n \"EffectSelect3\",\r\n \"EffectSelect4\",\r\n \"EffectSelect5\",\r\n \"EffectSelect6\",\r\n]\r\n\r\nexport const EqMiniFreqs = [\r\n \"Equalizer90Hz\",\r\n \"Equalizer250Hz\",\r\n \"Equalizer500Hz\",\r\n \"Equalizer1KHz\",\r\n \"Equalizer3KHz\",\r\n \"Equalizer8KHz\",\r\n]\r\n\r\nexport const EqFreqs = [\r\n \"Equalizer31Hz\",\r\n \"Equalizer63Hz\",\r\n \"Equalizer125Hz\",\r\n \"Equalizer250Hz\",\r\n \"Equalizer500Hz\",\r\n \"Equalizer1KHz\",\r\n \"Equalizer2KHz\",\r\n \"Equalizer4KHz\",\r\n \"Equalizer8KHz\",\r\n \"Equalizer16KHz\",\r\n]\r\n\r\nexport let InputMixer = [\r\n \"Mic\",\r\n \"Chat\",\r\n \"Music\",\r\n \"Game\",\r\n \"Console\",\r\n \"LineIn\",\r\n \"System\",\r\n \"Sample\",\r\n]\r\n\r\n\r\nexport let OutputMixer = [\r\n \"LineOut\",\r\n \"Headphones\",\r\n \"MicMonitor\",\r\n]\r\n\r\n/* Items in here are hidden behind the 'Expand' button */\r\nexport let OutputMixerSubmixHidden = [\r\n \"MicMonitor\"\r\n]\r\n\r\nexport const LightingInactiveOptions = [\r\n {\r\n id: 'Dimmed',\r\n label: 'Dim Active Colour'\r\n },\r\n {\r\n id: 'Colour2',\r\n label: 'Inactive Colour'\r\n },\r\n {\r\n id: 'DimmedColour2',\r\n label: 'Dim Inactive Colour'\r\n }\r\n]\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./SubmixSlider.vue?vue&type=template&id=356eb5a3&scoped=true\"\nimport script from \"./SubmixSlider.vue?vue&type=script&lang=js\"\nexport * from \"./SubmixSlider.vue?vue&type=script&lang=js\"\n\nimport \"./SubmixSlider.vue?vue&type=style&index=0&id=356eb5a3&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-356eb5a3\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./CenteredContainer.vue?vue&type=template&id=4ac8e0c2&scoped=true\"\nimport script from \"./CenteredContainer.vue?vue&type=script&lang=js\"\nexport * from \"./CenteredContainer.vue?vue&type=script&lang=js\"\n\nimport \"./CenteredContainer.vue?vue&type=style&index=0&id=4ac8e0c2&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4ac8e0c2\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n","import { render } from \"./AssignmentEntry.vue?vue&type=template&id=5a6d5e18&scoped=true\"\nimport script from \"./AssignmentEntry.vue?vue&type=script&lang=js\"\nexport * from \"./AssignmentEntry.vue?vue&type=script&lang=js\"\n\nimport \"./AssignmentEntry.vue?vue&type=style&index=0&id=5a6d5e18&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5a6d5e18\"]])\n\nexport default __exports__","import { render } from \"./MixAssignment.vue?vue&type=template&id=4e6660be\"\nimport script from \"./MixAssignment.vue?vue&type=script&lang=js\"\nexport * from \"./MixAssignment.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Mixer.vue?vue&type=template&id=35c96192&scoped=true\"\nimport script from \"./Mixer.vue?vue&type=script&lang=js\"\nexport * from \"./Mixer.vue?vue&type=script&lang=js\"\n\nimport \"./Mixer.vue?vue&type=style&index=0&id=35c96192&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-35c96192\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Tabs.vue?vue&type=template&id=3e52d46c\"\nimport script from \"./Tabs.vue?vue&type=script&lang=js\"\nexport * from \"./Tabs.vue?vue&type=script&lang=js\"\n\nimport \"./Tabs.vue?vue&type=style&index=0&id=3e52d46c&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Tab.vue?vue&type=template&id=0b2b7c4e\"\nimport script from \"./Tab.vue?vue&type=script&lang=js\"\nexport * from \"./Tab.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Cell.vue?vue&type=template&id=237530a4&scoped=true\"\nimport script from \"./Cell.vue?vue&type=script&lang=js\"\nexport * from \"./Cell.vue?vue&type=script&lang=js\"\n\nimport \"./Cell.vue?vue&type=style&index=0&id=237530a4&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-237530a4\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./SubmixButton.vue?vue&type=template&id=afeded80&scoped=true\"\nimport script from \"./SubmixButton.vue?vue&type=script&lang=js\"\nexport * from \"./SubmixButton.vue?vue&type=script&lang=js\"\n\nimport \"./SubmixButton.vue?vue&type=style&index=0&id=afeded80&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-afeded80\"]])\n\nexport default __exports__","import { render } from \"./Routing.vue?vue&type=template&id=6dca3b08&scoped=true\"\nimport script from \"./Routing.vue?vue&type=script&lang=js\"\nexport * from \"./Routing.vue?vue&type=script&lang=js\"\n\nimport \"./Routing.vue?vue&type=style&index=0&id=6dca3b08&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6dca3b08\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./ExpandoBox.vue?vue&type=template&id=086d4e0f&scoped=true\"\nimport script from \"./ExpandoBox.vue?vue&type=script&lang=js\"\nexport * from \"./ExpandoBox.vue?vue&type=script&lang=js\"\n\nimport \"./ExpandoBox.vue?vue&type=style&index=0&id=086d4e0f&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-086d4e0f\"]])\n\nexport default __exports__","import { render } from \"./ExpandoGroupContainer.vue?vue&type=template&id=2c0fc602&scoped=true\"\nimport script from \"./ExpandoGroupContainer.vue?vue&type=script&lang=js\"\nexport * from \"./ExpandoGroupContainer.vue?vue&type=script&lang=js\"\n\nimport \"./ExpandoGroupContainer.vue?vue&type=style&index=0&id=2c0fc602&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2c0fc602\"]])\n\nexport default __exports__","import { render } from \"./Gate.vue?vue&type=template&id=ea707ec6&scoped=true\"\nimport script from \"./Gate.vue?vue&type=script&lang=js\"\nexport * from \"./Gate.vue?vue&type=script&lang=js\"\n\nimport \"./Gate.vue?vue&type=style&index=0&id=ea707ec6&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-ea707ec6\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import {store} from \"@/store\";\r\n\r\nexport function isDeviceMini() {\r\n // Do this here, rather than on created() so it can update if the device changes\r\n return store.getActiveDevice().hardware.device_type === \"Mini\";\r\n}\r\n\r\nexport function roundToStep(value, step) {\r\n step || (step = 1.0);\r\n let inverse = 1.0 / step;\r\n return Math.round(value * inverse) / inverse;\r\n}\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./FineTuneHeader.vue?vue&type=template&id=788e65be\"\nimport script from \"./FineTuneHeader.vue?vue&type=script&lang=js\"\nexport * from \"./FineTuneHeader.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Equalizer.vue?vue&type=template&id=35cf325b&scoped=true\"\nimport script from \"./Equalizer.vue?vue&type=script&lang=js\"\nexport * from \"./Equalizer.vue?vue&type=script&lang=js\"\n\nimport \"./Equalizer.vue?vue&type=style&index=0&id=35cf325b&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-35cf325b\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Compressor.vue?vue&type=template&id=d7e5afb8\"\nimport script from \"./Compressor.vue?vue&type=script&lang=js\"\nexport * from \"./Compressor.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./MicExtra.vue?vue&type=template&id=42958ce5\"\nimport script from \"./MicExtra.vue?vue&type=script&lang=js\"\nexport * from \"./MicExtra.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n","import { render } from \"./ProfileButtonList.vue?vue&type=template&id=31c48871&scoped=true\"\nimport script from \"./ProfileButtonList.vue?vue&type=script&lang=js\"\nexport * from \"./ProfileButtonList.vue?vue&type=script&lang=js\"\n\nimport \"./ProfileButtonList.vue?vue&type=style&index=0&id=31c48871&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-31c48871\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./ProfileButton.vue?vue&type=template&id=30339110&scoped=true\"\nimport script from \"./ProfileButton.vue?vue&type=script&lang=js\"\nexport * from \"./ProfileButton.vue?vue&type=script&lang=js\"\n\nimport \"./ProfileButton.vue?vue&type=style&index=0&id=30339110&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-30339110\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./ModalButton.vue?vue&type=template&id=3d98c1d8&scoped=true\"\nimport script from \"./ModalButton.vue?vue&type=script&lang=js\"\nexport * from \"./ModalButton.vue?vue&type=script&lang=js\"\n\nimport \"./ModalButton.vue?vue&type=style&index=0&id=3d98c1d8&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3d98c1d8\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./ModalInput.vue?vue&type=template&id=685e508a&scoped=true\"\nimport script from \"./ModalInput.vue?vue&type=script&lang=js\"\nexport * from \"./ModalInput.vue?vue&type=script&lang=js\"\n\nimport \"./ModalInput.vue?vue&type=style&index=0&id=685e508a&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-685e508a\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./AccessibleModal.vue?vue&type=template&id=67edad44&scoped=true\"\nimport script from \"./AccessibleModal.vue?vue&type=script&lang=js\"\nexport * from \"./AccessibleModal.vue?vue&type=script&lang=js\"\n\nimport \"./AccessibleModal.vue?vue&type=style&index=0&id=67edad44&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-67edad44\"]])\n\nexport default __exports__","import { render } from \"./ProfileManager.vue?vue&type=template&id=805d98da&scoped=true\"\nimport script from \"./ProfileManager.vue?vue&type=script&lang=js\"\nexport * from \"./ProfileManager.vue?vue&type=script&lang=js\"\n\nimport \"./ProfileManager.vue?vue&type=style&index=0&id=805d98da&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-805d98da\"]])\n\nexport default __exports__","import { render } from \"./MicProfileHandler.vue?vue&type=template&id=23d8e2e6&scoped=true\"\nimport script from \"./MicProfileHandler.vue?vue&type=script&lang=js\"\nexport * from \"./MicProfileHandler.vue?vue&type=script&lang=js\"\n\nimport \"./MicProfileHandler.vue?vue&type=style&index=0&id=23d8e2e6&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-23d8e2e6\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./BigButton.vue?vue&type=template&id=3c73aae0&scoped=true\"\nimport script from \"./BigButton.vue?vue&type=script&lang=js\"\nexport * from \"./BigButton.vue?vue&type=script&lang=js\"\n\nimport \"./BigButton.vue?vue&type=style&index=0&id=3c73aae0&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3c73aae0\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./ContentContainer.vue?vue&type=template&id=1577c4b6&scoped=true\"\nimport script from \"./ContentContainer.vue?vue&type=script&lang=js\"\nexport * from \"./ContentContainer.vue?vue&type=script&lang=js\"\n\nimport \"./ContentContainer.vue?vue&type=style&index=0&id=1577c4b6&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1577c4b6\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./vu-meter.vue?vue&type=template&id=5fa96e59\"\nimport script from \"./vu-meter.vue?vue&type=script&lang=js\"\nexport * from \"./vu-meter.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./SetupModel.vue?vue&type=template&id=64eb68c3\"\nimport script from \"./SetupModel.vue?vue&type=script&lang=js\"\nexport * from \"./SetupModel.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./MicSetupButton.vue?vue&type=template&id=54496361\"\nimport script from \"./MicSetupButton.vue?vue&type=script&lang=js\"\nexport * from \"./MicSetupButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./ContentBox.vue?vue&type=template&id=36f4d98c&scoped=true\"\nimport script from \"./ContentBox.vue?vue&type=script&lang=js\"\nexport * from \"./ContentBox.vue?vue&type=script&lang=js\"\n\nimport \"./ContentBox.vue?vue&type=style&index=0&id=36f4d98c&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-36f4d98c\"]])\n\nexport default __exports__","import { render } from \"./Mic.vue?vue&type=template&id=b00ac9bc\"\nimport script from \"./Mic.vue?vue&type=script&lang=js\"\nexport * from \"./Mic.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Button.vue?vue&type=template&id=5ca998d7&scoped=true\"\nimport script from \"./Button.vue?vue&type=script&lang=js\"\nexport * from \"./Button.vue?vue&type=script&lang=js\"\n\nimport \"./Button.vue?vue&type=style&index=0&id=5ca998d7&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5ca998d7\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./SettingsButton.vue?vue&type=template&id=7fbd8881&scoped=true\"\nimport script from \"./SettingsButton.vue?vue&type=script&lang=js\"\nexport * from \"./SettingsButton.vue?vue&type=script&lang=js\"\n\nimport \"./SettingsButton.vue?vue&type=style&index=0&id=7fbd8881&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7fbd8881\"]])\n\nexport default __exports__","import { render } from \"./DeviceSelector.vue?vue&type=template&id=2a69a24d&scoped=true\"\nimport script from \"./DeviceSelector.vue?vue&type=script&lang=js\"\nexport * from \"./DeviceSelector.vue?vue&type=script&lang=js\"\n\nimport \"./DeviceSelector.vue?vue&type=style&index=0&id=2a69a24d&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2a69a24d\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./Cough.vue?vue&type=template&id=cfe0e206\"\nimport script from \"./Cough.vue?vue&type=script&lang=js\"\nexport * from \"./Cough.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n","import { render } from \"./LicenseButton.vue?vue&type=template&id=3ffabd79\"\nimport script from \"./LicenseButton.vue?vue&type=script&lang=js\"\nexport * from \"./LicenseButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./AboutButton.vue?vue&type=template&id=98398a20\"\nimport script from \"./AboutButton.vue?vue&type=script&lang=js\"\nexport * from \"./AboutButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./HelpButton.vue?vue&type=template&id=d0e8a456\"\nimport script from \"./HelpButton.vue?vue&type=script&lang=js\"\nexport * from \"./HelpButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n","import { render } from \"./PowerShutdown.vue?vue&type=template&id=bf46782e\"\nimport script from \"./PowerShutdown.vue?vue&type=script&lang=js\"\nexport * from \"./PowerShutdown.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n","import { render } from \"./PowerWake.vue?vue&type=template&id=462ae96a\"\nimport script from \"./PowerWake.vue?vue&type=script&lang=js\"\nexport * from \"./PowerWake.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./PowerButton.vue?vue&type=template&id=33cc4ef0\"\nimport script from \"./PowerButton.vue?vue&type=script&lang=js\"\nexport * from \"./PowerButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./SimpleNumberInput.vue?vue&type=template&id=8f3372e6\"\nimport script from \"./SimpleNumberInput.vue?vue&type=script&lang=js\"\nexport * from \"./SimpleNumberInput.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DeviceSettingsButton.vue?vue&type=template&id=17994410\"\nimport script from \"./DeviceSettingsButton.vue?vue&type=script&lang=js\"\nexport * from \"./DeviceSettingsButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","import { render } from \"./SwitchDeviceButton.vue?vue&type=template&id=2b11cc3b\"\nimport script from \"./SwitchDeviceButton.vue?vue&type=script&lang=js\"\nexport * from \"./SwitchDeviceButton.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./System.vue?vue&type=template&id=70b58047&scoped=true\"\nimport script from \"./System.vue?vue&type=script&lang=js\"\nexport * from \"./System.vue?vue&type=script&lang=js\"\n\nimport \"./System.vue?vue&type=style&index=0&id=70b58047&scoped=true&lang=css\"\n\nimport exportComponent from \"C:\\\\Users\\\\FrostyCoolSlug\\\\IdeaProjects\\\\goxlr-ui\\\\node_modules\\\\vue-loader\\\\dist\\\\exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-70b58047\"]])\n\nexport default __exports__","\r\n\r\n\r\n\r\n\r\n","