Skip to content

Commit 358cfe3

Browse files
committed
fix: add TypeScript API search unit tests and improve styling for narrow viewports
1 parent 9cfa927 commit 358cfe3

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

src/frontend/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@
2828
"astro": "pnpm git-env && astro",
2929
"test": "pnpm test:unit && pnpm test:e2e",
3030
"test:all": "pnpm lint && pnpm test",
31-
"test:unit": "pnpm test:unit:contracts && pnpm test:unit:components && pnpm test:unit:docs && pnpm test:unit:api-markdown",
31+
"test:unit": "pnpm test:unit:contracts && pnpm test:unit:components && pnpm test:unit:docs && pnpm test:unit:api-markdown && pnpm test:unit:ts-api",
3232
"test:unit:api-markdown": "vitest run --config vitest.config.ts tests/unit/api-markdown.vitest.test.ts",
33+
"test:unit:ts-api": "vitest run --config vitest.config.ts tests/unit/ts-api-routes.vitest.test.ts tests/unit/ts-api-search.vitest.test.ts",
3334
"test:unit:contracts": "vitest run --config vitest.config.ts tests/unit/analytics-script-contracts.vitest.test.ts",
3435
"test:unit:components": "vitest run --config vitest.config.ts tests/unit/custom-components.vitest.test.ts tests/unit/site-tour.vitest.test.ts",
3536
"test:unit:docs": "vitest run --config vitest.config.ts tests/unit/filetree-format.vitest.test.ts",

src/frontend/src/components/api-reference/ApiSearchBar.astro

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,8 @@ const getKindClassName = (kind: string) => 'api-filter-dot kind-' + kind.replace
374374
.api-search-bar-unified .api-search-result-name {
375375
font-weight: 600;
376376
font-size: var(--api-text-md, 1.05rem);
377-
flex-shrink: 0;
377+
flex: 0 1 auto;
378+
min-width: 0;
378379
}
379380

380381
.api-search-bar-unified .api-kind-micro {
@@ -488,6 +489,29 @@ const getKindClassName = (kind: string) => 'api-filter-dot kind-' + kind.replace
488489
border-color: var(--sl-color-accent);
489490
}
490491

492+
@media (max-width: 48rem) {
493+
.api-search-bar-unified .api-search-result .api-list-header {
494+
display: grid;
495+
grid-template-columns: minmax(0, 1fr) auto;
496+
align-items: start;
497+
gap: 0.35rem 0.5rem;
498+
}
499+
500+
.api-search-bar-unified .api-search-result .api-result-name-wrap {
501+
display: flex;
502+
width: 100%;
503+
max-width: 100%;
504+
min-width: 0;
505+
}
506+
507+
.api-search-bar-unified .api-search-result .trailing {
508+
grid-column: 1 / -1;
509+
width: 100%;
510+
min-width: 0;
511+
margin-left: 0;
512+
}
513+
}
514+
491515
@media (max-width: 480px) {
492516
.api-search-bar-unified .api-filter-chip {
493517
font-size: 0.72rem;
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { expect, test } from '@playwright/test';
2+
import { dismissCookieConsentIfVisible, isNarrowViewport } from '@tests/e2e/helpers';
3+
4+
test('TypeScript API search keeps result names visible on narrow viewports', async ({ page }) => {
5+
test.skip(!isNarrowViewport(page), 'This regression only applies to narrow/mobile viewports.');
6+
7+
await page.goto('/reference/api/typescript/?q=withBun');
8+
await dismissCookieConsentIfVisible(page);
9+
10+
const results = page.locator('#ts-api-search-results .api-search-result');
11+
await expect(results).toHaveCount(1);
12+
13+
const firstResult = results.first();
14+
const resultName = firstResult.locator('.api-search-result-name');
15+
const resultKind = firstResult.locator('.api-kind-micro');
16+
const resultPackage = firstResult.locator('.trailing .api-list-meta');
17+
18+
await expect(firstResult).toBeVisible();
19+
await expect(resultName).toHaveText('withBun');
20+
await expect(resultName).toBeVisible();
21+
await expect(resultKind).toContainText(/method/i);
22+
await expect(resultKind).toBeVisible();
23+
await expect(resultPackage).toContainText('Aspire.Hosting.JavaScript');
24+
await expect(resultPackage).toBeVisible();
25+
26+
await expect
27+
.poll(async () => {
28+
const box = await resultName.boundingBox();
29+
return Math.round(box?.width ?? 0);
30+
})
31+
.toBeGreaterThan(20);
32+
});

0 commit comments

Comments
 (0)