feat(site-kit): SiteFooter renders the family footer the products kept writing themselves - #47
Merged
Merged
Conversation
…t writing themselves Three products carry a hand-written family footer. VisionLinq's says "the same three rows TraceLinq and AskLinq carry … site-kit's own SiteFooter takes only a flat link list; extending it is a dds release this page would then wait on." BookLinq's says nearly the same sentence. Their CSS for the rows had already converged byte-for-byte. Three copies and three notes naming the same missing release is the release being overdue, so here it is. SiteFooter now renders: - an optional language row — `locale`, `localeRegistry` (defaults to the family's fourteen), `onLocaleSelect` for a product that remembers the pick. Omitted, no row: a product whose header already offers every language does not want a second copy of the list. - `brand.logo`. The prop was already in SiteBrand and the footer silently dropped it, which is why AskLinq shipped without the family mark while every other product drew one — and why that looked like a design decision. - `family`, links after the brand name separated by middots that are aria-hidden, so a screen reader reads the names and not "dot". - the copyright in `<bdi>`, optionally linked. "© 2026 DevsLab" mixes neutral, digit and Latin runs, which the bidi algorithm reorders on an RTL page into "DevsLab 2026 ©"; both consumers had found this and isolated it separately. Additive: a caller passing only brand/links/copyright/messages keeps the single row it had, plus its mark. `styles.css` gains the three-row rules the consumers were each maintaining, so they can delete theirs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
가족 제품 셋이 각자 손으로 같은 푸터를 짜 놓고, 각자 "이건 kit을 고쳐야 하는데 그 릴리스를 기다려야 한다"고 주석에 적어 뒀습니다.
두 레포의 행 CSS는 이미 바이트 단위로 같아져 있었습니다. 사본 셋 + 같은 릴리스를 가리키는 메모 셋 = 그 릴리스가 늦은 것입니다. D-118("한 번이라도 쓰면 올린다")로 보면 만기가 세 번 지났습니다.
SiteFooter가 이제 그리는 것locale·localeRegistry(기본값 가족 14개)·onLocaleSelect(고른 값을 쿠키에 남기는 제품용). 안 넘기면 행이 안 나옵니다 — 헤더가 이미 전 언어를 제공하는 제품은 목록 사본을 하나 더 원하지 않습니다.brand.logo—SiteBrand에 이미 있던 prop을 푸터가 조용히 버리고 있었습니다. AskLinq만 가족 마크 없이 나가고 있었던 이유이고, 그게 마치 설계인 것처럼 보였던 이유입니다.family— 브랜드 이름 뒤에 가운뎃점으로 잇는 링크들. 점은aria-hidden이라 스크린리더는 이름만 읽습니다.<bdi>로 감싼 저작권(선택적copyrightHref).© 2026 DevsLab은 중립·숫자·라틴 런이 섞여 RTL 페이지에서DevsLab 2026 ©로 재배열됩니다 — 두 소비자가 각각 따로 발견해 따로 고쳐 뒀던 문제입니다.호환
덧붙이기만 합니다. brand/links/copyright/messages만 넘기던 호출부는 기존 한 행 그대로에 마크만 더해집니다.
styles.css에 세 행 규칙(.site-footer__langs·__row·__brand)이 들어가므로 소비자들은 자기 사본을 지울 수 있습니다.검증
pnpm run verify:site-kit:ui·pnpm run check(docs sync·consumer 벤더링 포함) 통과, 신규footer.test.tsx7/7. changeset 포함(minor → 0.7.0).다음
머지·발행 후 소비자 순서: AskLinq(오늘 어긋난 게 여기) → VisionLinq → BookLinq가 각자 사본 삭제. TraceLinq도 같은 사본을 들고 있으나 그 레포는 제가 건드리지 않는 곳이라 소유자 몫으로 남깁니다.