<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>VasakOS</title>
		<link>https://os.vasak.net.ar/</link>
		<description>Recent content on VasakOS</description>
		<generator>Hugo</generator>
		<language>es-AR</language>
		
		
		
		
			<lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://os.vasak.net.ar/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Setup del Proyecto | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/setup-project/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/setup-project/</guid>
				<description>&lt;h2 id=&#34;setup-del-proyecto---vasak-desktop&#34;&gt;Setup del Proyecto - Vasak Desktop&lt;a href=&#34;#setup-del-proyecto---vasak-desktop&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Guía completa para configurar tu entorno de desarrollo de Vasak Desktop.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Compilacion | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/build/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/build/</guid>
				<description>&lt;p&gt;Guía para compilar Vasak Desktop. Sobre la misma veremos como realizar compilaciones&lt;/p&gt;&#xA;&lt;h2 id=&#34;modo-producción&#34;&gt;Modo Producción&lt;a href=&#34;#modo-producci%c3%b3n&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;compilación-completa&#34;&gt;Compilación Completa&lt;a href=&#34;#compilaci%c3%b3n-completa&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Compilar todo para producción&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bun run tauri build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# O con Tauri CLI&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cargo tauri build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt;: La compilación en producción toma &lt;strong&gt;15-30 minutos&lt;/strong&gt; la primera vez.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Dependencias de Desarrollo</title>
				<link>https://os.vasak.net.ar/docs/devs/dev-dependencies/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/dev-dependencies/</guid>
				<description>&lt;p&gt;A continuacion encontratas todas las dependencias que debera instalar en su entorno de desarrollo para construir o colaborar con el proyecto, lo mismo aplica para aplicaciones ya existentes o &lt;strong&gt;VAPPs&lt;/strong&gt; propias&amp;hellip;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Instalar VasakOS</title>
				<link>https://os.vasak.net.ar/docs/user/installation/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/user/installation/</guid>
				<description>&lt;p&gt;Esta guía cubre la instalación desde cero. Si sólo querés las aplicaciones de VasakOS sobre&#xA;un Arch Linux que ya tenés, saltá a &lt;a href=&#34;https://os.vasak.net.ar/docs/user/repository/&#34; &gt;&#xA;  &lt;i class=&#34;fas fa-link&#34;&gt;&lt;/i&gt;&amp;nbsp;&#xA;  &#xA;  repositorio de paquetes&#xA;&lt;/a&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Gestion de dependencias | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/dependencies/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/dependencies/</guid>
				<description>&lt;p&gt;Guía completa para gestionar dependencias del proyecto.&lt;/p&gt;&#xA;&lt;h2 id=&#34;dependencias-del-frontend-javascripttypescript&#34;&gt;Dependencias del Frontend (JavaScript/TypeScript)&lt;a href=&#34;#dependencias-del-frontend-javascripttypescript&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;archivo-packagejson&#34;&gt;Archivo: &lt;code&gt;package.json&lt;/code&gt;&lt;a href=&#34;#archivo-packagejson&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Las dependencias se definen en este archivo:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Repositorio de paquetes</title>
				<link>https://os.vasak.net.ar/docs/user/repository/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/user/repository/</guid>
				<description>&lt;p&gt;VasakOS publica sus paquetes en un repositorio pacman propio llamado &lt;strong&gt;&lt;code&gt;vasakos&lt;/code&gt;&lt;/strong&gt;, firmado&#xA;con GPG. Si instalaste desde la ISO ya lo tenés configurado y no necesitás hacer nada:&#xA;&lt;code&gt;sudo pacman -Syu&lt;/code&gt; actualiza todo.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Actualizar el sistema</title>
				<link>https://os.vasak.net.ar/docs/user/updating/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/user/updating/</guid>
				<description>&lt;p&gt;VasakOS es &lt;strong&gt;rolling release&lt;/strong&gt;: no hay versiones que se queden atrás ni una migración grande&#xA;cada dos años. Las actualizaciones llegan continuamente desde los repositorios de Arch&#xA;Linux y desde el repositorio de VasakOS.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Arquitectura General | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/architecture/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/architecture/</guid>
				<description>&lt;p&gt;Visión general de la arquitectura de Vasak Desktop y cómo se estructuran los componentes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;qué-es-vasak-desktop&#34;&gt;¿Qué es Vasak Desktop?&lt;a href=&#34;#qu%c3%a9-es-vasak-desktop&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Vasak Desktop NO es un entorno de escritorio completo (como GNOME o KDE). Es una &lt;strong&gt;interfaz de escritorio ligera&lt;/strong&gt; que no cuenta con un &lt;strong&gt;WM&lt;/strong&gt; propio pero que proporciona:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Preguntas frecuentes</title>
				<link>https://os.vasak.net.ar/docs/user/faq/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/user/faq/</guid>
				<description></description>
			</item>
			<item>
				<title>Sistema de Carpetas | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/folders/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/folders/</guid>
				<description>&lt;p&gt;Guía detallada sobre la estructura de carpetas del proyecto.&lt;/p&gt;&#xA;&lt;h2 id=&#34;estructura-raíz&#34;&gt;Estructura Raíz&lt;a href=&#34;#estructura-ra%c3%adz&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;mermaid flex justify-center&#34;&gt;&#xA;&#xA;graph TD&#xA;    Root[&#34;📁 vasak-desktop/&#34;]&#xA;    &#xA;    Root --&gt; Src[&#34;📁 src/&lt;br/&gt;&lt;small&gt;Frontend Vue.js&lt;/small&gt;&#34;]&#xA;    Root --&gt; SrcTauri[&#34;📁 src-tauri/&lt;br/&gt;&lt;small&gt;Backend Rust&lt;/small&gt;&#34;]&#xA;    Root --&gt; IndexHTML[&#34;📄 index.html&#34;]&#xA;    Root --&gt; PackageJSON[&#34;📄 package.json&#34;]&#xA;    Root --&gt; TSConfig[&#34;📄 tsconfig.json&#34;]&#xA;    Root --&gt; ViteConfig[&#34;📄 vite.config.ts&#34;]&#xA;    Root --&gt; License[&#34;📄 LICENSE&#34;]&#xA;    Root --&gt; Readme[&#34;📄 README.md&#34;]&#xA;    Root --&gt; GitIgnore[&#34;📄 .gitignore&#34;]&#xA;    &#xA;    style Root fill:#667eea,stroke:#764ba2,color:#fff&#xA;    style Src fill:#f093fb,stroke:#f5576c,color:#fff&#xA;    style SrcTauri fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;    style IndexHTML fill:#fa709a,stroke:#fee140,color:#fff&#xA;    style PackageJSON fill:#30cfd0,stroke:#330867,color:#fff&#xA;    style TSConfig fill:#a8edea,stroke:#fed6e3,color:#333&#xA;    style ViteConfig fill:#ffecd2,stroke:#fcb69f,color:#333&#xA;    style License fill:#ff9a9e,stroke:#fecfef,color:#333&#xA;    style Readme fill:#fbc2eb,stroke:#a6c1ee,color:#333&#xA;    style GitIgnore fill:#fdcbf1,stroke:#e6dee9,color:#333&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;frontend-src&#34;&gt;Frontend (&lt;code&gt;src/&lt;/code&gt;)&lt;a href=&#34;#frontend-src&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;raíz-de-frontend&#34;&gt;Raíz de Frontend&lt;a href=&#34;#ra%c3%adz-de-frontend&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;mermaid flex justify-center&#34;&gt;&#xA;&#xA;graph TD&#xA;    SrcRoot[&#34;📁 src/&#34;]&#xA;    SrcRoot --&gt; AppVue[&#34;📄 App.vue&lt;br/&gt;&lt;small&gt;Componente raíz&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; MainTs[&#34;📄 main.ts&lt;br/&gt;&lt;small&gt;Punto de entrada&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; StyleCss[&#34;📄 style.css&lt;br/&gt;&lt;small&gt;Estilos globales&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; ViteEnv[&#34;📄 vite-env.d.ts&lt;br/&gt;&lt;small&gt;Tipos Vite&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; AssetsDir[&#34;📁 assets/&lt;br/&gt;&lt;small&gt;Recursos estáticos&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; ComponentsDir[&#34;📁 components/&lt;br/&gt;&lt;small&gt;Componentes reutilizables&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; InterfacesDir[&#34;📁 interfaces/&lt;br/&gt;&lt;small&gt;Interfaces TS&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; LayoutsDir[&#34;📁 layouts/&lt;br/&gt;&lt;small&gt;Layouts/Plantillas&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; RoutesDir[&#34;📁 routes/&lt;br/&gt;&lt;small&gt;Enrutamiento&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; ToolsDir[&#34;📁 tools/&lt;br/&gt;&lt;small&gt;Controladores&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; TypesDir[&#34;📁 types/&lt;br/&gt;&lt;small&gt;Tipos TS&lt;/small&gt;&#34;]&#xA;    SrcRoot --&gt; ViewsDir[&#34;📁 views/&lt;br/&gt;&lt;small&gt;Vistas/Páginas&lt;/small&gt;&#34;]&#xA;    &#xA;    style SrcRoot fill:#667eea,stroke:#764ba2,color:#fff&#xA;    style AppVue fill:#f093fb,stroke:#f5576c,color:#fff&#xA;    style MainTs fill:#f093fb,stroke:#f5576c,color:#fff&#xA;    style StyleCss fill:#f093fb,stroke:#f5576c,color:#fff&#xA;    style ViteEnv fill:#f093fb,stroke:#f5576c,color:#fff&#xA;    style AssetsDir fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;    style ComponentsDir fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;    style InterfacesDir fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;    style LayoutsDir fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;    style RoutesDir fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;    style ToolsDir fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;    style TypesDir fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;    style ViewsDir fill:#4facfe,stroke:#00f2fe,color:#fff&#xA;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h3 id=&#34;srcassets&#34;&gt;&lt;code&gt;src/assets/&lt;/code&gt;&lt;a href=&#34;#srcassets&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Recursos estáticos (imágenes, vectores):&lt;/p&gt;</description>
			</item>
			<item>
				<title>Componentes de VueJS | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/components-vue/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/components-vue/</guid>
				<description>&lt;p&gt;Guía para desarrollar componentes Vue en Vasak Desktop.&lt;/p&gt;&#xA;&lt;h2 id=&#34;estructura-base-de-un-componente&#34;&gt;Estructura Base de un Componente&lt;a href=&#34;#estructura-base-de-un-componente&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;60&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;61&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;62&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;63&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;64&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;65&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;66&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;67&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;68&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;69&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;70&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;71&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;72&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;73&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;74&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;75&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;76&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;77&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;78&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;79&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;80&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;81&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;82&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;83&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;84&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;85&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;86&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;87&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;88&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;89&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;90&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;91&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;92&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;93&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;94&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;95&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;96&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;97&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;98&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-vue&#34; data-lang=&#34;vue&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;audio-control&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;{{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;v-model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;volume&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;range&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;min&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;na&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;100&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;@change&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;=&amp;#34;handleVolumeChange&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;{{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;volume&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;setup&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;lang&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ts&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;computed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;onMounted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;onUnmounted&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;vue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;invoke&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;@tauri-apps/api/tauri&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;UnlistenFn&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;@tauri-apps/api/event&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Device&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;@/interfaces/device&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Props&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;interface&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Props&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;disabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?:&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;withDefaults&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;defineProps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Props&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;(),&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Audio Control&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;disabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// State&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;volume&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;devices&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Device&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;[]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;([]);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;isLoading&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ref&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Computed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;isActive&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;computed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;disabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isLoading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Métodos&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;loadVolume&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;isLoading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;volume&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;invoke&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;number&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;get_volume&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Error loading volume:&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;finally&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;isLoading&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;async&lt;/span&gt; &lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;handleVolumeChange&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;invoke&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;set_volume&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;level&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;volume&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Error setting volume:&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// Lifecycle&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;onMounted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;loadVolume&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// Escuchar cambios del sistema&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;listen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;volume_changed&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;volume&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;payload&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;number&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;onUnmounted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// Cleanup si es necesario&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;scoped&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;audio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;control&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ddd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;radius&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.5&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;audio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;control&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;h2&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rem&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.25&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;audio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;control&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bottom&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.5&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;rem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;audio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;control&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;align&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;666&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;h2 id=&#34;tipos-de-componentes&#34;&gt;Tipos de Componentes&lt;a href=&#34;#tipos-de-componentes&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;componentes-presentacionales-dumb&#34;&gt;Componentes Presentacionales (Dumb)&lt;a href=&#34;#componentes-presentacionales-dumb&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Solo reciben props y emiten eventos:&lt;/p&gt;</description>
			</item>
			<item>
				<title>D-Bus - Integracion con el sistema | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/dbus/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/dbus/</guid>
				<description>&lt;p&gt;Guía completa sobre D-Bus y cómo Vasak Desktop se integra con el sistema Linux.&lt;/p&gt;&#xA;&lt;h2 id=&#34;qué-es-d-bus&#34;&gt;¿Qué es D-Bus?&lt;a href=&#34;#qu%c3%a9-es-d-bus&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;D-Bus (Desktop Bus) es un sistema de comunicación entre procesos (IPC) estándar en Linux.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Comandos de Rust | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/commands-rust/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/commands-rust/</guid>
				<description>&lt;p&gt;Guía para desarrollar comandos IPC (Tauri) en Rust.&lt;/p&gt;&#xA;&lt;h2 id=&#34;concepto-comandos-tauri&#34;&gt;Concepto: Comandos Tauri&lt;a href=&#34;#concepto-comandos-tauri&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Los comandos son funciones Rust que se pueden llamar desde el frontend Vue.js a través de IPC.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Control | ActionButton</title>
				<link>https://os.vasak.net.ar/docs/devs/vue-libvasak/action-button/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vue-libvasak/action-button/</guid>
				<description>&lt;h2 id=&#34;actionbutton&#34;&gt;&lt;code&gt;ActionButton&lt;/code&gt;&lt;a href=&#34;#actionbutton&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Descripción&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Componente de botón genérico con variantes (&lt;code&gt;primary&lt;/code&gt;, &lt;code&gt;secondary&lt;/code&gt;, &lt;code&gt;danger&lt;/code&gt;), estados de carga y soporte para iconos.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Props&lt;/p&gt;</description>
			</item>
			<item>
				<title>Control | ToggleControl</title>
				<link>https://os.vasak.net.ar/docs/devs/vue-libvasak/toggle-control/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vue-libvasak/toggle-control/</guid>
				<description>&lt;h2 id=&#34;togglecontrol&#34;&gt;&lt;code&gt;ToggleControl&lt;/code&gt;&lt;a href=&#34;#togglecontrol&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Descripción&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Botón de acción con icono que muestra estados &lt;code&gt;isActive&lt;/code&gt; e &lt;code&gt;isLoading&lt;/code&gt;. Ideal para acciones rápidas (play/pause, encendido).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Props&lt;/p&gt;</description>
			</item>
			<item>
				<title>Solución de problemas</title>
				<link>https://os.vasak.net.ar/docs/user/troubleshooting/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/user/troubleshooting/</guid>
				<description>&lt;h2 id=&#34;problemas-de-inicio&#34;&gt;Problemas de Inicio&lt;a href=&#34;#problemas-de-inicio&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;la-aplicación-no-inicia&#34;&gt;La aplicación no inicia&lt;a href=&#34;#la-aplicaci%c3%b3n-no-inicia&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;síntoma&#34;&gt;Síntoma&lt;a href=&#34;#s%c3%adntoma&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h4&gt;&#xA;&lt;p&gt;Ejecutas &lt;code&gt;vasak-desktop&lt;/code&gt; pero nada sucede o se cierra inmediatamente.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Comandos del escritorio | vasak-desktop</title>
				<link>https://os.vasak.net.ar/docs/devs/vasak-desktop/commands-vasak-desktop/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vasak-desktop/commands-vasak-desktop/</guid>
				<description>&lt;p&gt;Comandos implementados en &lt;code&gt;vasak-desktop&lt;/code&gt; accesibles para nuevas funcionalidades dentro del escritorio&lt;/p&gt;&#xA;&lt;h2 id=&#34;audio&#34;&gt;Audio&lt;a href=&#34;#audio&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;get_audio_volume()&lt;/code&gt; - Obtener volumen actual&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;set_audio_volume(volume: u32)&lt;/code&gt; - Establecer volumen&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;toggle_audio_mute()&lt;/code&gt; - Alternar mute&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_audio_devices()&lt;/code&gt; - Listar dispositivos de audio&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;set_audio_device(device_id: String)&lt;/code&gt; - Cambiar dispositivo&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;toggle_audio_applet()&lt;/code&gt; - Mostrar/ocultar applet de audio&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;brillo&#34;&gt;Brillo&lt;a href=&#34;#brillo&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;get_brightness_info()&lt;/code&gt; - Información de brillo actual&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;set_brightness_info(brightness: u32)&lt;/code&gt; - Establecer brillo&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;notificaciones&#34;&gt;Notificaciones&lt;a href=&#34;#notificaciones&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;send_notify(notification: NotificationData)&lt;/code&gt; - Enviar notificación&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;clear_notifications()&lt;/code&gt; - Limpiar todas las notificaciones&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_all_notifications()&lt;/code&gt; - Obtener lista de notificaciones&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;delete_notification(id: String)&lt;/code&gt; - Eliminar notificación específica&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;invoke_notification_action(id: String, action: String)&lt;/code&gt; - Ejecutar acción&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;red&#34;&gt;Red&lt;a href=&#34;#red&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;toggle_network_applet()&lt;/code&gt; - Mostrar/ocultar applet de red&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;bluetooth&#34;&gt;Bluetooth&lt;a href=&#34;#bluetooth&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;toggle_bluetooth_applet()&lt;/code&gt; - Mostrar/ocultar applet de bluetooth&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;música-mpris&#34;&gt;Música (MPRIS)&lt;a href=&#34;#m%c3%basica-mpris&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;music_play_pause()&lt;/code&gt; - Play/Pause&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;music_next_track()&lt;/code&gt; - Siguiente pista&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;music_previous_track()&lt;/code&gt; - Pista anterior&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;music_now_playing()&lt;/code&gt; - Información de pista actual&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;búsqueda&#34;&gt;Búsqueda&lt;a href=&#34;#b%c3%basqueda&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;global_search(query: String)&lt;/code&gt; - Búsqueda global de aplicaciones&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;execute_search_result(result: SearchResult)&lt;/code&gt; - Ejecutar resultado&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;toggle_search()&lt;/code&gt; - Mostrar/ocultar búsqueda&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;atajos-de-teclado&#34;&gt;Atajos de Teclado&lt;a href=&#34;#atajos-de-teclado&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;get_shortcuts()&lt;/code&gt; - Obtener todos los atajos&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;update_shortcut(id: String, new_keys: Vec&amp;lt;String&amp;gt;)&lt;/code&gt; - Actualizar atajo&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;add_custom_shortcut(shortcut: CustomShortcut)&lt;/code&gt; - Añadir atajo personalizado&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;delete_shortcut(id: String)&lt;/code&gt; - Eliminar atajo&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;execute_shortcut(command: String)&lt;/code&gt; - Ejecutar comando de atajo&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;check_shortcut_conflicts(keys: Vec&amp;lt;String&amp;gt;)&lt;/code&gt; - Verificar conflictos&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sistema&#34;&gt;Sistema&lt;a href=&#34;#sistema&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;get_system_info()&lt;/code&gt; - Información del sistema&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_cpu_usage_only()&lt;/code&gt; - Uso de CPU&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_memory_usage_only()&lt;/code&gt; - Uso de memoria&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_system_config()&lt;/code&gt; - Configuración del sistema&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;set_system_config(config: SystemConfig)&lt;/code&gt; - Establecer configuración&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_current_system_state()&lt;/code&gt; - Estado actual del sistema&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;tema&#34;&gt;Tema&lt;a href=&#34;#tema&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;toggle_system_theme()&lt;/code&gt; - Alternar tema oscuro/claro&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_gtk_themes()&lt;/code&gt; - Listar temas GTK disponibles&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_cursor_themes()&lt;/code&gt; - Listar temas de cursor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;get_icon_packs()&lt;/code&gt; - Listar packs de iconos&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;sesión&#34;&gt;Sesión&lt;a href=&#34;#sesi%c3%b3n&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;logout()&lt;/code&gt; - Cerrar sesión&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;shutdown()&lt;/code&gt; - Apagar sistema&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;reboot()&lt;/code&gt; - Reiniciar sistema&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;suspend()&lt;/code&gt; - Suspender sistema&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;detect_display_server()&lt;/code&gt; - Detectar X11/Wayland&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ubicación&lt;/strong&gt;: Todos estos comandos están definidos en &lt;code&gt;src-tauri/src/commands/&lt;/code&gt; y registrados en &lt;code&gt;src-tauri/src/lib.rs&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Debugging</title>
				<link>https://os.vasak.net.ar/docs/devs/debugging/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/debugging/</guid>
				<description>&lt;p&gt;Técnicas y herramientas para depurar código en cualquier &lt;strong&gt;VAPP&lt;/strong&gt; el ejmplo utiliza &lt;code&gt;vasak-desktop&lt;/code&gt; con el fin de tener un caso de uso amplio.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Formulario | FormGroup</title>
				<link>https://os.vasak.net.ar/docs/devs/vue-libvasak/form-group/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vue-libvasak/form-group/</guid>
				<description>&lt;h2 id=&#34;formgroup&#34;&gt;&lt;code&gt;FormGroup&lt;/code&gt;&lt;a href=&#34;#formgroup&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Descripción&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Contenedor para etiquetas y campos de formulario. Provee espacio y estilos base para agrupar inputs.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Props&lt;/p&gt;</description>
			</item>
			<item>
				<title>Formulario | SliderControl</title>
				<link>https://os.vasak.net.ar/docs/devs/vue-libvasak/slider-control/</link>
				<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
				<guid>https://os.vasak.net.ar/docs/devs/vue-libvasak/slider-control/</guid>
				<description>&lt;h2 id=&#34;slidercontrol&#34;&gt;&lt;code&gt;SliderControl&lt;/code&gt;&lt;a href=&#34;#slidercontrol&#34; class=&#34;heading-anchor&#34; aria-label=&#34;Enlace a esta sección&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Descripción&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Control deslizante personalizado con icono, porcentaje calculado y opción de boton lateral.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Props&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
