@adobe/design-data-spec 1.4.0 → 2.0.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/conformance/invalid/SPEC-009/expected-errors.json +1 -1
- package/conformance/invalid/SPEC-018/dataset.json +8 -1
- package/conformance/invalid/SPEC-034/expected-errors.json +1 -1
- package/conformance/invalid/SPEC-035/expected-errors.json +1 -1
- package/package.json +5 -6
- package/rules/rules.yaml +14 -10
- package/schemas/component.schema.json +1 -1
- package/schemas/manifest.schema.json +1 -22
- package/schemas/platform-extension.json +79 -0
- package/schemas/registry-value.json +230 -0
- package/schemas/token.schema.json +1 -1
- package/spec/agent-surface.md +16 -14
- package/spec/anatomy-format.md +1 -1
- package/spec/cascade.md +1 -1
- package/spec/index.md +5 -5
- package/spec/mode-sets.md +1 -1
- package/spec/registry.md +6 -8
- package/spec/taxonomy.md +96 -30
- package/spec/token-format.md +11 -3
- package/components/accordion.json +0 -557
- package/components/action-bar.json +0 -214
- package/components/action-button.json +0 -522
- package/components/action-group.json +0 -134
- package/components/alert-banner.json +0 -134
- package/components/alert-dialog.json +0 -180
- package/components/avatar-group.json +0 -166
- package/components/avatar.json +0 -246
- package/components/badge.json +0 -594
- package/components/body.json +0 -54
- package/components/bottom-navigation-android.json +0 -72
- package/components/breadcrumbs.json +0 -307
- package/components/button-group.json +0 -86
- package/components/button.json +0 -586
- package/components/calendar.json +0 -133
- package/components/cards.json +0 -541
- package/components/checkbox-group.json +0 -91
- package/components/checkbox.json +0 -339
- package/components/close-button.json +0 -208
- package/components/coach-indicator.json +0 -105
- package/components/coach-mark.json +0 -169
- package/components/code.json +0 -44
- package/components/color-area.json +0 -138
- package/components/color-handle.json +0 -111
- package/components/color-loupe.json +0 -77
- package/components/color-slider.json +0 -165
- package/components/color-wheel.json +0 -117
- package/components/combo-box.json +0 -543
- package/components/contextual-help.json +0 -230
- package/components/date-picker.json +0 -471
- package/components/detail.json +0 -53
- package/components/divider.json +0 -93
- package/components/drop-zone.json +0 -238
- package/components/field-label.json +0 -219
- package/components/heading.json +0 -68
- package/components/help-text.json +0 -209
- package/components/illustrated-message.json +0 -175
- package/components/in-field-progress-button.json +0 -88
- package/components/in-field-progress-circle.json +0 -116
- package/components/in-line-alert.json +0 -233
- package/components/link.json +0 -167
- package/components/list-view.json +0 -382
- package/components/menu.json +0 -597
- package/components/meter.json +0 -199
- package/components/number-field.json +0 -518
- package/components/opacity-checkerboard.json +0 -69
- package/components/picker.json +0 -579
- package/components/popover.json +0 -174
- package/components/progress-bar.json +0 -229
- package/components/progress-circle.json +0 -132
- package/components/radio-button.json +0 -308
- package/components/radio-group.json +0 -113
- package/components/rating.json +0 -168
- package/components/scroll-zoom-bar.json +0 -82
- package/components/search-field.json +0 -346
- package/components/segmented-control.json +0 -248
- package/components/select-box.json +0 -272
- package/components/side-navigation.json +0 -320
- package/components/slider.json +0 -407
- package/components/standard-dialog.json +0 -179
- package/components/standard-panel.json +0 -83
- package/components/status-light.json +0 -334
- package/components/steplist.json +0 -294
- package/components/swatch-group.json +0 -114
- package/components/swatch.json +0 -240
- package/components/switch.json +0 -336
- package/components/tab-bar-ios.json +0 -72
- package/components/table.json +0 -435
- package/components/tabs.json +0 -253
- package/components/tag-field.json +0 -243
- package/components/tag-group.json +0 -87
- package/components/tag.json +0 -393
- package/components/takeover-dialog.json +0 -117
- package/components/text-area.json +0 -555
- package/components/text-field.json +0 -555
- package/components/thumbnail.json +0 -149
- package/components/title.json +0 -91
- package/components/toast.json +0 -156
- package/components/tooltip.json +0 -179
- package/components/tray.json +0 -32
- package/components/tree-view.json +0 -393
- package/fields/anatomy.json +0 -15
- package/fields/color-scheme.json +0 -15
- package/fields/colorFamily.json +0 -15
- package/fields/component.json +0 -15
- package/fields/contrast.json +0 -15
- package/fields/density.json +0 -15
- package/fields/easing.json +0 -15
- package/fields/family.json +0 -15
- package/fields/motionRole.json +0 -15
- package/fields/object.json +0 -15
- package/fields/orientation.json +0 -15
- package/fields/position.json +0 -15
- package/fields/property.json +0 -15
- package/fields/scale.json +0 -15
- package/fields/scaleIndex.json +0 -15
- package/fields/shape.json +0 -15
- package/fields/size.json +0 -15
- package/fields/state.json +0 -15
- package/fields/structure.json +0 -15
- package/fields/style.json +0 -15
- package/fields/substructure.json +0 -15
- package/fields/variant.json +0 -15
- package/fields/weight.json +0 -15
package/spec/registry.md
CHANGED
|
@@ -6,15 +6,13 @@ This document defines the **design system registry**: the set of named value col
|
|
|
6
6
|
|
|
7
7
|
## What a registry is
|
|
8
8
|
|
|
9
|
-
A **registry** is a JSON file in `@adobe/design-
|
|
9
|
+
A **registry** is a JSON file in `@adobe/spectrum-design-data` (under `registry/`) that declares an ordered list of named values. Each value has at minimum an `id` (the canonical string used in token names and component files) and a `label` (a human-readable display name). Values **MAY** carry additional fields such as `description`, `aliases`, `deprecated`, and `usedIn`.
|
|
10
10
|
|
|
11
11
|
Registries are the authoritative source of truth for vocabulary validation. A validator SHOULD flag token field values that are not present in the corresponding registry (typically as a warning, not an error — see field declarations in the field catalog).
|
|
12
12
|
|
|
13
13
|
## Packaging strategy
|
|
14
14
|
|
|
15
|
-
All registries ship
|
|
16
|
-
|
|
17
|
-
**Rationale:** No external consumers currently require independent semver versioning of individual registries. A single package is cheaper to maintain, simpler to consume, and avoids the proliferation of tiny packages with coordinated versioning overhead. If independent versioning needs emerge in a future release, the split can be done with a standard deprecation window per [Evolution](evolution.md).
|
|
15
|
+
All registries ship within **`@adobe/spectrum-design-data`** under the `registry/` directory. The three semantically distinct registries described below are separate JSON files in that directory.
|
|
18
16
|
|
|
19
17
|
## Registries
|
|
20
18
|
|
|
@@ -32,7 +30,7 @@ Anatomy terms fall into three tiers:
|
|
|
32
30
|
| Composite | Another component used as a named part | `checkbox`, `close-button`, `popover`, `avatar` |
|
|
33
31
|
| Component-specific | Unique to one component | `loupe`, `gripper`, `hold-icon` |
|
|
34
32
|
|
|
35
|
-
**File:** `packages/design-
|
|
33
|
+
**File:** `packages/design-data/registry/anatomy-terms.json`\
|
|
36
34
|
**Validated by:** SPEC-020, SPEC-023, SPEC-024, SPEC-025, SPEC-035 (advisory — anatomy part `name` values SHOULD match the anatomy-terms registry)\
|
|
37
35
|
**See also:** [Taxonomy — Component anatomy vs. token objects](taxonomy.md#component-anatomy-vs-token-objects), [Anatomy format](anatomy-format.md)
|
|
38
36
|
|
|
@@ -50,7 +48,7 @@ Validates the `object` field on token name objects.
|
|
|
50
48
|
| `visual` | Visible graphic element area (may be inset from edge) |
|
|
51
49
|
| `content` | Main content area |
|
|
52
50
|
|
|
53
|
-
**File:** `packages/design-
|
|
51
|
+
**File:** `packages/design-data/registry/token-objects.json`\
|
|
54
52
|
**Validated by:** SPEC-009 (advisory — `name.object` field values SHOULD match the token-objects registry)\
|
|
55
53
|
**See also:** [Taxonomy — Token objects (styling surfaces)](taxonomy.md#token-objects-styling-surfaces)
|
|
56
54
|
|
|
@@ -60,7 +58,7 @@ Validates the `category` field on component declarations.
|
|
|
60
58
|
|
|
61
59
|
**What it contains:** Top-level categories for organizing components by purpose and interaction type. Used for documentation navigation and tooling filters.
|
|
62
60
|
|
|
63
|
-
**File:** `packages/design-
|
|
61
|
+
**File:** `packages/design-data/registry/categories.json`\
|
|
64
62
|
**Validated by:** SPEC-034 (advisory — `meta.category` field values SHOULD match the categories registry)\
|
|
65
63
|
**See also:** [Component format](component-format.md)
|
|
66
64
|
|
|
@@ -72,7 +70,7 @@ Registry IDs are scoped to their registry. The same ID **MAY** appear in multipl
|
|
|
72
70
|
|
|
73
71
|
## Other registries in the package
|
|
74
72
|
|
|
75
|
-
The following registries exist in `@adobe/design-
|
|
73
|
+
The following registries exist in `@adobe/spectrum-design-data` (under `registry/`) but are not part of the three-registry boundary defined above. They validate other token name fields and component metadata fields:
|
|
76
74
|
|
|
77
75
|
| Registry | File | Validates |
|
|
78
76
|
| ----------------- | ------------------------ | ------------------------------------ |
|
package/spec/taxonomy.md
CHANGED
|
@@ -60,19 +60,19 @@ The following concept categories are defined in Spectrum's foundation field cata
|
|
|
60
60
|
|
|
61
61
|
**NORMATIVE:** Each category listed below corresponds to a field on the token [name object](token-format.md). Tokens **MAY** use any subset of these fields. Exception: `property` is REQUIRED on every name object — see [token-format.md](token-format.md#name-object).
|
|
62
62
|
|
|
63
|
-
| Category | Name object field | Answers | Description
|
|
64
|
-
| ------------- | ----------------- | --------- |
|
|
65
|
-
| Structure | `structure` | What? | Individual objects or object categories that have shared styling. Distinctly different from "components" in that they represent structures and visual patterns that can or do occur across many varieties of components.
|
|
66
|
-
| Sub-structure | `substructure` | What? | A structure within an element that should only exist within the context of its parent structure.
|
|
67
|
-
| Component | `component` | What? | Component scope when the token is component-scoped.
|
|
68
|
-
| Anatomy | `anatomy` | What? | A visible, named part of a component as defined by designers.
|
|
69
|
-
| Object | `object` | Where? | The styling surface to which a visual property is applied (e.g. background, border, edge).
|
|
70
|
-
| Property | `property` | Where? | The CSS/styling attribute or design-system abstraction being defined (e.g. color, width, padding, gap). REQUIRED — see exception in preamble. Values SHOULD come from [`property-terms.json`](../../packages/design-
|
|
71
|
-
| Orientation | `orientation` | When/Why? | The direction or order of structures and elements within a component or pattern.
|
|
72
|
-
| Position | `position` | When/Why? | The location of an object relative to another, with or without respect to directional order.
|
|
73
|
-
| Size | `size` | When/Why? | Relative terms used to create relationships and patterns of usage across multiple tokens and token types.
|
|
74
|
-
| Density | `density` | When/Why? | Options that create more or less space within or around the parts of a component.
|
|
75
|
-
| Shape | `shape` | When/Why? | Relative to the overall shape of a component (e.g. "uniform" creates a 1:1 padding ratio between horizontal and vertical padding).
|
|
63
|
+
| Category | Name object field | Answers | Description |
|
|
64
|
+
| ------------- | ----------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
65
|
+
| Structure | `structure` | What? | Individual objects or object categories that have shared styling. Distinctly different from "components" in that they represent structures and visual patterns that can or do occur across many varieties of components. |
|
|
66
|
+
| Sub-structure | `substructure` | What? | A structure within an element that should only exist within the context of its parent structure. |
|
|
67
|
+
| Component | `component` | What? | Component scope when the token is component-scoped. |
|
|
68
|
+
| Anatomy | `anatomy` | What? | A visible, named part of a component as defined by designers. |
|
|
69
|
+
| Object | `object` | Where? | The styling surface to which a visual property is applied (e.g. background, border, edge). |
|
|
70
|
+
| Property | `property` | Where? | The CSS/styling attribute or design-system abstraction being defined (e.g. color, width, padding, gap). REQUIRED — see exception in preamble. Values SHOULD come from [`property-terms.json`](../../packages/design-data/registry/property-terms.json). Anatomy parts and styling surfaces do NOT belong here — they belong in `anatomy` and `object` respectively. See [token-format.md — Name-object migration policy](token-format.md#name-object-migration-policy) for migration guidance. |
|
|
71
|
+
| Orientation | `orientation` | When/Why? | The direction or order of structures and elements within a component or pattern. |
|
|
72
|
+
| Position | `position` | When/Why? | The location of an object relative to another, with or without respect to directional order. |
|
|
73
|
+
| Size | `size` | When/Why? | Relative terms used to create relationships and patterns of usage across multiple tokens and token types. |
|
|
74
|
+
| Density | `density` | When/Why? | Options that create more or less space within or around the parts of a component. |
|
|
75
|
+
| Shape | `shape` | When/Why? | Relative to the overall shape of a component (e.g. "uniform" creates a 1:1 padding ratio between horizontal and vertical padding). |
|
|
76
76
|
|
|
77
77
|
Additional categories for variant and state are inherited from the existing name object:
|
|
78
78
|
|
|
@@ -87,10 +87,10 @@ Color tokens describe palette entries and semantic color assignments. Their name
|
|
|
87
87
|
|
|
88
88
|
**NORMATIVE:** Color tokens SHOULD include `colorFamily`, `scaleIndex`, or both to allow tooling to group and sort palette entries. Tokens missing both are flagged by rule SPEC-043 (`domain-required-fields`, warning).
|
|
89
89
|
|
|
90
|
-
| Category | Name object field | Answers | Description
|
|
91
|
-
| ------------ | ----------------- | ------- |
|
|
92
|
-
| Color Family | `colorFamily` | What? | Hue family of the color (e.g. `blue`, `gray`, `celery`, `transparent-black`). Values come from [`color-families.json`](../../packages/design-
|
|
93
|
-
| Ramp Index | `scaleIndex` | Which? | Numeric perceptual ramp step (e.g. `100`, `400`, `900`, `1600`). Shared with layout tokens; see [scaleIndex field declaration](../fields/scaleIndex.json). Not scope-restricted.
|
|
90
|
+
| Category | Name object field | Answers | Description |
|
|
91
|
+
| ------------ | ----------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
92
|
+
| Color Family | `colorFamily` | What? | Hue family of the color (e.g. `blue`, `gray`, `celery`, `transparent-black`). Values come from [`color-families.json`](../../packages/design-data/registry/color-families.json). |
|
|
93
|
+
| Ramp Index | `scaleIndex` | Which? | Numeric perceptual ramp step (e.g. `100`, `400`, `900`, `1600`). Shared with layout tokens; see [scaleIndex field declaration](../fields/scaleIndex.json). Not scope-restricted. |
|
|
94
94
|
|
|
95
95
|
**Default serialization order for color tokens:**
|
|
96
96
|
|
|
@@ -106,12 +106,13 @@ Typography tokens describe typeface attributes: family, weight, style, and numer
|
|
|
106
106
|
|
|
107
107
|
**NORMATIVE:** Typography tokens SHOULD include at least one of `family`, `weight`, or `style`. Tokens missing all three are flagged by rule SPEC-043 (`domain-required-fields`, warning).
|
|
108
108
|
|
|
109
|
-
| Category
|
|
110
|
-
|
|
|
111
|
-
| Family
|
|
112
|
-
| Weight
|
|
113
|
-
| Style
|
|
114
|
-
|
|
|
109
|
+
| Category | Name object field | Answers | Description |
|
|
110
|
+
| --------- | ----------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
111
|
+
| Family | `family` | What? | Type family of the token (e.g. `sans-serif`, `serif`, `cjk`, `code`). Values come from [`typography-families.json`](../../packages/design-data/registry/typography-families.json). |
|
|
112
|
+
| Weight | `weight` | How? | Typographic weight (e.g. `regular`, `bold`, `light`, `black`). Values come from [`typography-weights.json`](../../packages/design-data/registry/typography-weights.json). |
|
|
113
|
+
| Style | `style` | How? | Typographic style (e.g. `italic`, `oblique`, `normal`). Include `normal` when the token explicitly declares a normal style (e.g. a reset). Values come from [`typography-styles.json`](../../packages/design-data/registry/typography-styles.json). |
|
|
114
|
+
| Alignment | `alignment` | How? | Horizontal text-alignment direction (e.g. `start`, `center`, `end`). Corresponds to the CSS `text-align` axis. Values come from [`alignments.json`](../../packages/design-data/registry/alignments.json). |
|
|
115
|
+
| Scale | `scaleIndex` | Which? | Numeric size scale step (e.g. `75`, `100`, `200`). Shared with other token types; not scope-restricted. |
|
|
115
116
|
|
|
116
117
|
**Default serialization order for typography tokens:**
|
|
117
118
|
|
|
@@ -129,11 +130,11 @@ Motion tokens describe timing, easing, and animation role for UI animation. Thei
|
|
|
129
130
|
|
|
130
131
|
**NORMATIVE:** Motion tokens SHOULD include `motionRole` or `easing`. Tokens missing both are flagged by rule SPEC-043 (`domain-required-fields`, warning).
|
|
131
132
|
|
|
132
|
-
| Category | Name object field | Answers | Description
|
|
133
|
-
| ----------- | ----------------- | ------- |
|
|
134
|
-
| Motion Role | `motionRole` | What? | Semantic role of the animation (e.g. `enter`, `exit`, `transition`, `emphasis`). Values come from [`motion-roles.json`](../../packages/design-
|
|
135
|
-
| Easing | `easing` | How? | Easing curve identifier (e.g. `ease-in`, `ease-out`, `standard`). Values come from [`easing-curves.json`](../../packages/design-
|
|
136
|
-
| Duration | `scaleIndex` | Which? | Numeric duration bucket index (e.g. `100` for 100ms, `200` for 200ms). Shared with other token types; not scope-restricted.
|
|
133
|
+
| Category | Name object field | Answers | Description |
|
|
134
|
+
| ----------- | ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
135
|
+
| Motion Role | `motionRole` | What? | Semantic role of the animation (e.g. `enter`, `exit`, `transition`, `emphasis`). Values come from [`motion-roles.json`](../../packages/design-data/registry/motion-roles.json). |
|
|
136
|
+
| Easing | `easing` | How? | Easing curve identifier (e.g. `ease-in`, `ease-out`, `standard`). Values come from [`easing-curves.json`](../../packages/design-data/registry/easing-curves.json). |
|
|
137
|
+
| Duration | `scaleIndex` | Which? | Numeric duration bucket index (e.g. `100` for 100ms, `200` for 200ms). Shared with other token types; not scope-restricted. |
|
|
137
138
|
|
|
138
139
|
**Default serialization order for motion tokens:**
|
|
139
140
|
|
|
@@ -143,6 +144,33 @@ Motion tokens describe timing, easing, and animation role for UI animation. Thei
|
|
|
143
144
|
|
|
144
145
|
Example: `motionRole=enter` + `easing=ease-out` → `enter-ease-out`. `motionRole=transition` + `scaleIndex=100` → `transition-100`.
|
|
145
146
|
|
|
147
|
+
### Alias / semantic token name objects
|
|
148
|
+
|
|
149
|
+
Alias tokens (`$schema: …/alias.json`) MAY carry name objects using the same field vocabulary
|
|
150
|
+
as their target domain. A color alias carrying `colorFamily` is valid when its alias chain
|
|
151
|
+
resolves to a color-domain schema (`color.json`, `color-set.json`).
|
|
152
|
+
|
|
153
|
+
**NORMATIVE:** SPEC-042 (`field-scope-violation`) evaluates alias tokens by following the
|
|
154
|
+
`alias_target` chain to the terminal non-alias schema, then checking that schema against the
|
|
155
|
+
field's domain. This is the **alias-target-domain** rule: the alias *inherits* its domain
|
|
156
|
+
from what it ultimately resolves to.
|
|
157
|
+
|
|
158
|
+
**Examples:**
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
// icon-color-blue-primary-default ($schema=alias.json, $ref → icon-color-blue-100 which is color-set.json)
|
|
162
|
+
// Valid: colorFamily allowed because target resolves to color domain.
|
|
163
|
+
{ "property": "icon-color", "colorFamily": "blue", "variant": "primary" }
|
|
164
|
+
|
|
165
|
+
// icon-color-primary-default ($schema=alias.json, $ref → icon-color-blue-primary-default)
|
|
166
|
+
// Valid: no domain-scoped fields used — variant and state are universal.
|
|
167
|
+
{ "property": "icon-color", "variant": "primary" }
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**What stays deferred:** alias tokens referencing the same target but carrying modifiers that
|
|
171
|
+
have no current field (e.g. `inverse`, `emphasized`, `subtle`, `subdued`) remain unclassified
|
|
172
|
+
until a color-modifier RFC defines those fields.
|
|
173
|
+
|
|
146
174
|
### Structure vs. component — when does the line move?
|
|
147
175
|
|
|
148
176
|
The `structure` and `component` fields both answer "What?" but apply at different scopes. A useful rule of thumb:
|
|
@@ -201,7 +229,7 @@ Semantic fields describe identity, structure, and intent. They are used for quer
|
|
|
201
229
|
|
|
202
230
|
**NORMATIVE:** Semantic field values are validated against their declared vocabulary registry with the severity specified in the field declaration (typically **advisory** — warning, not error). Values not in the registry are permitted but flagged.
|
|
203
231
|
|
|
204
|
-
Semantic fields are those declared with `kind: "semantic"` in the field catalog.
|
|
232
|
+
Semantic fields are those declared with `kind: "semantic"` in the field catalog. The authoritative list for any given design system is determined by its field catalog declarations (see `packages/design-data/fields/` for Spectrum's catalog).
|
|
205
233
|
|
|
206
234
|
### Mode-set fields
|
|
207
235
|
|
|
@@ -209,7 +237,7 @@ Mode-set fields represent axes of variation that drive the [cascade](cascade.md)
|
|
|
209
237
|
|
|
210
238
|
**NORMATIVE:** Mode-set field values are validated against declared [mode set](mode-sets.md) modes with **strict** severity (error). An invalid mode value would silently fail to match any context during cascade resolution.
|
|
211
239
|
|
|
212
|
-
Mode-set fields are those declared with `kind: "mode-set"` in the field catalog, plus any additional mode set keys from the dataset's [mode set declarations](mode-sets.md).
|
|
240
|
+
Mode-set fields are those declared with `kind: "mode-set"` in the field catalog, plus any additional mode set keys from the dataset's [mode set declarations](mode-sets.md). The authoritative list for any given design system is determined by its field catalog and mode-set declarations (see `packages/design-data/fields/` for Spectrum's catalog).
|
|
213
241
|
|
|
214
242
|
See [Mode Sets](mode-sets.md) for mode set declarations, modes, and defaults.
|
|
215
243
|
|
|
@@ -244,6 +272,44 @@ The taxonomy and terms are built to scale as new concepts and terms are identifi
|
|
|
244
272
|
* New token type taxonomies **MAY** be added by creating scoped field declarations (non-null `scope`) and a corresponding registry section in taxonomy.md. Color, typography, and motion taxonomies are defined above.
|
|
245
273
|
* Platform manifests **MAY** extend the vocabulary with platform-specific terms and formatting.
|
|
246
274
|
|
|
275
|
+
## Where `name` objects live
|
|
276
|
+
|
|
277
|
+
Token taxonomy data is **decoupled** from the published `@adobe/spectrum-tokens`
|
|
278
|
+
package to avoid bumping the tokens version on every taxonomy change.
|
|
279
|
+
|
|
280
|
+
| Artifact | Location | Description |
|
|
281
|
+
| ----------------- | ----------------------------------- | -------------------------------------------------------------------------------- |
|
|
282
|
+
| Token source data | `packages/tokens/src/*.json` | `$schema`, `value`, `uuid`, `sets`, … — no `name` field |
|
|
283
|
+
| Taxonomy sidecar | `packages/token-names/names/*.json` | `{ "<slug>": { property, colorFamily, … }, … }` — one file per token source file |
|
|
284
|
+
| Field definitions | `packages/design-data/fields/` | Authoritative field catalog with scope and type |
|
|
285
|
+
|
|
286
|
+
The sidecar package (`@adobe/token-names`) is **private** (not published to npm).
|
|
287
|
+
Its delivery format for downstream consumers is TBD.
|
|
288
|
+
|
|
289
|
+
### SDK validator integration
|
|
290
|
+
|
|
291
|
+
Pass `--names-dir packages/token-names/names/` to the `design-data validate` CLI
|
|
292
|
+
to merge sidecar names into the token graph at ingest. All relational rules
|
|
293
|
+
(SPEC-042, SPEC-043, SPEC-018…022, cascade, diff, query) continue to read
|
|
294
|
+
`record.raw["name"]` as if the field were inline:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
cargo run --bin design-data -- validate packages/tokens/src/ \
|
|
298
|
+
--names-dir packages/token-names/names/
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
Validation without `--names-dir` is a valid fail-open configuration (name-scope
|
|
302
|
+
rules are silent); CI always supplies the flag.
|
|
303
|
+
|
|
304
|
+
### Regenerating name data
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
node tools/token-corpus-migrate/src/cli.js \
|
|
308
|
+
--root packages/tokens/src \
|
|
309
|
+
--names-out packages/token-names/names \
|
|
310
|
+
--write
|
|
311
|
+
```
|
|
312
|
+
|
|
247
313
|
## References
|
|
248
314
|
|
|
249
315
|
* [#806 — Token Taxonomy, Vocabulary, and Formatting](https://github.com/adobe/spectrum-design-data/discussions/806)
|
package/spec/token-format.md
CHANGED
|
@@ -98,7 +98,15 @@ The table below lists all semantic fields. Fields marked with a scope are domain
|
|
|
98
98
|
|
|
99
99
|
### Alias (`$ref`)
|
|
100
100
|
|
|
101
|
-
When **`$ref`** is present, the token is an **alias**. The value **MUST** be a non-empty string
|
|
101
|
+
When **`$ref`** is present, the token is an **alias**. The value **MUST** be a non-empty string. In cascade format the value is the **UUID** of the target token (rename-proof, resolved via the graph's `uuid_index`). In the legacy transition format the value is the target token's kebab-case name (serialized legacy slug). Both forms are accepted; resolution rules are Layer 2 (see rule `SPEC-001` in `rules/rules.yaml`).
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
// Cascade canonical form (recommended) — the UUID is stable across renames.
|
|
105
|
+
{ "name": { "property": "accent-background-color", "state": "default", "colorScheme": "dark" },
|
|
106
|
+
"$schema": "…/alias.json",
|
|
107
|
+
"$ref": "87a2c8f0-54fd-4939-8f42-3124fde1e49e",
|
|
108
|
+
"uuid": "f24eb871-6419-4cef-88a2-cca8548ae31e" }
|
|
109
|
+
```
|
|
102
110
|
|
|
103
111
|
### Literal `value`
|
|
104
112
|
|
|
@@ -179,7 +187,7 @@ No string-named token may remain in a conforming dataset after the `2.0.0` cut w
|
|
|
179
187
|
|
|
180
188
|
The `property` field on a name object is the **CSS/styling attribute or design-system abstraction** being defined — not an anatomy part, not a styling surface, and not a legacy compound name string. Not all valid values are CSS property identifiers; design-system abstractions (e.g. `padding-horizontal`, `overlay-color`, `size`) are permitted.
|
|
181
189
|
|
|
182
|
-
**NORMATIVE:** Values for `property` **SHOULD** come from the [`property-terms`](../../packages/design-
|
|
190
|
+
**NORMATIVE:** Values for `property` **SHOULD** come from the [`property-terms`](../../packages/design-data/registry/property-terms.json) registry. Non-registry values emit an advisory warning (SPEC-009 applied to the `property` field).
|
|
183
191
|
|
|
184
192
|
Examples of **valid** `property` values: `color`, `background-color`, `border-radius`, `font-size`, `gap`, `opacity`.
|
|
185
193
|
|
|
@@ -268,7 +276,7 @@ Within a composite value, a string sub-value **MAY** be an **inline alias**: a r
|
|
|
268
276
|
}
|
|
269
277
|
```
|
|
270
278
|
|
|
271
|
-
**NORMATIVE:** In legacy format, inline aliases use the syntax `{token-name}` (curly-brace-wrapped token property name). In cascade format,
|
|
279
|
+
**NORMATIVE:** In legacy format, inline aliases use the syntax `{token-name}` (curly-brace-wrapped token property name). In cascade format, top-level `$ref` aliases use a UUID (canonical, rename-proof); inline composite aliases within `value` objects remain `{token-name}` for backward compatibility. UUID-based inline composite aliases are reserved for a future spec version.
|
|
272
280
|
|
|
273
281
|
**NORMATIVE:** Inline aliases within composite values are subject to alias resolution rules. Validators **MUST** resolve inline aliases and report errors for missing targets (SPEC-014), type mismatches (SPEC-015), and circular references (SPEC-003, extended).
|
|
274
282
|
|