@stridge/noctis-design-tokens 1.0.0-beta.3 → 1.0.0-beta.4

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.
@@ -3230,7 +3230,7 @@ const radio = {
3230
3230
  * The avatar mints its box edge and its initials type, both retuned per the `size` axis (`xs`…`xl`),
3231
3231
  * plus the corner radius the `square` shape reads (the default `circle` shape is the literal
3232
3232
  * `--noctis-radius-full` extreme, never minted). Avatars are static-identity and accent-independent:
3233
- * the fallback fill is a `--noctis-color-avatar-N` role chosen by a stable hash, so it carries its own
3233
+ * the fallback fill is a `--noctis-color-palette-N` role chosen by a stable hash, so it carries its own
3234
3234
  * light/dark values and never re-themes on the accent. Its sizes are a deliberate own scale (not the
3235
3235
  * control-height ladder) — an avatar is an image footprint, not a control.
3236
3236
  */
@@ -3340,6 +3340,87 @@ const avatar = {
3340
3340
  }, "0px", "Corner inset of the presence/status indicator.", "How far the indicator is pulled in from the avatar's corner (logical); zero sits it flush against the edge, where the round box curves away from it.")
3341
3341
  ]
3342
3342
  };
3343
+ const badge = {
3344
+ component: "badge",
3345
+ category: "data",
3346
+ slotPrefix: "noctis",
3347
+ anatomy: [
3348
+ "badge",
3349
+ "badge-dot",
3350
+ "badge-icon"
3351
+ ],
3352
+ options: {
3353
+ variant: [
3354
+ "solid",
3355
+ "soft",
3356
+ "outline",
3357
+ "dot"
3358
+ ],
3359
+ tone: [
3360
+ "neutral",
3361
+ "accent",
3362
+ "success",
3363
+ "warning",
3364
+ "danger",
3365
+ "info",
3366
+ "red",
3367
+ "orange",
3368
+ "amber",
3369
+ "green",
3370
+ "teal",
3371
+ "blue",
3372
+ "purple",
3373
+ "pink"
3374
+ ],
3375
+ size: ["sm", "md"]
3376
+ },
3377
+ states: [],
3378
+ consumes: [],
3379
+ optionSlots: {
3380
+ variant: "badge",
3381
+ tone: "badge",
3382
+ size: "badge"
3383
+ },
3384
+ mints: [
3385
+ aliased("dbb503f3-d915-428f-a2ba-c6bad40ae7d5", {
3386
+ kind: "component",
3387
+ component: "badge",
3388
+ property: "padding-inline"
3389
+ }, { raw: "0.5rem" }, "Inline padding of the chip.", "The horizontal inset between the chip edge and its content, per size.", { size: { sm: { raw: "0.4375rem" } } }),
3390
+ aliased("aaecfaef-d3b1-4c85-a1bd-dde224acdbc6", {
3391
+ kind: "component",
3392
+ component: "badge",
3393
+ property: "padding-block"
3394
+ }, { raw: "0.1875rem" }, "Block padding of the chip.", "The vertical inset between the chip edge and its content, per size.", { size: { sm: { raw: "0.125rem" } } }),
3395
+ aliased("c3e686b3-1588-401e-ac41-4ab58c34b8cc", {
3396
+ kind: "component",
3397
+ component: "badge",
3398
+ property: "gap"
3399
+ }, { raw: "0.3125rem" }, "Gap between the chip's dot/icon and its label.", "The spacing the chip holds between a leading dot or icon and the label text, per size.", { size: { sm: { raw: "0.25rem" } } }),
3400
+ aliased("acd27e33-13ac-4d0e-a772-6ac25f34208c", {
3401
+ kind: "component",
3402
+ component: "badge",
3403
+ property: "font-size"
3404
+ }, { raw: "var(--noctis-text-mini)" }, "Label type size.", "The font size of the chip's label, per size; the 12px `mini` step at `md`, the 11px `micro` step at `sm`.", { size: { sm: { raw: "var(--noctis-text-micro)" } } }),
3405
+ raw("27e0ac6b-60dc-4179-9d7e-ecad248c2ee7", {
3406
+ kind: "component",
3407
+ component: "badge",
3408
+ property: "border-radius"
3409
+ }, "var(--noctis-radius-full)", "Chip corner radius.", "The rounding of the chip; the full-round pill extreme so the chip reads as a label, not a button — override the public var for a squarer chip."),
3410
+ aliased("d73ca89d-4d8c-4663-8f28-3ad69877ef92", {
3411
+ kind: "component",
3412
+ component: "badge",
3413
+ anatomy: "dot",
3414
+ property: "size"
3415
+ }, { raw: "0.375rem" }, "Edge length of the leading status dot.", "The diameter of the optional status dot, per size; the dot inherits the label colour via `currentColor`, so it stays legible in every variant.", { size: { sm: { raw: "0.3125rem" } } }),
3416
+ aliased("0fcef652-7887-4bc4-a85f-08137936f1c0", {
3417
+ kind: "component",
3418
+ component: "badge",
3419
+ anatomy: "icon",
3420
+ property: "size"
3421
+ }, { raw: "0.875rem" }, "Edge length of a leading icon glyph.", "The width and height the chip clamps a leading icon to, per size, so the glyph tracks the label.", { size: { sm: { raw: "0.75rem" } } })
3422
+ ]
3423
+ };
3343
3424
  const colorSwatch = {
3344
3425
  component: "color-swatch",
3345
3426
  category: "fields",
@@ -4260,6 +4341,7 @@ const COMPONENT_DECLARATIONS = [
4260
4341
  slider,
4261
4342
  checkbox,
4262
4343
  avatar,
4344
+ badge,
4263
4345
  otpField,
4264
4346
  switchControl,
4265
4347
  progress,
@@ -24,7 +24,7 @@ type TokenBridge = {
24
24
  readonly name: string;
25
25
  };
26
26
  /** How a token is grouped in the reference view (display metadata, not the structural category). */
27
- type TokenGroup = "surface" | "text" | "border" | "accent" | "control" | "status" | "utility" | "chart" | "avatar";
27
+ type TokenGroup = "surface" | "text" | "border" | "accent" | "control" | "status" | "utility" | "chart" | "palette";
28
28
  /**
29
29
  * A structured token name. The flat form carries an id verbatim (seed, foundation, and semantic
30
30
  * tokens — the category segment comes from `tier`/`category` at serialization, never the id);
@@ -55,7 +55,7 @@ const groupSchema = z.enum([
55
55
  "status",
56
56
  "utility",
57
57
  "chart",
58
- "avatar"
58
+ "palette"
59
59
  ]);
60
60
  const tokenBridgeSchema = z.discriminatedUnion("kind", [
61
61
  z.object({ kind: z.literal("color") }).strict(),
@@ -202,19 +202,19 @@ const STATIC_SEMANTIC_TOKENS = [
202
202
  tier: "semantic",
203
203
  name: {
204
204
  kind: "flat",
205
- id: "avatar-1"
205
+ id: "palette-1"
206
206
  },
207
207
  value: {
208
208
  raw: "oklch(0.62 0.17 264)",
209
209
  rawLight: "oklch(0.58 0.18 264)"
210
210
  },
211
- description: "Generative avatar swatch 1.",
212
- usage: "Avatar / initials background, indexed by a stable id hash.",
211
+ description: "Categorical palette swatch 1.",
212
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
213
213
  introduced: "0.0.0",
214
- label: "Avatar 1",
214
+ label: "Palette 1",
215
215
  category: "color",
216
- group: "avatar",
217
- utility: "bg-avatar-1",
216
+ group: "palette",
217
+ utility: "bg-palette-1",
218
218
  bridge: { kind: "color" }
219
219
  },
220
220
  {
@@ -222,19 +222,19 @@ const STATIC_SEMANTIC_TOKENS = [
222
222
  tier: "semantic",
223
223
  name: {
224
224
  kind: "flat",
225
- id: "avatar-2"
225
+ id: "palette-2"
226
226
  },
227
227
  value: {
228
228
  raw: "oklch(0.62 0.15 196)",
229
229
  rawLight: "oklch(0.56 0.15 196)"
230
230
  },
231
- description: "Generative avatar swatch 2.",
232
- usage: "Avatar / initials background, indexed by a stable id hash.",
231
+ description: "Categorical palette swatch 2.",
232
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
233
233
  introduced: "0.0.0",
234
- label: "Avatar 2",
234
+ label: "Palette 2",
235
235
  category: "color",
236
- group: "avatar",
237
- utility: "bg-avatar-2",
236
+ group: "palette",
237
+ utility: "bg-palette-2",
238
238
  bridge: { kind: "color" }
239
239
  },
240
240
  {
@@ -242,19 +242,19 @@ const STATIC_SEMANTIC_TOKENS = [
242
242
  tier: "semantic",
243
243
  name: {
244
244
  kind: "flat",
245
- id: "avatar-3"
245
+ id: "palette-3"
246
246
  },
247
247
  value: {
248
248
  raw: "oklch(0.62 0.16 152)",
249
249
  rawLight: "oklch(0.56 0.16 152)"
250
250
  },
251
- description: "Generative avatar swatch 3.",
252
- usage: "Avatar / initials background, indexed by a stable id hash.",
251
+ description: "Categorical palette swatch 3.",
252
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
253
253
  introduced: "0.0.0",
254
- label: "Avatar 3",
254
+ label: "Palette 3",
255
255
  category: "color",
256
- group: "avatar",
257
- utility: "bg-avatar-3",
256
+ group: "palette",
257
+ utility: "bg-palette-3",
258
258
  bridge: { kind: "color" }
259
259
  },
260
260
  {
@@ -262,19 +262,19 @@ const STATIC_SEMANTIC_TOKENS = [
262
262
  tier: "semantic",
263
263
  name: {
264
264
  kind: "flat",
265
- id: "avatar-4"
265
+ id: "palette-4"
266
266
  },
267
267
  value: {
268
268
  raw: "oklch(0.64 0.15 130)",
269
269
  rawLight: "oklch(0.58 0.15 130)"
270
270
  },
271
- description: "Generative avatar swatch 4.",
272
- usage: "Avatar / initials background, indexed by a stable id hash.",
271
+ description: "Categorical palette swatch 4.",
272
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
273
273
  introduced: "0.0.0",
274
- label: "Avatar 4",
274
+ label: "Palette 4",
275
275
  category: "color",
276
- group: "avatar",
277
- utility: "bg-avatar-4",
276
+ group: "palette",
277
+ utility: "bg-palette-4",
278
278
  bridge: { kind: "color" }
279
279
  },
280
280
  {
@@ -282,19 +282,19 @@ const STATIC_SEMANTIC_TOKENS = [
282
282
  tier: "semantic",
283
283
  name: {
284
284
  kind: "flat",
285
- id: "avatar-5"
285
+ id: "palette-5"
286
286
  },
287
287
  value: {
288
288
  raw: "oklch(0.66 0.16 70)",
289
289
  rawLight: "oklch(0.62 0.16 70)"
290
290
  },
291
- description: "Generative avatar swatch 5.",
292
- usage: "Avatar / initials background, indexed by a stable id hash.",
291
+ description: "Categorical palette swatch 5.",
292
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
293
293
  introduced: "0.0.0",
294
- label: "Avatar 5",
294
+ label: "Palette 5",
295
295
  category: "color",
296
- group: "avatar",
297
- utility: "bg-avatar-5",
296
+ group: "palette",
297
+ utility: "bg-palette-5",
298
298
  bridge: { kind: "color" }
299
299
  },
300
300
  {
@@ -302,19 +302,19 @@ const STATIC_SEMANTIC_TOKENS = [
302
302
  tier: "semantic",
303
303
  name: {
304
304
  kind: "flat",
305
- id: "avatar-6"
305
+ id: "palette-6"
306
306
  },
307
307
  value: {
308
308
  raw: "oklch(0.62 0.18 40)",
309
309
  rawLight: "oklch(0.58 0.19 40)"
310
310
  },
311
- description: "Generative avatar swatch 6.",
312
- usage: "Avatar / initials background, indexed by a stable id hash.",
311
+ description: "Categorical palette swatch 6.",
312
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
313
313
  introduced: "0.0.0",
314
- label: "Avatar 6",
314
+ label: "Palette 6",
315
315
  category: "color",
316
- group: "avatar",
317
- utility: "bg-avatar-6",
316
+ group: "palette",
317
+ utility: "bg-palette-6",
318
318
  bridge: { kind: "color" }
319
319
  },
320
320
  {
@@ -322,19 +322,19 @@ const STATIC_SEMANTIC_TOKENS = [
322
322
  tier: "semantic",
323
323
  name: {
324
324
  kind: "flat",
325
- id: "avatar-7"
325
+ id: "palette-7"
326
326
  },
327
327
  value: {
328
328
  raw: "oklch(0.6 0.2 18)",
329
329
  rawLight: "oklch(0.56 0.21 18)"
330
330
  },
331
- description: "Generative avatar swatch 7.",
332
- usage: "Avatar / initials background, indexed by a stable id hash.",
331
+ description: "Categorical palette swatch 7.",
332
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
333
333
  introduced: "0.0.0",
334
- label: "Avatar 7",
334
+ label: "Palette 7",
335
335
  category: "color",
336
- group: "avatar",
337
- utility: "bg-avatar-7",
336
+ group: "palette",
337
+ utility: "bg-palette-7",
338
338
  bridge: { kind: "color" }
339
339
  },
340
340
  {
@@ -342,19 +342,19 @@ const STATIC_SEMANTIC_TOKENS = [
342
342
  tier: "semantic",
343
343
  name: {
344
344
  kind: "flat",
345
- id: "avatar-8"
345
+ id: "palette-8"
346
346
  },
347
347
  value: {
348
348
  raw: "oklch(0.6 0.18 330)",
349
349
  rawLight: "oklch(0.56 0.19 330)"
350
350
  },
351
- description: "Generative avatar swatch 8.",
352
- usage: "Avatar / initials background, indexed by a stable id hash.",
351
+ description: "Categorical palette swatch 8.",
352
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
353
353
  introduced: "0.0.0",
354
- label: "Avatar 8",
354
+ label: "Palette 8",
355
355
  category: "color",
356
- group: "avatar",
357
- utility: "bg-avatar-8",
356
+ group: "palette",
357
+ utility: "bg-palette-8",
358
358
  bridge: { kind: "color" }
359
359
  },
360
360
  {
@@ -362,19 +362,19 @@ const STATIC_SEMANTIC_TOKENS = [
362
362
  tier: "semantic",
363
363
  name: {
364
364
  kind: "flat",
365
- id: "avatar-9"
365
+ id: "palette-9"
366
366
  },
367
367
  value: {
368
368
  raw: "oklch(0.6 0.18 300)",
369
369
  rawLight: "oklch(0.56 0.19 300)"
370
370
  },
371
- description: "Generative avatar swatch 9.",
372
- usage: "Avatar / initials background, indexed by a stable id hash.",
371
+ description: "Categorical palette swatch 9.",
372
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
373
373
  introduced: "0.0.0",
374
- label: "Avatar 9",
374
+ label: "Palette 9",
375
375
  category: "color",
376
- group: "avatar",
377
- utility: "bg-avatar-9",
376
+ group: "palette",
377
+ utility: "bg-palette-9",
378
378
  bridge: { kind: "color" }
379
379
  },
380
380
  {
@@ -382,19 +382,19 @@ const STATIC_SEMANTIC_TOKENS = [
382
382
  tier: "semantic",
383
383
  name: {
384
384
  kind: "flat",
385
- id: "avatar-10"
385
+ id: "palette-10"
386
386
  },
387
387
  value: {
388
388
  raw: "oklch(0.6 0.15 285)",
389
389
  rawLight: "oklch(0.56 0.16 285)"
390
390
  },
391
- description: "Generative avatar swatch 10.",
392
- usage: "Avatar / initials background, indexed by a stable id hash.",
391
+ description: "Categorical palette swatch 10.",
392
+ usage: "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
393
393
  introduced: "0.0.0",
394
- label: "Avatar 10",
394
+ label: "Palette 10",
395
395
  category: "color",
396
- group: "avatar",
397
- utility: "bg-avatar-10",
396
+ group: "palette",
397
+ utility: "bg-palette-10",
398
398
  bridge: { kind: "color" }
399
399
  },
400
400
  {
@@ -402,16 +402,16 @@ const STATIC_SEMANTIC_TOKENS = [
402
402
  tier: "semantic",
403
403
  name: {
404
404
  kind: "flat",
405
- id: "avatar-foreground"
405
+ id: "palette-foreground"
406
406
  },
407
407
  value: { raw: "oklch(0.99 0 0)" },
408
- description: "Initials text on an avatar background.",
409
- usage: "Initials text on an avatarthe page background as a knockout.",
408
+ description: "Knockout text on a saturated palette swatch.",
409
+ usage: "Knockout text that reads on any saturated palette swatch avatar initials, solid Badge labels.",
410
410
  introduced: "0.0.0",
411
- label: "Avatar foreground",
411
+ label: "Palette foreground",
412
412
  category: "color",
413
- group: "avatar",
414
- utility: "text-avatar-foreground",
413
+ group: "palette",
414
+ utility: "text-palette-foreground",
415
415
  bridge: { kind: "color" }
416
416
  }
417
417
  ];
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ import { ComponentDeclaration, DesignToken, GraphValidationError, TokenBridge, T
5
5
  import { COMPONENT_DECLARATIONS } from "./graph/components.js";
6
6
  import { DESIGN_TOKENS, SemanticRoleId } from "./graph/index.js";
7
7
  import { internalVar, serializeTokenName } from "./graph/serialize.js";
8
- import { AVATAR_FOREGROUND, AVATAR_PALETTE, AVATAR_SWATCH_COUNT, CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, ModePalette, avatarIndex } from "./palettes.js";
8
+ import { CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, ModePalette, PALETTE, PALETTE_FOREGROUND, PALETTE_SWATCH_COUNT, avatarIndex } from "./palettes.js";
9
9
  import { BREAKPOINTS, DENSITY_VAR, EASINGS, FONT_SCALE_VAR, FONT_SIZES, FONT_WEIGHTS, RADII, RADIUS_VAR, SPEEDS, Z_INDEX } from "./scales.js";
10
10
  import { ACCENT_SWATCHES, BACKGROUND_SWATCHES, ThemeSwatch } from "./swatches.js";
11
11
  import { ELEVATION_SCOPES, ElevationScope, SEMANTIC_ROLES, STATIC_TOKENS, SemanticRole, StaticToken } from "./semantic.js";
@@ -23,4 +23,4 @@ import { ThemeOverrides, ThemePreset, defaultPreset, presets } from "@stridge/no
23
23
  /** Package identifier — the workspace-resolution marker consumed by the app scaffold. */
24
24
  declare const DESIGN_TOKENS_PACKAGE: "@stridge/noctis-design-tokens";
25
25
  //#endregion
26
- export { ACCENT_SWATCHES, AVATAR_FOREGROUND, AVATAR_PALETTE, AVATAR_SWATCH_COUNT, BACKGROUND_SWATCHES, BREAKPOINTS, CATEGORY_REGISTRY, CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, COMPONENT_DECLARATIONS, COMPOSITE_PROPERTIES, type ComponentCategory, type ComponentDeclaration, type CompositeProperty, DENSITY_VAR, DESIGN_TOKENS, DESIGN_TOKENS_PACKAGE, type DesignToken, EASINGS, ELEVATION_SCOPES, type ElevationScope, FONT_SCALE_VAR, FONT_SIZES, FONT_WEIGHTS, GraphValidationError, type ModePalette, RADII, RADIUS_VAR, ROLE_VAR_PREFIX, SEMANTIC_ROLES, SPEEDS, STATE_REGISTRY, STATIC_TOKENS, type SemanticRole, type SemanticRoleId, type StaticToken, TOKEN_CATEGORIES, TOKEN_TIERS, type ThemeOverrides, type ThemePreset, type ThemeSwatch, type TokenBridge, type TokenCategory, type TokenDeprecation, type TokenGroup, type TokenName, type TokenState, type TokenTier, type TokenValue, Z_INDEX, applyThemeWithScopes, avatarIndex, bridgeVarName, componentDeclarationSchema, cssVarName, defaultPreset, defaultThemeCss, designTokenSchema, internalVar, presets, serializeTokenName, validateGraph };
26
+ export { ACCENT_SWATCHES, BACKGROUND_SWATCHES, BREAKPOINTS, CATEGORY_REGISTRY, CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, COMPONENT_DECLARATIONS, COMPOSITE_PROPERTIES, type ComponentCategory, type ComponentDeclaration, type CompositeProperty, DENSITY_VAR, DESIGN_TOKENS, DESIGN_TOKENS_PACKAGE, type DesignToken, EASINGS, ELEVATION_SCOPES, type ElevationScope, FONT_SCALE_VAR, FONT_SIZES, FONT_WEIGHTS, GraphValidationError, type ModePalette, PALETTE, PALETTE_FOREGROUND, PALETTE_SWATCH_COUNT, RADII, RADIUS_VAR, ROLE_VAR_PREFIX, SEMANTIC_ROLES, SPEEDS, STATE_REGISTRY, STATIC_TOKENS, type SemanticRole, type SemanticRoleId, type StaticToken, TOKEN_CATEGORIES, TOKEN_TIERS, type ThemeOverrides, type ThemePreset, type ThemeSwatch, type TokenBridge, type TokenCategory, type TokenDeprecation, type TokenGroup, type TokenName, type TokenState, type TokenTier, type TokenValue, Z_INDEX, applyThemeWithScopes, avatarIndex, bridgeVarName, componentDeclarationSchema, cssVarName, defaultPreset, defaultThemeCss, designTokenSchema, internalVar, presets, serializeTokenName, validateGraph };
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import { CATEGORY_REGISTRY, COMPOSITE_PROPERTIES, ROLE_VAR_PREFIX, STATE_REGISTR
5
5
  import { internalVar, serializeTokenName } from "./graph/serialize.js";
6
6
  import { GraphValidationError, bridgeVarName, componentDeclarationSchema, cssVarName, designTokenSchema, validateGraph } from "./graph/model.js";
7
7
  import { DESIGN_TOKENS } from "./graph/index.js";
8
- import { AVATAR_FOREGROUND, AVATAR_PALETTE, AVATAR_SWATCH_COUNT, CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, avatarIndex } from "./palettes.js";
8
+ import { CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, PALETTE, PALETTE_FOREGROUND, PALETTE_SWATCH_COUNT, avatarIndex } from "./palettes.js";
9
9
  import { BREAKPOINTS, DENSITY_VAR, EASINGS, FONT_SCALE_VAR, FONT_SIZES, FONT_WEIGHTS, RADII, RADIUS_VAR, SPEEDS, Z_INDEX } from "./scales.js";
10
10
  import { ACCENT_SWATCHES, BACKGROUND_SWATCHES } from "./swatches.js";
11
11
  import { ELEVATION_SCOPES, SEMANTIC_ROLES, STATIC_TOKENS } from "./semantic.js";
@@ -22,4 +22,4 @@ import { defaultPreset, presets } from "@stridge/noctis-theme-engine";
22
22
  /** Package identifier — the workspace-resolution marker consumed by the app scaffold. */
23
23
  const DESIGN_TOKENS_PACKAGE = "@stridge/noctis-design-tokens";
24
24
  //#endregion
25
- export { ACCENT_SWATCHES, AVATAR_FOREGROUND, AVATAR_PALETTE, AVATAR_SWATCH_COUNT, BACKGROUND_SWATCHES, BREAKPOINTS, CATEGORY_REGISTRY, CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, COMPONENT_DECLARATIONS, COMPOSITE_PROPERTIES, DENSITY_VAR, DESIGN_TOKENS, DESIGN_TOKENS_PACKAGE, EASINGS, ELEVATION_SCOPES, FONT_SCALE_VAR, FONT_SIZES, FONT_WEIGHTS, GraphValidationError, RADII, RADIUS_VAR, ROLE_VAR_PREFIX, SEMANTIC_ROLES, SPEEDS, STATE_REGISTRY, STATIC_TOKENS, TOKEN_CATEGORIES, TOKEN_TIERS, Z_INDEX, applyThemeWithScopes, avatarIndex, bridgeVarName, componentDeclarationSchema, cssVarName, defaultPreset, defaultThemeCss, designTokenSchema, internalVar, presets, serializeTokenName, validateGraph };
25
+ export { ACCENT_SWATCHES, BACKGROUND_SWATCHES, BREAKPOINTS, CATEGORY_REGISTRY, CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, COMPONENT_DECLARATIONS, COMPOSITE_PROPERTIES, DENSITY_VAR, DESIGN_TOKENS, DESIGN_TOKENS_PACKAGE, EASINGS, ELEVATION_SCOPES, FONT_SCALE_VAR, FONT_SIZES, FONT_WEIGHTS, GraphValidationError, PALETTE, PALETTE_FOREGROUND, PALETTE_SWATCH_COUNT, RADII, RADIUS_VAR, ROLE_VAR_PREFIX, SEMANTIC_ROLES, SPEEDS, STATE_REGISTRY, STATIC_TOKENS, TOKEN_CATEGORIES, TOKEN_TIERS, Z_INDEX, applyThemeWithScopes, avatarIndex, bridgeVarName, componentDeclarationSchema, cssVarName, defaultPreset, defaultThemeCss, designTokenSchema, internalVar, presets, serializeTokenName, validateGraph };
@@ -2,10 +2,11 @@
2
2
  /**
3
3
  * Static, accent-independent palettes the engine does not generate.
4
4
  *
5
- * Charts and avatars need **categorical distinctness that stays stable** regardless of the
6
- * active theme accent, so these are authored in OKLCH (not derived from the seed) with
7
- * explicit light and dark values. They are emitted as Tailwind colors (`bg-chart-1`,
8
- * `bg-avatar-3`, `text-chart-positive`) and switch on the resolved mode via `data-theme`.
5
+ * Charts and categorical UI (avatar swatches, badge decorative tones) need **categorical
6
+ * distinctness that stays stable** regardless of the active theme accent, so these are authored in
7
+ * OKLCH (not derived from the seed) with explicit light and dark values. They are emitted as Tailwind
8
+ * colors (`bg-chart-1`, `bg-palette-3`, `text-chart-positive`) and switch on the resolved mode via
9
+ * `data-theme`.
9
10
  *
10
11
  * Hue choices are spread across the wheel and separated in lightness as well as hue, so the
11
12
  * series remain distinguishable under the common forms of color-vision deficiency (the worst
@@ -22,18 +23,19 @@ interface ModePalette {
22
23
  */
23
24
  declare const CHART_PALETTE: ModePalette;
24
25
  /**
25
- * Avatar / identity backgrounds (10). Saturated mid-lightness colors chosen so white initials
26
- * read clearly on every swatch; picked deterministically by hashing a stable id.
26
+ * The categorical palette (10). Saturated mid-lightness colors chosen so a white knockout reads
27
+ * clearly on every swatch shared by Avatar fallback backgrounds (picked by hashing a stable id) and
28
+ * Badge decorative tones (mapped by name). Accent-independent, so categorical identity stays stable.
27
29
  */
28
- declare const AVATAR_PALETTE: ModePalette;
29
- /** Number of distinct chart series and avatar swatches. */
30
+ declare const PALETTE: ModePalette;
31
+ /** Number of distinct chart series and categorical palette swatches. */
30
32
  declare const CHART_SERIES_COUNT: number;
31
- declare const AVATAR_SWATCH_COUNT: number;
32
- /** On-avatar text — a fixed knockout that reads on every (saturated) avatar swatch. */
33
- declare const AVATAR_FOREGROUND: "oklch(0.99 0 0)";
33
+ declare const PALETTE_SWATCH_COUNT: number;
34
+ /** Knockout text on a palette swatch — a fixed near-white that reads on every (saturated) swatch. */
35
+ declare const PALETTE_FOREGROUND: "oklch(0.99 0 0)";
34
36
  /**
35
- * Pick a stable avatar swatch index (1-based, matching `bg-avatar-N`) for an id. A small FNV-1a
36
- * hash keeps the mapping deterministic across renders and sessions.
37
+ * Pick a stable palette swatch index (1-based, matching `bg-palette-N`) for an id Avatar's identity
38
+ * hash. A small FNV-1a hash keeps the mapping deterministic across renders and sessions.
37
39
  */
38
40
  declare function avatarIndex(id: string): number;
39
41
  /** Chart roles that alias engine semantics (kept here so the swatch/reference lists them together). */
@@ -67,4 +69,4 @@ declare const CHART_SEMANTIC_ROLES: readonly [{
67
69
  readonly description: "Chart tooltip surface.";
68
70
  }];
69
71
  //#endregion
70
- export { AVATAR_FOREGROUND, AVATAR_PALETTE, AVATAR_SWATCH_COUNT, CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, ModePalette, avatarIndex };
72
+ export { CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, ModePalette, PALETTE, PALETTE_FOREGROUND, PALETTE_SWATCH_COUNT, avatarIndex };
package/dist/palettes.js CHANGED
@@ -26,10 +26,11 @@ const CHART_PALETTE = {
26
26
  ]
27
27
  };
28
28
  /**
29
- * Avatar / identity backgrounds (10). Saturated mid-lightness colors chosen so white initials
30
- * read clearly on every swatch; picked deterministically by hashing a stable id.
29
+ * The categorical palette (10). Saturated mid-lightness colors chosen so a white knockout reads
30
+ * clearly on every swatch shared by Avatar fallback backgrounds (picked by hashing a stable id) and
31
+ * Badge decorative tones (mapped by name). Accent-independent, so categorical identity stays stable.
31
32
  */
32
- const AVATAR_PALETTE = {
33
+ const PALETTE = {
33
34
  dark: [
34
35
  "oklch(0.62 0.17 264)",
35
36
  "oklch(0.62 0.15 196)",
@@ -55,14 +56,14 @@ const AVATAR_PALETTE = {
55
56
  "oklch(0.56 0.16 285)"
56
57
  ]
57
58
  };
58
- /** Number of distinct chart series and avatar swatches. */
59
+ /** Number of distinct chart series and categorical palette swatches. */
59
60
  const CHART_SERIES_COUNT = CHART_PALETTE.dark.length;
60
- const AVATAR_SWATCH_COUNT = AVATAR_PALETTE.dark.length;
61
- /** On-avatar text — a fixed knockout that reads on every (saturated) avatar swatch. */
62
- const AVATAR_FOREGROUND = "oklch(0.99 0 0)";
61
+ const PALETTE_SWATCH_COUNT = PALETTE.dark.length;
62
+ /** Knockout text on a palette swatch — a fixed near-white that reads on every (saturated) swatch. */
63
+ const PALETTE_FOREGROUND = "oklch(0.99 0 0)";
63
64
  /**
64
- * Pick a stable avatar swatch index (1-based, matching `bg-avatar-N`) for an id. A small FNV-1a
65
- * hash keeps the mapping deterministic across renders and sessions.
65
+ * Pick a stable palette swatch index (1-based, matching `bg-palette-N`) for an id Avatar's identity
66
+ * hash. A small FNV-1a hash keeps the mapping deterministic across renders and sessions.
66
67
  */
67
68
  function avatarIndex(id) {
68
69
  let hash = 2166136261;
@@ -70,7 +71,7 @@ function avatarIndex(id) {
70
71
  hash ^= id.charCodeAt(i);
71
72
  hash = Math.imul(hash, 16777619);
72
73
  }
73
- return (hash >>> 0) % AVATAR_SWATCH_COUNT + 1;
74
+ return (hash >>> 0) % PALETTE_SWATCH_COUNT + 1;
74
75
  }
75
76
  /** Chart roles that alias engine semantics (kept here so the swatch/reference lists them together). */
76
77
  const CHART_SEMANTIC_ROLES = [
@@ -111,4 +112,4 @@ const CHART_SEMANTIC_ROLES = [
111
112
  }
112
113
  ];
113
114
  //#endregion
114
- export { AVATAR_FOREGROUND, AVATAR_PALETTE, AVATAR_SWATCH_COUNT, CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, avatarIndex };
115
+ export { CHART_PALETTE, CHART_SEMANTIC_ROLES, CHART_SERIES_COUNT, PALETTE, PALETTE_FOREGROUND, PALETTE_SWATCH_COUNT, avatarIndex };
package/dist/tokens.css CHANGED
@@ -477,7 +477,7 @@
477
477
  }
478
478
 
479
479
  /* ── Authored static palettes (accent-independent; switch on the resolved mode) ─────────
480
- * Chart and avatar series stay categorically stable regardless of the accent (re-theming
480
+ * Chart and categorical-palette series stay categorically stable regardless of the accent (re-theming
481
481
  * them would break legend↔series identity), so they are authored — not engine-derived. Dark
482
482
  * values sit on `:root`; light values under `[data-theme="light"]`, set by the app shell and the
483
483
  * theme provider from the resolved mode. Hues are spread across the wheel and separated in
@@ -493,17 +493,17 @@
493
493
  --noctis-color-chart-7: oklch(0.7 0.17 310);
494
494
  --noctis-color-chart-8: oklch(0.76 0.14 350);
495
495
 
496
- --noctis-color-avatar-1: oklch(0.62 0.17 264);
497
- --noctis-color-avatar-2: oklch(0.62 0.15 196);
498
- --noctis-color-avatar-3: oklch(0.62 0.16 152);
499
- --noctis-color-avatar-4: oklch(0.64 0.15 130);
500
- --noctis-color-avatar-5: oklch(0.66 0.16 70);
501
- --noctis-color-avatar-6: oklch(0.62 0.18 40);
502
- --noctis-color-avatar-7: oklch(0.6 0.2 18);
503
- --noctis-color-avatar-8: oklch(0.6 0.18 330);
504
- --noctis-color-avatar-9: oklch(0.6 0.18 300);
505
- --noctis-color-avatar-10: oklch(0.6 0.15 285);
506
- --noctis-color-avatar-foreground: oklch(0.99 0 0);
496
+ --noctis-color-palette-1: oklch(0.62 0.17 264);
497
+ --noctis-color-palette-2: oklch(0.62 0.15 196);
498
+ --noctis-color-palette-3: oklch(0.62 0.16 152);
499
+ --noctis-color-palette-4: oklch(0.64 0.15 130);
500
+ --noctis-color-palette-5: oklch(0.66 0.16 70);
501
+ --noctis-color-palette-6: oklch(0.62 0.18 40);
502
+ --noctis-color-palette-7: oklch(0.6 0.2 18);
503
+ --noctis-color-palette-8: oklch(0.6 0.18 330);
504
+ --noctis-color-palette-9: oklch(0.6 0.18 300);
505
+ --noctis-color-palette-10: oklch(0.6 0.15 285);
506
+ --noctis-color-palette-foreground: oklch(0.99 0 0);
507
507
  }
508
508
 
509
509
  :root[data-theme="light"] {
@@ -516,16 +516,16 @@
516
516
  --noctis-color-chart-7: oklch(0.55 0.19 310);
517
517
  --noctis-color-chart-8: oklch(0.6 0.16 350);
518
518
 
519
- --noctis-color-avatar-1: oklch(0.58 0.18 264);
520
- --noctis-color-avatar-2: oklch(0.56 0.15 196);
521
- --noctis-color-avatar-3: oklch(0.56 0.16 152);
522
- --noctis-color-avatar-4: oklch(0.58 0.15 130);
523
- --noctis-color-avatar-5: oklch(0.62 0.16 70);
524
- --noctis-color-avatar-6: oklch(0.58 0.19 40);
525
- --noctis-color-avatar-7: oklch(0.56 0.21 18);
526
- --noctis-color-avatar-8: oklch(0.56 0.19 330);
527
- --noctis-color-avatar-9: oklch(0.56 0.19 300);
528
- --noctis-color-avatar-10: oklch(0.56 0.16 285);
519
+ --noctis-color-palette-1: oklch(0.58 0.18 264);
520
+ --noctis-color-palette-2: oklch(0.56 0.15 196);
521
+ --noctis-color-palette-3: oklch(0.56 0.16 152);
522
+ --noctis-color-palette-4: oklch(0.58 0.15 130);
523
+ --noctis-color-palette-5: oklch(0.62 0.16 70);
524
+ --noctis-color-palette-6: oklch(0.58 0.19 40);
525
+ --noctis-color-palette-7: oklch(0.56 0.21 18);
526
+ --noctis-color-palette-8: oklch(0.56 0.19 330);
527
+ --noctis-color-palette-9: oklch(0.56 0.19 300);
528
+ --noctis-color-palette-10: oklch(0.56 0.16 285);
529
529
  }
530
530
 
531
531
  /* ── Light-mode shadows ─────────────────────────────────────────────────────────────────
@@ -2437,6 +2437,31 @@
2437
2437
  [data-slot="noctis-avatar"][data-size="xl"] [data-slot="noctis-avatar-indicator"] {
2438
2438
  --_avatar-indicator-size: var(--noctis-avatar-indicator-size, 1rem);
2439
2439
  }
2440
+ [data-slot="noctis-badge"] {
2441
+ --_badge-padding-inline: var(--noctis-badge-padding-inline, 0.5rem);
2442
+ --_badge-padding-block: var(--noctis-badge-padding-block, 0.1875rem);
2443
+ --_badge-gap: var(--noctis-badge-gap, 0.3125rem);
2444
+ --_badge-font-size: var(--noctis-badge-font-size, var(--noctis-text-mini));
2445
+ --_badge-border-radius: var(--noctis-badge-border-radius, var(--noctis-radius-full));
2446
+ }
2447
+ [data-slot="noctis-badge-dot"] {
2448
+ --_badge-dot-size: var(--noctis-badge-dot-size, 0.375rem);
2449
+ }
2450
+ [data-slot="noctis-badge-icon"] {
2451
+ --_badge-icon-size: var(--noctis-badge-icon-size, 0.875rem);
2452
+ }
2453
+ [data-slot="noctis-badge"][data-size="sm"] {
2454
+ --_badge-padding-inline: var(--noctis-badge-padding-inline, 0.4375rem);
2455
+ --_badge-padding-block: var(--noctis-badge-padding-block, 0.125rem);
2456
+ --_badge-gap: var(--noctis-badge-gap, 0.25rem);
2457
+ --_badge-font-size: var(--noctis-badge-font-size, var(--noctis-text-micro));
2458
+ }
2459
+ [data-slot="noctis-badge"][data-size="sm"] [data-slot="noctis-badge-dot"] {
2460
+ --_badge-dot-size: var(--noctis-badge-dot-size, 0.3125rem);
2461
+ }
2462
+ [data-slot="noctis-badge"][data-size="sm"] [data-slot="noctis-badge-icon"] {
2463
+ --_badge-icon-size: var(--noctis-badge-icon-size, 0.75rem);
2464
+ }
2440
2465
  [data-slot="noctis-otp-field"] {
2441
2466
  --_otp-field-gap: var(--noctis-otp-field-gap, 0.5rem);
2442
2467
  }
@@ -1433,124 +1433,124 @@
1433
1433
  "org.stridge.introduced": "0.0.0"
1434
1434
  }
1435
1435
  },
1436
- "avatar-1": {
1436
+ "palette-1": {
1437
1437
  "$type": "color",
1438
1438
  "$value": "oklch(0.62 0.17 264)",
1439
- "$description": "Generative avatar swatch 1.",
1439
+ "$description": "Categorical palette swatch 1.",
1440
1440
  "$extensions": {
1441
1441
  "org.stridge.uuid": "e3a3fffd-08c6-4428-b1c4-2ef6871cd105",
1442
- "org.stridge.cssVar": "--noctis-color-avatar-1",
1443
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1442
+ "org.stridge.cssVar": "--noctis-color-palette-1",
1443
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1444
1444
  "org.stridge.introduced": "0.0.0"
1445
1445
  }
1446
1446
  },
1447
- "avatar-2": {
1447
+ "palette-2": {
1448
1448
  "$type": "color",
1449
1449
  "$value": "oklch(0.62 0.15 196)",
1450
- "$description": "Generative avatar swatch 2.",
1450
+ "$description": "Categorical palette swatch 2.",
1451
1451
  "$extensions": {
1452
1452
  "org.stridge.uuid": "c94440a3-9695-4a60-a30f-d4208264fb9c",
1453
- "org.stridge.cssVar": "--noctis-color-avatar-2",
1454
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1453
+ "org.stridge.cssVar": "--noctis-color-palette-2",
1454
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1455
1455
  "org.stridge.introduced": "0.0.0"
1456
1456
  }
1457
1457
  },
1458
- "avatar-3": {
1458
+ "palette-3": {
1459
1459
  "$type": "color",
1460
1460
  "$value": "oklch(0.62 0.16 152)",
1461
- "$description": "Generative avatar swatch 3.",
1461
+ "$description": "Categorical palette swatch 3.",
1462
1462
  "$extensions": {
1463
1463
  "org.stridge.uuid": "9a123d6a-99a1-47d6-894e-f8d4955443e9",
1464
- "org.stridge.cssVar": "--noctis-color-avatar-3",
1465
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1464
+ "org.stridge.cssVar": "--noctis-color-palette-3",
1465
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1466
1466
  "org.stridge.introduced": "0.0.0"
1467
1467
  }
1468
1468
  },
1469
- "avatar-4": {
1469
+ "palette-4": {
1470
1470
  "$type": "color",
1471
1471
  "$value": "oklch(0.64 0.15 130)",
1472
- "$description": "Generative avatar swatch 4.",
1472
+ "$description": "Categorical palette swatch 4.",
1473
1473
  "$extensions": {
1474
1474
  "org.stridge.uuid": "17763bc9-6671-4f36-858d-d8a598a00987",
1475
- "org.stridge.cssVar": "--noctis-color-avatar-4",
1476
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1475
+ "org.stridge.cssVar": "--noctis-color-palette-4",
1476
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1477
1477
  "org.stridge.introduced": "0.0.0"
1478
1478
  }
1479
1479
  },
1480
- "avatar-5": {
1480
+ "palette-5": {
1481
1481
  "$type": "color",
1482
1482
  "$value": "oklch(0.66 0.16 70)",
1483
- "$description": "Generative avatar swatch 5.",
1483
+ "$description": "Categorical palette swatch 5.",
1484
1484
  "$extensions": {
1485
1485
  "org.stridge.uuid": "7728d6d9-a196-4d33-8113-2fae86a08a2b",
1486
- "org.stridge.cssVar": "--noctis-color-avatar-5",
1487
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1486
+ "org.stridge.cssVar": "--noctis-color-palette-5",
1487
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1488
1488
  "org.stridge.introduced": "0.0.0"
1489
1489
  }
1490
1490
  },
1491
- "avatar-6": {
1491
+ "palette-6": {
1492
1492
  "$type": "color",
1493
1493
  "$value": "oklch(0.62 0.18 40)",
1494
- "$description": "Generative avatar swatch 6.",
1494
+ "$description": "Categorical palette swatch 6.",
1495
1495
  "$extensions": {
1496
1496
  "org.stridge.uuid": "d5536df4-39ab-4dd2-a3a2-e9acbcf0ec77",
1497
- "org.stridge.cssVar": "--noctis-color-avatar-6",
1498
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1497
+ "org.stridge.cssVar": "--noctis-color-palette-6",
1498
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1499
1499
  "org.stridge.introduced": "0.0.0"
1500
1500
  }
1501
1501
  },
1502
- "avatar-7": {
1502
+ "palette-7": {
1503
1503
  "$type": "color",
1504
1504
  "$value": "oklch(0.6 0.2 18)",
1505
- "$description": "Generative avatar swatch 7.",
1505
+ "$description": "Categorical palette swatch 7.",
1506
1506
  "$extensions": {
1507
1507
  "org.stridge.uuid": "c27d7067-d36c-486d-87bd-8c9d6ec2c5a9",
1508
- "org.stridge.cssVar": "--noctis-color-avatar-7",
1509
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1508
+ "org.stridge.cssVar": "--noctis-color-palette-7",
1509
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1510
1510
  "org.stridge.introduced": "0.0.0"
1511
1511
  }
1512
1512
  },
1513
- "avatar-8": {
1513
+ "palette-8": {
1514
1514
  "$type": "color",
1515
1515
  "$value": "oklch(0.6 0.18 330)",
1516
- "$description": "Generative avatar swatch 8.",
1516
+ "$description": "Categorical palette swatch 8.",
1517
1517
  "$extensions": {
1518
1518
  "org.stridge.uuid": "14d955f4-5a36-43b1-91c3-8aa452ea097d",
1519
- "org.stridge.cssVar": "--noctis-color-avatar-8",
1520
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1519
+ "org.stridge.cssVar": "--noctis-color-palette-8",
1520
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1521
1521
  "org.stridge.introduced": "0.0.0"
1522
1522
  }
1523
1523
  },
1524
- "avatar-9": {
1524
+ "palette-9": {
1525
1525
  "$type": "color",
1526
1526
  "$value": "oklch(0.6 0.18 300)",
1527
- "$description": "Generative avatar swatch 9.",
1527
+ "$description": "Categorical palette swatch 9.",
1528
1528
  "$extensions": {
1529
1529
  "org.stridge.uuid": "9ce232b0-56f8-4098-983a-a3af52fb0ffb",
1530
- "org.stridge.cssVar": "--noctis-color-avatar-9",
1531
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1530
+ "org.stridge.cssVar": "--noctis-color-palette-9",
1531
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1532
1532
  "org.stridge.introduced": "0.0.0"
1533
1533
  }
1534
1534
  },
1535
- "avatar-10": {
1535
+ "palette-10": {
1536
1536
  "$type": "color",
1537
1537
  "$value": "oklch(0.6 0.15 285)",
1538
- "$description": "Generative avatar swatch 10.",
1538
+ "$description": "Categorical palette swatch 10.",
1539
1539
  "$extensions": {
1540
1540
  "org.stridge.uuid": "a78cb6f4-a317-455a-930d-96687f38d69f",
1541
- "org.stridge.cssVar": "--noctis-color-avatar-10",
1542
- "org.stridge.usage": "Avatar / initials background, indexed by a stable id hash.",
1541
+ "org.stridge.cssVar": "--noctis-color-palette-10",
1542
+ "org.stridge.usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1543
1543
  "org.stridge.introduced": "0.0.0"
1544
1544
  }
1545
1545
  },
1546
- "avatar-foreground": {
1546
+ "palette-foreground": {
1547
1547
  "$type": "color",
1548
1548
  "$value": "oklch(0.99 0 0)",
1549
- "$description": "Initials text on an avatar background.",
1549
+ "$description": "Knockout text on a saturated palette swatch.",
1550
1550
  "$extensions": {
1551
1551
  "org.stridge.uuid": "8ac67b72-d712-4c92-af5f-c0caae413e20",
1552
- "org.stridge.cssVar": "--noctis-color-avatar-foreground",
1553
- "org.stridge.usage": "Initials text on an avatarthe page background as a knockout.",
1552
+ "org.stridge.cssVar": "--noctis-color-palette-foreground",
1553
+ "org.stridge.usage": "Knockout text that reads on any saturated palette swatch avatar initials, solid Badge labels.",
1554
1554
  "org.stridge.introduced": "0.0.0"
1555
1555
  }
1556
1556
  }
package/dist/tokens.json CHANGED
@@ -1965,15 +1965,15 @@
1965
1965
  "tier": "semantic",
1966
1966
  "name": {
1967
1967
  "kind": "flat",
1968
- "id": "avatar-1"
1968
+ "id": "palette-1"
1969
1969
  },
1970
- "cssVar": "--noctis-color-avatar-1",
1970
+ "cssVar": "--noctis-color-palette-1",
1971
1971
  "value": {
1972
1972
  "raw": "oklch(0.62 0.17 264)",
1973
1973
  "rawLight": "oklch(0.58 0.18 264)"
1974
1974
  },
1975
- "description": "Generative avatar swatch 1.",
1976
- "usage": "Avatar / initials background, indexed by a stable id hash.",
1975
+ "description": "Categorical palette swatch 1.",
1976
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1977
1977
  "introduced": "0.0.0"
1978
1978
  },
1979
1979
  {
@@ -1981,15 +1981,15 @@
1981
1981
  "tier": "semantic",
1982
1982
  "name": {
1983
1983
  "kind": "flat",
1984
- "id": "avatar-2"
1984
+ "id": "palette-2"
1985
1985
  },
1986
- "cssVar": "--noctis-color-avatar-2",
1986
+ "cssVar": "--noctis-color-palette-2",
1987
1987
  "value": {
1988
1988
  "raw": "oklch(0.62 0.15 196)",
1989
1989
  "rawLight": "oklch(0.56 0.15 196)"
1990
1990
  },
1991
- "description": "Generative avatar swatch 2.",
1992
- "usage": "Avatar / initials background, indexed by a stable id hash.",
1991
+ "description": "Categorical palette swatch 2.",
1992
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
1993
1993
  "introduced": "0.0.0"
1994
1994
  },
1995
1995
  {
@@ -1997,15 +1997,15 @@
1997
1997
  "tier": "semantic",
1998
1998
  "name": {
1999
1999
  "kind": "flat",
2000
- "id": "avatar-3"
2000
+ "id": "palette-3"
2001
2001
  },
2002
- "cssVar": "--noctis-color-avatar-3",
2002
+ "cssVar": "--noctis-color-palette-3",
2003
2003
  "value": {
2004
2004
  "raw": "oklch(0.62 0.16 152)",
2005
2005
  "rawLight": "oklch(0.56 0.16 152)"
2006
2006
  },
2007
- "description": "Generative avatar swatch 3.",
2008
- "usage": "Avatar / initials background, indexed by a stable id hash.",
2007
+ "description": "Categorical palette swatch 3.",
2008
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
2009
2009
  "introduced": "0.0.0"
2010
2010
  },
2011
2011
  {
@@ -2013,15 +2013,15 @@
2013
2013
  "tier": "semantic",
2014
2014
  "name": {
2015
2015
  "kind": "flat",
2016
- "id": "avatar-4"
2016
+ "id": "palette-4"
2017
2017
  },
2018
- "cssVar": "--noctis-color-avatar-4",
2018
+ "cssVar": "--noctis-color-palette-4",
2019
2019
  "value": {
2020
2020
  "raw": "oklch(0.64 0.15 130)",
2021
2021
  "rawLight": "oklch(0.58 0.15 130)"
2022
2022
  },
2023
- "description": "Generative avatar swatch 4.",
2024
- "usage": "Avatar / initials background, indexed by a stable id hash.",
2023
+ "description": "Categorical palette swatch 4.",
2024
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
2025
2025
  "introduced": "0.0.0"
2026
2026
  },
2027
2027
  {
@@ -2029,15 +2029,15 @@
2029
2029
  "tier": "semantic",
2030
2030
  "name": {
2031
2031
  "kind": "flat",
2032
- "id": "avatar-5"
2032
+ "id": "palette-5"
2033
2033
  },
2034
- "cssVar": "--noctis-color-avatar-5",
2034
+ "cssVar": "--noctis-color-palette-5",
2035
2035
  "value": {
2036
2036
  "raw": "oklch(0.66 0.16 70)",
2037
2037
  "rawLight": "oklch(0.62 0.16 70)"
2038
2038
  },
2039
- "description": "Generative avatar swatch 5.",
2040
- "usage": "Avatar / initials background, indexed by a stable id hash.",
2039
+ "description": "Categorical palette swatch 5.",
2040
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
2041
2041
  "introduced": "0.0.0"
2042
2042
  },
2043
2043
  {
@@ -2045,15 +2045,15 @@
2045
2045
  "tier": "semantic",
2046
2046
  "name": {
2047
2047
  "kind": "flat",
2048
- "id": "avatar-6"
2048
+ "id": "palette-6"
2049
2049
  },
2050
- "cssVar": "--noctis-color-avatar-6",
2050
+ "cssVar": "--noctis-color-palette-6",
2051
2051
  "value": {
2052
2052
  "raw": "oklch(0.62 0.18 40)",
2053
2053
  "rawLight": "oklch(0.58 0.19 40)"
2054
2054
  },
2055
- "description": "Generative avatar swatch 6.",
2056
- "usage": "Avatar / initials background, indexed by a stable id hash.",
2055
+ "description": "Categorical palette swatch 6.",
2056
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
2057
2057
  "introduced": "0.0.0"
2058
2058
  },
2059
2059
  {
@@ -2061,15 +2061,15 @@
2061
2061
  "tier": "semantic",
2062
2062
  "name": {
2063
2063
  "kind": "flat",
2064
- "id": "avatar-7"
2064
+ "id": "palette-7"
2065
2065
  },
2066
- "cssVar": "--noctis-color-avatar-7",
2066
+ "cssVar": "--noctis-color-palette-7",
2067
2067
  "value": {
2068
2068
  "raw": "oklch(0.6 0.2 18)",
2069
2069
  "rawLight": "oklch(0.56 0.21 18)"
2070
2070
  },
2071
- "description": "Generative avatar swatch 7.",
2072
- "usage": "Avatar / initials background, indexed by a stable id hash.",
2071
+ "description": "Categorical palette swatch 7.",
2072
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
2073
2073
  "introduced": "0.0.0"
2074
2074
  },
2075
2075
  {
@@ -2077,15 +2077,15 @@
2077
2077
  "tier": "semantic",
2078
2078
  "name": {
2079
2079
  "kind": "flat",
2080
- "id": "avatar-8"
2080
+ "id": "palette-8"
2081
2081
  },
2082
- "cssVar": "--noctis-color-avatar-8",
2082
+ "cssVar": "--noctis-color-palette-8",
2083
2083
  "value": {
2084
2084
  "raw": "oklch(0.6 0.18 330)",
2085
2085
  "rawLight": "oklch(0.56 0.19 330)"
2086
2086
  },
2087
- "description": "Generative avatar swatch 8.",
2088
- "usage": "Avatar / initials background, indexed by a stable id hash.",
2087
+ "description": "Categorical palette swatch 8.",
2088
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
2089
2089
  "introduced": "0.0.0"
2090
2090
  },
2091
2091
  {
@@ -2093,15 +2093,15 @@
2093
2093
  "tier": "semantic",
2094
2094
  "name": {
2095
2095
  "kind": "flat",
2096
- "id": "avatar-9"
2096
+ "id": "palette-9"
2097
2097
  },
2098
- "cssVar": "--noctis-color-avatar-9",
2098
+ "cssVar": "--noctis-color-palette-9",
2099
2099
  "value": {
2100
2100
  "raw": "oklch(0.6 0.18 300)",
2101
2101
  "rawLight": "oklch(0.56 0.19 300)"
2102
2102
  },
2103
- "description": "Generative avatar swatch 9.",
2104
- "usage": "Avatar / initials background, indexed by a stable id hash.",
2103
+ "description": "Categorical palette swatch 9.",
2104
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
2105
2105
  "introduced": "0.0.0"
2106
2106
  },
2107
2107
  {
@@ -2109,15 +2109,15 @@
2109
2109
  "tier": "semantic",
2110
2110
  "name": {
2111
2111
  "kind": "flat",
2112
- "id": "avatar-10"
2112
+ "id": "palette-10"
2113
2113
  },
2114
- "cssVar": "--noctis-color-avatar-10",
2114
+ "cssVar": "--noctis-color-palette-10",
2115
2115
  "value": {
2116
2116
  "raw": "oklch(0.6 0.15 285)",
2117
2117
  "rawLight": "oklch(0.56 0.16 285)"
2118
2118
  },
2119
- "description": "Generative avatar swatch 10.",
2120
- "usage": "Avatar / initials background, indexed by a stable id hash.",
2119
+ "description": "Categorical palette swatch 10.",
2120
+ "usage": "Accent-independent categorical fill avatar initials (chosen by id hash) and Badge decorative tones.",
2121
2121
  "introduced": "0.0.0"
2122
2122
  },
2123
2123
  {
@@ -2125,14 +2125,14 @@
2125
2125
  "tier": "semantic",
2126
2126
  "name": {
2127
2127
  "kind": "flat",
2128
- "id": "avatar-foreground"
2128
+ "id": "palette-foreground"
2129
2129
  },
2130
- "cssVar": "--noctis-color-avatar-foreground",
2130
+ "cssVar": "--noctis-color-palette-foreground",
2131
2131
  "value": {
2132
2132
  "raw": "oklch(0.99 0 0)"
2133
2133
  },
2134
- "description": "Initials text on an avatar background.",
2135
- "usage": "Initials text on an avatarthe page background as a knockout.",
2134
+ "description": "Knockout text on a saturated palette swatch.",
2135
+ "usage": "Knockout text that reads on any saturated palette swatch avatar initials, solid Badge labels.",
2136
2136
  "introduced": "0.0.0"
2137
2137
  },
2138
2138
  {
@@ -13399,6 +13399,190 @@
13399
13399
  }
13400
13400
  ]
13401
13401
  },
13402
+ {
13403
+ "component": "badge",
13404
+ "category": "data",
13405
+ "slotPrefix": "noctis",
13406
+ "anatomy": ["badge", "badge-dot", "badge-icon"],
13407
+ "options": {
13408
+ "variant": ["solid", "soft", "outline", "dot"],
13409
+ "tone": [
13410
+ "neutral",
13411
+ "accent",
13412
+ "success",
13413
+ "warning",
13414
+ "danger",
13415
+ "info",
13416
+ "red",
13417
+ "orange",
13418
+ "amber",
13419
+ "green",
13420
+ "teal",
13421
+ "blue",
13422
+ "purple",
13423
+ "pink"
13424
+ ],
13425
+ "size": ["sm", "md"]
13426
+ },
13427
+ "states": [],
13428
+ "consumes": [],
13429
+ "optionSlots": {
13430
+ "variant": "badge",
13431
+ "tone": "badge",
13432
+ "size": "badge"
13433
+ },
13434
+ "mints": [
13435
+ {
13436
+ "uuid": "dbb503f3-d915-428f-a2ba-c6bad40ae7d5",
13437
+ "tier": "component",
13438
+ "name": {
13439
+ "kind": "component",
13440
+ "component": "badge",
13441
+ "property": "padding-inline"
13442
+ },
13443
+ "value": {
13444
+ "raw": "0.5rem"
13445
+ },
13446
+ "description": "Inline padding of the chip.",
13447
+ "usage": "The horizontal inset between the chip edge and its content, per size.",
13448
+ "introduced": "0.0.0",
13449
+ "variants": {
13450
+ "size": {
13451
+ "sm": {
13452
+ "raw": "0.4375rem"
13453
+ }
13454
+ }
13455
+ }
13456
+ },
13457
+ {
13458
+ "uuid": "aaecfaef-d3b1-4c85-a1bd-dde224acdbc6",
13459
+ "tier": "component",
13460
+ "name": {
13461
+ "kind": "component",
13462
+ "component": "badge",
13463
+ "property": "padding-block"
13464
+ },
13465
+ "value": {
13466
+ "raw": "0.1875rem"
13467
+ },
13468
+ "description": "Block padding of the chip.",
13469
+ "usage": "The vertical inset between the chip edge and its content, per size.",
13470
+ "introduced": "0.0.0",
13471
+ "variants": {
13472
+ "size": {
13473
+ "sm": {
13474
+ "raw": "0.125rem"
13475
+ }
13476
+ }
13477
+ }
13478
+ },
13479
+ {
13480
+ "uuid": "c3e686b3-1588-401e-ac41-4ab58c34b8cc",
13481
+ "tier": "component",
13482
+ "name": {
13483
+ "kind": "component",
13484
+ "component": "badge",
13485
+ "property": "gap"
13486
+ },
13487
+ "value": {
13488
+ "raw": "0.3125rem"
13489
+ },
13490
+ "description": "Gap between the chip's dot/icon and its label.",
13491
+ "usage": "The spacing the chip holds between a leading dot or icon and the label text, per size.",
13492
+ "introduced": "0.0.0",
13493
+ "variants": {
13494
+ "size": {
13495
+ "sm": {
13496
+ "raw": "0.25rem"
13497
+ }
13498
+ }
13499
+ }
13500
+ },
13501
+ {
13502
+ "uuid": "acd27e33-13ac-4d0e-a772-6ac25f34208c",
13503
+ "tier": "component",
13504
+ "name": {
13505
+ "kind": "component",
13506
+ "component": "badge",
13507
+ "property": "font-size"
13508
+ },
13509
+ "value": {
13510
+ "raw": "var(--noctis-text-mini)"
13511
+ },
13512
+ "description": "Label type size.",
13513
+ "usage": "The font size of the chip's label, per size; the 12px `mini` step at `md`, the 11px `micro` step at `sm`.",
13514
+ "introduced": "0.0.0",
13515
+ "variants": {
13516
+ "size": {
13517
+ "sm": {
13518
+ "raw": "var(--noctis-text-micro)"
13519
+ }
13520
+ }
13521
+ }
13522
+ },
13523
+ {
13524
+ "uuid": "27e0ac6b-60dc-4179-9d7e-ecad248c2ee7",
13525
+ "tier": "component",
13526
+ "name": {
13527
+ "kind": "component",
13528
+ "component": "badge",
13529
+ "property": "border-radius"
13530
+ },
13531
+ "value": {
13532
+ "raw": "var(--noctis-radius-full)"
13533
+ },
13534
+ "description": "Chip corner radius.",
13535
+ "usage": "The rounding of the chip; the full-round pill extreme so the chip reads as a label, not a button — override the public var for a squarer chip.",
13536
+ "introduced": "0.0.0"
13537
+ },
13538
+ {
13539
+ "uuid": "d73ca89d-4d8c-4663-8f28-3ad69877ef92",
13540
+ "tier": "component",
13541
+ "name": {
13542
+ "kind": "component",
13543
+ "component": "badge",
13544
+ "anatomy": "dot",
13545
+ "property": "size"
13546
+ },
13547
+ "value": {
13548
+ "raw": "0.375rem"
13549
+ },
13550
+ "description": "Edge length of the leading status dot.",
13551
+ "usage": "The diameter of the optional status dot, per size; the dot inherits the label colour via `currentColor`, so it stays legible in every variant.",
13552
+ "introduced": "0.0.0",
13553
+ "variants": {
13554
+ "size": {
13555
+ "sm": {
13556
+ "raw": "0.3125rem"
13557
+ }
13558
+ }
13559
+ }
13560
+ },
13561
+ {
13562
+ "uuid": "0fcef652-7887-4bc4-a85f-08137936f1c0",
13563
+ "tier": "component",
13564
+ "name": {
13565
+ "kind": "component",
13566
+ "component": "badge",
13567
+ "anatomy": "icon",
13568
+ "property": "size"
13569
+ },
13570
+ "value": {
13571
+ "raw": "0.875rem"
13572
+ },
13573
+ "description": "Edge length of a leading icon glyph.",
13574
+ "usage": "The width and height the chip clamps a leading icon to, per size, so the glyph tracks the label.",
13575
+ "introduced": "0.0.0",
13576
+ "variants": {
13577
+ "size": {
13578
+ "sm": {
13579
+ "raw": "0.75rem"
13580
+ }
13581
+ }
13582
+ }
13583
+ }
13584
+ ]
13585
+ },
13402
13586
  {
13403
13587
  "component": "otp-field",
13404
13588
  "category": "fields",
@@ -161,17 +161,17 @@
161
161
  --color-chart-6: var(--noctis-color-chart-6);
162
162
  --color-chart-7: var(--noctis-color-chart-7);
163
163
  --color-chart-8: var(--noctis-color-chart-8);
164
- --color-avatar-1: var(--noctis-color-avatar-1);
165
- --color-avatar-2: var(--noctis-color-avatar-2);
166
- --color-avatar-3: var(--noctis-color-avatar-3);
167
- --color-avatar-4: var(--noctis-color-avatar-4);
168
- --color-avatar-5: var(--noctis-color-avatar-5);
169
- --color-avatar-6: var(--noctis-color-avatar-6);
170
- --color-avatar-7: var(--noctis-color-avatar-7);
171
- --color-avatar-8: var(--noctis-color-avatar-8);
172
- --color-avatar-9: var(--noctis-color-avatar-9);
173
- --color-avatar-10: var(--noctis-color-avatar-10);
174
- --color-avatar-foreground: var(--noctis-color-avatar-foreground);
164
+ --color-palette-1: var(--noctis-color-palette-1);
165
+ --color-palette-2: var(--noctis-color-palette-2);
166
+ --color-palette-3: var(--noctis-color-palette-3);
167
+ --color-palette-4: var(--noctis-color-palette-4);
168
+ --color-palette-5: var(--noctis-color-palette-5);
169
+ --color-palette-6: var(--noctis-color-palette-6);
170
+ --color-palette-7: var(--noctis-color-palette-7);
171
+ --color-palette-8: var(--noctis-color-palette-8);
172
+ --color-palette-9: var(--noctis-color-palette-9);
173
+ --color-palette-10: var(--noctis-color-palette-10);
174
+ --color-palette-foreground: var(--noctis-color-palette-foreground);
175
175
 
176
176
  /* Named text sizes + their paired line-height keys (`--text-<size>--line-height`). */
177
177
  --text-micro: var(--noctis-text-micro);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stridge/noctis-design-tokens",
3
- "version": "1.0.0-beta.3",
3
+ "version": "1.0.0-beta.4",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -28,7 +28,7 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "zod": "4.4.3",
31
- "@stridge/noctis-theme-engine": "1.0.0-beta.3"
31
+ "@stridge/noctis-theme-engine": "1.0.0-beta.4"
32
32
  },
33
33
  "peerDependencies": {
34
34
  "react": "19.2.7"