Commit graph

14 commits

Author SHA1 Message Date
be9b0ac994 chore(blog-search): add astro/check dep, plan, and follow-up note
- @astrojs/check + typescript bump are needed to run `npx astro check`,
  which is the type-verification command used throughout this branch.
- docs/superpowers/plans/ pairs with the existing spec under specs/.
- docs/superpowers/follow-ups/ records the featured-match behaviour
  change surfaced during manual test; addresses in a later branch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 01:54:46 +10:00
d80cd255d4 fix(blog): make .is-hidden global, strip HTML tags from search text, add role=search
Final-review findings:

- .is-hidden was scoped to blog/index.astro, so it didn't match PostRow
  or YearHead roots (which carry their own component scope hashes). Net
  effect: the filter visibly only hid the featured article, while all
  archive rows + year heads stayed on screen. Wrap in :global() so the
  runtime-toggled class actually fires its display rule everywhere.
- buildSearchText regex stripped > but not <, so inline HTML open-tags
  like <span class="leadin"> leaked into data-search. Add < to the
  character class so the haystack stays plain text.
- Add role="search" landmark to the BlogSearch wrapper so screen-reader
  users can navigate to it directly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 01:45:27 +10:00
75e7859146 chore(blog): guard keydown for IME composition and <select>
Code review forward-proofing:
- Early-return on event.isComposing so the / shortcut doesn't disrupt
  IME composition (multi-keystroke input methods).
- Treat <select> as editable so / doesn't steal focus while a dropdown
  is open and the user is typing to seek.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 01:35:53 +10:00
963ea56314 feat(blog): / focuses search, Esc clears and blurs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 01:32:08 +10:00
468d4e460d feat(blog): live in-page filter via data-search attributes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 01:27:02 +10:00
8423759f03 fix(blog): drop duplicated hairline and align class names
Code review nits:
- .bsearch border-bottom + .feature border-top rendered a doubled
  hairline; removed the bottom border (feature's top is sufficient).
- Renamed bsearch__input / bsearch__hint to binput / bhint to match
  the project's flat single-class convention (postrow, pdate, yr, ln).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 01:25:26 +10:00
8f12b3afe5 fix(blog): use curly quotes around empty-state query span
Spec called for U+201C / U+201D; commit d7dc22d landed ASCII quotes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 01:17:04 +10:00
d7dc22d0c8 feat(blog): render search input, empty-state, hidden utility
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 01:10:27 +10:00
5ac622e576 feat(blog): build per-post searchText, wire to PostRow and featured
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 00:21:34 +10:00
44d4d327a1 feat(blog): YearHead emits data-year-head for filter targeting 2026-06-02 00:18:20 +10:00
9158207657 chore(blog): reorder PostRow props to group required before optional
Code review nit: searchText (required) was appended after the optional
deck/tag, breaking the required-then-optional convention used by the
rest of the interface.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-02 00:10:25 +10:00
cc04ea7753 feat(blog): PostRow accepts searchText, emits data-search 2026-06-02 00:08:25 +10:00
9e8dfaedb7 docs: spec for light blog search
Tiny client-side filter on /blog using data-search attributes on each
row. No new deps, no JSON index, no React island. Filters in place
within the year-grouped archive.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-01 23:45:06 +10:00
3ba76b4f02 initial commit 2026-06-01 19:35:56 +10:00