Files
iptvnator/libs/ui/styles/_portal-sidebar.scss
T
4grayandClaude Opus 5.5 c76cf357b7 refactor(workspace): remove standalone-layout branches no route can reach (#1889)
* refactor(workspace): remove standalone-layout branches no route can reach

Every routed view sits under the /workspace route (the other top-level
paths are redirects), so isWorkspaceLayoutRoute() was true for every
caller. Global search became a route on 2026-01-12 and the last route
outside the workspace went with the home component on 2026-03-02;
nothing opens SearchResultsComponent in a MatDialog.

Removed as unreachable:
- isWorkspaceLayoutRoute() and the route's data.layout marker; the
  channel list, Xtream live layout and unified collection read the q
  query param directly, the clear-view command no longer checks a flag
  that was always true, and the M3U EPG guide header action keeps only
  its supportsEpg gate.
- The playback sidebar's playlist header (Home button and playlist
  switcher, showPlaylistHeader, its stylesheet and the macOS padding
  rule). The switcher itself stays: the workspace header uses it.
- Xtream search's dialog mode (MAT_DIALOG_DATA initialQuery, dialogRef,
  close buttons) and inline search input; Back is offered whenever the
  search is not the global one, as before.
- Stalker search's inline-input flag (Back is always offered, as before).
- SearchLayoutComponent's showSearchInput, showCloseButton, closeClick,
  searchTermChange and focusSearchInput, and SearchFormComponent, which
  only it rendered.
- SETTINGS.BACK_TO_HOME and PORTALS.SEARCH in all 19 locales, the
  zoneless checklist entry for the deleted form, the specs that only
  covered these paths, and two Electron E2E assertions that the deleted
  form is absent.

Behaviour of every reachable path is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* refactor(ui): drop the macOS host class and switcher rule nothing uses

The app root's `macos-platform` host class only fed the removed sidebar
header's padding rule, so no stylesheet reads it any more. The shared
portal-sidebar partial's `.sidebar-header .switcher` rule matched no
element: the only `switcher` class lived in that removed header, which
used `.current-playlist`, not `.sidebar-header`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 11:07:57 +02:00

131 lines
3.9 KiB
SCSS

// ─── Shared sidebar + sidebar-header styles ───────────────────────────────────
// Plain CSS rules (not a mixin) used for M3U/legacy sidebar layouts.
//
// Choose the relative @use path from each consuming stylesheet. Current portal
// live layouts use the example below; other consumers may need a different
// depth. No alias is needed because this partial exports no callable members.
// @use '../../../../../../ui/styles/portal-sidebar';
@use 'focus-ring';
.sidebar {
// Width is controlled by the resizable directive
// Default fallback if directive not applied
width: 400px;
min-width: 250px;
max-width: 600px;
border-right: 1px solid var(--app-separator);
display: flex;
flex-direction: column;
flex-shrink: 0; // Prevent sidebar from shrinking
.sidebar-header {
padding: 8px 12px;
background: var(--app-widget-header-bg, var(--mat-sys-surface-container-high));
border-bottom: 1px solid var(--app-separator);
app-region: drag;
display: flex;
align-items: center;
gap: 8px;
flex-shrink: 0;
h2 {
margin: 0;
font-size: 0.94rem;
font-weight: 600;
letter-spacing: -0.01em;
color: var(--mat-sys-on-surface);
flex: 1;
}
button {
app-region: no-drag;
}
.manage-categories-btn {
margin-left: auto;
}
.category-heading {
display: flex;
align-items: baseline;
gap: 8px;
flex: 1;
min-width: 0;
}
.category-title {
margin: 0;
font-size: 0.94rem;
font-weight: 600;
letter-spacing: -0.01em;
color: var(--mat-sys-on-surface);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.category-count {
flex-shrink: 0;
font-size: 0.72rem;
font-weight: 500;
color: var(--mat-sys-on-surface-variant);
background: var(--mat-sys-surface-container);
padding: 2px 8px;
border-radius: 999px;
}
// Shown while the shell's categories rail is folded: the way back to
// the rail, in the same spot the rail's own chevron folded it from.
.sidebar-show-categories {
flex-shrink: 0;
margin-left: -6px;
}
// The category title as a dropdown trigger (categories rail folded).
// Same type as the static heading so folding the rail does not move
// the title; the caret is the only added ink.
.category-dropdown {
display: flex;
align-items: center;
gap: 8px;
flex: 1;
min-width: 0;
height: 32px;
padding: 0 4px 0 8px;
margin-left: -8px;
border: 1px solid transparent;
border-radius: 8px;
background: transparent;
color: inherit;
font: inherit;
cursor: pointer;
text-align: left;
app-region: no-drag;
.category-title {
flex: 0 1 auto;
min-width: 0;
}
&__caret {
flex-shrink: 0;
font-size: 18px;
width: 18px;
height: 18px;
color: var(--mat-sys-on-surface-variant);
}
&:hover,
&[aria-expanded='true'] {
background: var(--app-hover-overlay, rgba(255, 255, 255, 0.08));
border-color: var(--app-separator);
}
&:focus-visible {
@include focus-ring.focus-ring-declarations($offset: -2px);
}
}
}
}