parse static method

RayOklab parse(
  1. String value
)
override

Parses a color string and returns a RayOklab.

Supports the following format:

  • CSS oklab: oklab(0.5 0.1 -0.2), oklab(0.5 0.1 -0.2 / 0.8)

L (lightness) is 0-1, a and b are opponent color axes (typically -0.4 to 0.4), and alpha/opacity is 0-1.

Throws ArgumentError if the string format is not recognized.

Implementation

static RayOklab parse(String value) {
  final trimmed = value.trim();

  // oklab format: oklab(0.5 0.1 -0.2) or oklab(0.5 0.1 -0.2 / 0.8)
  final oklabPattern = RegExp(
    r'^oklab\s*\(\s*(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s+(-?\d+(?:\.\d+)?)\s*(?:/\s*(\d+(?:\.\d+)?))?\s*\)$',
    caseSensitive: false,
  );

  final match = oklabPattern.firstMatch(trimmed);

  if (match != null) {
    final l = double.parse(match.group(1)!);
    final a = double.parse(match.group(2)!);
    final b = double.parse(match.group(3)!);
    final alphaStr = match.group(4);

    final opacity = alphaStr != null ? double.parse(alphaStr) : 1.0;

    return RayOklab.fromComponents(l, a, b, opacity);
  }

  throw ArgumentError('Invalid Oklab color format: $value');
}