@sarimarcus/content-sites-ui 0.42.0 → 0.42.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  All packages in the platform release in lockstep; entries are per release version.
4
4
 
5
+ ## 0.42.1 (2026-10-21)
6
+
7
+ - `composed`: `EntityCard` gains `footerDivider` (default `true`, the hairline above the footer row); every existing caller renders identically. `editorial`: `PersonCard` and the featured full-story card of `PersonPage` pass `false`, so the divider above the CTA is gone on person cards (SLA-3303).
8
+
5
9
  ## 0.42.0 (2026-10-21)
6
10
 
7
11
  - `editorial`: `PersonPage` is rebuilt biography first: a `ContentHero` (warm, editorial overlay, short) with the role badges and `EraChip` in its badges slot, a lifespan line ("Lived c. 1138–1204 (about 66 years)", or "Born"/"Died" with one known year) and a monogram panel when there is no image; a key-facts strip (aliases, optional `contextFact`); the bio with a lead first paragraph at a 65ch measure; a `TableOfContents` only past four bio paragraphs; a featured full-story card (`fullStory.title`, else the old link line); places to see; the era timeline; then read more, capped at `readMoreLimit` (default 4). New optional props: `birthYear`, `deathYear`, `circa`, `lifespan`, `aliases`, `aliasesLabel`, `contextFact`, `monogram`, `fullStoryHeading`, `readMoreLimit`, `tocLabels`; `fullStory` gains `title`, `summary`, `image`, `fallbackSrc`, `imageAlt`. `PersonCard` gains `knownFor` (replaces the description line), `eraLabel` and a monogram tile when there is no image. New `monogram()` helper, internal `PersonSection` and `CardPlaceholder`; `RoleBadge` and `EraChip` gain `onImage`. `composed`: `QuickFacts` gains `variant="strip"`, an optional `icon` and `pagefindIgnore`; its other variants render identically. `layout`: `ContentHero` gains `monogram`, a dark panel with the initials when no image is set; existing heroes render identically. Copy defaults in `LABELS.personPage` (`lifespan`, `born`, `died`, `alsoKnownAs`, `fullStoryHeading`, `tocLabels`) (SLA-3290).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sarimarcus/content-sites-ui",
3
- "version": "0.42.0",
3
+ "version": "0.42.1",
4
4
  "description": "Universal Astro UI components, layout shell and design tokens shared by the content sites.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -50,6 +50,6 @@
50
50
  "@lucide/astro": "^1.23.0",
51
51
  "astro": "^7.0.6",
52
52
  "tailwindcss": "^4.1.18",
53
- "@sarimarcus/content-sites-core": "0.42.0"
53
+ "@sarimarcus/content-sites-core": "0.42.1"
54
54
  }
55
55
  }
@@ -17,6 +17,7 @@
17
17
  * tone — 'primary' or 'accent': the article border and the focus ring.
18
18
  * footer — false drops the footer row (a card whose CTA ends its body).
19
19
  * footerJustify — 'between' (meta start, CTA end) or 'end' (CTA only).
20
+ * footerDivider — false drops the hairline above the footer row.
20
21
  * Without `image`, `fallbackSrc` renders an <img>; without that too, the `fallback` slot renders (nothing if absent).
21
22
  * Under prefers-reduced-motion the hover zoom is cancelled.
22
23
  *
@@ -48,6 +49,7 @@ interface Props {
48
49
  tone?: 'primary' | 'accent';
49
50
  footer?: boolean;
50
51
  footerJustify?: 'between' | 'end';
52
+ footerDivider?: boolean;
51
53
  class?: string;
52
54
  }
53
55
 
@@ -64,6 +66,7 @@ const {
64
66
  tone = 'primary',
65
67
  footer = true,
66
68
  footerJustify = 'between',
69
+ footerDivider = true,
67
70
  class: className,
68
71
  } = Astro.props;
69
72
 
@@ -81,9 +84,10 @@ const linkClass = poster
81
84
  const mediaClass = `relative ${media} overflow-hidden img-placeholder shrink-0`;
82
85
  const contentClass = poster ? 'p-4 sm:p-5 flex flex-col flex-1' : 'flex-1 p-4 sm:p-5 flex flex-col';
83
86
  const justify = footerJustify === 'end' ? 'justify-end' : 'justify-between';
87
+ const divider = footerDivider ? ' border-t border-border' : '';
84
88
  const footerClass = poster
85
- ? `flex items-center ${justify} pt-3 border-t border-border mt-auto`
86
- : `flex items-center ${justify} pt-3 border-t border-border`;
89
+ ? `flex items-center ${justify} pt-3${divider} mt-auto`
90
+ : `flex items-center ${justify} pt-3${divider}`;
87
91
  // motion-reduce:group-hover:scale-100 has group-hover:scale-105's specificity and compiles after it, so it wins.
88
92
  const imgClass = 'w-full h-full object-cover transition-transform duration-500 group-hover:scale-105 motion-reduce:group-hover:scale-100';
89
93
  const loading = index < eager ? 'eager' : 'lazy';
@@ -73,6 +73,7 @@ const initials = monogram ?? initialsOf(name);
73
73
  eager={eager}
74
74
  sizes={sizes}
75
75
  footerJustify="end"
76
+ footerDivider={false}
76
77
  class={className}
77
78
  >
78
79
  {initials && (
@@ -240,6 +240,7 @@ const heroMonogram = image || fallbackSrc ? undefined : (monogram ?? initialsOf(
240
240
  fallbackSrc={fullStory.fallbackSrc}
241
241
  imageAlt={fullStory.imageAlt ?? fullStory.title ?? ''}
242
242
  footerJustify="end"
243
+ footerDivider={false}
243
244
  >
244
245
  <CardPlaceholder slot="fallback"><Icon name="book-open" class="size-10 text-primary/70" /></CardPlaceholder>
245
246
  <h3 class="text-xl font-display font-semibold text-foreground">{fullStory.title}</h3>