Skip to content

Commit 92fee31

Browse files
author
Oussama
committed
fix: make scene 4 medium focus unambiguous
1 parent aecb971 commit 92fee31

3 files changed

Lines changed: 82 additions & 29 deletions

File tree

website/src/lib/charts/MediumExplorer.svelte

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@
2929
3030
let filtered = $derived(filterRows(data, $filters));
3131
let panels = $derived(buildPanels(filtered));
32+
let visiblePanels = $derived(expanded ? panels.filter((panel) => panel.medium === expanded) : panels);
33+
34+
$effect(() => {
35+
if (expanded && !panels.some((panel) => panel.medium === expanded)) expanded = '';
36+
});
3237
3338
function filterRows(rows, state) {
3439
return rows.filter((row) => {
@@ -117,13 +122,15 @@
117122
<p>No works match these filters.</p>
118123
</div>
119124
{:else}
125+
{#if expanded}
126+
<div class="focus-row" aria-live="polite">
127+
<span>Focused medium: {expanded}</span>
128+
<button type="button" onclick={() => (expanded = '')}>Show all mediums</button>
129+
</div>
130+
{/if}
120131
<div class="medium-grid" class:has-expanded={expanded}>
121-
{#each panels as panel (panel.medium)}
122-
<article
123-
class:expanded={expanded === panel.medium}
124-
class:dimmed={expanded && expanded !== panel.medium}
125-
animate:flip={{ duration: 450 }}
126-
>
132+
{#each visiblePanels as panel (panel.medium)}
133+
<article class:expanded={expanded === panel.medium} animate:flip={{ duration: 450 }}>
127134
<button
128135
type="button"
129136
class="panel-button"

website/src/lib/charts/mediumExplorer.css

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,37 @@
44
gap: var(--space-2);
55
}
66

7+
.focus-row {
8+
display: flex;
9+
flex-wrap: wrap;
10+
gap: var(--space-1);
11+
align-items: center;
12+
justify-content: space-between;
13+
margin: var(--space-2) 0;
14+
padding: var(--space-1) var(--space-2);
15+
color: var(--fg-on-light-strong);
16+
background: color-mix(in srgb, var(--accent-primary) 9%, var(--bg-paper));
17+
border: 1px solid color-mix(in srgb, var(--accent-primary) 44%, var(--rule-on-light));
18+
font-family: var(--font-ui);
19+
font-size: var(--type-small-size);
20+
}
21+
22+
.focus-row button {
23+
border: 1px solid var(--accent-primary);
24+
padding: 0.375rem 0.5rem;
25+
color: var(--accent-primary);
26+
background: transparent;
27+
cursor: pointer;
28+
font-family: inherit;
29+
font-size: inherit;
30+
}
31+
32+
.focus-row button:hover,
33+
.focus-row button:focus-visible {
34+
color: var(--fg-on-dark-strong);
35+
background: var(--accent-primary);
36+
}
37+
738
.medium-grid article {
839
position: relative;
940
background: var(--bg-paper);
@@ -23,11 +54,6 @@
2354
pointer-events: none;
2455
}
2556

26-
.medium-grid article.dimmed {
27-
opacity: 0.6;
28-
scale: 0.98;
29-
}
30-
3157
.medium-grid article.expanded {
3258
grid-column: span 2;
3359
border-top-color: var(--accent-primary);

website/src/lib/scenes/Scene4Explorer.svelte

Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,31 @@
4040
/>
4141
<div class="filter-bar" aria-label="Explorer filters">
4242
<DecadeSlider {timeline} ariaLabel="Filter medium explorer by decade range" />
43-
<div class="chip-row">
44-
{#each departments as department}
45-
<button
46-
type="button"
47-
class:active={$filters.selectedDepartments.has(department)}
48-
onclick={() => toggleDepartment(department)}>{department}</button
49-
>
50-
{/each}
43+
<div class="filter-group">
44+
<p>Departments</p>
45+
<div class="chip-row">
46+
{#each departments as department}
47+
<button
48+
type="button"
49+
class:active={$filters.selectedDepartments.has(department)}
50+
onclick={() => toggleDepartment(department)}>{department}</button
51+
>
52+
{/each}
53+
</div>
5154
</div>
52-
<div class="chip-row">
53-
{#each regions as [region, color]}
54-
<button
55-
type="button"
56-
class="region-chip"
57-
class:active={$filters.selectedRegions.has(region)}
58-
style:--region-color={color}
59-
onclick={() => toggleRegion(region)}>{region}</button
60-
>
61-
{/each}
55+
<div class="filter-group">
56+
<p>Regions</p>
57+
<div class="chip-row">
58+
{#each regions as [region, color]}
59+
<button
60+
type="button"
61+
class="region-chip"
62+
class:active={$filters.selectedRegions.has(region)}
63+
style:--region-color={color}
64+
onclick={() => toggleRegion(region)}>{region}</button
65+
>
66+
{/each}
67+
</div>
6268
</div>
6369
<div class="applied">
6470
{#if $filters.selectedCountry}
@@ -112,6 +118,20 @@
112118
gap: var(--space-1);
113119
}
114120
121+
.filter-group {
122+
display: grid;
123+
gap: 0.375rem;
124+
}
125+
126+
.filter-group p {
127+
margin: 0;
128+
color: var(--fg-on-light-mute);
129+
font-family: var(--font-ui);
130+
font-size: var(--type-small-size);
131+
font-weight: 600;
132+
text-transform: uppercase;
133+
}
134+
115135
button {
116136
border: 1px solid var(--rule-on-light);
117137
padding: 0.375rem 0.5rem;

0 commit comments

Comments
 (0)