| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -276,10 +276,14 @@ onMounted(() => { | |||
| 276 | 276 | class="row__specimen" | |
| 277 | 277 | :style="{ fontFamily: `'${row.item.family}', var(--font-display)` }" | |
| 278 | 278 | >{{ row.item.family }}</span> | |
| 279 | + {{ ' ' }} | ||
| 279 | 280 | <span class="row__meta">{{ row.item.providers.join(' · ') }}</span> | |
| 280 | 281 | </template> | |
| 281 | 282 | <template v-else> | |
| 283 | + <!-- Vue condenses whitespace between elements, so the separator is explicit or the | ||
| 284 | + label and the hint concatenate when the option is read out. --> | ||
| 282 | 285 | <span class="row__label">{{ row.item.label }}</span> | |
| 286 | + {{ ' ' }} | ||
| 283 | 287 | <span class="row__meta">{{ row.item.hint }}</span> | |
| 284 | 288 | </template> | |
| 285 | 289 | </li> | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,6 +9,8 @@ const { data: credits } = await useFetch<ContributorsResponse>('/api/v1/contribu | |||
| 9 | 9 | }) | |
| 10 | 10 | ||
| 11 | 11 | const contributors = computed(() => credits.value?.contributors ?? []) | |
| 12 | + // The API sorts by commit count, so the first entry leads. | ||
| 13 | + const top = computed(() => contributors.value[0]!) | ||
| 12 | 14 | </script> | |
| 13 | 15 | ||
| 14 | 16 | <template> | |
@@ -29,36 +31,31 @@ const contributors = computed(() => credits.value?.contributors ?? []) | |||
| 29 | 31 | v-if="contributors.length" | |
| 30 | 32 | class="credits" | |
| 31 | 33 | > | |
| 32 | - <ul | ||
| 33 | - class="credits__list" | ||
| 34 | - aria-label="Contributors" | ||
| 34 | + <!-- A link per avatar is a link and a list item per person once the styles are gone, so the | ||
| 35 | + row is decorative and the sentence below carries the same information as text. --> | ||
| 36 | + <div | ||
| 37 | + class="credits__row" | ||
| 38 | + aria-hidden="true" | ||
| 35 | 39 | > | |
| 36 | - <li | ||
| 40 | + <img | ||
| 37 | 41 | v-for="person in contributors" | |
| 38 | 42 | :key="person.login" | |
| 43 | + class="credits__avatar" | ||
| 44 | + :src="person.avatar" | ||
| 45 | + alt="" | ||
| 46 | + width="28" | ||
| 47 | + height="28" | ||
| 48 | + loading="lazy" | ||
| 49 | + decoding="async" | ||
| 39 | 50 | > | |
| 40 | - <!-- The avatar carries no text of its own, so the link is labelled instead. --> | ||
| 41 | - <a | ||
| 42 | - class="credits__person" | ||
| 43 | - :href="person.url" | ||
| 44 | - :aria-label="`${person.login}, ${person.contributions} ${person.contributions === 1 ? 'commit' : 'commits'}`" | ||
| 45 | - > | ||
| 46 | - <img | ||
| 47 | - class="credits__avatar" | ||
| 48 | - :src="person.avatar" | ||
| 49 | - alt="" | ||
| 50 | - width="28" | ||
| 51 | - height="28" | ||
| 52 | - loading="lazy" | ||
| 53 | - decoding="async" | ||
| 54 | - > | ||
| 55 | - </a> | ||
| 56 | - </li> | ||
| 57 | - </ul> | ||
| 58 | - <a | ||
| 59 | - class="credits__all" | ||
| 60 | - href="https://github.com/unjs/unifont/graphs/contributors" | ||
| 61 | - >all contributors</a> | ||
| 51 | + </div> | ||
| 52 | + <p class="credits__summary"> | ||
| 53 | + {{ contributors.length }} | ||
| 54 | + {{ contributors.length === 1 ? 'person has' : 'people have' }} | ||
| 55 | + landed a commit, {{ top.login }} the most with {{ top.contributions }} | ||
| 56 | + {{ top.contributions === 1 ? 'commit' : 'commits' }}. | ||
| 57 | + <a href="https://github.com/unjs/unifont/graphs/contributors">all contributors</a> | ||
| 58 | + </p> | ||
| 62 | 59 | </div> | |
| 63 | 60 | ||
| 64 | 61 | <p class="colophon__line colophon__line--fine"> | |
@@ -119,39 +116,25 @@ const contributors = computed(() => credits.value?.contributors ?? []) | |||
| 119 | 116 | ||
| 120 | 117 | .credits { | |
| 121 | 118 | display: flex; | |
| 122 | - gap: var(--space-sm) var(--space-md); | ||
| 123 | - align-items: baseline; | ||
| 124 | - flex-wrap: wrap; | ||
| 125 | - margin-block: var(--space-xs); | ||
| 119 | + flex-direction: column; | ||
| 120 | + gap: var(--space-2xs); | ||
| 121 | + margin-block: var(--space-sm); | ||
| 122 | + padding-top: var(--space-sm); | ||
| 123 | + border-top: var(--rule-hair) solid var(--color-rule); | ||
| 126 | 124 | } | |
| 127 | 125 | ||
| 128 | - .credits__list { | ||
| 126 | + .credits__row { | ||
| 129 | 127 | display: flex; | |
| 130 | 128 | gap: var(--space-2xs); | |
| 131 | 129 | flex-wrap: wrap; | |
| 132 | 130 | min-height: 28px; | |
| 133 | - margin: 0; | ||
| 134 | - padding: 0; | ||
| 135 | - list-style: none; | ||
| 136 | 131 | } | |
| 137 | 132 | ||
| 138 | - .credits__all { | ||
| 133 | + .credits__summary { | ||
| 139 | 134 | color: var(--color-neutral); | |
| 140 | - font-family: var(--font-mono); | ||
| 141 | 135 | font-size: var(--text-xs); | |
| 142 | 136 | } | |
| 143 | 137 | ||
| 144 | - .credits__person { | ||
| 145 | - display: block; | ||
| 146 | - border-radius: var(--radius-pill); | ||
| 147 | - text-decoration: none; | ||
| 148 | - transition: transform var(--dur-micro) var(--ease-out); | ||
| 149 | - } | ||
| 150 | - | ||
| 151 | - .credits__person:hover { | ||
| 152 | - transform: translateY(-2px); | ||
| 153 | - } | ||
| 154 | - | ||
| 155 | 138 | .credits__avatar { | |
| 156 | 139 | display: block; | |
| 157 | 140 | width: 28px; | |
@@ -165,8 +148,7 @@ const contributors = computed(() => credits.value?.contributors ?? []) | |||
| 165 | 148 | opacity var(--dur-short) var(--ease-out); | |
| 166 | 149 | } | |
| 167 | 150 | ||
| 168 | - .credits__person:hover .credits__avatar, | ||
| 169 | - .credits__person:focus-visible .credits__avatar { | ||
| 151 | + .credits__row:hover .credits__avatar { | ||
| 170 | 152 | filter: none; | |
| 171 | 153 | opacity: 1; | |
| 172 | 154 | } | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -32,6 +32,9 @@ function isCurrent(to: string) { | |||
| 32 | 32 | @click="palette.open()" | |
| 33 | 33 | > | |
| 34 | 34 | <span class="pill__label">Search every provider</span> | |
| 35 | + <!-- Vue condenses whitespace between elements, so the separator is explicit or the two | ||
| 36 | + labels concatenate in the accessible name and in extracted text. --> | ||
| 37 | + {{ ' ' }} | ||
| 35 | 38 | <kbd class="pill__hint">{{ shortcut }}</kbd> | |
| 36 | 39 | </button> | |
| 37 | 40 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -195,6 +195,7 @@ function turn(delta: number) { | |||
| 195 | 195 | class="cell__specimen" | |
| 196 | 196 | :style="{ fontFamily: `'${entry.family}', var(--font-display)` }" | |
| 197 | 197 | >{{ entry.family }}</span> | |
| 198 | + {{ ' ' }} | ||
| 198 | 199 | <span class="cell__providers">{{ entry.providers.join(' · ') }}</span> | |
| 199 | 200 | </NuxtLink> | |
| 200 | 201 | </li> | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -50,6 +50,9 @@ await unifont.getFontProperties('Switzer') | |||
| 50 | 50 | @click="palette.open()" | |
| 51 | 51 | > | |
| 52 | 52 | <span>Find a family</span> | |
| 53 | + <!-- Vue condenses whitespace between elements, so the separator is explicit or the label | ||
| 54 | + and the shortcut concatenate in the accessible name and in extracted text. --> | ||
| 55 | + {{ ' ' }} | ||
| 53 | 56 | <kbd>{{ shortcut }}</kbd> | |
| 54 | 57 | </button> | |
| 55 | 58 | <NuxtLink | |
@@ -386,7 +389,7 @@ await unifont.getFontProperties('Switzer') | |||
| 386 | 389 | grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); | |
| 387 | 390 | gap: var(--space-2xl); | |
| 388 | 391 | align-items: start; | |
| 389 | - padding-block: var(--space-3xl) var(--space-xl); | ||
| 392 | + padding-block: var(--space-2xl) var(--space-lg); | ||
| 390 | 393 | border-bottom: var(--rule-hair) solid var(--color-rule); | |
| 391 | 394 | } | |
| 392 | 395 | ||
@@ -433,7 +436,7 @@ await unifont.getFontProperties('Switzer') | |||
| 433 | 436 | ||
| 434 | 437 | /* ── Providers table ──────────────────────────────────────── */ | |
| 435 | 438 | .providers { | |
| 436 | - padding-block: var(--space-2xl); | ||
| 439 | + padding-block: var(--space-xl); | ||
| 437 | 440 | border-bottom: var(--rule-hair) solid var(--color-rule); | |
| 438 | 441 | } | |
| 439 | 442 | ||
@@ -513,7 +516,7 @@ await unifont.getFontProperties('Switzer') | |||
| 513 | 516 | ||
| 514 | 517 | .surfaces__row dt { | |
| 515 | 518 | font-family: var(--font-display); | |
| 516 | - font-size: var(--text-md); | ||
| 519 | + font-size: var(--text-lg); | ||
| 517 | 520 | } | |
| 518 | 521 | ||
| 519 | 522 | .surfaces__row dd { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments