@instruments/taxonomy 1.1.5 → 1.2.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/dist/assertions.d.ts +70 -0
- package/dist/authoring.d.ts +33 -0
- package/dist/axes/construction.d.ts +3 -0
- package/dist/axes/element-fabric.d.ts +2 -0
- package/dist/axes/element-fitout.d.ts +2 -0
- package/dist/axes/element-shared.d.ts +13 -0
- package/dist/axes/element.d.ts +2 -0
- package/dist/axes/finish.d.ts +9 -0
- package/dist/axes/format.d.ts +3 -0
- package/dist/axes/index.d.ts +62 -0
- package/dist/axes/installation-layout.d.ts +3 -0
- package/dist/axes/material.d.ts +3 -0
- package/dist/axes/mood-anchors.d.ts +4 -0
- package/dist/axes/mood.d.ts +2 -0
- package/dist/axes/palette.d.ts +7 -0
- package/dist/axes/pattern.d.ts +13 -0
- package/dist/axes/period-anchors.d.ts +4 -0
- package/dist/axes/period.d.ts +29 -0
- package/dist/axes/place-anchors.d.ts +4 -0
- package/dist/axes/place.d.ts +5 -0
- package/dist/axes/product-category.d.ts +3 -0
- package/dist/axes/requirement.d.ts +3 -0
- package/dist/axes/space/arrival.d.ts +2 -0
- package/dist/axes/space/circulation.d.ts +2 -0
- package/dist/axes/space/civic.d.ts +2 -0
- package/dist/axes/space/culture.d.ts +2 -0
- package/dist/axes/space/dining.d.ts +2 -0
- package/dist/axes/space/domestic.d.ts +2 -0
- package/dist/axes/space/fitness.d.ts +2 -0
- package/dist/axes/space/gathering.d.ts +2 -0
- package/dist/axes/space/healthcare.d.ts +2 -0
- package/dist/axes/space/learning.d.ts +2 -0
- package/dist/axes/space/market-neutral.d.ts +1 -0
- package/dist/axes/space/other.d.ts +2 -0
- package/dist/axes/space/outdoor.d.ts +2 -0
- package/dist/axes/space/retail.d.ts +2 -0
- package/dist/axes/space/sanitary.d.ts +2 -0
- package/dist/axes/space/service.d.ts +2 -0
- package/dist/axes/space/shared.d.ts +30 -0
- package/dist/axes/space/sleeping.d.ts +2 -0
- package/dist/axes/space/working.d.ts +2 -0
- package/dist/axes/space-anchors/arrival.d.ts +3 -0
- package/dist/axes/space-anchors/circulation.d.ts +3 -0
- package/dist/axes/space-anchors/civic.d.ts +3 -0
- package/dist/axes/space-anchors/culture.d.ts +3 -0
- package/dist/axes/space-anchors/dining.d.ts +3 -0
- package/dist/axes/space-anchors/domestic.d.ts +3 -0
- package/dist/axes/space-anchors/fitness.d.ts +3 -0
- package/dist/axes/space-anchors/gathering.d.ts +3 -0
- package/dist/axes/space-anchors/healthcare.d.ts +3 -0
- package/dist/axes/space-anchors/learning.d.ts +3 -0
- package/dist/axes/space-anchors/other.d.ts +3 -0
- package/dist/axes/space-anchors/outdoor.d.ts +3 -0
- package/dist/axes/space-anchors/retail.d.ts +3 -0
- package/dist/axes/space-anchors/sanitary.d.ts +3 -0
- package/dist/axes/space-anchors/service.d.ts +3 -0
- package/dist/axes/space-anchors/sleeping.d.ts +3 -0
- package/dist/axes/space-anchors/working.d.ts +3 -0
- package/dist/axes/space-anchors.d.ts +8 -0
- package/dist/axes/space.d.ts +61 -0
- package/dist/axes/style-anchors.d.ts +7 -0
- package/dist/axes/style.d.ts +2 -0
- package/dist/axes/tier.d.ts +42 -0
- package/dist/axes/typology.d.ts +2 -0
- package/dist/axes/unit-shape.d.ts +3 -0
- package/dist/canonicalisation.d.ts +44 -0
- package/dist/crosswalks/designshop.d.ts +30 -0
- package/dist/crosswalks/mapping.d.ts +29 -0
- package/dist/crosswalks/materialgraph.d.ts +38 -0
- package/dist/crosswalks/miu.d.ts +13 -0
- package/dist/crosswalks/strength.d.ts +19 -0
- package/dist/dictionaries.d.ts +4 -0
- package/dist/downstream-check-policy.d.ts +34 -0
- package/dist/env.d.ts +6 -0
- package/dist/estate/concepts.d.ts +116 -0
- package/dist/estate/decomposition.d.ts +40 -0
- package/dist/estate/index.d.ts +4 -0
- package/dist/estate/residue-report.d.ts +45 -0
- package/dist/estate/rows/architizer.d.ts +2 -0
- package/dist/estate/rows/designround.d.ts +2 -0
- package/dist/estate/rows/designshop.d.ts +2 -0
- package/dist/estate/rows/index.d.ts +2 -0
- package/dist/estate/rows/materia.d.ts +2 -0
- package/dist/estate/rows/materialgraph.d.ts +2 -0
- package/dist/estate/rows/samplize.d.ts +2 -0
- package/dist/estate/sources.d.ts +47 -0
- package/dist/index.d.ts +5 -339
- package/dist/index.js +105 -26
- package/dist/match.d.ts +107 -0
- package/dist/materialgraph-crossover-sources.d.ts +52 -0
- package/dist/search-corpus-source.d.ts +8 -0
- package/dist/taste-assertion.d.ts +112 -0
- package/dist/taste.d.ts +2 -0
- package/dist/term.d.ts +346 -0
- package/dist/v1.d.ts +141 -0
- package/package.json +9 -8
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { RelationPredicate, Term } from "./term.js";
|
|
2
|
+
/** The relation predicates, at runtime. TypeScript cannot enumerate a union, so this is by hand. */
|
|
3
|
+
export declare const RELATION_PREDICATES: readonly ["blend-of", "evokes", "influenced-by", "part-of", "reads-as", "related-to", "serves", "suitable-for", "typically-in"];
|
|
4
|
+
type AssertNever<T extends never> = T;
|
|
5
|
+
/**
|
|
6
|
+
* The totality guard, and it is load-bearing rather than decorative: a predicate added to `term.ts`
|
|
7
|
+
* and not listed above would otherwise fail to parse here in silence, and every assertion using it
|
|
8
|
+
* would read as unknown. This makes that a compile error instead - the type below is `never` while
|
|
9
|
+
* the list is complete, and stops being assignable the moment it is not.
|
|
10
|
+
*/
|
|
11
|
+
export type UnlistedRelationPredicate = AssertNever<Exclude<RelationPredicate, (typeof RELATION_PREDICATES)[number]>>;
|
|
12
|
+
/** Where a canonical term lives, and what it is called in the one spelling that counts. */
|
|
13
|
+
export interface TermLocation {
|
|
14
|
+
axisSlug: string;
|
|
15
|
+
facetSlug: string;
|
|
16
|
+
termSlug: string;
|
|
17
|
+
/** `<axis>.<term>`, or `<axis>.<facet>.<term>` on a faceted axis. ADR 0001's target form. */
|
|
18
|
+
qualifiedReference: string;
|
|
19
|
+
term: Term;
|
|
20
|
+
}
|
|
21
|
+
/** A parsed assertion: an optional relation predicate wrapping a term reference. */
|
|
22
|
+
export interface ParsedAssertion {
|
|
23
|
+
predicate?: RelationPredicate;
|
|
24
|
+
/** The term reference, verbatim and unfolded. */
|
|
25
|
+
target: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ResolvedAssertion extends ParsedAssertion {
|
|
28
|
+
location: TermLocation;
|
|
29
|
+
/** The spelling the matcher compares on: `predicate(qualifiedReference)` or a bare `qualifiedReference`. */
|
|
30
|
+
canonical: string;
|
|
31
|
+
/** True when the named term is deprecated. Resolves anyway; a published URI must keep resolving. */
|
|
32
|
+
deprecated: boolean;
|
|
33
|
+
/** The term that replaced it, when deprecated. */
|
|
34
|
+
supersededByReference?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Split `evokes(place.region.nordic)` into its predicate and target. A bare term reference parses
|
|
38
|
+
* to a target and no predicate. An unrecognised predicate does NOT parse: `foo(bar)` is not an
|
|
39
|
+
* assertion with an exotic predicate, it is a string nobody has defined.
|
|
40
|
+
*/
|
|
41
|
+
export declare const parseAssertion: (assertion: string) => ParsedAssertion | undefined;
|
|
42
|
+
/** Every canonical term, with the qualified id that names it. */
|
|
43
|
+
export declare const AUTHORING_LOCATIONS: readonly TermLocation[];
|
|
44
|
+
/** Every accepted spelling of every term, folded. Exported so a consumer can size the vocabulary. */
|
|
45
|
+
export declare const ASSERTION_KEYS: ReadonlySet<string>;
|
|
46
|
+
/** Resolve any published spelling of a term to the one location it names. */
|
|
47
|
+
export declare const resolveReference: (reference: string) => TermLocation | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Resolve a whole assertion, predicate included. Returns undefined when the predicate is not one
|
|
50
|
+
* `term.ts` defines, or when the target names no canonical term.
|
|
51
|
+
*/
|
|
52
|
+
export declare const resolveAssertion: (assertion: string) => ResolvedAssertion | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* The spelling the matcher compares on.
|
|
55
|
+
*
|
|
56
|
+
* An assertion this package cannot resolve folds to ITSELF rather than to nothing. That is the
|
|
57
|
+
* difference between a matcher and a gate: a consumer's private tag must still match its own
|
|
58
|
+
* counterpart on the other side, and only the canon's own artefacts are held to resolving.
|
|
59
|
+
*/
|
|
60
|
+
export declare const canonicalAssertion: (assertion: string) => string;
|
|
61
|
+
/** True when this package can resolve the assertion to a canonical term. */
|
|
62
|
+
export declare const isCanonicalAssertion: (assertion: string) => boolean;
|
|
63
|
+
/** The assertions this package cannot resolve, in input order. The failure message IS the work item. */
|
|
64
|
+
export declare const unknownAssertions: (assertions: Iterable<string>) => readonly string[];
|
|
65
|
+
/** Assertions naming a term that still resolves but has been superseded, with its successor. */
|
|
66
|
+
export declare const deprecatedAssertions: (assertions: Iterable<string>) => readonly {
|
|
67
|
+
assertion: string;
|
|
68
|
+
supersededByReference: string;
|
|
69
|
+
}[];
|
|
70
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Term } from "./term.js";
|
|
2
|
+
/**
|
|
3
|
+
* The published term shape. Widened in 0.2.0 from the original three fields to the full `Term` in
|
|
4
|
+
* `./term`, which adds external mappings, provenance, usage bands, supersession and typed
|
|
5
|
+
* relations. Every added field is optional, so this is a backward-compatible minor exactly as the
|
|
6
|
+
* banner above planned: "adding them later is a backward-compatible minor".
|
|
7
|
+
*/
|
|
8
|
+
export type TaxonomyTerm = Term;
|
|
9
|
+
export type { ExternalMapping, ExternalScheme, MatchStrength, PeriodSpan, RelationPredicate, RelationRole, SearchedWithout, SourceBasis, StyleKind, Term, TermProvenance, TermRelation, TermStatus, TermUsage, UsageBand, UsageWithheld, } from "./term.js";
|
|
10
|
+
export { type AlternativeReason, type AlternativesMatch, type BundleMatch, type BundleMember, type BundleMemberInput, type BundleRole, type BundleSearch, type CandidateAnnotations, type CanonicalAlternatives, type CanonicalBundle, DEFAULT_BUNDLE_ROLE, defineAlternatives, defineBundle, MATCH_TEST_VECTORS, MATCH_WEIGHTS, type MatchTestCandidate, type MatchTestVector, type MatchTier, matchAlternatives, matchBundle, type RankedCandidate, searchBundle, type SearchOptions, } from "./match.js";
|
|
11
|
+
export { ASSERTION_KEYS, canonicalAssertion, deprecatedAssertions, isCanonicalAssertion, type ParsedAssertion, parseAssertion, RELATION_PREDICATES, type ResolvedAssertion, resolveAssertion, resolveReference, type TermLocation, AUTHORING_LOCATIONS, unknownAssertions, } from "./assertions.js";
|
|
12
|
+
export { isInterchangeable, MATCH_STRENGTHS, SKOS_MATCH_PREDICATE, } from "./crosswalks/strength.js";
|
|
13
|
+
export { ambiguous as ambiguousMapping, approximates as approximateMapping, constitutive as constitutiveMapping, type CrosswalkMapping, declined as declinedMapping, resolved as resolvedMapping, } from "./crosswalks/mapping.js";
|
|
14
|
+
export { AXES, AXIS_SLUGS, type Axis, type AxisFacet, type AxisSlug, axisBySlug, axisTerms, CONSTRUCTION_TERMS, ELEMENT_TERMS, FINISH_TERMS, FORMAT_TERMS, INSTALLATION_LAYOUT_TERMS, MATERIAL_TERMS, MOOD_TERMS, PALETTE_CHARACTER_TERMS, PALETTE_FACETS, PALETTE_HUE_TERMS, PALETTE_TEMPERATURE_TERMS, PATTERN_TERMS, type PaletteFacet, PERIOD_TERMS, periodAt, periodsAt, PLACE_FACETS, PLACE_LANDSCAPE_TERMS, PLACE_REGION_TERMS, PRODUCT_CATEGORY_TERMS, REQUIREMENT_TERMS, type PlaceFacet, MARKET_NEUTRAL_SPACES, marketsServed, MOOD_ANCHORS, moodAnchorsFor, PERIOD_ANCHORS, periodAnchorsFor, PLACE_ANCHORS, placeAnchorsFor, SPACE_ANCHORS, spaceAnchorsFor, SPACE_SECTORS, SPACE_TERMS, type SpaceSector, type Anchors, anchorsFor, STYLE_ANCHORS, type StyleSlug, STYLE_TERMS, TYPOLOGY_TERMS, UNIT_SHAPE_TERMS, } from "./axes/index.js";
|
|
15
|
+
export { assertionMeaningFrom, type AmbiguousCanonicalisation, type CanonicalisationInput, type CanonicalisationVerdict, type DeclinedCanonicalisation, type ResolvedCanonicalisation, type UnresolvedCanonicalisation, } from "./canonicalisation.js";
|
|
16
|
+
export { type AmbiguousAssertionMeaning, type AssertionAuthority, type AssertionMeaning, type AssertionPolarity, type AssertionProvenance, type AssertionRole, type AssertionScope, type PortableAssertionTestVector, type PortableTasteAssertion, PORTABLE_ASSERTION_TEST_VECTORS, type ProjectContextAssertion, type RequirementAssertion, type RequirementConstraint, type RequirementOperator, type ResolvedAssertionMeaning, TAXONOMY_SNAPSHOT_VERSION, TASTE_ASSERTION_CONTRACT_VERSION, type TasteAssertion, type UnresolvedAssertionMeaning, } from "./taste-assertion.js";
|
|
17
|
+
export { APPLICATION_TERMS, MATERIAL_FAMILY_TERMS, SECTOR_TERMS, } from "./dictionaries.js";
|
|
18
|
+
export declare const PROVENANCE: {
|
|
19
|
+
readonly snapshot: "2026-07-08";
|
|
20
|
+
readonly source: "materialgraph packages/schema/src/registry/value-dictionaries.ts";
|
|
21
|
+
};
|
|
22
|
+
export { KNOWLEDGE_GRAPH, LEXICAL_ENTRIES, TAXONOMY_BASE_URI, type AxisNode, type CanonicalConceptUri, type ColorScopeTarget, type ConceptNode, type ExternalReference, type FacetNode, type GraphPredicate, type KnowledgeGraph, type KnowledgeGraphEdge, type KnowledgeGraphNode, type LexicalEntry, type LexicalContext, type LexicalTarget, type Lifecycle, type Governance, TAXONOMY_SNAPSHOT, type TaxonomyTarget, } from "./v1.js";
|
|
23
|
+
export declare const MATERIAL_FAMILIES: readonly ["paint", "wall-finish", "wallcovering", "textile", "upholstery", "carpet", "wood", "stone", "tile", "terrazzo", "metal", "glass", "resilient-flooring", "composite", "concrete", "leather", "other"];
|
|
24
|
+
export type MaterialFamily = (typeof MATERIAL_FAMILIES)[number];
|
|
25
|
+
export declare const isMaterialFamily: (value: string) => value is MaterialFamily;
|
|
26
|
+
export declare const SECTORS: readonly ["hospitality", "healthcare", "workplace", "residential", "retail", "education", "civic", "mixed-use", "transportation", "other"];
|
|
27
|
+
export type Sector = (typeof SECTORS)[number];
|
|
28
|
+
export declare const isSector: (value: string) => value is Sector;
|
|
29
|
+
export declare const APPLICATIONS: readonly ["wall", "flooring", "ceiling", "bath", "kitchen", "furniture", "lighting", "door", "window", "facade", "countertop", "fireplace", "stair-elevator", "bedding", "decor", "vertically-hanging", "transportation", "pool-fountain", "paving-deck", "partition", "millwork", "cabinetry", "masonry", "roof", "garage", "bar", "awning-umbrella", "recreation-sport", "ornamentation", "aquatic-environments", "upholstery", "trim", "wall-backsplash", "wall-upholstered", "wall-wet-shower", "flooring-wet-area", "flooring-entrance", "flooring-radiant-heat", "flooring-or-lab", "flooring-anti-fatigue", "flooring-esd", "flooring-safety-slip", "flooring-raised-access", "flooring-rigid-core", "flooring-dining-area", "flooring-subject-oil", "flooring-walk-in-freezer", "flooring-ramps-inclines", "furniture-seating", "furniture-headboard", "furniture-slipcover", "furniture-systems", "furniture-tackboard", "furniture-throw-pillow", "fireplace-firebox", "fireplace-hearth", "fireplace-mantel", "fireplace-surround", "bedding-bed-scarf", "bedding-sheets", "bedding-skirt", "bedding-bedspread", "bedding-box-spring-cover", "stair-riser", "stair-tread", "stair-railing", "stair-elevator-cladding", "vh-drapery", "vh-privacy-curtain", "vh-shower-curtain", "vh-theatrical-curtain", "vh-window-shade", "transportation-automotive", "transportation-aviation", "transportation-marine", "pool-coping", "pool-decking", "pool-lining", "paving-covered-areas", "paving-patio", "partition-toilet", "masonry-structural", "masonry-veneer", "recreation-gymnasium", "recreation-playground", "recreation-weightlifting", "awning", "tensile-structure", "umbrella", "countertop-chemical-resistant"];
|
|
30
|
+
export type Application = (typeof APPLICATIONS)[number];
|
|
31
|
+
export declare const isApplication: (value: string) => value is Application;
|
|
32
|
+
export declare const APPLICATION_PARENTS: Readonly<Partial<Record<Application, Application>>>;
|
|
33
|
+
export declare const applicationTopLevelOf: (application: Application) => Application;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ExternalMapping, MatchStrength, TermProvenance, TermRelation } from "../term.js";
|
|
2
|
+
export declare const aat: (slug: string, label: string, match: MatchStrength) => ExternalMapping;
|
|
3
|
+
export declare const uniclass: (slug: string, label: string, match: MatchStrength) => ExternalMapping;
|
|
4
|
+
export declare const AUTHORED: TermProvenance;
|
|
5
|
+
export declare const BALUSTRADE = "balustrade";
|
|
6
|
+
export declare const DOOR = "door";
|
|
7
|
+
export declare const INTERNAL_WALL = "internal-wall";
|
|
8
|
+
export declare const ROOF = "roof";
|
|
9
|
+
export declare const STAIR = "stair";
|
|
10
|
+
export declare const WINDOW = "window";
|
|
11
|
+
export declare const EF_EXTERNAL_WALLS = "External walls";
|
|
12
|
+
export declare const EF_FRAMED_STRUCTURES = "Framed structures";
|
|
13
|
+
export declare const partOf: (elementId: string) => TermRelation;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Term } from "../term.js";
|
|
2
|
+
/** How the exposed surface was produced. Unordered. */
|
|
3
|
+
export declare const FINISH_TREATMENT_TERMS: readonly Term[];
|
|
4
|
+
/** How much the surface reflects, least to most. Ordered; see the header. */
|
|
5
|
+
export declare const FINISH_SHEEN_TERMS: readonly Term[];
|
|
6
|
+
/** What the surface feels like, or reads as under a raking light. Unordered. */
|
|
7
|
+
export declare const FINISH_TEXTURE_TERMS: readonly Term[];
|
|
8
|
+
/** Kept for consumers importing the axis as one list; prefer the facets. */
|
|
9
|
+
export declare const FINISH_TERMS: readonly Term[];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Term } from "../term.js";
|
|
2
|
+
export declare const AXIS_SLUGS: readonly ["material-family", "product-category", "material", "pattern", "finish", "format", "unit-shape", "installation-layout", "construction", "requirement", "sector", "application", "space", "element", "typology", "style", "period", "mood", "palette", "place", "tier", "procurement", "strategy", "form", "density"];
|
|
3
|
+
export type AxisSlug = (typeof AXIS_SLUGS)[number];
|
|
4
|
+
export interface AxisGovernance {
|
|
5
|
+
introducedAt: string;
|
|
6
|
+
provenance: NonNullable<Term["provenance"]>;
|
|
7
|
+
reviewedAt: string;
|
|
8
|
+
}
|
|
9
|
+
export interface AxisFacet {
|
|
10
|
+
governance?: AxisGovernance;
|
|
11
|
+
label: string;
|
|
12
|
+
slug: string;
|
|
13
|
+
terms: readonly Term[];
|
|
14
|
+
}
|
|
15
|
+
export interface Axis {
|
|
16
|
+
slug: AxisSlug;
|
|
17
|
+
label: string;
|
|
18
|
+
/** The question the axis answers, in a reader's words. One line. */
|
|
19
|
+
question: string;
|
|
20
|
+
/**
|
|
21
|
+
* Where this axis ends and its nearest neighbour begins, with the criterion that decides it.
|
|
22
|
+
* Rendered verbatim on the axis page, because a boundary nobody can read is a boundary that gets
|
|
23
|
+
* re-litigated.
|
|
24
|
+
*/
|
|
25
|
+
boundary: string;
|
|
26
|
+
/** `authored` ships terms. `declared` is a real question with no terms yet, and says so. */
|
|
27
|
+
status: "authored" | "declared";
|
|
28
|
+
/** Lifecycle and provenance for the axis identity itself. Old axes omit this and use V1 baseline governance. */
|
|
29
|
+
governance?: AxisGovernance;
|
|
30
|
+
/** Single-dictionary axes carry one facet named for the axis. */
|
|
31
|
+
facets: readonly AxisFacet[];
|
|
32
|
+
/** Why the axis has no terms yet. Present only when status is "declared". */
|
|
33
|
+
gap?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare const AXES: readonly Axis[];
|
|
36
|
+
export declare const axisBySlug: (slug: AxisSlug) => Axis | undefined;
|
|
37
|
+
/** Every term on an axis, across all its facets. */
|
|
38
|
+
export declare const axisTerms: (axis: Axis) => readonly Term[];
|
|
39
|
+
export { ELEMENT_TERMS } from "./element.js";
|
|
40
|
+
export { CONSTRUCTION_TERMS } from "./construction.js";
|
|
41
|
+
export { FINISH_TERMS } from "./finish.js";
|
|
42
|
+
export { FORMAT_TERMS } from "./format.js";
|
|
43
|
+
export { INSTALLATION_LAYOUT_TERMS } from "./installation-layout.js";
|
|
44
|
+
export { MATERIAL_TERMS } from "./material.js";
|
|
45
|
+
export { MOOD_TERMS } from "./mood.js";
|
|
46
|
+
export { PATTERN_TERMS } from "./pattern.js";
|
|
47
|
+
export { PRODUCT_CATEGORY_TERMS } from "./product-category.js";
|
|
48
|
+
export { REQUIREMENT_TERMS } from "./requirement.js";
|
|
49
|
+
export { PALETTE_CHARACTER_TERMS, PALETTE_FACETS, PALETTE_HUE_TERMS, PALETTE_TEMPERATURE_TERMS, type PaletteFacet, } from "./palette.js";
|
|
50
|
+
export { PERIOD_TERMS, periodAt, periodsAt } from "./period.js";
|
|
51
|
+
export { PLACE_FACETS, PLACE_LANDSCAPE_TERMS, PLACE_REGION_TERMS, type PlaceFacet, } from "./place.js";
|
|
52
|
+
export { MOOD_ANCHORS, moodAnchorsFor } from "./mood-anchors.js";
|
|
53
|
+
export { PERIOD_ANCHORS, periodAnchorsFor } from "./period-anchors.js";
|
|
54
|
+
export { PLACE_ANCHORS, placeAnchorsFor } from "./place-anchors.js";
|
|
55
|
+
export { SPACE_ANCHORS, spaceAnchorsFor, type Anchors as SpaceAnchorSet, } from "./space-anchors.js";
|
|
56
|
+
export { marketsServed, SPACE_SECTORS, SPACE_TERMS, type SpaceSector, } from "./space.js";
|
|
57
|
+
export { MARKET_NEUTRAL_SPACES } from "./space/market-neutral.js";
|
|
58
|
+
export { anchorsFor, type Anchors, STYLE_ANCHORS, type StyleSlug, } from "./style-anchors.js";
|
|
59
|
+
export { STYLE_TERMS } from "./style.js";
|
|
60
|
+
export { oneRungDown, TIER_CHAIN_SCALE_TERMS, TIER_FACETS, TIER_MARKET_TERMS, TIER_PRICE_BAND_TERMS, type TierFacet, } from "./tier.js";
|
|
61
|
+
export { TYPOLOGY_TERMS } from "./typology.js";
|
|
62
|
+
export { UNIT_SHAPE_TERMS } from "./unit-shape.js";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Anchors } from "./style-anchors.js";
|
|
2
|
+
export declare const MOOD_ANCHORS: Readonly<Record<string, Anchors>>;
|
|
3
|
+
/** The anchors for a mood term, or undefined when the id names no mood. */
|
|
4
|
+
export declare const moodAnchorsFor: (moodId: string) => Anchors | undefined;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Term } from "../term.js";
|
|
2
|
+
export declare const PALETTE_HUE_TERMS: readonly Term[];
|
|
3
|
+
export declare const PALETTE_TEMPERATURE_TERMS: readonly Term[];
|
|
4
|
+
export declare const PALETTE_CHARACTER_TERMS: readonly Term[];
|
|
5
|
+
/** The three palette facets, each a closed dictionary in its own right. */
|
|
6
|
+
export declare const PALETTE_FACETS: readonly ["hue", "temperature", "character"];
|
|
7
|
+
export type PaletteFacet = (typeof PALETTE_FACETS)[number];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Term } from "../term.js";
|
|
2
|
+
/** The motif itself. Unordered: a damask is not more than a stripe. */
|
|
3
|
+
export declare const PATTERN_TYPE_TERMS: readonly Term[];
|
|
4
|
+
/** How big the repeat is. Ordered, micro to oversized. */
|
|
5
|
+
export declare const PATTERN_SCALE_TERMS: readonly Term[];
|
|
6
|
+
/** How much of the field the motif occupies. Ordered, none to dense. */
|
|
7
|
+
export declare const PATTERN_DENSITY_TERMS: readonly Term[];
|
|
8
|
+
/** How strictly the repeat is governed. Ordered, uniform to organic. */
|
|
9
|
+
export declare const PATTERN_REGULARITY_TERMS: readonly Term[];
|
|
10
|
+
/** Which way the pattern runs. Unordered: see the header on why this is not a ladder. */
|
|
11
|
+
export declare const PATTERN_DIRECTIONALITY_TERMS: readonly Term[];
|
|
12
|
+
/** Kept for consumers importing the axis as one list; prefer the facets. */
|
|
13
|
+
export declare const PATTERN_TERMS: readonly Term[];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Anchors } from "./style-anchors.js";
|
|
2
|
+
export declare const PERIOD_ANCHORS: Readonly<Record<string, Anchors>>;
|
|
3
|
+
/** The anchors for a period term, or undefined when the id names no period. */
|
|
4
|
+
export declare const periodAnchorsFor: (periodId: string) => Anchors | undefined;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Term } from "../term.js";
|
|
2
|
+
export declare const PERIOD_TERMS: readonly Term[];
|
|
3
|
+
/**
|
|
4
|
+
* The periods a year could belong to, best match first.
|
|
5
|
+
*
|
|
6
|
+
* Sibling spans overlap on purpose - Georgian and Regency genuinely do - so "what period is 1800?"
|
|
7
|
+
* has no single answer in the data. Resolving it lives here rather than in each consumer, because
|
|
8
|
+
* a tie-break reinvented five times is five different answers to one question.
|
|
9
|
+
*
|
|
10
|
+
* THE RANKING, and it is not quite the one TAX-10 proposed. That ticket said prefer the narrowest
|
|
11
|
+
* match, then the un-hedged one. Narrowest-first alone gets 1800 wrong: it returns Regency, whose
|
|
12
|
+
* core is 1811-1820, over Georgian, whose core contains 1800 outright. So the first key is whether
|
|
13
|
+
* the year falls in the period's UNCONTROVERSIAL CORE at all:
|
|
14
|
+
*
|
|
15
|
+
* 1. a core match beats an edge match 1800 is Georgian, only arguably Regency
|
|
16
|
+
* 2. then narrowest core 1815 is Regency, not merely Georgian
|
|
17
|
+
* 3. then `circa: false` dated boundaries beat conventional ones
|
|
18
|
+
* 4. among edge matches, least far outside 1832 is late Georgian, not late Regency
|
|
19
|
+
*
|
|
20
|
+
* `strict` drops the edge matches entirely, which is the difference between "give me a canonical
|
|
21
|
+
* period for this year" and "could this year defensibly be called that".
|
|
22
|
+
*/
|
|
23
|
+
export declare const periodsAt: (year: number, { strict }?: {
|
|
24
|
+
strict?: boolean | undefined;
|
|
25
|
+
}) => readonly Term[];
|
|
26
|
+
/** The single best period for a year, or undefined when none covers it. */
|
|
27
|
+
export declare const periodAt: (year: number, options?: {
|
|
28
|
+
strict?: boolean;
|
|
29
|
+
}) => Term | undefined;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Anchors } from "./style-anchors.js";
|
|
2
|
+
export declare const PLACE_ANCHORS: Readonly<Record<string, Anchors>>;
|
|
3
|
+
/** The anchors for a place term, or undefined when the id names no place. */
|
|
4
|
+
export declare const placeAnchorsFor: (placeId: string) => Anchors | undefined;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Term } from "../term.js";
|
|
2
|
+
export declare const PLACE_REGION_TERMS: readonly Term[];
|
|
3
|
+
export declare const PLACE_LANDSCAPE_TERMS: readonly Term[];
|
|
4
|
+
export declare const PLACE_FACETS: readonly ["region", "landscape"];
|
|
5
|
+
export type PlaceFacet = (typeof PLACE_FACETS)[number];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const MARKET_NEUTRAL_SPACES: ReadonlySet<string>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Sector } from "../../authoring.js";
|
|
2
|
+
import type { ExternalMapping, MatchStrength, TermProvenance, TermRelation, TermUsage, UsageBand } from "../../term.js";
|
|
3
|
+
export declare const VENDORED_SNAPSHOT = "2026-08-21";
|
|
4
|
+
export declare const DESIGNSHOP_SNAPSHOT = "2026-08-18";
|
|
5
|
+
export declare const DESIGNSHOP_CORPUS = "designshop room schemes";
|
|
6
|
+
export declare const aat: (slug: string, label: string, match: MatchStrength) => ExternalMapping;
|
|
7
|
+
/** The governed commercial dictionary the 0.2 draft was built from, kept for its consumed ids. */
|
|
8
|
+
export declare const MS_ROOM: TermProvenance;
|
|
9
|
+
/** Both dictionaries name this room. The ms_room id wins; both upstreams are recorded. */
|
|
10
|
+
export declare const MS_ROOM_MIU: TermProvenance;
|
|
11
|
+
export declare const AUTHORED: TermProvenance;
|
|
12
|
+
export declare const EVIDENCED: TermProvenance;
|
|
13
|
+
export declare const designshopUsage: (band: UsageBand) => TermUsage;
|
|
14
|
+
/** The spine. 172 snake_case values, flat, read from taxonomy-values-core.ts. */
|
|
15
|
+
export declare const MIU: TermProvenance;
|
|
16
|
+
/**
|
|
17
|
+
* Association with no stronger claim available. Named because several terms carry one and the
|
|
18
|
+
* predicate has to read the same on all of them.
|
|
19
|
+
*/
|
|
20
|
+
export declare const relatedTo: (target: string) => TermRelation;
|
|
21
|
+
/**
|
|
22
|
+
* The market this space exists to serve, wherever the building that contains it stands.
|
|
23
|
+
*
|
|
24
|
+
* Authored ONLY where the term's own published definition or note names the market in words that
|
|
25
|
+
* map one-to-one onto SECTOR terms - "dwelling" to residential, "hotel" to hospitality, "clinical"
|
|
26
|
+
* to healthcare, and so on. The criterion, and the register of terms reviewed and found to carry
|
|
27
|
+
* no market, are in `market-neutral.ts`. The parameter is typed to the SECTOR union so a typo
|
|
28
|
+
* fails to compile rather than dangling at test time.
|
|
29
|
+
*/
|
|
30
|
+
export declare const serves: (market: Sector) => TermRelation;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type Anchors = readonly [string, ...string[]];
|
|
2
|
+
/**
|
|
3
|
+
* Every space anchor, one file per sector so each stays inside the line budget and reads
|
|
4
|
+
* alphabetically within its own group.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SPACE_ANCHORS: Readonly<Record<string, Anchors>>;
|
|
7
|
+
/** The anchors for a space term, or undefined when the id names no space. */
|
|
8
|
+
export declare const spaceAnchorsFor: (spaceId: string) => Anchors | undefined;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Sector } from "../authoring.js";
|
|
2
|
+
import type { Term } from "../term.js";
|
|
3
|
+
/**
|
|
4
|
+
* A sector of the SPACE axis: a group of rooms that answer the same programme question.
|
|
5
|
+
*
|
|
6
|
+
* NOT THE SECTOR AXIS, despite the shared word, and the collision is old rather than chosen:
|
|
7
|
+
* these are PROGRAMME groups (where you sleep, wash, eat), while `sector.*` is the market a
|
|
8
|
+
* project serves. The market claim lives on individual terms as `serves` edges - see
|
|
9
|
+
* `marketsServed` below and the register in `space/market-neutral.ts` - and this grouping makes
|
|
10
|
+
* no market claim at all: the "healthcare" file holds `clean_room`, which serves no single
|
|
11
|
+
* market, and the "domestic" file is a programme word, not `sector.residential`.
|
|
12
|
+
*
|
|
13
|
+
* NOT A FACET, and not part of a term's identifier. `space.scullery` is the id whatever sector the
|
|
14
|
+
* scullery is filed under, and re-filing a room must never move its URI. This is a browse
|
|
15
|
+
* structure, and it exists because 197 rooms sorted alphabetically put Operating Room next to
|
|
16
|
+
* Orangery - which is a list you can search and not a list you can read.
|
|
17
|
+
*
|
|
18
|
+
* NOR IS IT `broaderSlug`. A scullery is not a kind of "Dining", so an ISA edge would be false;
|
|
19
|
+
* ADR 0001's relation rule is explicit that subsumption means every instance of the narrower term
|
|
20
|
+
* is an instance of the broader one. Sector is a filing decision about the vocabulary, which is a
|
|
21
|
+
* different kind of claim from a fact about the world, and conflating the two is how hierarchies
|
|
22
|
+
* fill up with things that are not parents.
|
|
23
|
+
*/
|
|
24
|
+
export interface SpaceSector {
|
|
25
|
+
slug: string;
|
|
26
|
+
/** The reader's word for the sector. */
|
|
27
|
+
label: string;
|
|
28
|
+
terms: readonly Term[];
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The seventeen sectors, in the order a browse page should show them.
|
|
32
|
+
*
|
|
33
|
+
* Ordered by programme rather than alphabetically or by size: where you arrive, where you move,
|
|
34
|
+
* where you sleep, wash, eat, gather, and so on out to the specialised sectors and the unclassified
|
|
35
|
+
* tail. A reader looking for their own corner of the built environment finds it by walking through
|
|
36
|
+
* a building, which is the order this list is in.
|
|
37
|
+
*
|
|
38
|
+
* `SPACE_TERMS` is DERIVED from this, so the flat list and the grouped one cannot disagree. It was
|
|
39
|
+
* previously the other way round - seventeen spreads into one array, with the grouping expressed
|
|
40
|
+
* only by which file a term happened to sit in, where nothing outside the package could read it.
|
|
41
|
+
*/
|
|
42
|
+
export declare const SPACE_SECTORS: readonly SpaceSector[];
|
|
43
|
+
export declare const SPACE_TERMS: readonly Term[];
|
|
44
|
+
/**
|
|
45
|
+
* The markets a space exists to serve, resolved through its ISA chain, or null where no market is
|
|
46
|
+
* part of the room's identity.
|
|
47
|
+
*
|
|
48
|
+
* THE ACCESSOR EXISTS SO THE INHERITANCE IS NOT REINVENTED. A `serves` edge restricts every
|
|
49
|
+
* descendant - each suite is a hotel room, so each suite serves hospitality - and a consumer
|
|
50
|
+
* reading raw edges would see `suite` carrying none and read it as unrestricted. The walk stops at
|
|
51
|
+
* the NEAREST edge-bearing ancestor, because a child's own edges are a narrower claim that
|
|
52
|
+
* replaces the inherited one rather than adding to it (`training_room` serves workplace inside a
|
|
53
|
+
* neutral `classroom`).
|
|
54
|
+
*
|
|
55
|
+
* Null is a reviewed claim, not a gap: the term serves whatever market its project serves. The
|
|
56
|
+
* register in `space/market-neutral.ts` is what makes that true, and the disposition test in
|
|
57
|
+
* `axes.test.ts` is what keeps it true. Answering "what belongs in a residential scheme" is
|
|
58
|
+
* therefore: every term whose result is null or includes "residential" - the neutral majority
|
|
59
|
+
* spans all sectors, and excluding it would fail closed.
|
|
60
|
+
*/
|
|
61
|
+
export declare const marketsServed: (termSlug: string) => readonly Sector[] | null;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { STYLE_TERMS } from "./style.js";
|
|
2
|
+
export type StyleSlug = (typeof STYLE_TERMS)[number]["slug"];
|
|
3
|
+
/** At least one anchor, so a key cannot be added and left empty. */
|
|
4
|
+
export type Anchors = readonly [string, ...string[]];
|
|
5
|
+
export declare const STYLE_ANCHORS: Readonly<Record<string, Anchors>>;
|
|
6
|
+
/** The anchors for a style term, or undefined when the id names no style. */
|
|
7
|
+
export declare const anchorsFor: (styleId: string) => Anchors | undefined;
|