@kolkrabbi/kol-styleguide 0.5.2 → 0.6.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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  The KOL **style-guide / brand-guide** component set — the visual specimens a brand manual is built from. Raided from the monorepo `apps/brand` styleguide and assembled here because a brand guide is a shared capability with its own cadence, distinct from the core UI atoms.
4
4
 
5
- Colour anatomy + the **combination lab** (60/30/10 palette × layout × logo, incl. applied-brand mockups), **logo** construction / clearspace / scaling, **mood tiles**, **type blocks**, and **asset spec tables** — plus the colour/type specimen primitives (`ColorRamp`, `ColorSwatch`, `SpectrumGrid`, `TypeSample`, `TypeSpecCard`, `ProsePreview`, `AssetGrid`, `FeatureSplit`) gathered from the core packages.
5
+ Color anatomy + the **combination lab** (60/30/10 palette × layout × logo, incl. applied-brand mockups), **logo** construction / clearspace / scaling, **mood tiles**, **type blocks**, and **asset spec tables** — plus the color/type specimen primitives (`ColorRamp`, `ColorSwatch`, `SpectrumGrid`, `TypeSample`, `TypeSpecCard`, `ProsePreview`, `AssetGrid`, `FeatureSplit`) gathered from the core packages.
6
6
 
7
7
  ```js
8
8
  import { ComboLab, MoodTile, LogoCard, TypeBlock } from '@kolkrabbi/kol-styleguide'
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@kolkrabbi/kol-styleguide",
3
- "version": "0.5.2",
3
+ "version": "0.6.0",
4
4
  "private": false,
5
- "description": "KOL style-guide / brand-guide component set — the visual specimens a brand manual is built from: color anatomy + combination lab, logo construction / clearspace / scaling, mood tiles, type blocks, and asset spec tables. Raided from the apps/brand styleguide. Also the brand tool itself — `Brand` (BrandBook ⇄ BrandAssets) renders a whole brand book from one brand manifest. Sits above @kolkrabbi/kol-{theme,icons,component,framework}.",
5
+ "description": "Brand guide components and the brand tool",
6
6
  "license": "MIT",
7
7
  "type": "module",
8
8
  "main": "./src/index.js",
@@ -19,10 +19,10 @@
19
19
  "react-dom": "^18.3.0 || ^19.0.0"
20
20
  },
21
21
  "devDependencies": {
22
- "@kolkrabbi/kol-framework": "^0.44.0",
23
- "@kolkrabbi/kol-component": "^0.226.0",
24
- "@kolkrabbi/kol-icons": "^0.28.0",
25
- "@kolkrabbi/kol-theme": "^0.153.0"
22
+ "@kolkrabbi/kol-component": "^0.237.0",
23
+ "@kolkrabbi/kol-icons": "^0.33.0",
24
+ "@kolkrabbi/kol-framework": "^0.48.0",
25
+ "@kolkrabbi/kol-theme": "^0.163.0"
26
26
  },
27
27
  "files": [
28
28
  "src",
package/src/AssetCard.jsx CHANGED
@@ -23,7 +23,7 @@
23
23
  * no text-transform beyond the `uppercase` the original carried.
24
24
  *
25
25
  * @param {ReactNode} caption - Label above the frame; omitted, no figcaption renders
26
- * @param {string} backdrop - CSS colour for the frame ground (default: the fg-04 wash)
26
+ * @param {string} backdrop - CSS color for the frame ground (default: the fg-04 wash)
27
27
  * @param {string} className - Extra classes on the <figure>
28
28
  * @param {ReactNode} children - The mock
29
29
  */
@@ -3,7 +3,7 @@ import { Table } from '@kolkrabbi/kol-component'
3
3
  import { Icon } from '@kolkrabbi/kol-icons'
4
4
 
5
5
  /* Resolve a CSS custom property off the document root. The download seam is
6
- * handed a COLOUR, not a token — a consumer swapping `currentColor` in raw SVG
6
+ * handed a COLOR, not a token — a consumer swapping `currentColor` in raw SVG
7
7
  * cannot use `var(--x)`, and resolving it at the call site is how two brand
8
8
  * apps ended up with the same four-line helper. SSR-safe: '' when no document. */
9
9
  function resolveToken(token) {
@@ -34,7 +34,7 @@ function resolveToken(token) {
34
34
  * button. The consumer opens its own overlay (`FullscreenOverlay` in both
35
35
  * brand apps) at the ink it is handed.
36
36
  * - **`row.onDownload(row, resolvedInk)`** — the second argument is the
37
- * COMPUTED colour, not the token, so a consumer can swap `currentColor` for
37
+ * COMPUTED color, not the token, so a consumer can swap `currentColor` for
38
38
  * it and hand back a white mark that downloads white.
39
39
  *
40
40
  * Columns adapt to the data: Preview appears only when a row carries a
package/src/Brand.jsx CHANGED
@@ -7,10 +7,10 @@ import { BRAND_VIEWS, brandToc, scrollToAnchor } from './brandBook.js'
7
7
  /* taxonomy-ok: organism — the brand tool: BrandBook ⇄ BrandAssets under a view switch, with the page's section rail */
8
8
 
9
9
  /**
10
- * Brand — the whole brand tool: the brand book's two pages over one manifest, BRAND (the identity)
10
+ * Brand — The whole brand tool. the whole brand tool: the brand book's two pages over one manifest, BRAND (the identity)
11
11
  * and ASSETS (what you download or reproduce), a switch between them, and the page's sections on a
12
12
  * rail. ONE component so every app that carries a brand renders the same tool (apps/brand alone,
13
- * media-shell's Brand tab) — kol-notes' `Notes` shape.
13
+ * media-hub's Brand tab) — kol-notes' `Notes` shape.
14
14
  *
15
15
  * The manifest is `@kolkrabbi/kol-brand-template`'s schema; its `book` field carries the copy. The
16
16
  * marks come from `Logo` (a component taking `variant`) or `logoSources` (id → raw SVG, which the
@@ -3,7 +3,7 @@ import { ContentCollection, FullscreenOverlay, Table } from '@kolkrabbi/kol-comp
3
3
  import PageSection from '@kolkrabbi/kol-framework/src/PageSection.jsx'
4
4
  import AssetTable from './AssetTable.jsx'
5
5
  import AssetCard from './AssetCard.jsx'
6
- import { ProfileAvatar } from './SocialMocks.jsx'
6
+ import { BrandAvatar } from './SocialMocks.jsx'
7
7
  import { BusinessCardBack, BusinessCardFront, EmailSignature, Envelope, Letterhead } from './StationeryMocks.jsx'
8
8
  import BrandMark from './BrandMark.jsx'
9
9
  import { Prose, SectionIndex } from './BrandBook.jsx'
@@ -29,7 +29,7 @@ const brandedAssetCols = [
29
29
  ]
30
30
 
31
31
  /**
32
- * BrandAssets — the ASSETS page of the brand tool: what you download or reproduce. Logos (the
32
+ * BrandAssets — The brand book's assets page. the ASSETS page of the brand tool: what you download or reproduce. Logos (the
33
33
  * mark table, with the ink toggle, zoom and recoloured download), the branded-asset register,
34
34
  * stationery, social post sizes and profile avatars.
35
35
  *
@@ -134,7 +134,7 @@ export default function BrandAssets({ brand, Logo, logoSources }) {
134
134
  <PageSection key={s.key} {...head}>
135
135
  <div className="kol-grid mt-8 items-start">
136
136
  {brand.social.avatars.map(({ bg, polarity }, i) => (
137
- <AssetCard key={i}><ProfileAvatar mark={mark(marks.avatar, { className: 'w-1/2' })} bg={bg} polarity={polarity} /></AssetCard>
137
+ <AssetCard key={i}><BrandAvatar mark={mark(marks.avatar, { className: 'w-1/2' })} bg={bg} polarity={polarity} /></AssetCard>
138
138
  ))}
139
139
  </div>
140
140
  </PageSection>
package/src/BrandBook.jsx CHANGED
@@ -11,7 +11,7 @@ import { typeSections } from './typeSpecimen.js'
11
11
  /* taxonomy-ok: organism — the brand book's identity page: PageHero + PageSection chapters over LogoCard, Swatch and the type specimens */
12
12
 
13
13
  /**
14
- * BrandBook — the BRAND page of the brand tool: the identity, one scrolling page of chapters
14
+ * BrandBook — The brand book's identity page. the BRAND page of the brand tool: the identity, one scrolling page of chapters
15
15
  * (About · Tone · Look · Logo · Lockups · Color · Typography) under a hero and a chapter index.
16
16
  *
17
17
  * kol-olina's apps/brand `pages/brand/*`, carried class-for-class; what was that client's copy now
@@ -114,7 +114,7 @@ export function SectionIndex({ sections }) {
114
114
  )
115
115
  }
116
116
 
117
- /* Colour — the copy, then one swatch row per ramp under its label and note. The first ramp's
117
+ /* Color — the copy, then one swatch row per ramp under its label and note. The first ramp's
118
118
  * heading sits in the copy's own prose block (olina's Concept + Greyscale were one block); each
119
119
  * further ramp opens its own, as kol-website's hue ramps did. */
