@instruments/taxonomy 0.1.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/LICENSE +7 -0
- package/README.md +85 -0
- package/dist/crosswalks/miu.d.ts +16 -0
- package/dist/crosswalks/miu.js +400 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +350 -0
- package/package.json +42 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright © 2026 Material Technologies, LLC. All rights reserved.
|
|
2
|
+
|
|
3
|
+
This software and associated documentation files are the proprietary
|
|
4
|
+
property of Material Technologies, LLC. No license, express or implied,
|
|
5
|
+
is granted to use, copy, modify, merge, publish, distribute, sublicense,
|
|
6
|
+
or sell copies of this software except under a separate written
|
|
7
|
+
agreement with Material Technologies, LLC.
|
package/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# @instruments/taxonomy
|
|
2
|
+
|
|
3
|
+
The canonical materials taxonomy for the Material Instruments ecosystem: the governed
|
|
4
|
+
**dictionaries** (material families, sectors, and the hierarchical application zones) plus the
|
|
5
|
+
**consumer crosswalks** that map an external vendor's local vocabulary onto the canon. This package
|
|
6
|
+
is the single publishable home of the Material Semantics vocabularies that were previously vendored
|
|
7
|
+
per-repo as drifting local copies.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
pnpm add @instruments/taxonomy
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Import paths
|
|
16
|
+
|
|
17
|
+
### `@instruments/taxonomy` — the dictionaries
|
|
18
|
+
|
|
19
|
+
The pinned public vocabularies: `MATERIAL_FAMILIES` (17), `SECTORS` (10), `APPLICATIONS` (88 — 30
|
|
20
|
+
top-level zones plus 58 children). Each ships a `*_TERMS` array of labelled `TaxonomyTerm`s, an
|
|
21
|
+
`as const` id tuple, a string-literal type, and a `Set`-backed guard.
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
import {
|
|
25
|
+
APPLICATIONS,
|
|
26
|
+
MATERIAL_FAMILIES,
|
|
27
|
+
applicationTopLevelOf,
|
|
28
|
+
isMaterialFamily,
|
|
29
|
+
type Application,
|
|
30
|
+
} from "@instruments/taxonomy";
|
|
31
|
+
|
|
32
|
+
isMaterialFamily("wood"); // true
|
|
33
|
+
applicationTopLevelOf("stair_tread"); // "stair_elevator"
|
|
34
|
+
applicationTopLevelOf("wall"); // "wall" (already top-level)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### `@instruments/taxonomy/crosswalks/miu` — the MIU consumer crosswalk
|
|
38
|
+
|
|
39
|
+
Maps the Materials In Use (MIU) local vocabularies onto the canonical dictionaries. Total,
|
|
40
|
+
compile-time-checked `Record` maps plus string accessors that resolve unknown input to `null`
|
|
41
|
+
instead of throwing.
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import {
|
|
45
|
+
miuFamilyToCanonical,
|
|
46
|
+
MIU_SURFACE_APPLICATION_TO_CANONICAL,
|
|
47
|
+
} from "@instruments/taxonomy/crosswalks/miu";
|
|
48
|
+
|
|
49
|
+
miuFamilyToCanonical("ceramic_porcelain"); // "tile"
|
|
50
|
+
miuFamilyToCanonical("greenery_planting"); // null (declines to classify)
|
|
51
|
+
MIU_SURFACE_APPLICATION_TO_CANONICAL.railing; // "stair_railing"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Provenance and the re-sync ritual
|
|
55
|
+
|
|
56
|
+
The dictionaries are lifted **verbatim** from materialgraph —
|
|
57
|
+
`packages/schema/src/registry/value-dictionaries.ts`, snapshot `2026-07-08` (see the exported
|
|
58
|
+
`PROVENANCE` constant). Every term was lifecycle-active at that snapshot; lifecycle fields are
|
|
59
|
+
deferred from the published shape until governance needs them.
|
|
60
|
+
|
|
61
|
+
To re-sync: re-read the upstream file, re-check the terms list, the `broaderTermId` edges, and the
|
|
62
|
+
lifecycle fields, then bump this package. `src/materialgraph-sync.test.ts` mechanises the check — it
|
|
63
|
+
reads a sibling `~/Sites/materialgraph` checkout and asserts every id is still present upstream
|
|
64
|
+
(skipping only when that checkout is absent).
|
|
65
|
+
|
|
66
|
+
## The other-vs-null policy
|
|
67
|
+
|
|
68
|
+
For families and sectors, `other` is a **positive** classification — the canon's own dictionary
|
|
69
|
+
would file the term under `other`. `null` **declines** to classify: it is not a member at all, it
|
|
70
|
+
spans members, or any claim (including `other`) would be false. `unknown` therefore always maps to
|
|
71
|
+
`null`, never `other` — unknown is epistemic ("we couldn't identify it") while other is ontological
|
|
72
|
+
("identified; fits no bucket"); the application crosswalk has no `other` term at all, so there its
|
|
73
|
+
policy collapses to mapped-or-`null`.
|
|
74
|
+
|
|
75
|
+
## Versioning
|
|
76
|
+
|
|
77
|
+
Semver; changesets will drive releases later. Consumers should keep a **single pin** of this
|
|
78
|
+
package. The anti-pattern to avoid is the colorscope `3.6.0` / `3.7.1` split, where two pinned
|
|
79
|
+
copies of the same taxonomy drifted apart inside one dependency graph — the exact fragmentation this
|
|
80
|
+
package exists to end.
|
|
81
|
+
|
|
82
|
+
## Roadmap
|
|
83
|
+
|
|
84
|
+
Additive minors, all backward-compatible: an exported Material Bank category tree artifact, and
|
|
85
|
+
per-term lifecycle fields (status, deprecation, successor pointers) once governance requires them.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { MaterialFamily, Sector, Application } from '../index.js';
|
|
2
|
+
|
|
3
|
+
declare const MIU_MATERIAL_FAMILIES: readonly ["wood", "wood_veneer", "engineered_wood", "bamboo", "cork", "natural_stone", "terrazzo", "ceramic_porcelain", "glass", "metal", "concrete", "plaster", "clay", "brick", "paint_coating", "wallcovering", "laminate", "solid_surface", "mineral_composite", "resin", "linoleum", "vinyl", "rubber", "carpet", "rug", "textile", "leather", "acoustic_felt", "acoustic_composite", "recycled_composite", "paper_cardboard", "biobased_composite", "greenery_planting", "lighting", "hardware", "digital_media", "water_feature", "mixed_material", "color_palette_only", "unknown"];
|
|
4
|
+
type MiuMaterialFamily = (typeof MIU_MATERIAL_FAMILIES)[number];
|
|
5
|
+
declare const MIU_FAMILY_TO_CANONICAL: Readonly<Record<MiuMaterialFamily, MaterialFamily | null>>;
|
|
6
|
+
declare const MIU_PROJECT_SECTORS: readonly ["hospitality", "food_and_beverage", "workplace", "residential", "multifamily", "retail_and_showroom", "healthcare", "wellness", "education", "civic", "cultural", "community", "sports_recreation", "entertainment", "industrial", "logistics", "maker", "transportation", "landscape_public_realm", "mixed_use", "master_planning", "temporary_exhibition", "religious", "senior_living", "student_housing", "unknown"];
|
|
7
|
+
type MiuProjectSector = (typeof MIU_PROJECT_SECTORS)[number];
|
|
8
|
+
declare const MIU_SECTOR_TO_CANONICAL: Readonly<Record<MiuProjectSector, Sector | null>>;
|
|
9
|
+
declare const MIU_SURFACE_APPLICATIONS: readonly ["flooring", "floor_inlay", "stair_tread", "stair_riser", "wall_finish", "wall_panel", "wainscot", "baseboard", "trim", "ceiling_finish", "ceiling_cloud", "column_wrap", "door_finish", "frame_finish", "shower_wall", "shower_floor", "backsplash", "vanity_top", "toilet_partition", "commercial_kitchen_floor", "kitchen_wall", "food_service_counter", "laundry_floor", "pool_deck_surface", "reception_desk", "bar_front", "bar_top", "back_bar", "banquette_base", "cabinet_front", "shelving", "display_fixture", "closet_system", "workstation_casework", "checkout_counter", "upholstery", "loose_furniture", "built_in_seating", "banquette_upholstery", "drapery", "window_treatment", "rug", "carpet_tile", "bedding", "privacy_curtain", "acoustic_fabric_panel", "lighting_fixture", "acoustic_treatment", "partition", "operable_wall", "signage", "wayfinding", "hardware", "plumbing_fixture", "decorative_screen", "art_installation", "green_wall", "facade_cladding", "soffit", "exterior_screen", "paving", "decking", "outdoor_furniture", "planter", "pool_coping", "shade_structure", "railing", "fence_screen", "unknown"];
|
|
10
|
+
type MiuSurfaceApplication = (typeof MIU_SURFACE_APPLICATIONS)[number];
|
|
11
|
+
declare const MIU_SURFACE_APPLICATION_TO_CANONICAL: Readonly<Record<MiuSurfaceApplication, Application | null>>;
|
|
12
|
+
declare const miuFamilyToCanonical: (value: string) => MaterialFamily | null;
|
|
13
|
+
declare const miuSectorToCanonical: (value: string) => Sector | null;
|
|
14
|
+
declare const miuSurfaceApplicationToCanonical: (value: string) => Application | null;
|
|
15
|
+
|
|
16
|
+
export { MIU_FAMILY_TO_CANONICAL, MIU_MATERIAL_FAMILIES, MIU_PROJECT_SECTORS, MIU_SECTOR_TO_CANONICAL, MIU_SURFACE_APPLICATIONS, MIU_SURFACE_APPLICATION_TO_CANONICAL, type MiuMaterialFamily, type MiuProjectSector, type MiuSurfaceApplication, miuFamilyToCanonical, miuSectorToCanonical, miuSurfaceApplicationToCanonical };
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
// src/crosswalks/miu.ts
|
|
2
|
+
var MIU_MATERIAL_FAMILIES = [
|
|
3
|
+
"wood",
|
|
4
|
+
"wood_veneer",
|
|
5
|
+
"engineered_wood",
|
|
6
|
+
"bamboo",
|
|
7
|
+
"cork",
|
|
8
|
+
"natural_stone",
|
|
9
|
+
"terrazzo",
|
|
10
|
+
"ceramic_porcelain",
|
|
11
|
+
"glass",
|
|
12
|
+
"metal",
|
|
13
|
+
"concrete",
|
|
14
|
+
"plaster",
|
|
15
|
+
"clay",
|
|
16
|
+
"brick",
|
|
17
|
+
"paint_coating",
|
|
18
|
+
"wallcovering",
|
|
19
|
+
"laminate",
|
|
20
|
+
"solid_surface",
|
|
21
|
+
"mineral_composite",
|
|
22
|
+
"resin",
|
|
23
|
+
"linoleum",
|
|
24
|
+
"vinyl",
|
|
25
|
+
"rubber",
|
|
26
|
+
"carpet",
|
|
27
|
+
"rug",
|
|
28
|
+
"textile",
|
|
29
|
+
"leather",
|
|
30
|
+
"acoustic_felt",
|
|
31
|
+
"acoustic_composite",
|
|
32
|
+
"recycled_composite",
|
|
33
|
+
"paper_cardboard",
|
|
34
|
+
"biobased_composite",
|
|
35
|
+
"greenery_planting",
|
|
36
|
+
"lighting",
|
|
37
|
+
"hardware",
|
|
38
|
+
"digital_media",
|
|
39
|
+
"water_feature",
|
|
40
|
+
"mixed_material",
|
|
41
|
+
"color_palette_only",
|
|
42
|
+
"unknown"
|
|
43
|
+
];
|
|
44
|
+
var MIU_FAMILY_TO_CANONICAL = {
|
|
45
|
+
wood: "wood",
|
|
46
|
+
// Veneer and engineered constructions are wood at family grain; construction is sub-family detail.
|
|
47
|
+
wood_veneer: "wood",
|
|
48
|
+
engineered_wood: "wood",
|
|
49
|
+
// Botanically a grass, but sold, specified, and finished as wood (flooring, ply, veneer).
|
|
50
|
+
bamboo: "wood",
|
|
51
|
+
// Trade classification: cork is a canonical resilient flooring type alongside linoleum and rubber.
|
|
52
|
+
cork: "resilient_flooring",
|
|
53
|
+
natural_stone: "stone",
|
|
54
|
+
terrazzo: "terrazzo",
|
|
55
|
+
// MS has no ceramic family; in interiors ceramic/porcelain IS the tile family (materialgraph's
|
|
56
|
+
// own tile_material_family dictionary leads with ceramic and porcelain).
|
|
57
|
+
ceramic_porcelain: "tile",
|
|
58
|
+
glass: "glass",
|
|
59
|
+
metal: "metal",
|
|
60
|
+
concrete: "concrete",
|
|
61
|
+
// Plaster, venetian plaster, and limewash are the archetypal MS wall finishes.
|
|
62
|
+
plaster: "wall_finish",
|
|
63
|
+
// With ceramic_porcelain and brick as separate MIU families, clay denotes unfired clay finishes
|
|
64
|
+
// (clay plaster and kin) — wall finish.
|
|
65
|
+
clay: "wall_finish",
|
|
66
|
+
// Real masonry material with no canonical family (no masonry term; fired clay is not `stone`).
|
|
67
|
+
brick: "other",
|
|
68
|
+
paint_coating: "paint",
|
|
69
|
+
wallcovering: "wallcovering",
|
|
70
|
+
// HPL is a paper/resin layered composite; worksurface/wall are roles, not the material family.
|
|
71
|
+
laminate: "composite",
|
|
72
|
+
// Acrylic + mineral-filler blend — the definition of an engineered composite.
|
|
73
|
+
solid_surface: "composite",
|
|
74
|
+
mineral_composite: "composite",
|
|
75
|
+
// Architectural resin panels (ecoresin, encapsulated-layer) are composites in practice.
|
|
76
|
+
resin: "composite",
|
|
77
|
+
linoleum: "resilient_flooring",
|
|
78
|
+
// In a list where textile and wallcovering are separate families, MIU vinyl means sheet/LVT flooring.
|
|
79
|
+
vinyl: "resilient_flooring",
|
|
80
|
+
// Rubber flooring is trade-canonical resilient flooring.
|
|
81
|
+
rubber: "resilient_flooring",
|
|
82
|
+
carpet: "carpet",
|
|
83
|
+
// A rug is loose-laid carpet; installation is not family.
|
|
84
|
+
rug: "carpet",
|
|
85
|
+
textile: "textile",
|
|
86
|
+
leather: "leather",
|
|
87
|
+
// PET felt is a nonwoven textile; "acoustic" is the role (MATERIAL_ROLES), not the family.
|
|
88
|
+
acoustic_felt: "textile",
|
|
89
|
+
// Layered/engineered acoustic panels; composite is the material-truth home.
|
|
90
|
+
acoustic_composite: "composite",
|
|
91
|
+
recycled_composite: "composite",
|
|
92
|
+
// Genuine architectural material (paper wall finishes, cardboard construction) with no canonical
|
|
93
|
+
// family; not textile, not composite.
|
|
94
|
+
paper_cardboard: "other",
|
|
95
|
+
biobased_composite: "composite",
|
|
96
|
+
// Living matter, not a material family; even `other` would falsely assert material-hood.
|
|
97
|
+
greenery_planting: null,
|
|
98
|
+
// FF&E product category; classifying the fixture's constituent materials would be a guess.
|
|
99
|
+
lighting: null,
|
|
100
|
+
// FF&E product category; usually metal, but asserting `metal` is a guess — never guess.
|
|
101
|
+
hardware: null,
|
|
102
|
+
// Screens/projected content — an experience layer, not a material.
|
|
103
|
+
digital_media: null,
|
|
104
|
+
// An assembly/element, not a material family.
|
|
105
|
+
water_feature: null,
|
|
106
|
+
// Spans multiple families; materialgraph models families as a multi-valued array, so a
|
|
107
|
+
// single-valued crosswalk cannot honestly pick one.
|
|
108
|
+
mixed_material: null,
|
|
109
|
+
// Granularity sentinel (it also appears in MATERIAL_GRANULARITIES), not a material identity.
|
|
110
|
+
color_palette_only: null,
|
|
111
|
+
// Epistemic sentinel — explicitly NOT `other` (unidentified is not identified-but-unclassifiable).
|
|
112
|
+
unknown: null
|
|
113
|
+
};
|
|
114
|
+
var MIU_PROJECT_SECTORS = [
|
|
115
|
+
"hospitality",
|
|
116
|
+
"food_and_beverage",
|
|
117
|
+
"workplace",
|
|
118
|
+
"residential",
|
|
119
|
+
"multifamily",
|
|
120
|
+
"retail_and_showroom",
|
|
121
|
+
"healthcare",
|
|
122
|
+
"wellness",
|
|
123
|
+
"education",
|
|
124
|
+
"civic",
|
|
125
|
+
"cultural",
|
|
126
|
+
"community",
|
|
127
|
+
"sports_recreation",
|
|
128
|
+
"entertainment",
|
|
129
|
+
"industrial",
|
|
130
|
+
"logistics",
|
|
131
|
+
"maker",
|
|
132
|
+
"transportation",
|
|
133
|
+
"landscape_public_realm",
|
|
134
|
+
"mixed_use",
|
|
135
|
+
"master_planning",
|
|
136
|
+
"temporary_exhibition",
|
|
137
|
+
"religious",
|
|
138
|
+
"senior_living",
|
|
139
|
+
"student_housing",
|
|
140
|
+
"unknown"
|
|
141
|
+
];
|
|
142
|
+
var MIU_SECTOR_TO_CANONICAL = {
|
|
143
|
+
hospitality: "hospitality",
|
|
144
|
+
// Restaurants and F&B venues are the hospitality sector at MG grain (MB's own analytics files
|
|
145
|
+
// "Hospitality: Restaurant").
|
|
146
|
+
food_and_beverage: "hospitality",
|
|
147
|
+
workplace: "workplace",
|
|
148
|
+
residential: "residential",
|
|
149
|
+
// Multi-unit housing is residential; MG mixed_use means mixed-use developments, not multifamily.
|
|
150
|
+
multifamily: "residential",
|
|
151
|
+
// Showrooms are retail environments.
|
|
152
|
+
retail_and_showroom: "retail",
|
|
153
|
+
healthcare: "healthcare",
|
|
154
|
+
// Spans hospitality spas, healthcare clinics, and fitness; no honest single sector term.
|
|
155
|
+
wellness: "other",
|
|
156
|
+
education: "education",
|
|
157
|
+
civic: "civic",
|
|
158
|
+
// Museums, galleries, and theatres are civic-cultural institutions at MG grain.
|
|
159
|
+
cultural: "civic",
|
|
160
|
+
// Community centres are civic infrastructure.
|
|
161
|
+
community: "civic",
|
|
162
|
+
// No sports sector; spans civic recreation and commercial venues.
|
|
163
|
+
sports_recreation: "other",
|
|
164
|
+
// Cinemas and venues; no canonical term.
|
|
165
|
+
entertainment: "other",
|
|
166
|
+
// Real sector with no canonical term.
|
|
167
|
+
industrial: "other",
|
|
168
|
+
// Real sector with no canonical term.
|
|
169
|
+
logistics: "other",
|
|
170
|
+
// Fabrication studios and workshops; nearer industrial than office workplace.
|
|
171
|
+
maker: "other",
|
|
172
|
+
transportation: "transportation",
|
|
173
|
+
// Parks and plazas are civic public realm.
|
|
174
|
+
landscape_public_realm: "civic",
|
|
175
|
+
mixed_use: "mixed_use",
|
|
176
|
+
// Spans sectors by definition — a single-valued crosswalk cannot honestly pick one (mirrors
|
|
177
|
+
// mixed_material in the family crosswalk).
|
|
178
|
+
master_planning: null,
|
|
179
|
+
// Exhibitions and installations; no canonical term.
|
|
180
|
+
temporary_exhibition: "other",
|
|
181
|
+
// Religious buildings are not civic government; real sector, no term.
|
|
182
|
+
religious: "other",
|
|
183
|
+
// A housing typology; the healthcare-adjacent bleed is accepted.
|
|
184
|
+
senior_living: "residential",
|
|
185
|
+
// A housing typology.
|
|
186
|
+
student_housing: "residential",
|
|
187
|
+
// Epistemic sentinel — explicitly NOT `other` (unidentified is not identified-but-unclassifiable).
|
|
188
|
+
unknown: null
|
|
189
|
+
};
|
|
190
|
+
var MIU_SURFACE_APPLICATIONS = [
|
|
191
|
+
"flooring",
|
|
192
|
+
"floor_inlay",
|
|
193
|
+
"stair_tread",
|
|
194
|
+
"stair_riser",
|
|
195
|
+
"wall_finish",
|
|
196
|
+
"wall_panel",
|
|
197
|
+
"wainscot",
|
|
198
|
+
"baseboard",
|
|
199
|
+
"trim",
|
|
200
|
+
"ceiling_finish",
|
|
201
|
+
"ceiling_cloud",
|
|
202
|
+
"column_wrap",
|
|
203
|
+
"door_finish",
|
|
204
|
+
"frame_finish",
|
|
205
|
+
"shower_wall",
|
|
206
|
+
"shower_floor",
|
|
207
|
+
"backsplash",
|
|
208
|
+
"vanity_top",
|
|
209
|
+
"toilet_partition",
|
|
210
|
+
"commercial_kitchen_floor",
|
|
211
|
+
"kitchen_wall",
|
|
212
|
+
"food_service_counter",
|
|
213
|
+
"laundry_floor",
|
|
214
|
+
"pool_deck_surface",
|
|
215
|
+
"reception_desk",
|
|
216
|
+
"bar_front",
|
|
217
|
+
"bar_top",
|
|
218
|
+
"back_bar",
|
|
219
|
+
"banquette_base",
|
|
220
|
+
"cabinet_front",
|
|
221
|
+
"shelving",
|
|
222
|
+
"display_fixture",
|
|
223
|
+
"closet_system",
|
|
224
|
+
"workstation_casework",
|
|
225
|
+
"checkout_counter",
|
|
226
|
+
"upholstery",
|
|
227
|
+
"loose_furniture",
|
|
228
|
+
"built_in_seating",
|
|
229
|
+
"banquette_upholstery",
|
|
230
|
+
"drapery",
|
|
231
|
+
"window_treatment",
|
|
232
|
+
"rug",
|
|
233
|
+
"carpet_tile",
|
|
234
|
+
"bedding",
|
|
235
|
+
"privacy_curtain",
|
|
236
|
+
"acoustic_fabric_panel",
|
|
237
|
+
"lighting_fixture",
|
|
238
|
+
"acoustic_treatment",
|
|
239
|
+
"partition",
|
|
240
|
+
"operable_wall",
|
|
241
|
+
"signage",
|
|
242
|
+
"wayfinding",
|
|
243
|
+
"hardware",
|
|
244
|
+
"plumbing_fixture",
|
|
245
|
+
"decorative_screen",
|
|
246
|
+
"art_installation",
|
|
247
|
+
"green_wall",
|
|
248
|
+
"facade_cladding",
|
|
249
|
+
"soffit",
|
|
250
|
+
"exterior_screen",
|
|
251
|
+
"paving",
|
|
252
|
+
"decking",
|
|
253
|
+
"outdoor_furniture",
|
|
254
|
+
"planter",
|
|
255
|
+
"pool_coping",
|
|
256
|
+
"shade_structure",
|
|
257
|
+
"railing",
|
|
258
|
+
"fence_screen",
|
|
259
|
+
"unknown"
|
|
260
|
+
];
|
|
261
|
+
var MIU_SURFACE_APPLICATION_TO_CANONICAL = {
|
|
262
|
+
flooring: "flooring",
|
|
263
|
+
// A decorative flooring detail.
|
|
264
|
+
floor_inlay: "flooring",
|
|
265
|
+
stair_tread: "stair_tread",
|
|
266
|
+
stair_riser: "stair_riser",
|
|
267
|
+
wall_finish: "wall",
|
|
268
|
+
// Panelised wall surface; still the wall zone.
|
|
269
|
+
wall_panel: "wall",
|
|
270
|
+
// Lower-wall treatment.
|
|
271
|
+
wainscot: "wall",
|
|
272
|
+
// Wall-base trim reads as the wall zone, not flooring.
|
|
273
|
+
baseboard: "wall",
|
|
274
|
+
// Architectural trim is millwork/joinery.
|
|
275
|
+
trim: "millwork",
|
|
276
|
+
ceiling_finish: "ceiling",
|
|
277
|
+
// A suspended ceiling element.
|
|
278
|
+
ceiling_cloud: "ceiling",
|
|
279
|
+
// Vertical surface cladding.
|
|
280
|
+
column_wrap: "wall",
|
|
281
|
+
door_finish: "door",
|
|
282
|
+
// Spans door, window, and facade frames; no honest single term.
|
|
283
|
+
frame_finish: null,
|
|
284
|
+
shower_wall: "wall_wet_shower",
|
|
285
|
+
// Wet-area flooring.
|
|
286
|
+
shower_floor: "flooring_wet_area",
|
|
287
|
+
backsplash: "wall_backsplash",
|
|
288
|
+
// A bathroom counter.
|
|
289
|
+
vanity_top: "countertop",
|
|
290
|
+
toilet_partition: "partition_toilet",
|
|
291
|
+
// Kitchen-zone application; MG's oil/wet flooring leaves would over-assume the condition.
|
|
292
|
+
commercial_kitchen_floor: "kitchen",
|
|
293
|
+
// Kitchen-zone application.
|
|
294
|
+
kitchen_wall: "kitchen",
|
|
295
|
+
// A service counter.
|
|
296
|
+
food_service_counter: "countertop",
|
|
297
|
+
// Wet-area flooring.
|
|
298
|
+
laundry_floor: "flooring_wet_area",
|
|
299
|
+
pool_deck_surface: "pool_decking",
|
|
300
|
+
// Reception desks are casework.
|
|
301
|
+
reception_desk: "millwork",
|
|
302
|
+
// The bar zone.
|
|
303
|
+
bar_front: "bar",
|
|
304
|
+
// The bar zone term is more specific than countertop.
|
|
305
|
+
bar_top: "bar",
|
|
306
|
+
// The bar zone.
|
|
307
|
+
back_bar: "bar",
|
|
308
|
+
// Built-in joinery base.
|
|
309
|
+
banquette_base: "millwork",
|
|
310
|
+
cabinet_front: "cabinetry",
|
|
311
|
+
// Built-in shelving is millwork.
|
|
312
|
+
shelving: "millwork",
|
|
313
|
+
// Retail display fixtures are casework.
|
|
314
|
+
display_fixture: "millwork",
|
|
315
|
+
// Closet systems are cabinetry.
|
|
316
|
+
closet_system: "cabinetry",
|
|
317
|
+
// Office systems furniture.
|
|
318
|
+
workstation_casework: "furniture_systems",
|
|
319
|
+
// A service counter.
|
|
320
|
+
checkout_counter: "countertop",
|
|
321
|
+
// Seating upholstery; upholstered walls have their own MIU entries.
|
|
322
|
+
upholstery: "furniture_seating",
|
|
323
|
+
loose_furniture: "furniture",
|
|
324
|
+
// Built-in seating.
|
|
325
|
+
built_in_seating: "furniture_seating",
|
|
326
|
+
// Banquette seating upholstery.
|
|
327
|
+
banquette_upholstery: "furniture_seating",
|
|
328
|
+
drapery: "vh_drapery",
|
|
329
|
+
// Generic; the shade/curtain leaves would over-assume the type.
|
|
330
|
+
window_treatment: "vertically_hanging",
|
|
331
|
+
// Loose floor covering.
|
|
332
|
+
rug: "flooring",
|
|
333
|
+
// Modular floor covering.
|
|
334
|
+
carpet_tile: "flooring",
|
|
335
|
+
bedding: "bedding",
|
|
336
|
+
privacy_curtain: "vh_privacy_curtain",
|
|
337
|
+
// An upholstered wall panel.
|
|
338
|
+
acoustic_fabric_panel: "wall_upholstered",
|
|
339
|
+
lighting_fixture: "lighting",
|
|
340
|
+
// Spans wall, ceiling, and baffle treatments; no honest single term.
|
|
341
|
+
acoustic_treatment: null,
|
|
342
|
+
partition: "partition",
|
|
343
|
+
// A movable partition.
|
|
344
|
+
operable_wall: "partition",
|
|
345
|
+
// No signage term; decor or ornamentation would be false.
|
|
346
|
+
signage: null,
|
|
347
|
+
// No wayfinding term.
|
|
348
|
+
wayfinding: null,
|
|
349
|
+
// Spans door, cabinet, and bath hardware — never guess.
|
|
350
|
+
hardware: null,
|
|
351
|
+
// Predominantly sanitary fixtures; the kitchen-sink bleed is accepted.
|
|
352
|
+
plumbing_fixture: "bath",
|
|
353
|
+
// A freestanding room divider.
|
|
354
|
+
decorative_screen: "partition",
|
|
355
|
+
// Artwork is decor at MG grain.
|
|
356
|
+
art_installation: "decor",
|
|
357
|
+
// A planted wall system is still a wall application.
|
|
358
|
+
green_wall: "wall",
|
|
359
|
+
facade_cladding: "facade",
|
|
360
|
+
// The underside plane; exterior soffits accepted as bleed.
|
|
361
|
+
soffit: "ceiling",
|
|
362
|
+
// Envelope screening.
|
|
363
|
+
exterior_screen: "facade",
|
|
364
|
+
paving: "paving_deck",
|
|
365
|
+
// General decking; pool decking has its own MIU entry.
|
|
366
|
+
decking: "paving_deck",
|
|
367
|
+
// The application vocabulary has no outdoor bucket.
|
|
368
|
+
outdoor_furniture: "furniture",
|
|
369
|
+
// Pots and planters are decor.
|
|
370
|
+
planter: "decor",
|
|
371
|
+
pool_coping: "pool_coping",
|
|
372
|
+
// Awning/tensile family; a specific leaf would over-assume.
|
|
373
|
+
shade_structure: "awning_umbrella",
|
|
374
|
+
// Railings and balustrades live under stair & elevator.
|
|
375
|
+
railing: "stair_railing",
|
|
376
|
+
// Exterior fencing; no canonical term.
|
|
377
|
+
fence_screen: null,
|
|
378
|
+
// Epistemic sentinel.
|
|
379
|
+
unknown: null
|
|
380
|
+
};
|
|
381
|
+
var MIU_MATERIAL_FAMILY_SET = new Set(MIU_MATERIAL_FAMILIES);
|
|
382
|
+
var MIU_PROJECT_SECTOR_SET = new Set(MIU_PROJECT_SECTORS);
|
|
383
|
+
var MIU_SURFACE_APPLICATION_SET = new Set(MIU_SURFACE_APPLICATIONS);
|
|
384
|
+
var isMiuMaterialFamily = (value) => MIU_MATERIAL_FAMILY_SET.has(value);
|
|
385
|
+
var isMiuProjectSector = (value) => MIU_PROJECT_SECTOR_SET.has(value);
|
|
386
|
+
var isMiuSurfaceApplication = (value) => MIU_SURFACE_APPLICATION_SET.has(value);
|
|
387
|
+
var miuFamilyToCanonical = (value) => isMiuMaterialFamily(value) ? MIU_FAMILY_TO_CANONICAL[value] : null;
|
|
388
|
+
var miuSectorToCanonical = (value) => isMiuProjectSector(value) ? MIU_SECTOR_TO_CANONICAL[value] : null;
|
|
389
|
+
var miuSurfaceApplicationToCanonical = (value) => isMiuSurfaceApplication(value) ? MIU_SURFACE_APPLICATION_TO_CANONICAL[value] : null;
|
|
390
|
+
export {
|
|
391
|
+
MIU_FAMILY_TO_CANONICAL,
|
|
392
|
+
MIU_MATERIAL_FAMILIES,
|
|
393
|
+
MIU_PROJECT_SECTORS,
|
|
394
|
+
MIU_SECTOR_TO_CANONICAL,
|
|
395
|
+
MIU_SURFACE_APPLICATIONS,
|
|
396
|
+
MIU_SURFACE_APPLICATION_TO_CANONICAL,
|
|
397
|
+
miuFamilyToCanonical,
|
|
398
|
+
miuSectorToCanonical,
|
|
399
|
+
miuSurfaceApplicationToCanonical
|
|
400
|
+
};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
interface TaxonomyTerm {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
/** Explicitly authored Material Semantics id (dashed); absent where upstream authored none. */
|
|
5
|
+
semanticId?: string;
|
|
6
|
+
/** Parent term id for hierarchical dictionaries (applications). */
|
|
7
|
+
broaderTermId?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const PROVENANCE: {
|
|
10
|
+
readonly snapshot: "2026-07-08";
|
|
11
|
+
readonly source: "materialgraph packages/schema/src/registry/value-dictionaries.ts";
|
|
12
|
+
};
|
|
13
|
+
declare const MATERIAL_FAMILY_TERMS: readonly TaxonomyTerm[];
|
|
14
|
+
declare const MATERIAL_FAMILIES: readonly ["paint", "wall_finish", "wallcovering", "textile", "upholstery", "carpet", "wood", "stone", "tile", "terrazzo", "metal", "glass", "resilient_flooring", "composite", "concrete", "leather", "other"];
|
|
15
|
+
type MaterialFamily = (typeof MATERIAL_FAMILIES)[number];
|
|
16
|
+
declare const isMaterialFamily: (value: string) => value is MaterialFamily;
|
|
17
|
+
declare const SECTOR_TERMS: readonly TaxonomyTerm[];
|
|
18
|
+
declare const SECTORS: readonly ["hospitality", "healthcare", "workplace", "residential", "retail", "education", "civic", "mixed_use", "transportation", "other"];
|
|
19
|
+
type Sector = (typeof SECTORS)[number];
|
|
20
|
+
declare const isSector: (value: string) => value is Sector;
|
|
21
|
+
declare const APPLICATION_TERMS: readonly TaxonomyTerm[];
|
|
22
|
+
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", "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"];
|
|
23
|
+
type Application = (typeof APPLICATIONS)[number];
|
|
24
|
+
declare const isApplication: (value: string) => value is Application;
|
|
25
|
+
declare const APPLICATION_PARENTS: Readonly<Partial<Record<Application, Application>>>;
|
|
26
|
+
declare const applicationTopLevelOf: (application: Application) => Application;
|
|
27
|
+
|
|
28
|
+
export { APPLICATIONS, APPLICATION_PARENTS, APPLICATION_TERMS, type Application, MATERIAL_FAMILIES, MATERIAL_FAMILY_TERMS, type MaterialFamily, PROVENANCE, SECTORS, SECTOR_TERMS, type Sector, type TaxonomyTerm, applicationTopLevelOf, isApplication, isMaterialFamily, isSector };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
// src/index.ts
|
|
2
|
+
var PROVENANCE = {
|
|
3
|
+
snapshot: "2026-07-08",
|
|
4
|
+
source: "materialgraph packages/schema/src/registry/value-dictionaries.ts"
|
|
5
|
+
};
|
|
6
|
+
var MATERIAL_FAMILY_TERMS = [
|
|
7
|
+
{ id: "paint", label: "Paint", semanticId: "material-family.paint" },
|
|
8
|
+
{ id: "wall_finish", label: "Wall Finish", semanticId: "material-family.wall-finish" },
|
|
9
|
+
{ id: "wallcovering", label: "Wallcovering", semanticId: "material-family.wallcovering" },
|
|
10
|
+
{ id: "textile", label: "Textile", semanticId: "material-family.textile" },
|
|
11
|
+
{ id: "upholstery", label: "Upholstery", semanticId: "material-family.upholstery" },
|
|
12
|
+
{ id: "carpet", label: "Carpet", semanticId: "material-family.carpet" },
|
|
13
|
+
{ id: "wood", label: "Wood", semanticId: "material-family.wood" },
|
|
14
|
+
{ id: "stone", label: "Stone", semanticId: "material-family.stone" },
|
|
15
|
+
{ id: "tile", label: "Tile", semanticId: "material-family.tile" },
|
|
16
|
+
{ id: "terrazzo", label: "Terrazzo", semanticId: "material-family.terrazzo" },
|
|
17
|
+
{ id: "metal", label: "Metal", semanticId: "material-family.metal" },
|
|
18
|
+
{ id: "glass", label: "Glass", semanticId: "material-family.glass" },
|
|
19
|
+
{
|
|
20
|
+
id: "resilient_flooring",
|
|
21
|
+
label: "Resilient Flooring",
|
|
22
|
+
semanticId: "material-family.resilient-flooring"
|
|
23
|
+
},
|
|
24
|
+
{ id: "composite", label: "Composite", semanticId: "material-family.composite" },
|
|
25
|
+
{ id: "concrete", label: "Concrete", semanticId: "material-family.concrete" },
|
|
26
|
+
{ id: "leather", label: "Leather", semanticId: "material-family.leather" },
|
|
27
|
+
{ id: "other", label: "Other", semanticId: "material-family.other" }
|
|
28
|
+
];
|
|
29
|
+
var MATERIAL_FAMILIES = [
|
|
30
|
+
"paint",
|
|
31
|
+
"wall_finish",
|
|
32
|
+
"wallcovering",
|
|
33
|
+
"textile",
|
|
34
|
+
"upholstery",
|
|
35
|
+
"carpet",
|
|
36
|
+
"wood",
|
|
37
|
+
"stone",
|
|
38
|
+
"tile",
|
|
39
|
+
"terrazzo",
|
|
40
|
+
"metal",
|
|
41
|
+
"glass",
|
|
42
|
+
"resilient_flooring",
|
|
43
|
+
"composite",
|
|
44
|
+
"concrete",
|
|
45
|
+
"leather",
|
|
46
|
+
"other"
|
|
47
|
+
];
|
|
48
|
+
var MATERIAL_FAMILY_SET = new Set(MATERIAL_FAMILIES);
|
|
49
|
+
var isMaterialFamily = (value) => MATERIAL_FAMILY_SET.has(value);
|
|
50
|
+
var SECTOR_TERMS = [
|
|
51
|
+
{ id: "hospitality", label: "Hospitality", semanticId: "sector.hospitality" },
|
|
52
|
+
{ id: "healthcare", label: "Healthcare", semanticId: "sector.healthcare" },
|
|
53
|
+
{ id: "workplace", label: "Workplace", semanticId: "sector.workplace" },
|
|
54
|
+
{ id: "residential", label: "Residential", semanticId: "sector.residential" },
|
|
55
|
+
{ id: "retail", label: "Retail", semanticId: "sector.retail" },
|
|
56
|
+
{ id: "education", label: "Education", semanticId: "sector.education" },
|
|
57
|
+
{ id: "civic", label: "Civic", semanticId: "sector.civic" },
|
|
58
|
+
{ id: "mixed_use", label: "Mixed-Use", semanticId: "sector.mixed-use" },
|
|
59
|
+
{ id: "transportation", label: "Transportation", semanticId: "sector.transportation" },
|
|
60
|
+
{ id: "other", label: "Other", semanticId: "sector.other" }
|
|
61
|
+
];
|
|
62
|
+
var SECTORS = [
|
|
63
|
+
"hospitality",
|
|
64
|
+
"healthcare",
|
|
65
|
+
"workplace",
|
|
66
|
+
"residential",
|
|
67
|
+
"retail",
|
|
68
|
+
"education",
|
|
69
|
+
"civic",
|
|
70
|
+
"mixed_use",
|
|
71
|
+
"transportation",
|
|
72
|
+
"other"
|
|
73
|
+
];
|
|
74
|
+
var SECTOR_SET = new Set(SECTORS);
|
|
75
|
+
var isSector = (value) => SECTOR_SET.has(value);
|
|
76
|
+
var APPLICATION_TERMS = [
|
|
77
|
+
{ id: "wall", label: "Wall" },
|
|
78
|
+
{ id: "flooring", label: "Flooring" },
|
|
79
|
+
{ id: "ceiling", label: "Ceiling" },
|
|
80
|
+
{ id: "bath", label: "Bath" },
|
|
81
|
+
{ id: "kitchen", label: "Kitchen" },
|
|
82
|
+
{ id: "furniture", label: "Furniture" },
|
|
83
|
+
{ id: "lighting", label: "Lighting" },
|
|
84
|
+
{ id: "door", label: "Door" },
|
|
85
|
+
{ id: "window", label: "Window" },
|
|
86
|
+
{ id: "facade", label: "Facade" },
|
|
87
|
+
{ id: "countertop", label: "Countertop" },
|
|
88
|
+
{ id: "fireplace", label: "Fireplace" },
|
|
89
|
+
{ id: "stair_elevator", label: "Stair & Elevator" },
|
|
90
|
+
{ id: "bedding", label: "Bedding" },
|
|
91
|
+
{ id: "decor", label: "Decor" },
|
|
92
|
+
{ id: "vertically_hanging", label: "Vertically Hanging" },
|
|
93
|
+
{ id: "transportation", label: "Transportation" },
|
|
94
|
+
{ id: "pool_fountain", label: "Pool & Fountain" },
|
|
95
|
+
{ id: "paving_deck", label: "Paving & Deck" },
|
|
96
|
+
{ id: "partition", label: "Partition" },
|
|
97
|
+
{ id: "millwork", label: "Millwork" },
|
|
98
|
+
{ id: "cabinetry", label: "Cabinetry" },
|
|
99
|
+
{ id: "masonry", label: "Masonry" },
|
|
100
|
+
{ id: "roof", label: "Roof" },
|
|
101
|
+
{ id: "garage", label: "Garage" },
|
|
102
|
+
{ id: "bar", label: "Bar" },
|
|
103
|
+
{ id: "awning_umbrella", label: "Awning & Umbrella" },
|
|
104
|
+
{ id: "recreation_sport", label: "Recreation & Sport" },
|
|
105
|
+
{ id: "ornamentation", label: "Ornamentation" },
|
|
106
|
+
{ id: "aquatic_environments", label: "Aquatic Environments" },
|
|
107
|
+
{ id: "wall_backsplash", label: "Backsplash", broaderTermId: "wall" },
|
|
108
|
+
{ id: "wall_upholstered", label: "Upholstered Wall", broaderTermId: "wall" },
|
|
109
|
+
{ id: "wall_wet_shower", label: "Wet Wall & Shower Wall", broaderTermId: "wall" },
|
|
110
|
+
{ id: "flooring_wet_area", label: "Wet Area Flooring", broaderTermId: "flooring" },
|
|
111
|
+
{ id: "flooring_entrance", label: "Entrance & Walk-Off Flooring", broaderTermId: "flooring" },
|
|
112
|
+
{
|
|
113
|
+
id: "flooring_radiant_heat",
|
|
114
|
+
label: "Flooring for Radiant Heat Systems",
|
|
115
|
+
broaderTermId: "flooring"
|
|
116
|
+
},
|
|
117
|
+
{ id: "flooring_or_lab", label: "Operating Rooms & Labs", broaderTermId: "flooring" },
|
|
118
|
+
{ id: "flooring_anti_fatigue", label: "Anti-Fatigue Flooring", broaderTermId: "flooring" },
|
|
119
|
+
{ id: "flooring_esd", label: "Electrostatic Dissipative Flooring", broaderTermId: "flooring" },
|
|
120
|
+
{
|
|
121
|
+
id: "flooring_safety_slip",
|
|
122
|
+
label: "Safety & Slip-Resistant Flooring",
|
|
123
|
+
broaderTermId: "flooring"
|
|
124
|
+
},
|
|
125
|
+
{ id: "flooring_raised_access", label: "Raised Access Flooring", broaderTermId: "flooring" },
|
|
126
|
+
{ id: "flooring_rigid_core", label: "Rigid Core Flooring", broaderTermId: "flooring" },
|
|
127
|
+
{ id: "flooring_dining_area", label: "Dining Area Flooring", broaderTermId: "flooring" },
|
|
128
|
+
{ id: "flooring_subject_oil", label: "Subject to Oil Flooring", broaderTermId: "flooring" },
|
|
129
|
+
{ id: "flooring_walk_in_freezer", label: "Walk-In Freezer", broaderTermId: "flooring" },
|
|
130
|
+
{ id: "flooring_ramps_inclines", label: "Ramps & Inclines", broaderTermId: "flooring" },
|
|
131
|
+
{ id: "furniture_seating", label: "Seating", broaderTermId: "furniture" },
|
|
132
|
+
{ id: "furniture_headboard", label: "Headboard", broaderTermId: "furniture" },
|
|
133
|
+
{ id: "furniture_slipcover", label: "Slipcover", broaderTermId: "furniture" },
|
|
134
|
+
{ id: "furniture_systems", label: "Systems Furniture", broaderTermId: "furniture" },
|
|
135
|
+
{ id: "furniture_tackboard", label: "Tackboard", broaderTermId: "furniture" },
|
|
136
|
+
{ id: "furniture_throw_pillow", label: "Throw Pillow", broaderTermId: "furniture" },
|
|
137
|
+
{ id: "fireplace_firebox", label: "Firebox", broaderTermId: "fireplace" },
|
|
138
|
+
{ id: "fireplace_hearth", label: "Fireplace Hearth", broaderTermId: "fireplace" },
|
|
139
|
+
{ id: "fireplace_mantel", label: "Fireplace Mantel", broaderTermId: "fireplace" },
|
|
140
|
+
{ id: "fireplace_surround", label: "Fireplace Surround", broaderTermId: "fireplace" },
|
|
141
|
+
{ id: "bedding_bed_scarf", label: "Bed Scarf", broaderTermId: "bedding" },
|
|
142
|
+
{ id: "bedding_sheets", label: "Bed Sheets", broaderTermId: "bedding" },
|
|
143
|
+
{ id: "bedding_skirt", label: "Bed Skirt", broaderTermId: "bedding" },
|
|
144
|
+
{ id: "bedding_bedspread", label: "Bedspread", broaderTermId: "bedding" },
|
|
145
|
+
{ id: "bedding_box_spring_cover", label: "Box Spring Cover", broaderTermId: "bedding" },
|
|
146
|
+
{ id: "stair_riser", label: "Stair Riser", broaderTermId: "stair_elevator" },
|
|
147
|
+
{ id: "stair_tread", label: "Stair Tread", broaderTermId: "stair_elevator" },
|
|
148
|
+
{ id: "stair_railing", label: "Railing", broaderTermId: "stair_elevator" },
|
|
149
|
+
{ id: "stair_elevator_cladding", label: "Elevator Cladding", broaderTermId: "stair_elevator" },
|
|
150
|
+
{ id: "vh_drapery", label: "Drapery", broaderTermId: "vertically_hanging" },
|
|
151
|
+
{ id: "vh_privacy_curtain", label: "Privacy Curtain", broaderTermId: "vertically_hanging" },
|
|
152
|
+
{ id: "vh_shower_curtain", label: "Shower Curtain", broaderTermId: "vertically_hanging" },
|
|
153
|
+
{ id: "vh_theatrical_curtain", label: "Theatrical Curtain", broaderTermId: "vertically_hanging" },
|
|
154
|
+
{ id: "vh_window_shade", label: "Window Shade", broaderTermId: "vertically_hanging" },
|
|
155
|
+
{ id: "transportation_automotive", label: "Automotive", broaderTermId: "transportation" },
|
|
156
|
+
{ id: "transportation_aviation", label: "Aviation", broaderTermId: "transportation" },
|
|
157
|
+
{ id: "transportation_marine", label: "Marine", broaderTermId: "transportation" },
|
|
158
|
+
{ id: "pool_coping", label: "Pool Coping", broaderTermId: "pool_fountain" },
|
|
159
|
+
{ id: "pool_decking", label: "Pool Decking", broaderTermId: "pool_fountain" },
|
|
160
|
+
{ id: "pool_lining", label: "Pool Lining", broaderTermId: "pool_fountain" },
|
|
161
|
+
{ id: "paving_covered_areas", label: "Covered Areas", broaderTermId: "paving_deck" },
|
|
162
|
+
{ id: "paving_patio", label: "Patio", broaderTermId: "paving_deck" },
|
|
163
|
+
{ id: "partition_toilet", label: "Toilet Partition", broaderTermId: "partition" },
|
|
164
|
+
{ id: "masonry_structural", label: "Structural Masonry", broaderTermId: "masonry" },
|
|
165
|
+
{ id: "masonry_veneer", label: "Veneer Masonry", broaderTermId: "masonry" },
|
|
166
|
+
{ id: "recreation_gymnasium", label: "Gymnasium", broaderTermId: "recreation_sport" },
|
|
167
|
+
{ id: "recreation_playground", label: "Playground", broaderTermId: "recreation_sport" },
|
|
168
|
+
{
|
|
169
|
+
id: "recreation_weightlifting",
|
|
170
|
+
label: "Weightlifting Room",
|
|
171
|
+
broaderTermId: "recreation_sport"
|
|
172
|
+
},
|
|
173
|
+
{ id: "awning", label: "Awning", broaderTermId: "awning_umbrella" },
|
|
174
|
+
{ id: "tensile_structure", label: "Tensile Structure", broaderTermId: "awning_umbrella" },
|
|
175
|
+
{ id: "umbrella", label: "Umbrella", broaderTermId: "awning_umbrella" },
|
|
176
|
+
{
|
|
177
|
+
id: "countertop_chemical_resistant",
|
|
178
|
+
label: "Chemical Resistant Top",
|
|
179
|
+
broaderTermId: "countertop"
|
|
180
|
+
}
|
|
181
|
+
];
|
|
182
|
+
var APPLICATIONS = [
|
|
183
|
+
// Top-level (30)
|
|
184
|
+
"wall",
|
|
185
|
+
"flooring",
|
|
186
|
+
"ceiling",
|
|
187
|
+
"bath",
|
|
188
|
+
"kitchen",
|
|
189
|
+
"furniture",
|
|
190
|
+
"lighting",
|
|
191
|
+
"door",
|
|
192
|
+
"window",
|
|
193
|
+
"facade",
|
|
194
|
+
"countertop",
|
|
195
|
+
"fireplace",
|
|
196
|
+
"stair_elevator",
|
|
197
|
+
"bedding",
|
|
198
|
+
"decor",
|
|
199
|
+
"vertically_hanging",
|
|
200
|
+
"transportation",
|
|
201
|
+
"pool_fountain",
|
|
202
|
+
"paving_deck",
|
|
203
|
+
"partition",
|
|
204
|
+
"millwork",
|
|
205
|
+
"cabinetry",
|
|
206
|
+
"masonry",
|
|
207
|
+
"roof",
|
|
208
|
+
"garage",
|
|
209
|
+
"bar",
|
|
210
|
+
"awning_umbrella",
|
|
211
|
+
"recreation_sport",
|
|
212
|
+
"ornamentation",
|
|
213
|
+
"aquatic_environments",
|
|
214
|
+
// Children (58)
|
|
215
|
+
"wall_backsplash",
|
|
216
|
+
"wall_upholstered",
|
|
217
|
+
"wall_wet_shower",
|
|
218
|
+
"flooring_wet_area",
|
|
219
|
+
"flooring_entrance",
|
|
220
|
+
"flooring_radiant_heat",
|
|
221
|
+
"flooring_or_lab",
|
|
222
|
+
"flooring_anti_fatigue",
|
|
223
|
+
"flooring_esd",
|
|
224
|
+
"flooring_safety_slip",
|
|
225
|
+
"flooring_raised_access",
|
|
226
|
+
"flooring_rigid_core",
|
|
227
|
+
"flooring_dining_area",
|
|
228
|
+
"flooring_subject_oil",
|
|
229
|
+
"flooring_walk_in_freezer",
|
|
230
|
+
"flooring_ramps_inclines",
|
|
231
|
+
"furniture_seating",
|
|
232
|
+
"furniture_headboard",
|
|
233
|
+
"furniture_slipcover",
|
|
234
|
+
"furniture_systems",
|
|
235
|
+
"furniture_tackboard",
|
|
236
|
+
"furniture_throw_pillow",
|
|
237
|
+
"fireplace_firebox",
|
|
238
|
+
"fireplace_hearth",
|
|
239
|
+
"fireplace_mantel",
|
|
240
|
+
"fireplace_surround",
|
|
241
|
+
"bedding_bed_scarf",
|
|
242
|
+
"bedding_sheets",
|
|
243
|
+
"bedding_skirt",
|
|
244
|
+
"bedding_bedspread",
|
|
245
|
+
"bedding_box_spring_cover",
|
|
246
|
+
"stair_riser",
|
|
247
|
+
"stair_tread",
|
|
248
|
+
"stair_railing",
|
|
249
|
+
"stair_elevator_cladding",
|
|
250
|
+
"vh_drapery",
|
|
251
|
+
"vh_privacy_curtain",
|
|
252
|
+
"vh_shower_curtain",
|
|
253
|
+
"vh_theatrical_curtain",
|
|
254
|
+
"vh_window_shade",
|
|
255
|
+
"transportation_automotive",
|
|
256
|
+
"transportation_aviation",
|
|
257
|
+
"transportation_marine",
|
|
258
|
+
"pool_coping",
|
|
259
|
+
"pool_decking",
|
|
260
|
+
"pool_lining",
|
|
261
|
+
"paving_covered_areas",
|
|
262
|
+
"paving_patio",
|
|
263
|
+
"partition_toilet",
|
|
264
|
+
"masonry_structural",
|
|
265
|
+
"masonry_veneer",
|
|
266
|
+
"recreation_gymnasium",
|
|
267
|
+
"recreation_playground",
|
|
268
|
+
"recreation_weightlifting",
|
|
269
|
+
"awning",
|
|
270
|
+
"tensile_structure",
|
|
271
|
+
"umbrella",
|
|
272
|
+
"countertop_chemical_resistant"
|
|
273
|
+
];
|
|
274
|
+
var APPLICATION_SET = new Set(APPLICATIONS);
|
|
275
|
+
var isApplication = (value) => APPLICATION_SET.has(value);
|
|
276
|
+
var APPLICATION_PARENTS = {
|
|
277
|
+
wall_backsplash: "wall",
|
|
278
|
+
wall_upholstered: "wall",
|
|
279
|
+
wall_wet_shower: "wall",
|
|
280
|
+
flooring_wet_area: "flooring",
|
|
281
|
+
flooring_entrance: "flooring",
|
|
282
|
+
flooring_radiant_heat: "flooring",
|
|
283
|
+
flooring_or_lab: "flooring",
|
|
284
|
+
flooring_anti_fatigue: "flooring",
|
|
285
|
+
flooring_esd: "flooring",
|
|
286
|
+
flooring_safety_slip: "flooring",
|
|
287
|
+
flooring_raised_access: "flooring",
|
|
288
|
+
flooring_rigid_core: "flooring",
|
|
289
|
+
flooring_dining_area: "flooring",
|
|
290
|
+
flooring_subject_oil: "flooring",
|
|
291
|
+
flooring_walk_in_freezer: "flooring",
|
|
292
|
+
flooring_ramps_inclines: "flooring",
|
|
293
|
+
furniture_seating: "furniture",
|
|
294
|
+
furniture_headboard: "furniture",
|
|
295
|
+
furniture_slipcover: "furniture",
|
|
296
|
+
furniture_systems: "furniture",
|
|
297
|
+
furniture_tackboard: "furniture",
|
|
298
|
+
furniture_throw_pillow: "furniture",
|
|
299
|
+
fireplace_firebox: "fireplace",
|
|
300
|
+
fireplace_hearth: "fireplace",
|
|
301
|
+
fireplace_mantel: "fireplace",
|
|
302
|
+
fireplace_surround: "fireplace",
|
|
303
|
+
bedding_bed_scarf: "bedding",
|
|
304
|
+
bedding_sheets: "bedding",
|
|
305
|
+
bedding_skirt: "bedding",
|
|
306
|
+
bedding_bedspread: "bedding",
|
|
307
|
+
bedding_box_spring_cover: "bedding",
|
|
308
|
+
stair_riser: "stair_elevator",
|
|
309
|
+
stair_tread: "stair_elevator",
|
|
310
|
+
stair_railing: "stair_elevator",
|
|
311
|
+
stair_elevator_cladding: "stair_elevator",
|
|
312
|
+
vh_drapery: "vertically_hanging",
|
|
313
|
+
vh_privacy_curtain: "vertically_hanging",
|
|
314
|
+
vh_shower_curtain: "vertically_hanging",
|
|
315
|
+
vh_theatrical_curtain: "vertically_hanging",
|
|
316
|
+
vh_window_shade: "vertically_hanging",
|
|
317
|
+
transportation_automotive: "transportation",
|
|
318
|
+
transportation_aviation: "transportation",
|
|
319
|
+
transportation_marine: "transportation",
|
|
320
|
+
pool_coping: "pool_fountain",
|
|
321
|
+
pool_decking: "pool_fountain",
|
|
322
|
+
pool_lining: "pool_fountain",
|
|
323
|
+
paving_covered_areas: "paving_deck",
|
|
324
|
+
paving_patio: "paving_deck",
|
|
325
|
+
partition_toilet: "partition",
|
|
326
|
+
masonry_structural: "masonry",
|
|
327
|
+
masonry_veneer: "masonry",
|
|
328
|
+
recreation_gymnasium: "recreation_sport",
|
|
329
|
+
recreation_playground: "recreation_sport",
|
|
330
|
+
recreation_weightlifting: "recreation_sport",
|
|
331
|
+
awning: "awning_umbrella",
|
|
332
|
+
tensile_structure: "awning_umbrella",
|
|
333
|
+
umbrella: "awning_umbrella",
|
|
334
|
+
countertop_chemical_resistant: "countertop"
|
|
335
|
+
};
|
|
336
|
+
var applicationTopLevelOf = (application) => APPLICATION_PARENTS[application] ?? application;
|
|
337
|
+
export {
|
|
338
|
+
APPLICATIONS,
|
|
339
|
+
APPLICATION_PARENTS,
|
|
340
|
+
APPLICATION_TERMS,
|
|
341
|
+
MATERIAL_FAMILIES,
|
|
342
|
+
MATERIAL_FAMILY_TERMS,
|
|
343
|
+
PROVENANCE,
|
|
344
|
+
SECTORS,
|
|
345
|
+
SECTOR_TERMS,
|
|
346
|
+
applicationTopLevelOf,
|
|
347
|
+
isApplication,
|
|
348
|
+
isMaterialFamily,
|
|
349
|
+
isSector
|
|
350
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@instruments/taxonomy",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Canonical materials taxonomy for the Material Instruments ecosystem — governed dictionaries (material families, sectors, applications) and consumer crosswalks.",
|
|
5
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/materialinstruments/taxonomy.git"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"README.md",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"type": "module",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./crosswalks/miu": {
|
|
22
|
+
"types": "./dist/crosswalks/miu.d.ts",
|
|
23
|
+
"import": "./dist/crosswalks/miu.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@howells/lint": "^1.0.0",
|
|
31
|
+
"@types/node": "^24.0.0",
|
|
32
|
+
"tsup": "^8.5.1",
|
|
33
|
+
"typescript": "^5.7.0",
|
|
34
|
+
"vitest": "^4.0.0"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "rm -rf dist && tsup",
|
|
38
|
+
"test": "vitest run",
|
|
39
|
+
"typecheck": "tsc --noEmit",
|
|
40
|
+
"lint": "howells-check ."
|
|
41
|
+
}
|
|
42
|
+
}
|