2025-07-08 12:20:29 +00:00

130 lines
67 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-Developers/ui-features" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.8.1">
<title data-rh="true">UI Features documentation | Television</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://alexpasmantier.github.io/television/img/tv-social.png"><meta data-rh="true" name="twitter:image" content="https://alexpasmantier.github.io/television/img/tv-social.png"><meta data-rh="true" property="og:url" content="https://alexpasmantier.github.io/television/docs/Developers/ui-features"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="UI Features documentation | Television"><meta data-rh="true" name="description" content="Table of Contents"><meta data-rh="true" property="og:description" content="Table of Contents"><link data-rh="true" rel="icon" href="/television/img/tv-icon-150.png"><link data-rh="true" rel="canonical" href="https://alexpasmantier.github.io/television/docs/Developers/ui-features"><link data-rh="true" rel="alternate" href="https://alexpasmantier.github.io/television/docs/Developers/ui-features" hreflang="en"><link data-rh="true" rel="alternate" href="https://alexpasmantier.github.io/television/docs/Developers/ui-features" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"UI Features documentation","item":"https://alexpasmantier.github.io/television/docs/Developers/ui-features"}]}</script><link rel="stylesheet" href="/television/assets/css/styles.cc1a39b4.css">
<script src="/television/assets/js/runtime~main.36d23f4d.js" defer="defer"></script>
<script src="/television/assets/js/main.1e6bd98c.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t="dark";var e=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",e||t),document.documentElement.setAttribute("data-theme-choice",e||t)}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><link rel="preload" as="image" href="/television/img/tv-icon-80.png"><div role="region" aria-label="Skip to main content"><a class="skipToContent_nod4" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/television/"><div class="navbar__logo"><img src="/television/img/tv-icon-80.png" alt="Television Logo" class="themedComponent_rgZj themedComponent--light_hdxy"><img src="/television/img/tv-icon-80.png" alt="Television Logo" class="themedComponent_rgZj themedComponent--dark_Iwy7"></div><b class="navbar__title text--truncate">Television</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/television/docs/Users/installation">docs</a><a href="https://github.com/alexpasmantier/television/releases" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">releases<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_dOts"><use href="#theme-svg-external-link"></use></svg></a><a href="https://crates.io/crates/television" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">crates.io<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_dOts"><use href="#theme-svg-external-link"></use></svg></a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/alexpasmantier/television" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" class="iconExternalLink_dOts"><use href="#theme-svg-external-link"></use></svg></a><div class="navbarSearchContainer_VxOy"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_HR2q"><div class="docsWrapper_uElw"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_IzB1" type="button"></button><div class="docRoot_MWdD"><aside class="theme-doc-sidebar-container docSidebarContainer_AJtF"><div class="sidebarViewport_usFm"><div class="sidebar_HC93"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_BnDX"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/television/docs/Users/installation">Users</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role="button" aria-expanded="true" href="/television/docs/Developers/ARCHITECTURE">Developers</a></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/television/docs/Developers/ARCHITECTURE">Architecture Documentation</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/television/docs/Developers/ui-features">UI Features documentation</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/television/docs/Developers/patch-notes">Release notes for television 0.12.0</a></li></ul></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_I1Io"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_KwG0"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_yFTf"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_QLDD"><div class="docItemContainer_Hqnr"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_eD4m" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/television/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YhwE"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">Developers</span></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">UI Features documentation</span></li></ul></nav><div class="tocCollapsible_Qf8d theme-doc-toc-mobile tocMobile_mt20"><button type="button" class="clean-btn tocCollapsibleButton_Hr9f">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>UI Features documentation</h1></header>
<p><strong>Table of Contents</strong></p>
<ul>
<li><a href="#overview">Overview</a></li>
<li><a href="#architecture">Architecture</a></li>
<li><a href="#feature-components">Feature Components</a></li>
<li><a href="#state-management">State Management</a></li>
<li><a href="#configuration-system">Configuration System</a></li>
<li><a href="#examples">Examples</a></li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_Fogf" id="overview">Overview<a href="#overview" class="hash-link" aria-label="Direct link to Overview" title="Direct link to Overview"></a></h2>
<p>The UI Features System allows control over UI components using two properties:</p>
<ul>
<li><strong>Enabled/Disabled</strong>: Whether the feature&#x27;s functionality is available</li>
<li><strong>Visible/Hidden</strong>: Whether the feature is displayed in the interface</li>
</ul>
<p>This design pattern allows for UI management where features can exist in three meaningful states: <strong>Active</strong> (enabled and visible), <strong>Hidden</strong> (enabled but not visible), and <strong>Disabled</strong> (completely inactive).</p>
<h2 class="anchor anchorWithStickyNavbar_Fogf" id="architecture">Architecture<a href="#architecture" class="hash-link" aria-label="Direct link to Architecture" title="Direct link to Architecture"></a></h2>
<p>UI Features sit at the intersection of several core Television modules, acting as a central coordination point for UI state management.</p>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="context-diagram">Context Diagram<a href="#context-diagram" class="hash-link" aria-label="Direct link to Context Diagram" title="Direct link to Context Diagram"></a></h3>
<div class="language-text codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-text codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token plain">┌────────────┐ ┌────────────────────┐ ┌───────────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ CLI Module │───►│ UI Features System │◄───│ Config Module │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">└────────────┘ └────────────────────┘ └───────────────┘</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> ┌───────────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ Screen/Layout │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ Module │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> └───────────────┘</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> ┌───────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ UI Render │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ System │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> └───────────┘</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_Fogf" id="feature-components">Feature Components<a href="#feature-components" class="hash-link" aria-label="Direct link to Feature Components" title="Direct link to Feature Components"></a></h2>
<p>It currently supports four primary UI features, each with distinct functionality and use cases.</p>
<p>In this view you can see the <code>Preview</code>, <code>Help Panel</code>, and <code>Status Bar</code></p>
<div class="language-text codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-text codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token plain">╭──────────────────────── Channel ─────────────────────────╮╭───────────────────────── PREVIEW ────────────────────────╮</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">&gt; 1 / 1 ││ ▲│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">╰──────────────────────────────────────────────────────────╯│ █│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">╭──────────────────────── Results ─────────────────────────╮│ ║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">&gt; TELEVISION ││ ║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ ║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ ║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ ║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ ╭─────────────── Help ────────────────╮║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Global │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Quit: Esc │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Quit: Ctrl-c │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Toggle preview: Ctrl-o │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Toggle help: Ctrl-h │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Toggle status bar: F12 │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Channel │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Navigate up: Up │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Navigate up: Ctrl-p │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Navigate up: Ctrl-k │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Navigate down: Down │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Navigate down: Ctrl-n │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ Navigate down: Ctrl-j │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ │ ... │║│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ││ ╰─────────────────────────────────────╯▼│</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">╰──────────────────────────────────────────────────────────╯╰──────────────────────────────────────────────────────────╯</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> CHANNEL custom [Hint] Remote Control: Ctrl-t • Hide Preview: Ctrl-o • Help: Ctrl-h v0.00.0</span><br></span></code></pre></div></div>
<p>And here you can see the <code>Remote Control</code></p>
<div class="language-text codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-text codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token plain">╭────────────────────────────────────────────────────── Channel ───────────────────────────────────────────────────────╮</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">&gt; 1 / 1 │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">╭────────────────────────────────────────────────────── Results ───────────────────────────────────────────────────────╮</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">&gt; TELEVISION │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ╭──────── Channels ─────────╮╭────── Description ───────╮ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │&gt; alias ││A channel to select from │ _____________ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││shell aliases │ / \ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | (*) (#) | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | (1) (2) (3) | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | (4) (5) (6) | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | (7) (8) (9) | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | _ | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | | | | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | (_¯(0)¯_) | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | | | | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | ¯ | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │ ││ │ | === === === | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ╰───────────────────────────╯╰──────────────────────────╯ | | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ╭───────── Search ──────────╮╭─── Requirements [OK] ────╮ | TV | │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │&gt; ││ │ `-------------´</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ ╰───────────────────────────╯╰──────────────────────────╯ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> REMOTE [Hint] Back to Channel: Ctrl-t • Help: Ctrl-h v0.00.0</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="preview-panel">Preview Panel<a href="#preview-panel" class="hash-link" aria-label="Direct link to Preview Panel" title="Direct link to Preview Panel"></a></h3>
<p>Displays contextual information about the currently selected entry</p>
<p><strong>Default State</strong>: Enabled and Visible
<strong>Configuration Files options</strong>:</p>
<ul>
<li><code>size</code>: Width percentage (1-99)</li>
<li><code>header</code>: Optional template for panel header</li>
<li><code>footer</code>: Optional template for panel footer</li>
<li><code>scrollbar</code>: Whether to show scroll indicators</li>
</ul>
<p><strong>CLI Flags</strong>: <code>--no-preview</code>, <code>--hide-preview</code>, <code>--show-preview</code>, <code>--preview-*</code> flags</p>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="status-bar">Status Bar<a href="#status-bar" class="hash-link" aria-label="Direct link to Status Bar" title="Direct link to Status Bar"></a></h3>
<p>Shows application status, mode information, and available actions</p>
<p><strong>Default State</strong>: Enabled and Visible
<strong>Configuration</strong>:</p>
<ul>
<li><code>separator_open</code>: Opening separator character/string</li>
<li><code>separator_close</code>: Closing separator character/string</li>
</ul>
<p><strong>CLI Controls</strong>: <code>--no-status-bar</code>, <code>--hide-status-bar</code>, <code>--show-status-bar</code></p>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="help-panel">Help Panel<a href="#help-panel" class="hash-link" aria-label="Direct link to Help Panel" title="Direct link to Help Panel"></a></h3>
<p>Displays contextual help and keyboard shortcuts</p>
<p><strong>Default State</strong>: Enabled but Hidden
<strong>Configuration</strong>:</p>
<ul>
<li><code>show_categories</code>: Whether to group shortcuts by category</li>
</ul>
<p><strong>CLI Controls</strong>: <code>--no-help-panel</code>, <code>--hide-help-panel</code>, <code>--show-help-panel</code></p>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="remote-control">Remote Control<a href="#remote-control" class="hash-link" aria-label="Direct link to Remote Control" title="Direct link to Remote Control"></a></h3>
<p>Provides channel switching and management interface</p>
<p><strong>Default State</strong>: Enabled but Hidden
<strong>Configuration</strong>:</p>
<ul>
<li><code>show_channel_descriptions</code>: Include channel descriptions in listing</li>
<li><code>sort_alphabetically</code>: Sort channels alphabetically vs. by usage</li>
</ul>
<p><strong>CLI Controls</strong>: <code>--no-remote</code>, <code>--hide-remote</code>, <code>--show-remote</code></p>
<h2 class="anchor anchorWithStickyNavbar_Fogf" id="state-management">State Management<a href="#state-management" class="hash-link" aria-label="Direct link to State Management" title="Direct link to State Management"></a></h2>
<p>Logical state transitions with are enforced with built-in constraints:</p>
<div class="language-text codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-text codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token plain">┌─────────────┐ enable() ┌─────────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ Disabled │────────────────►│ Active │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ enabled=F │ │ enabled=T │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">│ visible=F │ │ visible=T │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">└─────────────┘ └─────────────┘</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> ▲ │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ │ hide()</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ ▼</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ ┌─────────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> └────────────────────────│ Hidden │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> disable() │ enabled=T │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ visible=F │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> └─────────────┘</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ show()</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> ┌─────────────┐</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ Active │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ enabled=T │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> │ visible=T │</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"> └─────────────┘</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_Fogf" id="configuration-system">Configuration System<a href="#configuration-system" class="hash-link" aria-label="Direct link to Configuration System" title="Direct link to Configuration System"></a></h2>
<p>The UI Features system configuration follows a layered priority system:</p>
<ol>
<li><strong>CLI Flags</strong> (Highest Priority)</li>
<li><strong>Channel Configuration</strong></li>
<li><strong>User Configuration File</strong></li>
<li><strong>Built-in Defaults</strong> (Lowest Priority)</li>
</ol>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="configuration-formats">Configuration Formats<a href="#configuration-formats" class="hash-link" aria-label="Direct link to Configuration Formats" title="Direct link to Configuration Formats"></a></h3>
<p><strong>TOML Configuration Syntax</strong></p>
<div class="language-toml codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-toml codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token table class-name">ui.features</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">preview_panel</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">help_panel</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">status_bar</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">remote_control</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token table class-name">ui.preview_panel</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">size</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token number">50</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">header</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;{}&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">footer</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">scrollbar</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token table class-name">ui.status_bar</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">separator_open</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">separator_close</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">&quot;&quot;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token table class-name">ui.remote_control</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">show_channel_descriptions</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">sort_alphabetically</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="configuration-inheritance">Configuration Inheritance<a href="#configuration-inheritance" class="hash-link" aria-label="Direct link to Configuration Inheritance" title="Direct link to Configuration Inheritance"></a></h3>
<p><strong>User Global Configuration</strong></p>
<div class="language-toml codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-toml codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># ~/.config/television/config.toml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token table class-name">ui.features</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">help_panel</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># Always show help for learning</span><br></span></code></pre></div></div>
<p><strong>Channel-Level Configuration</strong></p>
<div class="language-toml codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-toml codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># ~/.config/television/cable/development.toml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token table class-name">ui.features</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">preview_panel</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">status_bar</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># Hidden by default for focus</span><br></span></code></pre></div></div>
<p><strong>Runtime Override Examples</strong></p>
<div class="language-bash codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-bash codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Override channel defaults</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">tv development --show-status-bar --hide-preview</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Force features on/off</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">tv files --no-remote --show-help-panel</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Mixed visibility control</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">tv git-log --hide-status-bar --show-preview</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="default-ui-feature-states">Default UI Feature States<a href="#default-ui-feature-states" class="hash-link" aria-label="Direct link to Default UI Feature States" title="Direct link to Default UI Feature States"></a></h3>
<table><thead><tr><th>UI Feature</th><th>Default Enabled</th><th>Default Visible</th><th>Rationale</th></tr></thead><tbody><tr><td><strong>Preview Panel</strong></td><td></td><td></td><td>Core functionality</td></tr><tr><td><strong>Status Bar</strong></td><td></td><td></td><td>Shows mode and contextual hint to the user</td></tr><tr><td><strong>Help Panel</strong></td><td></td><td></td><td>Available on-demand to avoid clutter</td></tr><tr><td><strong>Remote Control</strong></td><td></td><td></td><td>Available on-demand, disrupts regular operation</td></tr></tbody></table>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="feature-state-persistence">Feature State Persistence<a href="#feature-state-persistence" class="hash-link" aria-label="Direct link to Feature State Persistence" title="Direct link to Feature State Persistence"></a></h3>
<p><strong>What Persists Across Sessions</strong></p>
<ul>
<li><strong>Configuration file settings</strong> - Feature states defined in <code>~/.config/television/config.toml</code></li>
<li><strong>Channel-specific defaults</strong> - Feature configurations built into channel definitions</li>
</ul>
<p><strong>What Does Not Persist</strong></p>
<ul>
<li><strong>Runtime toggles</strong> - Keyboard shortcuts like <code>Tab</code> (preview) or <code>F2</code> (status bar) are session-only</li>
<li><strong>CLI flag overrides</strong> - <code>--hide-preview</code>, <code>--show-status-bar</code> etc. apply only to current session</li>
<li><strong>Temporary state changes</strong> - Any feature visibility changes made during application use</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_Fogf" id="examples">Examples<a href="#examples" class="hash-link" aria-label="Direct link to Examples" title="Direct link to Examples"></a></h2>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="basic-feature-control">Basic Feature Control<a href="#basic-feature-control" class="hash-link" aria-label="Direct link to Basic Feature Control" title="Direct link to Basic Feature Control"></a></h3>
<p><strong>Hide Preview Panel</strong></p>
<div class="language-bash codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-bash codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token plain">tv files --hide-preview</span><br></span></code></pre></div></div>
<p><strong>Disable All Optional Features</strong></p>
<div class="language-bash codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-bash codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token plain">tv files --no-preview --no-status-bar --no-remote --no-help-panel</span><br></span></code></pre></div></div>
<p><strong>Show All Features</strong></p>
<div class="language-bash codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-bash codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token plain">tv files --show-preview --show-status-bar --show-help-panel</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="channel-specific-configuration">Channel-Specific Configuration<a href="#channel-specific-configuration" class="hash-link" aria-label="Direct link to Channel-Specific Configuration" title="Direct link to Channel-Specific Configuration"></a></h3>
<p><strong>Create Development Channel with Custom Features</strong></p>
<div class="language-toml codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-toml codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># ~/.config/television/cable/dev-focused.toml</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token table class-name">ui.features</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">preview_panel</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">status_bar</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># Clean interface</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">help_panel</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token key property">visible</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># Help on-demand</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token key property">remote_control</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token key property">enabled</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">=</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)"># Single-channel focus</span><br></span></code></pre></div></div>
<p><strong>Usage</strong></p>
<div class="language-bash codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-bash codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token plain">tv dev-focused /path/to/project</span><br></span></code></pre></div></div>
<h3 class="anchor anchorWithStickyNavbar_Fogf" id="runtime-feature-management">Runtime Feature Management<a href="#runtime-feature-management" class="hash-link" aria-label="Direct link to Runtime Feature Management" title="Direct link to Runtime Feature Management"></a></h3>
<p><strong>Quick Interface Cleanup</strong></p>
<div class="language-bash codeBlockContainer_MbdR theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_WPSJ"><pre tabindex="0" class="prism-code language-bash codeBlock_ke8T thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_oe7S"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Start with full interface</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">tv files</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Runtime toggles (using default keybindings):</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Ctrl+O - Toggle preview panel</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># F12 - Toggle status bar</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Ctrl-H - Toggle help panel</span><br></span></code></pre></div></div></div></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/television/docs/Developers/ARCHITECTURE"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Architecture Documentation</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/television/docs/Developers/patch-notes"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Release notes for television 0.12.0</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_sLnf thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#overview" class="table-of-contents__link toc-highlight">Overview</a></li><li><a href="#architecture" class="table-of-contents__link toc-highlight">Architecture</a><ul><li><a href="#context-diagram" class="table-of-contents__link toc-highlight">Context Diagram</a></li></ul></li><li><a href="#feature-components" class="table-of-contents__link toc-highlight">Feature Components</a><ul><li><a href="#preview-panel" class="table-of-contents__link toc-highlight">Preview Panel</a></li><li><a href="#status-bar" class="table-of-contents__link toc-highlight">Status Bar</a></li><li><a href="#help-panel" class="table-of-contents__link toc-highlight">Help Panel</a></li><li><a href="#remote-control" class="table-of-contents__link toc-highlight">Remote Control</a></li></ul></li><li><a href="#state-management" class="table-of-contents__link toc-highlight">State Management</a></li><li><a href="#configuration-system" class="table-of-contents__link toc-highlight">Configuration System</a><ul><li><a href="#configuration-formats" class="table-of-contents__link toc-highlight">Configuration Formats</a></li><li><a href="#configuration-inheritance" class="table-of-contents__link toc-highlight">Configuration Inheritance</a></li><li><a href="#default-ui-feature-states" class="table-of-contents__link toc-highlight">Default UI Feature States</a></li><li><a href="#feature-state-persistence" class="table-of-contents__link toc-highlight">Feature State Persistence</a></li></ul></li><li><a href="#examples" class="table-of-contents__link toc-highlight">Examples</a><ul><li><a href="#basic-feature-control" class="table-of-contents__link toc-highlight">Basic Feature Control</a></li><li><a href="#channel-specific-configuration" class="table-of-contents__link toc-highlight">Channel-Specific Configuration</a></li><li><a href="#runtime-feature-management" class="table-of-contents__link toc-highlight">Runtime Feature Management</a></li></ul></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer"><div class="container container-fluid"><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2025 alexpasmantier</div></div></div></footer></div>
</body>
</html>