120
120
  function ColorSection({ s, ramps }) {
package/src/LogoCard.jsx CHANGED
@@ -3,7 +3,7 @@ import ClearspaceDiagram, { hasFramework } from './ClearspaceDiagram.jsx'
3
3
  import { ToggleSwitch } from '@kolkrabbi/kol-component'
4
4
 
5
5
  /**
6
- * LogoCard — framed logo specimen tile with a clearspace / grid toggle.
6
+ * LogoCard — A logo specimen tile. framed logo specimen tile with a clearspace / grid toggle.
7
7
  *
8
8
  * A brand-manual logo plate: the mark centered in a padded frame, an optional
9
9
  * caption, and — when construction overlays are supplied — a toggle that reveals
@@ -11,7 +11,7 @@
11
11
  * - `KolLogo` imported from the app → the `mark` node.
12
12
  * - A seven-stop client palette (champagne / sand / burgundy / maroon / wine)
13
13
  * → `palette`, defaulting to the theme's own ink and paper. A brand supplies
14
- * its own; the DS ships no colour.
14
+ * its own; the DS ships no color.
15
15
  * - `'Bricolage Grotesque'` and `'JetBrains Mono'` by name → `fonts`,
16
16
  * defaulting to `--kol-font-family-sans-narrow` / `--kol-font-family-mono`.
17
17
  * A foreign family by name in a package is how a consumer's type silently
@@ -26,7 +26,7 @@
26
26
  * const brand = { mark: <Asset name="logomark" />, palette: { accent: '#F3F1EC' } }
27
27
  * <PostPhoto {...brand} />
28
28
  * <StoryType {...brand} quote={<>Quiet,<br/>considered.</>} />
29
- * <ProfileAvatar {...brand} />
29
+ * <BrandAvatar {...brand} />
30
30
  *
31
31
  * One object spread into each mock is the intended call shape — no context, no
32
32
  * provider: a brand book renders these in a grid and already holds the object.
@@ -61,7 +61,7 @@ const resolve = (palette, fonts) => [
61
61
  ]
62
62
 
63
63
  /**
64
- * PostPhoto — feed post, photo ground with the mark in the corner (1:1).
64
+ * PostPhoto — A photo feed post. feed post, photo ground with the mark in the corner (1:1).
65
65
  *
66
66
  * @param {ReactNode} mark - The brand mark
67
67
  * @param {Object} palette - Partial override of DEFAULT_MOCK_PALETTE
@@ -83,7 +83,7 @@ export function PostPhoto({ mark, palette, fonts, media, className = '' }) {
83
83
  }
84
84
 
85
85
  /**
86
- * PostType — feed post, type-driven quote on the accent ground (1:1).
86
+ * PostType — A type-driven feed post. feed post, type-driven quote on the accent ground (1:1).
87
87
  *
88
88
  * @param {ReactNode} mark - The brand mark
89
89
  * @param {Object} palette - Partial override of DEFAULT_MOCK_PALETTE
@@ -107,7 +107,7 @@ export function PostType({ mark, palette, fonts, quote = 'Your line here.', clas
107
107
  }
108
108
 
109
109
  /**
110
- * PostProduct — feed post, product flat with a caption row (1:1).
110
+ * PostProduct — A product feed post. feed post, product flat with a caption row (1:1).
111
111
  *
112
112
  * @param {ReactNode} mark - The brand mark
113
113
  * @param {Object} palette - Partial override of DEFAULT_MOCK_PALETTE
@@ -153,7 +153,7 @@ export function PostProduct({
153
153
  }
154
154
 
155
155
  /**
156
- * PostEditorial — feed post, half photo / half type (1:1).
156
+ * PostEditorial — A half photo and half type post. feed post, half photo / half type (1:1).
157
157
  *
158
158
  * @param {ReactNode} mark - The brand mark
159
159
  * @param {Object} palette - Partial override of DEFAULT_MOCK_PALETTE
@@ -194,7 +194,7 @@ export function PostEditorial({
194
194
  }
195
195
 
196
196
  /**
197
- * StoryPhoto — story frame, full-bleed photo with the mark low-left (9:16).
197
+ * StoryPhoto — A full-bleed photo story. story frame, full-bleed photo with the mark low-left (9:16).
198
198
  *
199
199
  * @param {ReactNode} mark - The brand mark
200
200
  * @param {Object} palette - Partial override of DEFAULT_MOCK_PALETTE
@@ -216,7 +216,7 @@ export function StoryPhoto({ mark, palette, fonts, media, className = '' }) {
216
216
  }
217
217
 
218
218
  /**
219
- * StoryType — story frame, type-driven with the mark centred low (9:16).
219
+ * StoryType — A type-driven story. story frame, type-driven with the mark centred low (9:16).
220
220
  *
221
221
  * @param {ReactNode} mark - The brand mark
222
222
  * @param {Object} palette - Partial override of DEFAULT_MOCK_PALETTE — `ink` is the ground here and `accent` the type
@@ -240,7 +240,9 @@ export function StoryType({ mark, palette, fonts, quote = 'Your line here.', cla
240
240
  }
241
241
 
242
242
  /**
243
- * ProfileAvatar — the round profile mark (1:1).
243
+ * BrandAvatar — The brand's round profile mark. the round profile mark (1:1). Renamed from
244
+ * `ProfileAvatar` 2026-10-01 (user ruling): it is a brand-book mock of the brand's mark in a social
245
+ * profile frame, not a second `Avatar` — that one is a person. `ProfileAvatar` is the alias.
244
246
  *
245
247
  * The forks called it `Avatar`, which is already a kol-component atom (a
246
248
  * PERSON's avatar). Two packages exporting one name is a collision the roster
@@ -248,11 +250,11 @@ export function StoryType({ mark, palette, fonts, quote = 'Your line here.', cla
248
250
  *
249
251
  * @param {ReactNode} mark - The brand mark
250
252
  * @param {Object} palette - Partial override of DEFAULT_MOCK_PALETTE
251
- * @param {string} bg - Ground colour; unset, the `paper` stop
253
+ * @param {string} bg - Ground color; unset, the `paper` stop
252
254
  * @param {'dark'|'light'} polarity - Which way the mark inks against that ground (default: 'dark')
253
255
  * @param {string} className - Extra classes on the frame
254
256
  */
255
- export function ProfileAvatar({ mark, palette, bg, polarity = 'dark', className = '' }) {
257
+ export function BrandAvatar({ mark, palette, bg, polarity = 'dark', className = '' }) {
256
258
  const [pal] = resolve(palette)
257
259
  return (
258
260
  <div
@@ -263,3 +265,6 @@ export function ProfileAvatar({ mark, palette, bg, polarity = 'dark', className
263
265
  </div>
264
266
  )
265
267
  }
268
+
269
+ /** @deprecated 2026-10-01 — use BrandAvatar. Drops when nobody imports it (04-retirements.md). */
270
+ export const ProfileAvatar = BrandAvatar
@@ -79,7 +79,7 @@ const capsStyle = (fonts) => ({
79
79
  })
80
80
 
81
81
  /**
82
- * BusinessCardFront — the mark, centred, on paper.
82
+ * BusinessCardFront — The front of a business card. the mark, centred, on paper.
83
83
  *
84
84
  * @param {ReactNode} mark - The brand mark; sized to 70% of the card height
85
85
  * @param {Object} palette - Partial override of DEFAULT_STATIONERY_PALETTE
@@ -128,7 +128,7 @@ export function BusinessCardBack({ info, palette, fonts, className = '' }) {
128
128
  }
129
129
 
130
130
  /**
131
- * Envelope — DL, mark top-left, return address bottom-right, fold line.
131
+ * Envelope — A DL envelope. DL, mark top-left, return address bottom-right, fold line.
132
132
  *
133
133
  * @param {ReactNode} mark - The brand mark, in an 8-unit-tall box
134
134
  * @param {Object} info - Partial override of DEFAULT_BRAND_INFO — reads identity.name and the studio block
@@ -162,7 +162,7 @@ export function Envelope({ mark, info, palette, fonts, className = '' }) {
162
162
  }
163
163
 
164
164
  /**
165
- * Letterhead — A4: wordmark, body, contact rule at the foot.
165
+ * Letterhead — An A4 letterhead. A4: wordmark, body, contact rule at the foot.
166
166
  *
167
167
  * @param {ReactNode} mark - The brand mark (a wordmark in the forks), in a 10-unit-tall box
168
168
  * @param {Object} info - Partial override of DEFAULT_BRAND_INFO — reads identity.founder, contact.web, contact.phone, studio.city, studio.country
@@ -214,7 +214,7 @@ export function Letterhead({ mark, info, palette, fonts, children, signoff = 'Wa
214
214
  }
215
215
 
216
216
  /**
217
- * LetterheadCorrespondence — the richer sheet: mark + address block, a
217
+ * LetterheadCorrespondence — A letterhead for correspondence. the richer sheet: mark + address block, a
218
218
  * date/ref/to grid, the body, a signed signoff, and a legal footer.
219
219
  *
220
220
  * The forks called this `LetterheadB`. Renamed on the way in — a B suffix says
@@ -350,7 +350,7 @@ export function LetterheadCorrespondence({
350
350
  export const LetterheadB = LetterheadCorrespondence
351
351
 
352
352
  /**
353
- * EmailSignature — mark, rule, name and contact line.
353
+ * EmailSignature — An email signature. mark, rule, name and contact line.
354
354
  *
355
355
  * @param {ReactNode} mark - The brand mark, in a 16-unit square
356
356
  * @param {Object} info - Partial override of DEFAULT_BRAND_INFO — reads identity.founder, identity.name, contact.email, contact.web
package/src/Swatch.jsx CHANGED
@@ -1,11 +1,11 @@
1
1
  import { ColorSwatch } from '@kolkrabbi/kol-component'
2
2
 
3
3
  /**
4
- * Swatch — the DOCUMENTED swatch: a specimen bar over its meta row (name, hex),
4
+ * Swatch — A documented color swatch. the DOCUMENTED swatch: a specimen bar over its meta row (name, hex),
5
5
  * with an optional canonical-anchor dot.
6
6
  *
7
7
  * `ColorSwatch` (kol-component) is the chip alone — a fixed-size pressable atom
8
- * for paint bars and inspectors. A colour PAGE needs the specimen plus its label
8
+ * for paint bars and inspectors. A color PAGE needs the specimen plus its label
9
9
  * and value, which is the form both brand apps had built locally
10
10
  * (`brand-book-mocks-two-consumers`, 2026-09-03: 23 lines, byte-identical in
11
11
  * kol-client-olina and kol-website). This composes the atom rather than
@@ -31,7 +31,7 @@ import { ColorSwatch } from '@kolkrabbi/kol-component'
31
31
  * The hex is uppercased — that is value formatting, not a text-transform on
32
32
  * copy; `name` renders exactly as authored.
33
33
  *
34
- * @param {string} hex - The colour, e.g. '#131316' (required — it is both the paint and the printed value)
34
+ * @param {string} hex - The color, e.g. '#131316' (required — it is both the paint and the printed value)
35
35
  * @param {ReactNode} name - Label beside the value; omitted, only the hex renders
36
36
  * @param {boolean} anchor - Mark this stop as the palette's canonical anchor — a difference-blended dot centred on the chip (default: false)
37
37
  * @param {number|string} height - Specimen depth, the forks' `.kol-swatch-chip` height (default: 96)
package/src/TypeBlock.jsx CHANGED
@@ -5,12 +5,12 @@ import { familyFor } from './typographyCuts'
5
5
  *
6
6
  * Renders one sample string with a fully consumer-controlled type treatment:
7
7
  * cut (Right Grotesk width / mono), weight, italic, size, tracking,
8
- * line-height, case, alignment, colour, and an optional stroke. A pure,
8
+ * line-height, case, alignment, color, and an optional stroke. A pure,
9
9
  * stateless render — feed it props, it draws the specimen. Defaults land on
10
10
  * Right Grotesk regular so a bare `<TypeBlock />` shows a legible baseline.
11
11
  *
12
- * **Position + colour are the consumer's job.** TypeBlock owns no positioned
13
- * container, outline, or drag chrome, and inherits colour by default
12
+ * **Position + color are the consumer's job.** TypeBlock owns no positioned
13
+ * container, outline, or drag chrome, and inherits color by default
14
14
  * (`currentColor`) so the surrounding surface / theme drives ink. Wrap it in
15
15
  * whatever tile, row, or frame the specimen page needs.
16
16
  *
@@ -38,7 +38,7 @@ import { familyFor } from './typographyCuts'
38
38
  * align text-align
39
39
  * color ink (default 'currentColor' — inherit from surface / theme)
40
40
  * strokeWidth outline width in px (0 = none)
41
- * strokeColor outline colour (required for stroke to render)
41
+ * strokeColor outline color (required for stroke to render)
42
42
  * className extra classes on the sample element
43
43
  * style inline-style overrides merged last
44
44
  */
package/src/brandBook.js CHANGED
@@ -6,7 +6,7 @@
6
6
  * or reproduce — each a stack of sections. The section ids, eyebrows, titles and ledes below are
7
7
  * that app's, verbatim — except the Logos and Branded ledes, which named files in that repo and are
8
8
  * left for its manifest to set; anything that was the CLIENT's copy (About, Tone, Look, the logo concept,
9
- * the colour concept) is not here — it comes from the manifest's `book` field, section by section
9
+ * the color concept) is not here — it comes from the manifest's `book` field, section by section
10
10
  * (`@kolkrabbi/kol-brand-template` schema). A manifest key overrides the default of the same name.
11
11
  */
12
12
 
@@ -100,7 +100,7 @@ export const BRANDED_ASSET_ROWS = [
100
100
  ]
101
101
 
102
102
  /** An in-page anchor click that scrolls instead of setting the hash — the host may route on the hash
103
- * (media-shell does; apps/brand keeps its page there), so an anchor must not replace it. */
103
+ * (media-hub does; apps/brand keeps its page there), so an anchor must not replace it. */
104
104
  export function scrollToAnchor(e) {
105
105
  e.preventDefault()
106
106
  const id = e.currentTarget.getAttribute('href')?.slice(1)
package/src/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // @kolkrabbi/kol-styleguide — the brand style-guide component set.
2
2
  //
3
- // Visual specimens a brand manual is built from — colour anatomy + the
3
+ // Visual specimens a brand manual is built from — color anatomy + the
4
4
  // combination lab, logo construction / clearspace / scaling, mood tiles,
5
5
  // type blocks, asset spec tables. Raided from the monorepo apps/brand
6
6
  // styleguide (2026-07). Styling ships in @kolkrabbi/kol-theme
@@ -27,7 +27,7 @@ export { generatePalette, fgOn, hexToHsl, hslToHex, GENERATION_MODES } from './c
27
27
  export { default as AssetCard } from './AssetCard.jsx'
28
28
  export { default as Swatch } from './Swatch.jsx'
29
29
  export {
30
- PostPhoto, PostType, PostProduct, PostEditorial, StoryPhoto, StoryType, ProfileAvatar,
30
+ PostPhoto, PostType, PostProduct, PostEditorial, StoryPhoto, StoryType, BrandAvatar, ProfileAvatar,
31
31
  DEFAULT_MOCK_PALETTE, DEFAULT_MOCK_FONTS,
32
32
  } from './SocialMocks.jsx'
33
33
  export {