Skip to content

Commit 80c7017

Browse files
authored
make the search dialog more useful/attractive (#206)
* nest styles * start tweaking styles * tweak styles * tweaks * tweaks * prettier * fix keyboard activation * various * fix * tweak * more * fix fallback search results page
1 parent e7bc3cb commit 80c7017

File tree

16 files changed

+411
-298
lines changed

16 files changed

+411
-298
lines changed

apps/svelte.dev/src/routes/+layout.svelte

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@
2525
{#snippet top_nav()}
2626
<Nav title={data.nav_title} links={data.nav_links}>
2727
{#snippet search()}
28-
{#if $page.url.pathname !== '/search'}
29-
<Search />
30-
{/if}
28+
<Search />
3129
{/snippet}
3230

3331
{#snippet external_links()}

apps/svelte.dev/src/routes/content.json/+server.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ async function content() {
3131

3232
for (const document of docs) {
3333
const { slug, body, metadata } = document;
34+
const breadcrumbs = document.breadcrumbs.map((x) => removeMarkdown(x.title));
3435

3536
const sections = body.trim().split(/^## /m);
3637
const intro = sections?.shift()?.trim()!;

apps/svelte.dev/src/routes/search/+page.svelte

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
</svelte:head>
1010

1111
<main>
12-
<h1>Search</h1>
1312
<form>
1413
<input
1514
name="q"
@@ -26,30 +25,31 @@
2625

2726
<style>
2827
main {
29-
max-width: 48rem;
28+
--padding: 1rem;
29+
max-width: 64rem;
3030
margin: 0 auto;
3131
padding: 8rem 1rem;
32+
font-family: var(--sk-font-ui);
3233
}
3334
3435
form {
35-
--size: 4rem;
36+
--size: 2rem;
3637
position: relative;
3738
width: 100%;
38-
height: var(--size);
39-
margin: 0 0 2em 0;
39+
margin: 0 0 2rem 0;
4040
}
4141
4242
input {
4343
display: block;
4444
width: 100%;
4545
height: 100%;
4646
font-family: inherit;
47-
font-size: inherit;
48-
border: 1px solid var(--sk-back-5);
47+
font-size: var(--sk-text-xl);
48+
border: none;
49+
/* border: 1px solid var(--sk-back-5); */
4950
border-radius: var(--sk-border-radius);
50-
padding-left: var(--size);
51-
border-radius: var(--size);
52-
background: no-repeat 1rem 50% / 2rem 2rem url(/icons/search.svg);
51+
padding: 2rem 2rem 2rem 5rem;
52+
background: no-repeat 1rem 50% / 3rem 3rem url(/icons/search.svg);
5353
color: var(--sk-text-1);
5454
}
5555
</style>

packages/site-kit/src/lib/actions/focus.ts

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export function focusable_children(node: HTMLElement) {
22
const nodes: HTMLElement[] = Array.from(
33
node.querySelectorAll(
4-
'a[href], button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])'
4+
'a[href], button, input, textarea, select, summary, [tabindex]:not([tabindex="-1"])'
55
)
66
);
77

@@ -15,27 +15,29 @@ export function focusable_children(node: HTMLElement) {
1515
nodes[i].focus();
1616
};
1717

18-
return {
19-
next: (selector?: string) => {
20-
const reordered = [...nodes.slice(index + 1), ...nodes.slice(0, index + 1)];
18+
function traverse(d: number, selector?: string) {
19+
const reordered = [...nodes.slice(index), ...nodes.slice(0, index)];
20+
21+
let i = (reordered.length + d) % reordered.length;
22+
let node;
23+
24+
while ((node = reordered[i])) {
25+
i += d;
2126

22-
for (let i = 0; i < reordered.length; i += 1) {
23-
if (!selector || reordered[i].matches(selector)) {
24-
reordered[i].focus();
25-
return;
26-
}
27+
if (node.matches('details:not([open]) *')) {
28+
continue;
2729
}
28-
},
29-
prev: (selector?: string) => {
30-
const reordered = [...nodes.slice(index + 1), ...nodes.slice(0, index + 1)];
3130

32-
for (let i = reordered.length - 2; i >= 0; i -= 1) {
33-
if (!selector || reordered[i].matches(selector)) {
34-
reordered[i].focus();
35-
return;
36-
}
31+
if (!selector || node.matches(selector)) {
32+
node.focus();
33+
return;
3734
}
38-
},
35+
}
36+
}
37+
38+
return {
39+
next: (selector?: string) => traverse(1, selector),
40+
prev: (selector?: string) => traverse(-1, selector),
3941
update
4042
};
4143
}
Lines changed: 20 additions & 0 deletions
Loading
Lines changed: 20 additions & 0 deletions
Loading
Lines changed: 23 additions & 0 deletions
Loading
Lines changed: 23 additions & 0 deletions
Loading

packages/site-kit/src/lib/search/Search.svelte

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ Renders a search widget which when clicked (or the corresponding keyboard shortc
1212
<input
1313
value={q}
1414
oninput={(e) => {
15-
$searching = true;
1615
$search_query = e.currentTarget.value;
16+
$searching = true;
1717
e.currentTarget.value = '';
18+
e.currentTarget.blur();
1819
}}
1920
onmousedown={(event) => {
2021
event.preventDefault();

0 commit comments

Comments
 (0)