@domandigital/craft 0.11.0 → 0.12.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/CHANGELOG.md +16 -0
- package/CHARACTER.md +9 -1
- package/COPY.md +6 -2
- package/README.md +5 -0
- package/dist/{audit-QIPXL7E4.js → audit-5QWFLZ6L.js} +6 -3
- package/dist/audit.cjs +276 -15
- package/dist/audit.d.cts +81 -4
- package/dist/audit.d.ts +81 -4
- package/dist/audit.js +275 -15
- package/dist/{chunk-3NGWXZZE.js → chunk-AL6MRG6V.js} +40 -3
- package/dist/{chunk-HOHHQB4N.js → chunk-CDAJUS5U.js} +9 -8
- package/dist/{chunk-2AJB27BJ.js → chunk-J3QUROJ5.js} +24 -10
- package/dist/chunk-JYNXGCYZ.js +75 -0
- package/dist/{chunk-3OZQ4C5R.js → chunk-LHGY43LL.js} +8 -5
- package/dist/{chunk-MSQ57PJU.js → chunk-PU5G5DUC.js} +11 -11
- package/dist/{chunk-QMYERCBB.js → chunk-PZ4MF2VV.js} +19 -7
- package/dist/{chunk-JWHC67ZS.js → chunk-S3NZAVU6.js} +121 -1
- package/dist/{chunk-JP75P2DU.js → chunk-ULPI335S.js} +178 -12
- package/dist/chunk-ZKVJ7K6X.js +19 -0
- package/dist/cli-2DY3V3SF.js +17 -0
- package/dist/{cli-4ESXOLKV.js → cli-C3JLFXMG.js} +5 -4
- package/dist/cli-QM2AQQMF.js +19 -0
- package/dist/{cli-DBZMVYYV.js → cli-ZB2VJ7CY.js} +14 -12
- package/dist/{cli-U3SZVHSK.js → cli-ZPJIWVEP.js} +12 -78
- package/dist/cli.js +2 -2
- package/dist/index.cjs +270 -9
- package/dist/index.d.cts +180 -6
- package/dist/index.d.ts +180 -6
- package/dist/index.js +260 -9
- package/licences.json +104 -0
- package/package.json +3 -2
- package/word-lists.json +1 -1
- package/dist/cli-T5RD2BTK.js +0 -17
- package/dist/cli-VREYWCT4.js +0 -16
package/dist/index.d.cts
CHANGED
|
@@ -706,7 +706,13 @@ declare const DENSITY_NAMES: DensityName[];
|
|
|
706
706
|
* to a report and judged again later without a browser. Capturing one needs a
|
|
707
707
|
* browser (see `@domandigital/craft/audit`); judging one does not.
|
|
708
708
|
*/
|
|
709
|
-
|
|
709
|
+
/**
|
|
710
|
+
* 2 adds `role` and `geometry` per section, `rhythmVariance` for the page and
|
|
711
|
+
* the screenshot measures in `visual`. All four are optional: a version 1
|
|
712
|
+
* snapshot reads as version 2 without them (see `readSnapshot`), and nothing
|
|
713
|
+
* that judged a v1 snapshot judges it differently.
|
|
714
|
+
*/
|
|
715
|
+
declare const SNAPSHOT_VERSION = 2;
|
|
710
716
|
interface SnapshotColour {
|
|
711
717
|
/** `rgb(r, g, b)` or `rgba(r, g, b, a)`, as the browser computed it. */
|
|
712
718
|
value: string;
|
|
@@ -745,6 +751,27 @@ interface SnapshotControl {
|
|
|
745
751
|
text: string;
|
|
746
752
|
}
|
|
747
753
|
type SectionKind = "hero" | "logos" | "stats" | "cards" | "marquee" | "text" | "other";
|
|
754
|
+
/**
|
|
755
|
+
* What a section is for, finer than `kind`. `kind` keeps its version 1
|
|
756
|
+
* meaning because the rendered tells, the null models and the estate were
|
|
757
|
+
* calibrated on it; `role` is what component-level comparison reads.
|
|
758
|
+
*/
|
|
759
|
+
type SectionRole = SectionKind | "cta-band" | "footer-cta" | "pricing" | "testimonials" | "faq" | "process" | "features" | "team" | "contact";
|
|
760
|
+
/** How a section is laid out, measured, not judged. */
|
|
761
|
+
interface SectionGeometry {
|
|
762
|
+
/** Share of the section's text blocks that are centred, 0 to 1. */
|
|
763
|
+
centredShare: number;
|
|
764
|
+
/** Content area balance about the vertical centre line: 1 mirror-even, 0 all on one side. */
|
|
765
|
+
mirrorSymmetry: number;
|
|
766
|
+
/** Share of the section's area with no text, image or control in it, 0 to 1. */
|
|
767
|
+
whitespaceRatio: number;
|
|
768
|
+
/** Width the content spans, over the viewport width. */
|
|
769
|
+
contentWidthRatio: number;
|
|
770
|
+
/** The painted background behind the section, as computed. */
|
|
771
|
+
background: string;
|
|
772
|
+
/** Buttons and button-styled links in the section. */
|
|
773
|
+
controls: number;
|
|
774
|
+
}
|
|
748
775
|
interface SnapshotSection {
|
|
749
776
|
top: number;
|
|
750
777
|
height: number;
|
|
@@ -757,6 +784,26 @@ interface SnapshotSection {
|
|
|
757
784
|
iconCards: number;
|
|
758
785
|
/** Hidden at load, waiting for a scroll to reveal it. */
|
|
759
786
|
hiddenAtLoad: boolean;
|
|
787
|
+
/** Version 2. */
|
|
788
|
+
role?: SectionRole;
|
|
789
|
+
/** Version 2. */
|
|
790
|
+
geometry?: SectionGeometry;
|
|
791
|
+
}
|
|
792
|
+
/**
|
|
793
|
+
* Measures of the rendered pixels, from a full-page screenshot (capped at
|
|
794
|
+
* `height`). None of them passes or fails anything: they describe.
|
|
795
|
+
*/
|
|
796
|
+
interface SnapshotVisual {
|
|
797
|
+
/** Hasler and Süsstrunk (2003) colourfulness, M = σ_rgyb + 0.3 μ_rgyb, on 0-255 channels. Grey is 0. */
|
|
798
|
+
colourfulness: number;
|
|
799
|
+
/** Share of sampled pixels on a luminance edge: a complexity proxy, 0 to 1. */
|
|
800
|
+
edgeDensity: number;
|
|
801
|
+
/** 1 minus the mean luminance difference between each pixel and its left-right mirror, 0 to 1. */
|
|
802
|
+
symmetry: number;
|
|
803
|
+
width: number;
|
|
804
|
+
height: number;
|
|
805
|
+
/** Pixels actually read: large pages are sampled on a grid. */
|
|
806
|
+
sampled: number;
|
|
760
807
|
}
|
|
761
808
|
interface SnapshotGradient {
|
|
762
809
|
/** Colour stops, as computed. */
|
|
@@ -811,6 +858,12 @@ interface Snapshot {
|
|
|
811
858
|
sections: SnapshotSection[];
|
|
812
859
|
effects: SnapshotEffects;
|
|
813
860
|
motion: SnapshotMotion;
|
|
861
|
+
/** Version 2: coefficient of variation of the section heights. Null with fewer than two sections. */
|
|
862
|
+
rhythmVariance?: number | null;
|
|
863
|
+
/** Version 2: absent when the page could not be screenshotted. */
|
|
864
|
+
visual?: SnapshotVisual;
|
|
865
|
+
/** Set when a version 1 snapshot was read and upgraded in memory. */
|
|
866
|
+
migratedFrom?: 1;
|
|
814
867
|
/** The design-system measures trawl has collected since v7, kept so it can switch to this. */
|
|
815
868
|
metrics: {
|
|
816
869
|
fontSizes: number[];
|
|
@@ -1031,7 +1084,7 @@ interface CheckReport {
|
|
|
1031
1084
|
* Bumped whenever an entry is added, removed or its detection changes, so a
|
|
1032
1085
|
* report can say which list it was judged against.
|
|
1033
1086
|
*/
|
|
1034
|
-
declare const CATALOGUE_VERSION = "2026.09.
|
|
1087
|
+
declare const CATALOGUE_VERSION = "2026.09.9";
|
|
1035
1088
|
declare const CATALOGUE: readonly Tell[];
|
|
1036
1089
|
declare function tellById(id: string): Tell | undefined;
|
|
1037
1090
|
/**
|
|
@@ -1112,6 +1165,31 @@ interface HouseRule {
|
|
|
1112
1165
|
declare const HOUSE: Readonly<Record<string, HouseRule>>;
|
|
1113
1166
|
/** The house rule for a copy tell. Unknown ids are review, so a new tell never blocks. */
|
|
1114
1167
|
declare function houseRule(id: string, name?: string): HouseRule;
|
|
1168
|
+
/**
|
|
1169
|
+
* What a repo may and may not do to the house gate.
|
|
1170
|
+
*
|
|
1171
|
+
* A repo can raise a tell's severity in `craft.config.json`, or except a
|
|
1172
|
+
* design tell in `art-direction.json`. It cannot lower the blocking tier: a
|
|
1173
|
+
* `warn` or `off` there, or an exception naming a blocking tell, would let one
|
|
1174
|
+
* line and one sentence switch off a rule COPY.md calls not a judgment call,
|
|
1175
|
+
* in every commit that repo makes. `chatbot-residue` is the sharpest case: it
|
|
1176
|
+
* is evidence of a paste, and no client reason makes a paste acceptable.
|
|
1177
|
+
*
|
|
1178
|
+
* A genuine one-off (a style guide quoting an em dash, a testimonial) takes
|
|
1179
|
+
* `copy-ok` on its line: local, in the diff a reviewer reads, and listed in
|
|
1180
|
+
* every report. A rule that is wrong for everyone is changed here.
|
|
1181
|
+
*/
|
|
1182
|
+
declare const HOUSE_LOCKED = "the house blocking tier cannot be lowered by a repo. A genuine one-off takes copy-ok on its line; a rule that is wrong is changed in craft's house.ts and COPY.md";
|
|
1183
|
+
declare function holdHouseBlocks<E extends {
|
|
1184
|
+
tell: string;
|
|
1185
|
+
}, O extends {
|
|
1186
|
+
level: string;
|
|
1187
|
+
}>(exceptions: E[], severity: Record<string, O>): {
|
|
1188
|
+
exceptions: E[];
|
|
1189
|
+
severity: Record<string, O>;
|
|
1190
|
+
refused: E[];
|
|
1191
|
+
refusedSeverity: string[];
|
|
1192
|
+
};
|
|
1115
1193
|
|
|
1116
1194
|
/**
|
|
1117
1195
|
* Protected facts: what a rewrite must never lose or invent.
|
|
@@ -1411,6 +1489,41 @@ type FontClass = "serif" | "sans" | "mono" | "script" | "system";
|
|
|
1411
1489
|
declare function normaliseFamily(raw: string): string;
|
|
1412
1490
|
declare function fontClass(family: string): FontClass;
|
|
1413
1491
|
|
|
1492
|
+
/**
|
|
1493
|
+
* Read a saved snapshot of any version this craft understands. Pure.
|
|
1494
|
+
*
|
|
1495
|
+
* Version 2 only added optional fields, so a version 1 snapshot is a valid
|
|
1496
|
+
* version 2 snapshot without them. It is marked `migratedFrom: 1` so a report
|
|
1497
|
+
* can say which measures it lacks, rather than reading their absence as zero.
|
|
1498
|
+
*/
|
|
1499
|
+
|
|
1500
|
+
declare const READABLE_SNAPSHOT_VERSIONS: readonly [1, 2];
|
|
1501
|
+
declare function readSnapshot(data: unknown, source?: string): Snapshot;
|
|
1502
|
+
|
|
1503
|
+
/**
|
|
1504
|
+
* Measures of a screenshot's pixels. Pure: RGBA in, numbers out, no decoder
|
|
1505
|
+
* and no browser, so it is tested on synthetic images.
|
|
1506
|
+
*
|
|
1507
|
+
* Only measures that need no model are here, after Miniukovich and De Angeli
|
|
1508
|
+
* (2015, "Computation of interface aesthetics"): colourfulness, an edge-density
|
|
1509
|
+
* complexity proxy, and left-right symmetry. None of them is a verdict. A
|
|
1510
|
+
* sober site and a busy one can both be decided; these say which it is.
|
|
1511
|
+
*/
|
|
1512
|
+
|
|
1513
|
+
interface RgbaImage {
|
|
1514
|
+
width: number;
|
|
1515
|
+
height: number;
|
|
1516
|
+
/** Row-major, 4 bytes a pixel. */
|
|
1517
|
+
rgba: Uint8Array;
|
|
1518
|
+
}
|
|
1519
|
+
/** A luminance step, on 0-255, that counts as an edge. About a 12% contrast change. */
|
|
1520
|
+
declare const EDGE_STEP = 32;
|
|
1521
|
+
/**
|
|
1522
|
+
* Colourfulness, edge density and symmetry. Images over `maxSamples` pixels
|
|
1523
|
+
* are read on a regular grid, and edges are taken between grid neighbours.
|
|
1524
|
+
*/
|
|
1525
|
+
declare function visualMeasures(img: RgbaImage, maxSamples?: number): SnapshotVisual;
|
|
1526
|
+
|
|
1414
1527
|
/**
|
|
1415
1528
|
* A fingerprint: the handful of choices that make a site look like itself,
|
|
1416
1529
|
* reduced to something two sites can be compared on.
|
|
@@ -1425,9 +1538,24 @@ declare function fontClass(family: string): FontClass;
|
|
|
1425
1538
|
* Pure. Built from a Snapshot, so it describes what a visitor gets.
|
|
1426
1539
|
*/
|
|
1427
1540
|
|
|
1428
|
-
|
|
1541
|
+
/**
|
|
1542
|
+
* 2 adds `sections` (role and geometry in running order). A version 1
|
|
1543
|
+
* fingerprint, or one from a version 1 snapshot, has none, and every
|
|
1544
|
+
* comparison involving it uses `layout` exactly as version 1 did, so the null
|
|
1545
|
+
* models and the estate register compare as they were calibrated until they
|
|
1546
|
+
* are re-snapshotted.
|
|
1547
|
+
*/
|
|
1548
|
+
declare const FINGERPRINT_VERSION = 2;
|
|
1549
|
+
/** One section as layout comparison sees it. */
|
|
1550
|
+
interface FingerprintSection {
|
|
1551
|
+
role: SectionRole;
|
|
1552
|
+
/** Share of centred text, 0 to 1. */
|
|
1553
|
+
centred: number;
|
|
1554
|
+
/** Content width over viewport width, 0 to 1. */
|
|
1555
|
+
width: number;
|
|
1556
|
+
}
|
|
1429
1557
|
interface Fingerprint {
|
|
1430
|
-
version:
|
|
1558
|
+
version: 1 | 2;
|
|
1431
1559
|
/** The most prominent chromatic colour: button fills first, then painted area, then text. */
|
|
1432
1560
|
accent: Oklch | null;
|
|
1433
1561
|
ground: Oklch;
|
|
@@ -1447,6 +1575,8 @@ interface Fingerprint {
|
|
|
1447
1575
|
effects: string[];
|
|
1448
1576
|
/** Section kinds in running order, hero first. */
|
|
1449
1577
|
layout: SectionKind[];
|
|
1578
|
+
/** Version 2: present when every section carries a role and geometry. */
|
|
1579
|
+
sections?: FingerprintSection[];
|
|
1450
1580
|
}
|
|
1451
1581
|
declare function fingerprint(s: Snapshot): Fingerprint;
|
|
1452
1582
|
interface FingerprintDistance {
|
|
@@ -1476,6 +1606,8 @@ declare const DISTANCE_WEIGHTS: {
|
|
|
1476
1606
|
readonly effects: 0.1;
|
|
1477
1607
|
readonly layout: 0.1;
|
|
1478
1608
|
};
|
|
1609
|
+
/** Layout distance, 0 to 1: by role and geometry when both have them, else by kind as in version 1. */
|
|
1610
|
+
declare function layoutDistance(a: Fingerprint, b: Fingerprint): number;
|
|
1479
1611
|
declare function fingerprintDistance(a: Fingerprint, b: Fingerprint): FingerprintDistance;
|
|
1480
1612
|
/**
|
|
1481
1613
|
* The nearest neighbours of a fingerprint in a set, closest first. Typicality
|
|
@@ -1545,7 +1677,7 @@ declare function isCream({ l, c, h }: Oklch): boolean;
|
|
|
1545
1677
|
/** The faces a model picks when the brief does not name one. */
|
|
1546
1678
|
declare const REFLEX_FONTS_1: readonly ["Inter", "Roboto", "Open Sans", "Poppins", "Montserrat", "Lato"];
|
|
1547
1679
|
/** What models moved to once Inter was named and banned. */
|
|
1548
|
-
declare const REFLEX_FONTS_2: readonly ["Inter Tight", "DM Sans", "Manrope", "Space Grotesk", "Plus Jakarta Sans", "Outfit", "Geist", "Sora", "Instrument Sans", "Instrument Serif", "Fraunces", "Playfair Display", "Cormorant Garamond", "DM Serif Display"];
|
|
1680
|
+
declare const REFLEX_FONTS_2: readonly ["Inter Tight", "DM Sans", "Manrope", "Space Grotesk", "Plus Jakarta Sans", "Outfit", "Geist", "Cal Sans", "Sora", "Instrument Sans", "Instrument Serif", "Fraunces", "Playfair Display", "Cormorant Garamond", "DM Serif Display"];
|
|
1549
1681
|
/** Above this many scroll reveals in one scan, reveal is the default, not a choice. */
|
|
1550
1682
|
declare const REVEAL_LIMIT = 12;
|
|
1551
1683
|
/** Above this many fully rounded shapes in one scan, the pill is the shape language by accident. */
|
|
@@ -1688,6 +1820,48 @@ declare function initDirection(input: {
|
|
|
1688
1820
|
exceptions?: ArtDirection["exceptions"];
|
|
1689
1821
|
}): ArtDirection;
|
|
1690
1822
|
|
|
1823
|
+
/**
|
|
1824
|
+
* What each face and icon set is licensed for, checked against the licensor's
|
|
1825
|
+
* own page. A face a client site ships without a licence covering that site is
|
|
1826
|
+
* a commercial risk the site owner carries, so `craft direction validate` warns
|
|
1827
|
+
* on a display or body face this register does not know, or knows only as
|
|
1828
|
+
* capped or unverified. Unverified is never a pass.
|
|
1829
|
+
*
|
|
1830
|
+
* This is a register of facts, not a shortlist. Nothing here is proposed to a
|
|
1831
|
+
* site: a face chosen because it is on this list is the agency's own reflex
|
|
1832
|
+
* font (CHARACTER.md, "Distance from the estate"). A face enters the register
|
|
1833
|
+
* after a site has chosen it for a reason and someone has read its licence.
|
|
1834
|
+
*
|
|
1835
|
+
* `licences.json` is generated from this file for tools outside the package.
|
|
1836
|
+
* Regenerate it with `pnpm --filter @domandigital/craft run docs`.
|
|
1837
|
+
*/
|
|
1838
|
+
type LicenceSubject = "face" | "foundry" | "icons";
|
|
1839
|
+
/**
|
|
1840
|
+
* Whether one purchase covers the sites Doman Digital builds for unrelated
|
|
1841
|
+
* clients. `yes`: it does. `capped`: up to `cap` sites. `per-site`: each client
|
|
1842
|
+
* site needs its own licence, in the client's name. `unverified`: nobody has
|
|
1843
|
+
* read the licensor's own terms yet.
|
|
1844
|
+
*/
|
|
1845
|
+
type MultiClient = "yes" | "capped" | "per-site" | "unverified";
|
|
1846
|
+
interface LicenceEntry {
|
|
1847
|
+
/** The family name as CSS sets it, or the foundry or icon set's own name. */
|
|
1848
|
+
name: string;
|
|
1849
|
+
subject: LicenceSubject;
|
|
1850
|
+
licence: string;
|
|
1851
|
+
multiClient: MultiClient;
|
|
1852
|
+
/** How many sites one licence covers, when `multiClient` is `capped`. */
|
|
1853
|
+
cap?: number;
|
|
1854
|
+
/** When the licensor's page was read, ISO date. */
|
|
1855
|
+
checked: string;
|
|
1856
|
+
/** The licensor's own page. Never an aggregator. */
|
|
1857
|
+
source: string;
|
|
1858
|
+
note: string;
|
|
1859
|
+
}
|
|
1860
|
+
declare const LICENCES: readonly LicenceEntry[];
|
|
1861
|
+
/** The register entry for a face, by the family name CSS sets. */
|
|
1862
|
+
declare function faceLicence(family: string): LicenceEntry | undefined;
|
|
1863
|
+
declare function licencesJson(): string;
|
|
1864
|
+
|
|
1691
1865
|
/**
|
|
1692
1866
|
* Proposing an art direction from the client's world.
|
|
1693
1867
|
*
|
|
@@ -2004,4 +2178,4 @@ declare function characterReport(input: CharacterInputs, copyTells?: Set<string>
|
|
|
2004
2178
|
|
|
2005
2179
|
declare function retrofitPlan(report: CharacterReport, direction?: ArtDirection | null): string;
|
|
2006
2180
|
|
|
2007
|
-
export { AI_PHRASES, AI_VIOLET, AI_WORDS, type AccentFork, type AccentForkOptions, type Action, type Area, type ArtDirection, BASELINE_VERSION, BUZZWORDS, type Baseline, type BaselineEntry, CATALOGUE, CATALOGUE_VERSION, CHOICE_KEYS, type CandidateKind, type CharacterInputs, type CharacterReport, type CheckOptions, type CheckReport, type CheckRestraintInput, type ChoiceKey, type Claim, type ClaimsReport, type ContrastCheck, type ContrastReport, type CopyTell, type CraftConfig, type CraftTokensInput, type CraftTokensResult, DEFAULT_IGNORE, DENSITIES, DENSITY_NAMES, DIRECTION_VERSION, DISTANCE_WEIGHTS, DURATION_MS, DURATION_S, type DensityCssOptions, type DensityName, type DirectionChoice, type DirectionProblem, type DirectionReport, type DirectionSource, type DurationName, EASE, EASE_TUPLE, ESTATE_VERSION, EXIT_RATIO, type EaseName, type EmitCssOptions, type EstateMatch, type EstatePair, type EstateRegister, type EstateSite, FINGERPRINT_VERSION, type Fact, type FactComparison, type FactKind, type Finding, type Fingerprint, type FingerprintDistance, type FluidSpaceOptions, type FluidTypeOptions, type FluidTypeResult, type FontClass, type Gamut, type Generation, HOUSE, HOUSE_BUDGET, HOUSE_TYPE, type HarvestCandidate, type HarvestOptions, type Hit, type HouseRule, type HouseTier, JSON_SCHEMA_VERSION, LIGHTNESS_CURVE, MIN_DECIDED, MIN_RUNS, type MotionDecision, type MotionKind, NEGATIVE_REASSURANCE, NULL_VERSION, type NullModel, type NullRun, type Oklch, type OklchToHexOptions, PILL_LIMIT, PLAINER_WORDS, PROPOSED, type PaletteColour, type Proposal, type ProposeInput, RAMP_STEPS, REFLEX_FONTS_1, REFLEX_FONTS_2, RENDERED_PATHS, REVEAL_LIMIT, REVIEW_PHRASES, type Ramp, type RampFromAnchorsOptions, type RampOptions, type RampStep, type RestraintBudget, type RestraintReport, type RestraintSeverity, type RestraintViolation, type Rgb, SCALE, SHADCN_LIMIT, SHADCN_PRIMITIVES, SIBLING_AT, SNAPSHOT_VERSION, SOURCE_KINDS, SPACE_STEPS, SPRING, STOCK_PHRASES, type SarifOptions, type SarifTell, type SectionKind, type SectionRhythmOptions, type SemanticInput, type SemanticResult, type Severity, type SeverityLevel, type SeverityOverride, type ShouldAnimateInput, type SignalResult, type Snapshot, type SnapshotColour, type SnapshotControl, type SnapshotEffects, type SnapshotFont, type SnapshotGradient, type SnapshotHeading, type SnapshotMotion, type SnapshotPatch, type SnapshotSection, type SourceFile, type SourceKind, type SourceTell, type SpaceStep, type Surface, TELL_HEAVY, TYPE_STEPS, TYPICAL_AT, type TailwindPreset, type Tell, type TellException, type TypeStep, type Typicality, VAGUE_WORDS, type ValidateContext, type Verdict, accentFork, addSite, apcaContrast, applyBaseline, applyHouseGate, applySeverity, auditSnapshot, catalogueTable, characterReport, checkCopy, checkPair, checkRestraint, choicesOf, compareFacts, compareToEstate, craftTokens, createBaseline, deltaEOk, deltaEOkHex, densityCss, densityTokens, emitCss, emptyEstate, estatePairs, exitDuration, extractHtml, findClaims, findColours, findingKey, fingerprint, fingerprintDistance, fluidClamp, fluidSpace, fluidType, fontClass, formatClaims, formatComparison, formatHex, formatReport, globToRegExp, groundName, harvest, hexToOklch, houseRule, hueName, hueSwatch, ignoreMatcher, inP3Gamut, inSrgbGamut, initDirection, isAiViolet, isCream, makeSnapshot, motionTokens, namedSources, nearest, normaliseFamily, nullPrompt, oklchToHex, oklchToRgb, paletteFromPixels, parseBaseline, parseColour, parseCraftConfig, parseHex, propose, protectedFacts, ramp, rampFromAnchors, retrofitPlan, runTell, scanSource, sectionRhythm, semantic, severityExceptions, shapeName, sharedParts, shouldAnimate, siblingLine, tailwindV3Preset, tailwindV4Theme, tellById, toGamut, toJson, toSarif, typeFeatureTokens, typicality, validateDirection, visibleText, wcagContrast, wordListsJson };
|
|
2181
|
+
export { AI_PHRASES, AI_VIOLET, AI_WORDS, type AccentFork, type AccentForkOptions, type Action, type Area, type ArtDirection, BASELINE_VERSION, BUZZWORDS, type Baseline, type BaselineEntry, CATALOGUE, CATALOGUE_VERSION, CHOICE_KEYS, type CandidateKind, type CharacterInputs, type CharacterReport, type CheckOptions, type CheckReport, type CheckRestraintInput, type ChoiceKey, type Claim, type ClaimsReport, type ContrastCheck, type ContrastReport, type CopyTell, type CraftConfig, type CraftTokensInput, type CraftTokensResult, DEFAULT_IGNORE, DENSITIES, DENSITY_NAMES, DIRECTION_VERSION, DISTANCE_WEIGHTS, DURATION_MS, DURATION_S, type DensityCssOptions, type DensityName, type DirectionChoice, type DirectionProblem, type DirectionReport, type DirectionSource, type DurationName, EASE, EASE_TUPLE, EDGE_STEP, ESTATE_VERSION, EXIT_RATIO, type EaseName, type EmitCssOptions, type EstateMatch, type EstatePair, type EstateRegister, type EstateSite, FINGERPRINT_VERSION, type Fact, type FactComparison, type FactKind, type Finding, type Fingerprint, type FingerprintDistance, type FingerprintSection, type FluidSpaceOptions, type FluidTypeOptions, type FluidTypeResult, type FontClass, type Gamut, type Generation, HOUSE, HOUSE_BUDGET, HOUSE_LOCKED, HOUSE_TYPE, type HarvestCandidate, type HarvestOptions, type Hit, type HouseRule, type HouseTier, JSON_SCHEMA_VERSION, LICENCES, LIGHTNESS_CURVE, type LicenceEntry, type LicenceSubject, MIN_DECIDED, MIN_RUNS, type MotionDecision, type MotionKind, type MultiClient, NEGATIVE_REASSURANCE, NULL_VERSION, type NullModel, type NullRun, type Oklch, type OklchToHexOptions, PILL_LIMIT, PLAINER_WORDS, PROPOSED, type PaletteColour, type Proposal, type ProposeInput, RAMP_STEPS, READABLE_SNAPSHOT_VERSIONS, REFLEX_FONTS_1, REFLEX_FONTS_2, RENDERED_PATHS, REVEAL_LIMIT, REVIEW_PHRASES, type Ramp, type RampFromAnchorsOptions, type RampOptions, type RampStep, type RestraintBudget, type RestraintReport, type RestraintSeverity, type RestraintViolation, type Rgb, type RgbaImage, SCALE, SHADCN_LIMIT, SHADCN_PRIMITIVES, SIBLING_AT, SNAPSHOT_VERSION, SOURCE_KINDS, SPACE_STEPS, SPRING, STOCK_PHRASES, type SarifOptions, type SarifTell, type SectionGeometry, type SectionKind, type SectionRhythmOptions, type SectionRole, type SemanticInput, type SemanticResult, type Severity, type SeverityLevel, type SeverityOverride, type ShouldAnimateInput, type SignalResult, type Snapshot, type SnapshotColour, type SnapshotControl, type SnapshotEffects, type SnapshotFont, type SnapshotGradient, type SnapshotHeading, type SnapshotMotion, type SnapshotPatch, type SnapshotSection, type SnapshotVisual, type SourceFile, type SourceKind, type SourceTell, type SpaceStep, type Surface, TELL_HEAVY, TYPE_STEPS, TYPICAL_AT, type TailwindPreset, type Tell, type TellException, type TypeStep, type Typicality, VAGUE_WORDS, type ValidateContext, type Verdict, accentFork, addSite, apcaContrast, applyBaseline, applyHouseGate, applySeverity, auditSnapshot, catalogueTable, characterReport, checkCopy, checkPair, checkRestraint, choicesOf, compareFacts, compareToEstate, craftTokens, createBaseline, deltaEOk, deltaEOkHex, densityCss, densityTokens, emitCss, emptyEstate, estatePairs, exitDuration, extractHtml, faceLicence, findClaims, findColours, findingKey, fingerprint, fingerprintDistance, fluidClamp, fluidSpace, fluidType, fontClass, formatClaims, formatComparison, formatHex, formatReport, globToRegExp, groundName, harvest, hexToOklch, holdHouseBlocks, houseRule, hueName, hueSwatch, ignoreMatcher, inP3Gamut, inSrgbGamut, initDirection, isAiViolet, isCream, layoutDistance, licencesJson, makeSnapshot, motionTokens, namedSources, nearest, normaliseFamily, nullPrompt, oklchToHex, oklchToRgb, paletteFromPixels, parseBaseline, parseColour, parseCraftConfig, parseHex, propose, protectedFacts, ramp, rampFromAnchors, readSnapshot, retrofitPlan, runTell, scanSource, sectionRhythm, semantic, severityExceptions, shapeName, sharedParts, shouldAnimate, siblingLine, tailwindV3Preset, tailwindV4Theme, tellById, toGamut, toJson, toSarif, typeFeatureTokens, typicality, validateDirection, visibleText, visualMeasures, wcagContrast, wordListsJson };
|
package/dist/index.d.ts
CHANGED
|
@@ -706,7 +706,13 @@ declare const DENSITY_NAMES: DensityName[];
|
|
|
706
706
|
* to a report and judged again later without a browser. Capturing one needs a
|
|
707
707
|
* browser (see `@domandigital/craft/audit`); judging one does not.
|
|
708
708
|
*/
|
|
709
|
-
|
|
709
|
+
/**
|
|
710
|
+
* 2 adds `role` and `geometry` per section, `rhythmVariance` for the page and
|
|
711
|
+
* the screenshot measures in `visual`. All four are optional: a version 1
|
|
712
|
+
* snapshot reads as version 2 without them (see `readSnapshot`), and nothing
|
|
713
|
+
* that judged a v1 snapshot judges it differently.
|
|
714
|
+
*/
|
|
715
|
+
declare const SNAPSHOT_VERSION = 2;
|
|
710
716
|
interface SnapshotColour {
|
|
711
717
|
/** `rgb(r, g, b)` or `rgba(r, g, b, a)`, as the browser computed it. */
|
|
712
718
|
value: string;
|
|
@@ -745,6 +751,27 @@ interface SnapshotControl {
|
|
|
745
751
|
text: string;
|
|
746
752
|
}
|
|
747
753
|
type SectionKind = "hero" | "logos" | "stats" | "cards" | "marquee" | "text" | "other";
|
|
754
|
+
/**
|
|
755
|
+
* What a section is for, finer than `kind`. `kind` keeps its version 1
|
|
756
|
+
* meaning because the rendered tells, the null models and the estate were
|
|
757
|
+
* calibrated on it; `role` is what component-level comparison reads.
|
|
758
|
+
*/
|
|
759
|
+
type SectionRole = SectionKind | "cta-band" | "footer-cta" | "pricing" | "testimonials" | "faq" | "process" | "features" | "team" | "contact";
|
|
760
|
+
/** How a section is laid out, measured, not judged. */
|
|
761
|
+
interface SectionGeometry {
|
|
762
|
+
/** Share of the section's text blocks that are centred, 0 to 1. */
|
|
763
|
+
centredShare: number;
|
|
764
|
+
/** Content area balance about the vertical centre line: 1 mirror-even, 0 all on one side. */
|
|
765
|
+
mirrorSymmetry: number;
|
|
766
|
+
/** Share of the section's area with no text, image or control in it, 0 to 1. */
|
|
767
|
+
whitespaceRatio: number;
|
|
768
|
+
/** Width the content spans, over the viewport width. */
|
|
769
|
+
contentWidthRatio: number;
|
|
770
|
+
/** The painted background behind the section, as computed. */
|
|
771
|
+
background: string;
|
|
772
|
+
/** Buttons and button-styled links in the section. */
|
|
773
|
+
controls: number;
|
|
774
|
+
}
|
|
748
775
|
interface SnapshotSection {
|
|
749
776
|
top: number;
|
|
750
777
|
height: number;
|
|
@@ -757,6 +784,26 @@ interface SnapshotSection {
|
|
|
757
784
|
iconCards: number;
|
|
758
785
|
/** Hidden at load, waiting for a scroll to reveal it. */
|
|
759
786
|
hiddenAtLoad: boolean;
|
|
787
|
+
/** Version 2. */
|
|
788
|
+
role?: SectionRole;
|
|
789
|
+
/** Version 2. */
|
|
790
|
+
geometry?: SectionGeometry;
|
|
791
|
+
}
|
|
792
|
+
/**
|
|
793
|
+
* Measures of the rendered pixels, from a full-page screenshot (capped at
|
|
794
|
+
* `height`). None of them passes or fails anything: they describe.
|
|
795
|
+
*/
|
|
796
|
+
interface SnapshotVisual {
|
|
797
|
+
/** Hasler and Süsstrunk (2003) colourfulness, M = σ_rgyb + 0.3 μ_rgyb, on 0-255 channels. Grey is 0. */
|
|
798
|
+
colourfulness: number;
|
|
799
|
+
/** Share of sampled pixels on a luminance edge: a complexity proxy, 0 to 1. */
|
|
800
|
+
edgeDensity: number;
|
|
801
|
+
/** 1 minus the mean luminance difference between each pixel and its left-right mirror, 0 to 1. */
|
|
802
|
+
symmetry: number;
|
|
803
|
+
width: number;
|
|
804
|
+
height: number;
|
|
805
|
+
/** Pixels actually read: large pages are sampled on a grid. */
|
|
806
|
+
sampled: number;
|
|
760
807
|
}
|
|
761
808
|
interface SnapshotGradient {
|
|
762
809
|
/** Colour stops, as computed. */
|
|
@@ -811,6 +858,12 @@ interface Snapshot {
|
|
|
811
858
|
sections: SnapshotSection[];
|
|
812
859
|
effects: SnapshotEffects;
|
|
813
860
|
motion: SnapshotMotion;
|
|
861
|
+
/** Version 2: coefficient of variation of the section heights. Null with fewer than two sections. */
|
|
862
|
+
rhythmVariance?: number | null;
|
|
863
|
+
/** Version 2: absent when the page could not be screenshotted. */
|
|
864
|
+
visual?: SnapshotVisual;
|
|
865
|
+
/** Set when a version 1 snapshot was read and upgraded in memory. */
|
|
866
|
+
migratedFrom?: 1;
|
|
814
867
|
/** The design-system measures trawl has collected since v7, kept so it can switch to this. */
|
|
815
868
|
metrics: {
|
|
816
869
|
fontSizes: number[];
|
|
@@ -1031,7 +1084,7 @@ interface CheckReport {
|
|
|
1031
1084
|
* Bumped whenever an entry is added, removed or its detection changes, so a
|
|
1032
1085
|
* report can say which list it was judged against.
|
|
1033
1086
|
*/
|
|
1034
|
-
declare const CATALOGUE_VERSION = "2026.09.
|
|
1087
|
+
declare const CATALOGUE_VERSION = "2026.09.9";
|
|
1035
1088
|
declare const CATALOGUE: readonly Tell[];
|
|
1036
1089
|
declare function tellById(id: string): Tell | undefined;
|
|
1037
1090
|
/**
|
|
@@ -1112,6 +1165,31 @@ interface HouseRule {
|
|
|
1112
1165
|
declare const HOUSE: Readonly<Record<string, HouseRule>>;
|
|
1113
1166
|
/** The house rule for a copy tell. Unknown ids are review, so a new tell never blocks. */
|
|
1114
1167
|
declare function houseRule(id: string, name?: string): HouseRule;
|
|
1168
|
+
/**
|
|
1169
|
+
* What a repo may and may not do to the house gate.
|
|
1170
|
+
*
|
|
1171
|
+
* A repo can raise a tell's severity in `craft.config.json`, or except a
|
|
1172
|
+
* design tell in `art-direction.json`. It cannot lower the blocking tier: a
|
|
1173
|
+
* `warn` or `off` there, or an exception naming a blocking tell, would let one
|
|
1174
|
+
* line and one sentence switch off a rule COPY.md calls not a judgment call,
|
|
1175
|
+
* in every commit that repo makes. `chatbot-residue` is the sharpest case: it
|
|
1176
|
+
* is evidence of a paste, and no client reason makes a paste acceptable.
|
|
1177
|
+
*
|
|
1178
|
+
* A genuine one-off (a style guide quoting an em dash, a testimonial) takes
|
|
1179
|
+
* `copy-ok` on its line: local, in the diff a reviewer reads, and listed in
|
|
1180
|
+
* every report. A rule that is wrong for everyone is changed here.
|
|
1181
|
+
*/
|
|
1182
|
+
declare const HOUSE_LOCKED = "the house blocking tier cannot be lowered by a repo. A genuine one-off takes copy-ok on its line; a rule that is wrong is changed in craft's house.ts and COPY.md";
|
|
1183
|
+
declare function holdHouseBlocks<E extends {
|
|
1184
|
+
tell: string;
|
|
1185
|
+
}, O extends {
|
|
1186
|
+
level: string;
|
|
1187
|
+
}>(exceptions: E[], severity: Record<string, O>): {
|
|
1188
|
+
exceptions: E[];
|
|
1189
|
+
severity: Record<string, O>;
|
|
1190
|
+
refused: E[];
|
|
1191
|
+
refusedSeverity: string[];
|
|
1192
|
+
};
|
|
1115
1193
|
|
|
1116
1194
|
/**
|
|
1117
1195
|
* Protected facts: what a rewrite must never lose or invent.
|
|
@@ -1411,6 +1489,41 @@ type FontClass = "serif" | "sans" | "mono" | "script" | "system";
|
|
|
1411
1489
|
declare function normaliseFamily(raw: string): string;
|
|
1412
1490
|
declare function fontClass(family: string): FontClass;
|
|
1413
1491
|
|
|
1492
|
+
/**
|
|
1493
|
+
* Read a saved snapshot of any version this craft understands. Pure.
|
|
1494
|
+
*
|
|
1495
|
+
* Version 2 only added optional fields, so a version 1 snapshot is a valid
|
|
1496
|
+
* version 2 snapshot without them. It is marked `migratedFrom: 1` so a report
|
|
1497
|
+
* can say which measures it lacks, rather than reading their absence as zero.
|
|
1498
|
+
*/
|
|
1499
|
+
|
|
1500
|
+
declare const READABLE_SNAPSHOT_VERSIONS: readonly [1, 2];
|
|
1501
|
+
declare function readSnapshot(data: unknown, source?: string): Snapshot;
|
|
1502
|
+
|
|
1503
|
+
/**
|
|
1504
|
+
* Measures of a screenshot's pixels. Pure: RGBA in, numbers out, no decoder
|
|
1505
|
+
* and no browser, so it is tested on synthetic images.
|
|
1506
|
+
*
|
|
1507
|
+
* Only measures that need no model are here, after Miniukovich and De Angeli
|
|
1508
|
+
* (2015, "Computation of interface aesthetics"): colourfulness, an edge-density
|
|
1509
|
+
* complexity proxy, and left-right symmetry. None of them is a verdict. A
|
|
1510
|
+
* sober site and a busy one can both be decided; these say which it is.
|
|
1511
|
+
*/
|
|
1512
|
+
|
|
1513
|
+
interface RgbaImage {
|
|
1514
|
+
width: number;
|
|
1515
|
+
height: number;
|
|
1516
|
+
/** Row-major, 4 bytes a pixel. */
|
|
1517
|
+
rgba: Uint8Array;
|
|
1518
|
+
}
|
|
1519
|
+
/** A luminance step, on 0-255, that counts as an edge. About a 12% contrast change. */
|
|
1520
|
+
declare const EDGE_STEP = 32;
|
|
1521
|
+
/**
|
|
1522
|
+
* Colourfulness, edge density and symmetry. Images over `maxSamples` pixels
|
|
1523
|
+
* are read on a regular grid, and edges are taken between grid neighbours.
|
|
1524
|
+
*/
|
|
1525
|
+
declare function visualMeasures(img: RgbaImage, maxSamples?: number): SnapshotVisual;
|
|
1526
|
+
|
|
1414
1527
|
/**
|
|
1415
1528
|
* A fingerprint: the handful of choices that make a site look like itself,
|
|
1416
1529
|
* reduced to something two sites can be compared on.
|
|
@@ -1425,9 +1538,24 @@ declare function fontClass(family: string): FontClass;
|
|
|
1425
1538
|
* Pure. Built from a Snapshot, so it describes what a visitor gets.
|
|
1426
1539
|
*/
|
|
1427
1540
|
|
|
1428
|
-
|
|
1541
|
+
/**
|
|
1542
|
+
* 2 adds `sections` (role and geometry in running order). A version 1
|
|
1543
|
+
* fingerprint, or one from a version 1 snapshot, has none, and every
|
|
1544
|
+
* comparison involving it uses `layout` exactly as version 1 did, so the null
|
|
1545
|
+
* models and the estate register compare as they were calibrated until they
|
|
1546
|
+
* are re-snapshotted.
|
|
1547
|
+
*/
|
|
1548
|
+
declare const FINGERPRINT_VERSION = 2;
|
|
1549
|
+
/** One section as layout comparison sees it. */
|
|
1550
|
+
interface FingerprintSection {
|
|
1551
|
+
role: SectionRole;
|
|
1552
|
+
/** Share of centred text, 0 to 1. */
|
|
1553
|
+
centred: number;
|
|
1554
|
+
/** Content width over viewport width, 0 to 1. */
|
|
1555
|
+
width: number;
|
|
1556
|
+
}
|
|
1429
1557
|
interface Fingerprint {
|
|
1430
|
-
version:
|
|
1558
|
+
version: 1 | 2;
|
|
1431
1559
|
/** The most prominent chromatic colour: button fills first, then painted area, then text. */
|
|
1432
1560
|
accent: Oklch | null;
|
|
1433
1561
|
ground: Oklch;
|
|
@@ -1447,6 +1575,8 @@ interface Fingerprint {
|
|
|
1447
1575
|
effects: string[];
|
|
1448
1576
|
/** Section kinds in running order, hero first. */
|
|
1449
1577
|
layout: SectionKind[];
|
|
1578
|
+
/** Version 2: present when every section carries a role and geometry. */
|
|
1579
|
+
sections?: FingerprintSection[];
|
|
1450
1580
|
}
|
|
1451
1581
|
declare function fingerprint(s: Snapshot): Fingerprint;
|
|
1452
1582
|
interface FingerprintDistance {
|
|
@@ -1476,6 +1606,8 @@ declare const DISTANCE_WEIGHTS: {
|
|
|
1476
1606
|
readonly effects: 0.1;
|
|
1477
1607
|
readonly layout: 0.1;
|
|
1478
1608
|
};
|
|
1609
|
+
/** Layout distance, 0 to 1: by role and geometry when both have them, else by kind as in version 1. */
|
|
1610
|
+
declare function layoutDistance(a: Fingerprint, b: Fingerprint): number;
|
|
1479
1611
|
declare function fingerprintDistance(a: Fingerprint, b: Fingerprint): FingerprintDistance;
|
|
1480
1612
|
/**
|
|
1481
1613
|
* The nearest neighbours of a fingerprint in a set, closest first. Typicality
|
|
@@ -1545,7 +1677,7 @@ declare function isCream({ l, c, h }: Oklch): boolean;
|
|
|
1545
1677
|
/** The faces a model picks when the brief does not name one. */
|
|
1546
1678
|
declare const REFLEX_FONTS_1: readonly ["Inter", "Roboto", "Open Sans", "Poppins", "Montserrat", "Lato"];
|
|
1547
1679
|
/** What models moved to once Inter was named and banned. */
|
|
1548
|
-
declare const REFLEX_FONTS_2: readonly ["Inter Tight", "DM Sans", "Manrope", "Space Grotesk", "Plus Jakarta Sans", "Outfit", "Geist", "Sora", "Instrument Sans", "Instrument Serif", "Fraunces", "Playfair Display", "Cormorant Garamond", "DM Serif Display"];
|
|
1680
|
+
declare const REFLEX_FONTS_2: readonly ["Inter Tight", "DM Sans", "Manrope", "Space Grotesk", "Plus Jakarta Sans", "Outfit", "Geist", "Cal Sans", "Sora", "Instrument Sans", "Instrument Serif", "Fraunces", "Playfair Display", "Cormorant Garamond", "DM Serif Display"];
|
|
1549
1681
|
/** Above this many scroll reveals in one scan, reveal is the default, not a choice. */
|
|
1550
1682
|
declare const REVEAL_LIMIT = 12;
|
|
1551
1683
|
/** Above this many fully rounded shapes in one scan, the pill is the shape language by accident. */
|
|
@@ -1688,6 +1820,48 @@ declare function initDirection(input: {
|
|
|
1688
1820
|
exceptions?: ArtDirection["exceptions"];
|
|
1689
1821
|
}): ArtDirection;
|
|
1690
1822
|
|
|
1823
|
+
/**
|
|
1824
|
+
* What each face and icon set is licensed for, checked against the licensor's
|
|
1825
|
+
* own page. A face a client site ships without a licence covering that site is
|
|
1826
|
+
* a commercial risk the site owner carries, so `craft direction validate` warns
|
|
1827
|
+
* on a display or body face this register does not know, or knows only as
|
|
1828
|
+
* capped or unverified. Unverified is never a pass.
|
|
1829
|
+
*
|
|
1830
|
+
* This is a register of facts, not a shortlist. Nothing here is proposed to a
|
|
1831
|
+
* site: a face chosen because it is on this list is the agency's own reflex
|
|
1832
|
+
* font (CHARACTER.md, "Distance from the estate"). A face enters the register
|
|
1833
|
+
* after a site has chosen it for a reason and someone has read its licence.
|
|
1834
|
+
*
|
|
1835
|
+
* `licences.json` is generated from this file for tools outside the package.
|
|
1836
|
+
* Regenerate it with `pnpm --filter @domandigital/craft run docs`.
|
|
1837
|
+
*/
|
|
1838
|
+
type LicenceSubject = "face" | "foundry" | "icons";
|
|
1839
|
+
/**
|
|
1840
|
+
* Whether one purchase covers the sites Doman Digital builds for unrelated
|
|
1841
|
+
* clients. `yes`: it does. `capped`: up to `cap` sites. `per-site`: each client
|
|
1842
|
+
* site needs its own licence, in the client's name. `unverified`: nobody has
|
|
1843
|
+
* read the licensor's own terms yet.
|
|
1844
|
+
*/
|
|
1845
|
+
type MultiClient = "yes" | "capped" | "per-site" | "unverified";
|
|
1846
|
+
interface LicenceEntry {
|
|
1847
|
+
/** The family name as CSS sets it, or the foundry or icon set's own name. */
|
|
1848
|
+
name: string;
|
|
1849
|
+
subject: LicenceSubject;
|
|
1850
|
+
licence: string;
|
|
1851
|
+
multiClient: MultiClient;
|
|
1852
|
+
/** How many sites one licence covers, when `multiClient` is `capped`. */
|
|
1853
|
+
cap?: number;
|
|
1854
|
+
/** When the licensor's page was read, ISO date. */
|
|
1855
|
+
checked: string;
|
|
1856
|
+
/** The licensor's own page. Never an aggregator. */
|
|
1857
|
+
source: string;
|
|
1858
|
+
note: string;
|
|
1859
|
+
}
|
|
1860
|
+
declare const LICENCES: readonly LicenceEntry[];
|
|
1861
|
+
/** The register entry for a face, by the family name CSS sets. */
|
|
1862
|
+
declare function faceLicence(family: string): LicenceEntry | undefined;
|
|
1863
|
+
declare function licencesJson(): string;
|
|
1864
|
+
|
|
1691
1865
|
/**
|
|
1692
1866
|
* Proposing an art direction from the client's world.
|
|
1693
1867
|
*
|
|
@@ -2004,4 +2178,4 @@ declare function characterReport(input: CharacterInputs, copyTells?: Set<string>
|
|
|
2004
2178
|
|
|
2005
2179
|
declare function retrofitPlan(report: CharacterReport, direction?: ArtDirection | null): string;
|
|
2006
2180
|
|
|
2007
|
-
export { AI_PHRASES, AI_VIOLET, AI_WORDS, type AccentFork, type AccentForkOptions, type Action, type Area, type ArtDirection, BASELINE_VERSION, BUZZWORDS, type Baseline, type BaselineEntry, CATALOGUE, CATALOGUE_VERSION, CHOICE_KEYS, type CandidateKind, type CharacterInputs, type CharacterReport, type CheckOptions, type CheckReport, type CheckRestraintInput, type ChoiceKey, type Claim, type ClaimsReport, type ContrastCheck, type ContrastReport, type CopyTell, type CraftConfig, type CraftTokensInput, type CraftTokensResult, DEFAULT_IGNORE, DENSITIES, DENSITY_NAMES, DIRECTION_VERSION, DISTANCE_WEIGHTS, DURATION_MS, DURATION_S, type DensityCssOptions, type DensityName, type DirectionChoice, type DirectionProblem, type DirectionReport, type DirectionSource, type DurationName, EASE, EASE_TUPLE, ESTATE_VERSION, EXIT_RATIO, type EaseName, type EmitCssOptions, type EstateMatch, type EstatePair, type EstateRegister, type EstateSite, FINGERPRINT_VERSION, type Fact, type FactComparison, type FactKind, type Finding, type Fingerprint, type FingerprintDistance, type FluidSpaceOptions, type FluidTypeOptions, type FluidTypeResult, type FontClass, type Gamut, type Generation, HOUSE, HOUSE_BUDGET, HOUSE_TYPE, type HarvestCandidate, type HarvestOptions, type Hit, type HouseRule, type HouseTier, JSON_SCHEMA_VERSION, LIGHTNESS_CURVE, MIN_DECIDED, MIN_RUNS, type MotionDecision, type MotionKind, NEGATIVE_REASSURANCE, NULL_VERSION, type NullModel, type NullRun, type Oklch, type OklchToHexOptions, PILL_LIMIT, PLAINER_WORDS, PROPOSED, type PaletteColour, type Proposal, type ProposeInput, RAMP_STEPS, REFLEX_FONTS_1, REFLEX_FONTS_2, RENDERED_PATHS, REVEAL_LIMIT, REVIEW_PHRASES, type Ramp, type RampFromAnchorsOptions, type RampOptions, type RampStep, type RestraintBudget, type RestraintReport, type RestraintSeverity, type RestraintViolation, type Rgb, SCALE, SHADCN_LIMIT, SHADCN_PRIMITIVES, SIBLING_AT, SNAPSHOT_VERSION, SOURCE_KINDS, SPACE_STEPS, SPRING, STOCK_PHRASES, type SarifOptions, type SarifTell, type SectionKind, type SectionRhythmOptions, type SemanticInput, type SemanticResult, type Severity, type SeverityLevel, type SeverityOverride, type ShouldAnimateInput, type SignalResult, type Snapshot, type SnapshotColour, type SnapshotControl, type SnapshotEffects, type SnapshotFont, type SnapshotGradient, type SnapshotHeading, type SnapshotMotion, type SnapshotPatch, type SnapshotSection, type SourceFile, type SourceKind, type SourceTell, type SpaceStep, type Surface, TELL_HEAVY, TYPE_STEPS, TYPICAL_AT, type TailwindPreset, type Tell, type TellException, type TypeStep, type Typicality, VAGUE_WORDS, type ValidateContext, type Verdict, accentFork, addSite, apcaContrast, applyBaseline, applyHouseGate, applySeverity, auditSnapshot, catalogueTable, characterReport, checkCopy, checkPair, checkRestraint, choicesOf, compareFacts, compareToEstate, craftTokens, createBaseline, deltaEOk, deltaEOkHex, densityCss, densityTokens, emitCss, emptyEstate, estatePairs, exitDuration, extractHtml, findClaims, findColours, findingKey, fingerprint, fingerprintDistance, fluidClamp, fluidSpace, fluidType, fontClass, formatClaims, formatComparison, formatHex, formatReport, globToRegExp, groundName, harvest, hexToOklch, houseRule, hueName, hueSwatch, ignoreMatcher, inP3Gamut, inSrgbGamut, initDirection, isAiViolet, isCream, makeSnapshot, motionTokens, namedSources, nearest, normaliseFamily, nullPrompt, oklchToHex, oklchToRgb, paletteFromPixels, parseBaseline, parseColour, parseCraftConfig, parseHex, propose, protectedFacts, ramp, rampFromAnchors, retrofitPlan, runTell, scanSource, sectionRhythm, semantic, severityExceptions, shapeName, sharedParts, shouldAnimate, siblingLine, tailwindV3Preset, tailwindV4Theme, tellById, toGamut, toJson, toSarif, typeFeatureTokens, typicality, validateDirection, visibleText, wcagContrast, wordListsJson };
|
|
2181
|
+
export { AI_PHRASES, AI_VIOLET, AI_WORDS, type AccentFork, type AccentForkOptions, type Action, type Area, type ArtDirection, BASELINE_VERSION, BUZZWORDS, type Baseline, type BaselineEntry, CATALOGUE, CATALOGUE_VERSION, CHOICE_KEYS, type CandidateKind, type CharacterInputs, type CharacterReport, type CheckOptions, type CheckReport, type CheckRestraintInput, type ChoiceKey, type Claim, type ClaimsReport, type ContrastCheck, type ContrastReport, type CopyTell, type CraftConfig, type CraftTokensInput, type CraftTokensResult, DEFAULT_IGNORE, DENSITIES, DENSITY_NAMES, DIRECTION_VERSION, DISTANCE_WEIGHTS, DURATION_MS, DURATION_S, type DensityCssOptions, type DensityName, type DirectionChoice, type DirectionProblem, type DirectionReport, type DirectionSource, type DurationName, EASE, EASE_TUPLE, EDGE_STEP, ESTATE_VERSION, EXIT_RATIO, type EaseName, type EmitCssOptions, type EstateMatch, type EstatePair, type EstateRegister, type EstateSite, FINGERPRINT_VERSION, type Fact, type FactComparison, type FactKind, type Finding, type Fingerprint, type FingerprintDistance, type FingerprintSection, type FluidSpaceOptions, type FluidTypeOptions, type FluidTypeResult, type FontClass, type Gamut, type Generation, HOUSE, HOUSE_BUDGET, HOUSE_LOCKED, HOUSE_TYPE, type HarvestCandidate, type HarvestOptions, type Hit, type HouseRule, type HouseTier, JSON_SCHEMA_VERSION, LICENCES, LIGHTNESS_CURVE, type LicenceEntry, type LicenceSubject, MIN_DECIDED, MIN_RUNS, type MotionDecision, type MotionKind, type MultiClient, NEGATIVE_REASSURANCE, NULL_VERSION, type NullModel, type NullRun, type Oklch, type OklchToHexOptions, PILL_LIMIT, PLAINER_WORDS, PROPOSED, type PaletteColour, type Proposal, type ProposeInput, RAMP_STEPS, READABLE_SNAPSHOT_VERSIONS, REFLEX_FONTS_1, REFLEX_FONTS_2, RENDERED_PATHS, REVEAL_LIMIT, REVIEW_PHRASES, type Ramp, type RampFromAnchorsOptions, type RampOptions, type RampStep, type RestraintBudget, type RestraintReport, type RestraintSeverity, type RestraintViolation, type Rgb, type RgbaImage, SCALE, SHADCN_LIMIT, SHADCN_PRIMITIVES, SIBLING_AT, SNAPSHOT_VERSION, SOURCE_KINDS, SPACE_STEPS, SPRING, STOCK_PHRASES, type SarifOptions, type SarifTell, type SectionGeometry, type SectionKind, type SectionRhythmOptions, type SectionRole, type SemanticInput, type SemanticResult, type Severity, type SeverityLevel, type SeverityOverride, type ShouldAnimateInput, type SignalResult, type Snapshot, type SnapshotColour, type SnapshotControl, type SnapshotEffects, type SnapshotFont, type SnapshotGradient, type SnapshotHeading, type SnapshotMotion, type SnapshotPatch, type SnapshotSection, type SnapshotVisual, type SourceFile, type SourceKind, type SourceTell, type SpaceStep, type Surface, TELL_HEAVY, TYPE_STEPS, TYPICAL_AT, type TailwindPreset, type Tell, type TellException, type TypeStep, type Typicality, VAGUE_WORDS, type ValidateContext, type Verdict, accentFork, addSite, apcaContrast, applyBaseline, applyHouseGate, applySeverity, auditSnapshot, catalogueTable, characterReport, checkCopy, checkPair, checkRestraint, choicesOf, compareFacts, compareToEstate, craftTokens, createBaseline, deltaEOk, deltaEOkHex, densityCss, densityTokens, emitCss, emptyEstate, estatePairs, exitDuration, extractHtml, faceLicence, findClaims, findColours, findingKey, fingerprint, fingerprintDistance, fluidClamp, fluidSpace, fluidType, fontClass, formatClaims, formatComparison, formatHex, formatReport, globToRegExp, groundName, harvest, hexToOklch, holdHouseBlocks, houseRule, hueName, hueSwatch, ignoreMatcher, inP3Gamut, inSrgbGamut, initDirection, isAiViolet, isCream, layoutDistance, licencesJson, makeSnapshot, motionTokens, namedSources, nearest, normaliseFamily, nullPrompt, oklchToHex, oklchToRgb, paletteFromPixels, parseBaseline, parseColour, parseCraftConfig, parseHex, propose, protectedFacts, ramp, rampFromAnchors, readSnapshot, retrofitPlan, runTell, scanSource, sectionRhythm, semantic, severityExceptions, shapeName, sharedParts, shouldAnimate, siblingLine, tailwindV3Preset, tailwindV4Theme, tellById, toGamut, toJson, toSarif, typeFeatureTokens, typicality, validateDirection, visibleText, visualMeasures, wcagContrast, wordListsJson };
|