matching library
Shipflow — Pure matching library.
Public, side-effect-free entry point for color distance (ΔE CIE2000),
set similarity, fuzzy string scoring, and numeric quantization. Importable
from any Dart context — including AOT-restricted ones — without dragging
dart:io, AST parsers, or filesystem access.
Purity is enforced by the matching_purity rule of
shipflow/.ship.yaml::architecture.package_boundaries[], which is verified
in CI by tool/check_shipflow_boundaries.dart. Adding an export from outside
lib/src/matching/ will fail that check.
Classes
- Lab
- A point in CIE Lab* color space (D65 illuminant).
- SnapResult
- Result of snapToSteps — the closest declared step and how far the input was from it (in the same unit as the input).
Functions
-
deltaE2000(
Lab c1, Lab c2) → double - ΔE CIE2000 between two Lab colors. Returns 0 for identical inputs and values up to ~100 for extreme contrasts.
-
deltaE2000FromRgb(
int r1, int g1, int b1, int r2, int g2, int b2) → double - Convenience: ΔE CIE2000 between two sRGB triples (0..255 per channel).
-
foldDiacritics(
String input) → String - Fold diacritics across an entire string, preserving non-alpha characters. Used by fuzzyScore for substring containment checks.
-
fuzzyScore(
String query, String candidate) → double - Compound fuzzy score in 0..1, higher = better match.
-
isCleanAgainst(
double value, List< double> steps, {double tolerance = 0.5}) → bool -
Return true when
valueis withintoleranceof any entry insteps. -
jaccardAsymmetric<
T> (Set< T> query, Set<T> candidate, {double weight = 0.3}) → double - Asymmetric Jaccard: |Q ∩ C| / (|Q| + weight * |C|).
-
jaccardSimilarity<
T> (Set< T> a, Set<T> b) → double - Symmetric Jaccard similarity: |A ∩ B| / |A ∪ B|.
-
snapToMultiple(
double value, double step, {double base = 0}) → double -
Snap
valueto the nearest multiple ofstep, offset bybase. Useful when a design system uses an even grid (e.g. multiples of 4 px starting at 0).stepmust be strictly positive. -
snapToSteps(
double value, List< double> steps) → SnapResult -
Snap
valueto the closest entry ofsteps.stepsmust not be empty. Ties are broken in favour of the smaller value. -
srgbToLab(
int r, int g, int b) → Lab - Convert sRGB (0..255 per channel) to CIE Lab under D65.
-
tokenize(
String input) → List< String> - Tokenize a string for fuzzy matching.