{
  "schema": "leumas.docs.page/1",
  "id": "adapter:domain/color",
  "slug": "adapters/domain/color",
  "kind": "capabilities",
  "bucket": "package",
  "title": "color (engines/adapters/domain/color)",
  "name": "color",
  "eyebrow": "engines/adapters/domain/color",
  "chip": null,
  "summary": "Color capability pack: conversions between hex/rgb/hsl/cmyk, a universal parse() that normalizes hex/rgb()/hsl()/named colors into { hex, rgb, hsl }, WCAG contrast ratio with AA/AAA pass flags...",
  "keywords": [
    "color",
    "cmyk",
    "wcag",
    "luminance",
    "lighten",
    "leumas color",
    "darken",
    "complementary"
  ],
  "audience": "both",
  "funnel": {
    "product": null,
    "cta": null
  },
  "body": "# color (`engines/adapters/domain/color`)\n\nSelf-contained color capability pack. Zero deps, pure JS. Colors are held internally as\n`{ r, g, b }` bytes; every tool takes one args object and returns plain JSON.\n\n| tool | what it does |\n|------|--------------|\n| `hexToRgb` / `rgbToHex` | hex ⇄ `{r,g,b}` (accepts `#fff`, `#ffffff`, bare, and `#rgba`/`#rrggbbaa`) |\n| `rgbToHsl` / `hslToRgb` | rgb ⇄ hsl |\n| `rgbToCmyk` | rgb → cmyk (print) |\n| `parse` | any color (hex / `rgb()` / `hsl()` / CSS name) → `{ hex, rgb, hsl, cmyk, name }` |\n| `contrast` | WCAG ratio between `a` & `b` + `{ ratio, AA, AAA, AALarge, AAALarge }` pass flags |\n| `luminance` | relative luminance (WCAG) of one color |\n| `lighten` / `darken` | shift HSL lightness by `amount` (0-1) |\n| `saturate` / `desaturate` | shift HSL saturation by `amount` (0-1) |\n| `mix` | blend `a` & `b` by `weight` (0-1, toward `a`) |\n| `palette` | `complementary` / `analogous` / `triadic` / `tetradic` / `monochromatic` → hex array |\n| `randomPalette` | pleasant palette of `count` colors; optional `seed` = deterministic |\n| `namedColors` | list the ~148 CSS named colors (or look one up by `name`) |\n\n## Usage\n\n```js\nimport color from './index.js';\ncolor.adapters.parse({ color: 'rebeccapurple' });\n// → { hex: '#663399', rgb: { r:102, g:51, b:153 }, hsl: { h:270, s:50, l:40 }, cmyk: {...}, name: 'rebeccapurple' }\n\ncolor.adapters.contrast({ a: '#000', b: '#fff' }).ratio;      // 21\ncolor.adapters.palette({ color: '#3498db', scheme: 'triadic' }).colors;\ncolor.adapters.randomPalette({ count: 5, seed: 42 }).colors;  // deterministic\n```\n\n## DRY boundary\n\nThis pack does **color math** (space conversions, contrast, palettes). It does **not** own design\ntokens or theme UI — that's `@leumas/theme`. It does not **validate** arbitrary strings (that's the\n`validation` pack's `hexColor`); `parse()` throws on unparseable input. The ~148 CSS named colors\nlive in `data/named-colors.json`.\n",
  "source": {
    "path": "shared/engines/adapters/domain/color/README.md",
    "blobSha": "",
    "commit": "",
    "committedAt": "",
    "provenance": "no-git",
    "bytes": 2130,
    "hash": "14d2f4906cf647c8f7b036c52ed44809c0848443"
  },
  "urls": {
    "html": "/p/adapters/domain/color",
    "json": "/docs/adapters/domain/color.json",
    "md": "/docs/adapters/domain/color.md"
  },
  "links": {
    "composes": [],
    "usedBy": [],
    "product": [],
    "howTo": [],
    "skills": []
  }
}
