@kolkrabbi/kol-component 0.94.0 → 0.95.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-component",
3
- "version": "0.94.0",
3
+ "version": "0.95.0",
4
4
  "description": "KOL design-system components — atoms through organisms, emitting canonical kol-* classes. Pairs with @kolkrabbi/kol-theme for styling.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -104,6 +104,7 @@ export default function ContentCard({
104
104
  zoom,
105
105
  control,
106
106
  controlStart,
107
+ reveal,
107
108
  actions,
108
109
  expanded = false,
109
110
  expandedContent,
@@ -260,14 +261,21 @@ export default function ContentCard({
260
261
  {textNode && <div className="kol-card-drawer">{textNode}</div>}
261
262
  </>
262
263
  ) : (
263
- /* canvas — media fills the frame, plate floats on top */
264
+ /* canvas — media fills the frame, plate floats on top. `reveal`
265
+ * (TypefaceCardAndRow, 2026-08-27): on hover the plate and the media
266
+ * fade out and the reveal node fades in — the card owns the
267
+ * choreography (kol-theme `.kol-card.has-reveal`), the consumer owns the
268
+ * node (what it says and which face it wears are never the family's). */
264
269
  <>
265
- <div className="absolute" style={{ inset: 0 }}>
270
+ <div className="kol-card-canvas-media absolute" style={{ inset: 0 }}>
266
271
  <ContentMedia ratio={null} {...mediaProps}>{media}</ContentMedia>
267
272
  {controlNode}
268
273
  {controlStartNode}
269
274
  </div>
270
275
  {textNode}
276
+ {reveal != null && (
277
+ <div className="kol-card-reveal absolute inset-0 flex items-center justify-center p-8 pointer-events-none" style={{ zIndex: 2 }}>{reveal}</div>
278
+ )}
271
279
  </>
272
280
  )
273
281
 
@@ -290,7 +298,7 @@ export default function ContentCard({
290
298
 
291
299
  const common = {
292
300
  'data-tags': isHero && Array.isArray(text.tags) && text.tags.length ? text.tags.join(' ') : undefined,
293
- className: `kol-card group flex ${expanded ? 'flex-row-reverse' : 'flex-col'} ${box.layout === 'drawer' ? 'relative overflow-hidden rounded-[var(--kol-radius-sm)]' : ''} ${framed ? 'overflow-hidden rounded-[var(--kol-radius-sm)]' : ''} ${box.border ? 'border' : ''} ${box.layout === 'canvas' ? 'relative' : ''} ${interactive ? 'cursor-pointer select-none' : ''} ${hoverBg && interactive ? 'kol-content-hover' : ''} ${className}`.trim(),
301
+ className: `kol-card group flex ${box.layout === 'canvas' && reveal != null ? 'has-reveal' : ''} ${expanded ? 'flex-row-reverse' : 'flex-col'} ${box.layout === 'drawer' ? 'relative overflow-hidden rounded-[var(--kol-radius-sm)]' : ''} ${framed ? 'overflow-hidden rounded-[var(--kol-radius-sm)]' : ''} ${box.border ? 'border' : ''} ${box.layout === 'canvas' ? 'relative' : ''} ${interactive ? 'cursor-pointer select-none' : ''} ${hoverBg && interactive ? 'kol-content-hover' : ''} ${className}`.trim(),
294
302
  style: {
295
303
  /* same reason as ContentRow: rest colours are PROPERTIES, because an
296
304
  * inline background/borderColor outranks the hover class and the step
@@ -88,13 +88,16 @@ const RAMP = {
88
88
  row: { title: 'kol-mono-12 text-body uppercase truncate', body: 'kol-sans-heading-03 leading-tight text-emphasis truncate', meta: 'kol-mono-12 text-body', date: 'kol-mono-12 text-meta', tags: 'flex flex-wrap items-center gap-1.5' },
89
89
  },
90
90
  typeface: {
91
+ /* RULED ON SCREEN (TypefaceCardAndRow, kol-website 2026-08-27): name and
92
+ * classification are FULL ink, the year steps to 64; the card's title is the
93
+ * row's title string — one title voice for the typeface family. Ink only. */
91
94
  /* same as the row: the SPECIMEN carries the emphasis on a typeface card,
92
95
  * so the name steps down. The glyph is what you came to look at. */
93
- card: { title: 'kol-mono-16 text-body', body: 'kol-mono-12 text-meta', date: 'kol-mono-12 text-meta' },
96
+ card: { title: 'kol-mono-14 uppercase text-emphasis', body: 'kol-mono-12 text-meta', date: 'kol-mono-12 text-meta' },
94
97
  /* the name steps DOWN to `body`: on a typeface row the SPECIMEN is the
95
98
  * thing you came for and it carries the one emphasis. Two full inks in one
96
99
  * block is the ladder broken, and the measurement caught it. */
97
- row: { title: 'kol-mono-14 uppercase text-body', body: 'kol-mono-12 text-meta', detail: 'kol-mono-14 text-body', date: 'kol-mono-12 text-meta' },
100
+ row: { title: 'kol-mono-14 uppercase text-emphasis', body: 'kol-mono-12 text-meta', detail: 'kol-mono-14 text-emphasis', date: 'kol-mono-12 text-fg-64' },
98
101
  },
99
102
  }
100
103