Skip to content

Commit a5aa182

Browse files
committed
indeterminate sidebar toggle
1 parent af98e30 commit a5aa182

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

public/style.css

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,22 @@ main {
100100
appearance: none;
101101
display: flex;
102102
align-items: center;
103+
justify-content: center;
103104
margin: 0;
104105
padding: 2px;
105106
cursor: pointer;
106107
z-index: 2;
107108
color: var(--theme-foreground-faint);
109+
font-weight: 700;
108110
font-size: 20px;
109111
}
110112

111113
#observablehq-sidebar-toggle::before {
112-
content: "≡";
114+
content: "⟩";
115+
}
116+
117+
#observablehq-sidebar-toggle:checked::before {
118+
content: "⟨";
113119
}
114120

115121
.observablehq-link a {
@@ -162,10 +168,16 @@ main {
162168
#observablehq-sidebar {
163169
transition: none;
164170
}
165-
#observablehq-sidebar-toggle:checked + #observablehq-sidebar {
171+
#observablehq-sidebar-toggle:indeterminate::before {
172+
content: "⟨";
173+
}
174+
#observablehq-sidebar-toggle:checked + #observablehq-sidebar,
175+
#observablehq-sidebar-toggle:indeterminate + #observablehq-sidebar {
176+
left: 0;
166177
box-shadow: none;
167178
}
168-
#observablehq-sidebar-toggle:checked ~ #observablehq-center {
179+
#observablehq-sidebar-toggle:checked ~ #observablehq-center,
180+
#observablehq-sidebar-toggle:indeterminate ~ #observablehq-center {
169181
padding-left: calc(240px + 3rem);
170182
}
171183
pre {

src/render.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,15 @@ ${
9797
.join("")}
9898
</ol>
9999
</nav>
100-
<script>document.querySelector("#observablehq-sidebar-toggle").checked = matchMedia("(min-width: calc(640px + 4rem + 0.5rem + 240px + 2rem))").matches;</script>
100+
<script>{
101+
const toggle = document.querySelector("#observablehq-sidebar-toggle");
102+
let indeterminate = toggle.indeterminate = true;
103+
toggle.onclick = () => {
104+
const matches = matchMedia("(min-width: calc(640px + 4rem + 0.5rem + 240px + 2rem))").matches;
105+
if (indeterminate) toggle.checked = !matches, indeterminate = false;
106+
else if (toggle.checked === matches) toggle.indeterminate = indeterminate = true;
107+
};
108+
}</script>
101109
`
102110
: ""
103111
}<div id="observablehq-center">

0 commit comments

Comments
 (0)