Part of #868 (PR-4, angular). Depends on the TopAwards backend ticket.
New libraries/ui/award-chips (mirror of ui-destination-chips, layer:ui presentational): AwardChip { icon, label, tier?, tooltip? } → ≤4 tiles (tinted rounded icon square + title + subtitle), geometry matching the mock's benefits tiles. Tier colors via one shared helper (lift getTierColor out of profile.component.ts:653).
Family card maps family().topAwards → strip between the destinations panel and the CTA banner; collapses entirely when empty.
Fix in passing (skills.service.ts): revokeSkill must call DELETE /api/Skills/earned/{id} (currently /{id} → 404), checkAutoAwards must call POST /api/Skills/check-auto-awards (currently /auto-award → 404); drop the phantom skillDescription field the server never returns.
Part of #868 (PR-4, angular). Depends on the TopAwards backend ticket.
- New `libraries/ui/award-chips` (mirror of `ui-destination-chips`, layer:ui presentational): `AwardChip { icon, label, tier?, tooltip? }` → ≤4 tiles (tinted rounded icon square + title + subtitle), geometry matching the mock's benefits tiles. Tier colors via one shared helper (lift `getTierColor` out of `profile.component.ts:653`).
- Family card maps `family().topAwards` → strip between the destinations panel and the CTA banner; collapses entirely when empty.
- Fix in passing (`skills.service.ts`): `revokeSkill` must call `DELETE /api/Skills/earned/{id}` (currently `/{id}` → 404), `checkAutoAwards` must call `POST /api/Skills/check-auto-awards` (currently `/auto-award` → 404); drop the phantom `skillDescription` field the server never returns.
Audited against origin/master — everything landed except one cosmetic item. (Standalone PR #589 closed unmerged; work landed via consolidated angular PR #592.)
Done
Lib libraries/ui/award-chips/*; AwardChip at award-chips.component.ts:9-19.
Shared awardTierColor at :26 — and it was genuinely lifted, not copied: profile.component.ts:31 imports it and :657 delegates. No duplicate tier hexes left in the codebase.
Strip collapses when empty — award-chips.component.html:1 (@if chips().length > 0) and family-card.component.html:318.
Remaining (1 item): the phantom skillDescription was not dropped. Still declared at projects/spikersoft/src/app/_services/skills/skills.service.ts:30 (skillDescription?: string;), with a comment keeping it optional for legacy spec fixtures that still set it (skills.service.spec.ts:114,186,257,278,283,304).
It's type-only with no runtime effect, so this is a judgement call: either delete the field and the six fixture usages, or close this as won't-fix with a note. Flagging rather than deciding, since it was a named acceptance item.
Audited against `origin/master` — **everything landed except one cosmetic item.** (Standalone PR #589 closed unmerged; work landed via consolidated angular PR #592.)
**Done**
- Lib `libraries/ui/award-chips/*`; `AwardChip` at `award-chips.component.ts:9-19`.
- Shared `awardTierColor` at `:26` — and it was genuinely *lifted*, not copied: `profile.component.ts:31` imports it and `:657` delegates. No duplicate tier hexes left in the codebase.
- Strip collapses when empty — `award-chips.component.html:1` (`@if chips().length > 0`) and `family-card.component.html:318`.
- skills.service route fixes: `:161-163` → `DELETE {base}/earned/{id}`, `:171` → `POST {base}/check-auto-awards`.
**Remaining (1 item):** the phantom `skillDescription` was not dropped. Still declared at `projects/spikersoft/src/app/_services/skills/skills.service.ts:30` (`skillDescription?: string;`), with a comment keeping it optional for legacy spec fixtures that still set it (`skills.service.spec.ts:114,186,257,278,283,304`).
It's type-only with no runtime effect, so this is a judgement call: either delete the field and the six fixture usages, or close this as won't-fix with a note. Flagging rather than deciding, since it was a named acceptance item.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #868 (PR-4, angular). Depends on the TopAwards backend ticket.
libraries/ui/award-chips(mirror ofui-destination-chips, layer:ui presentational):AwardChip { icon, label, tier?, tooltip? }→ ≤4 tiles (tinted rounded icon square + title + subtitle), geometry matching the mock's benefits tiles. Tier colors via one shared helper (liftgetTierColorout ofprofile.component.ts:653).family().topAwards→ strip between the destinations panel and the CTA banner; collapses entirely when empty.skills.service.ts):revokeSkillmust callDELETE /api/Skills/earned/{id}(currently/{id}→ 404),checkAutoAwardsmust callPOST /api/Skills/check-auto-awards(currently/auto-award→ 404); drop the phantomskillDescriptionfield the server never returns.Audited against
origin/master— everything landed except one cosmetic item. (Standalone PR #589 closed unmerged; work landed via consolidated angular PR #592.)Done
libraries/ui/award-chips/*;AwardChipataward-chips.component.ts:9-19.awardTierColorat:26— and it was genuinely lifted, not copied:profile.component.ts:31imports it and:657delegates. No duplicate tier hexes left in the codebase.award-chips.component.html:1(@if chips().length > 0) andfamily-card.component.html:318.:161-163→DELETE {base}/earned/{id},:171→POST {base}/check-auto-awards.Remaining (1 item): the phantom
skillDescriptionwas not dropped. Still declared atprojects/spikersoft/src/app/_services/skills/skills.service.ts:30(skillDescription?: string;), with a comment keeping it optional for legacy spec fixtures that still set it (skills.service.spec.ts:114,186,257,278,283,304).It's type-only with no runtime effect, so this is a judgement call: either delete the field and the six fixture usages, or close this as won't-fix with a note. Flagging rather than deciding, since it was a named acceptance item.