@stridge/noctis-design-tokens 1.0.0-beta.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.
Files changed (42) hide show
  1. package/README.md +226 -0
  2. package/dist/apply-scopes.d.ts +12 -0
  3. package/dist/apply-scopes.js +30 -0
  4. package/dist/css.d.ts +10 -0
  5. package/dist/css.js +36 -0
  6. package/dist/graph/components.d.ts +6 -0
  7. package/dist/graph/components.js +4488 -0
  8. package/dist/graph/index.d.ts +11 -0
  9. package/dist/graph/index.js +26 -0
  10. package/dist/graph/inputs.d.ts +1 -0
  11. package/dist/graph/inputs.js +23 -0
  12. package/dist/graph/model.d.ts +205 -0
  13. package/dist/graph/model.js +282 -0
  14. package/dist/graph/registry.d.ts +67 -0
  15. package/dist/graph/registry.js +118 -0
  16. package/dist/graph/roles.d.ts +5 -0
  17. package/dist/graph/roles.js +151 -0
  18. package/dist/graph/scales.d.ts +1 -0
  19. package/dist/graph/scales.js +1296 -0
  20. package/dist/graph/serialize.d.ts +16 -0
  21. package/dist/graph/serialize.js +25 -0
  22. package/dist/graph/statics.d.ts +1 -0
  23. package/dist/graph/statics.js +419 -0
  24. package/dist/index.d.ts +26 -0
  25. package/dist/index.js +25 -0
  26. package/dist/palettes.d.ts +70 -0
  27. package/dist/palettes.js +114 -0
  28. package/dist/react/provider.d.ts +23 -0
  29. package/dist/react/provider.js +28 -0
  30. package/dist/react.d.ts +3 -0
  31. package/dist/react.js +3 -0
  32. package/dist/scales.d.ts +186 -0
  33. package/dist/scales.js +186 -0
  34. package/dist/semantic.d.ts +36 -0
  35. package/dist/semantic.js +49 -0
  36. package/dist/swatches.d.ts +24 -0
  37. package/dist/swatches.js +57 -0
  38. package/dist/tokens.css +2607 -0
  39. package/dist/tokens.dtcg.json +3475 -0
  40. package/dist/tokens.json +14658 -0
  41. package/dist/tokens.tailwind.css +479 -0
  42. package/package.json +67 -0
@@ -0,0 +1,4488 @@
1
+ //#region src/graph/components.ts
2
+ /** A raw-valued component mint (a dimension with no T1 role to alias). */
3
+ function raw(uuid, name, value, description, usage) {
4
+ return {
5
+ uuid,
6
+ tier: "component",
7
+ name,
8
+ value: { raw: value },
9
+ description,
10
+ usage,
11
+ introduced: "0.0.0"
12
+ };
13
+ }
14
+ /** A component mint whose default aliases a T1 role, optionally re-pointed per variant value. */
15
+ function aliased(uuid, name, value, description, usage, variants) {
16
+ return {
17
+ uuid,
18
+ tier: "component",
19
+ name,
20
+ value,
21
+ description,
22
+ usage,
23
+ introduced: "0.0.0",
24
+ ...variants ? { variants } : {}
25
+ };
26
+ }
27
+ const kbd = {
28
+ component: "kbd",
29
+ category: "typography",
30
+ slotPrefix: "noctis",
31
+ anatomy: [
32
+ "kbd",
33
+ "kbd-chord",
34
+ "kbd-key",
35
+ "kbd-glyph"
36
+ ],
37
+ options: {},
38
+ states: [],
39
+ consumes: [],
40
+ mints: [
41
+ raw("c2dd2590-6d27-4758-8a26-80323591da53", {
42
+ kind: "component",
43
+ component: "kbd",
44
+ anatomy: "key",
45
+ property: "font-size"
46
+ }, "0.8125em", "Key-cap glyph size, relative to the surrounding text.", "The font size of a single key cap in a keyboard hint."),
47
+ raw("c603d1a7-9fa4-481d-8115-68b30e0bcba2", {
48
+ kind: "component",
49
+ component: "kbd",
50
+ anatomy: "key",
51
+ property: "height"
52
+ }, "1.5em", "Key-cap height, also its minimum width — the square-cap invariant.", "The height and min-width of a key cap, keeping single-glyph caps square."),
53
+ raw("957c8dd8-782f-43af-ad95-cc1f356b86ef", {
54
+ kind: "component",
55
+ component: "kbd",
56
+ anatomy: "key",
57
+ property: "padding-inline"
58
+ }, "0.4em", "Key-cap inline padding.", "The inline padding inside a key cap."),
59
+ raw("a67c27d3-e535-4e7d-8651-fca1bf560170", {
60
+ kind: "component",
61
+ component: "kbd",
62
+ property: "gap"
63
+ }, "0.5em", "Gap between sequence chords.", "The spacing between chords in a key sequence."),
64
+ raw("06177aab-ba55-4c49-a9b7-ad89bc73d4c2", {
65
+ kind: "component",
66
+ component: "kbd",
67
+ anatomy: "chord",
68
+ property: "gap"
69
+ }, "0.125em", "Gap between keys within a chord.", "The spacing between adjacent keys pressed together."),
70
+ raw("0ae2e229-1eba-4aaf-8a50-5f17fea225aa", {
71
+ kind: "component",
72
+ component: "kbd",
73
+ anatomy: "key",
74
+ property: "border-radius"
75
+ }, "0.3em", "Key-cap corner radius.", "The rounding of a key cap's corners — a tight, em-relative radius so the cap reads as a physical keycap rather than a pill, and scales with the cap."),
76
+ raw("7ec87fb7-3893-470a-9d65-946bd90b5abe", {
77
+ kind: "component",
78
+ component: "kbd",
79
+ anatomy: "key",
80
+ property: "shadow"
81
+ }, "inset 0 0.07em 0 0 oklch(from var(--noctis-color-kbd) calc(l + 0.05) c h), inset 0 -0.09em 0 0 oklch(from var(--noctis-color-kbd) calc(l - 0.08) c h), 0 0.1em 0.12em -0.04em oklch(from var(--noctis-engine-shadow-color) l c h / 0.2)", "Key-cap depth shadow.", "The layered shadow that gives a key cap its raised, physical-keycap depth — a top sheen, a bottom lip, and a floor shadow.")
82
+ ]
83
+ };
84
+ const inlineCode = {
85
+ component: "inline-code",
86
+ category: "typography",
87
+ slotPrefix: "noctis",
88
+ anatomy: ["inline-code"],
89
+ options: {},
90
+ states: [],
91
+ consumes: [],
92
+ mints: [
93
+ raw("43f743e2-09ac-42c9-93d4-759516ecb2ec", {
94
+ kind: "component",
95
+ component: "inline-code",
96
+ property: "font-size"
97
+ }, "0.9em", "Inline-code chip font size, relative to the surrounding text.", "The font size of an inline-code chip."),
98
+ raw("5d72da99-f640-4e85-89f3-26af9f1b398f", {
99
+ kind: "component",
100
+ component: "inline-code",
101
+ property: "padding-inline"
102
+ }, "0.4em", "Inline-code chip inline padding.", "The inline padding of an inline-code chip."),
103
+ raw("f6fbb11a-227c-4f3a-b1a9-99cc4bd27550", {
104
+ kind: "component",
105
+ component: "inline-code",
106
+ property: "padding-block"
107
+ }, "0.12em", "Inline-code chip block padding.", "The block padding of an inline-code chip."),
108
+ raw("b2ef858b-ef4d-4332-9862-af830c6f2a7f", {
109
+ kind: "component",
110
+ component: "inline-code",
111
+ property: "border-radius"
112
+ }, "0.35em", "Inline-code chip corner radius.", "The rounding of an inline-code chip's corners — a tight, em-relative radius so the chip reads as a code token rather than a pill, and scales with the surrounding text."),
113
+ aliased("deb5dd1f-517d-4295-bb7b-9211e110a247", {
114
+ kind: "component",
115
+ component: "inline-code",
116
+ property: "color"
117
+ }, { role: "code-foreground" }, "Inline-code chip text colour.", "The text colour of an inline-code chip — the dedicated code-foreground tier, set a step off prose so a snippet reads as code, not running text.")
118
+ ]
119
+ };
120
+ const table = {
121
+ component: "table",
122
+ category: "data",
123
+ slotPrefix: "noctis",
124
+ anatomy: [
125
+ "table",
126
+ "table-grid",
127
+ "table-header",
128
+ "table-body",
129
+ "table-row",
130
+ "table-head",
131
+ "table-cell"
132
+ ],
133
+ options: {},
134
+ states: [],
135
+ consumes: [],
136
+ slotGroups: { cell: ["table-head", "table-cell"] },
137
+ mints: [
138
+ aliased("cd8ab9b4-ad70-418a-b30f-ca878cd4420b", {
139
+ kind: "component",
140
+ component: "table",
141
+ property: "border-radius"
142
+ }, { raw: "var(--noctis-radius-lg)" }, "Corner radius of the table frame.", "The radius of the bordered card that clips the table's corners."),
143
+ raw("b1c1ad67-6e7a-4544-9198-c40428e37076", {
144
+ kind: "component",
145
+ component: "table",
146
+ anatomy: "cell",
147
+ property: "padding-inline"
148
+ }, "1rem", "Inline padding of a table cell — shared by header and body cells.", "The horizontal inset of a header or body cell's content."),
149
+ raw("c17bb614-8503-4d05-876e-452b2440e2b1", {
150
+ kind: "component",
151
+ component: "table",
152
+ anatomy: "cell",
153
+ property: "padding-block"
154
+ }, "0.625rem", "Block padding of a table cell — shared by header and body cells.", "The vertical inset of a header or body cell's content."),
155
+ aliased("50bad501-aa6d-4ca9-89ab-c311525c96f9", {
156
+ kind: "component",
157
+ component: "table",
158
+ anatomy: "header",
159
+ property: "background-color"
160
+ }, { role: "surface" }, "Header-band fill.", "The header band's fill, one step above the canvas so it reads as a header, not a well."),
161
+ aliased("663dd3f0-2100-4479-bd8e-6091b33b562f", {
162
+ kind: "component",
163
+ component: "table",
164
+ anatomy: "cell",
165
+ property: "color"
166
+ }, { role: "muted" }, "Cell text colour — shared by header and body cells.", "The muted text colour of cells, quieter than body prose by design.")
167
+ ]
168
+ };
169
+ /** The control-height scale tokens code-family heights alias by uuid (a scale, not a role). */
170
+ const CONTROL_HEIGHT_SM = "a7df1cf1-7116-4e6a-8ce1-b362ff0b9cde";
171
+ const codeBlock = {
172
+ component: "code-block",
173
+ category: "typography",
174
+ slotPrefix: "noctis",
175
+ anatomy: [
176
+ "code-block",
177
+ "code-block-header",
178
+ "code-block-manager-glyph"
179
+ ],
180
+ options: {},
181
+ states: [],
182
+ consumes: [],
183
+ mints: [
184
+ aliased("1fddaad0-aa09-4a33-918e-fe86b2348681", {
185
+ kind: "component",
186
+ component: "code-block",
187
+ property: "border-radius"
188
+ }, { raw: "var(--noctis-radius-lg)" }, "Corner radius of the code-block frame.", "The radius of the well-shade frame that clips a code block's corners."),
189
+ aliased("1c12c182-1b86-469c-bfdc-7cb41b07af32", {
190
+ kind: "component",
191
+ component: "code-block",
192
+ anatomy: "header",
193
+ property: "height"
194
+ }, { token: "9fc04a8b-38a2-4eb7-8c82-cb601047fd87" }, "Height of the code-block header band.", "The height of the filename/copy header, on the default control height."),
195
+ raw("81900eba-9730-4f1f-91ad-4e9b3f6fd35d", {
196
+ kind: "component",
197
+ component: "code-block",
198
+ anatomy: "header",
199
+ property: "gap"
200
+ }, "var(--noctis-space-2)", "Gap between the header's logo, title, and copy button.", "The spacing between adjacent items in the filename/copy header band."),
201
+ raw("0f92565b-8c5f-4ef9-b5a3-05cb6c4dc80b", {
202
+ kind: "component",
203
+ component: "code-block",
204
+ anatomy: "header",
205
+ property: "padding-inline-start"
206
+ }, "var(--noctis-space-3)", "Start inset of the header band.", "The inline-start padding of the header, aligning the logo with the code gutter."),
207
+ raw("5cf1d8aa-fd17-4a4b-baa5-9c4f94e2f323", {
208
+ kind: "component",
209
+ component: "code-block",
210
+ anatomy: "header",
211
+ property: "padding-inline-end"
212
+ }, "var(--noctis-space-1\\.5)", "End inset of the header band.", "The inline-end padding of the header, tighter than the start to give the copy button its slack."),
213
+ raw("edccb561-87a5-4896-8508-da4436c6a23c", {
214
+ kind: "component",
215
+ component: "code-block",
216
+ anatomy: "manager-glyph",
217
+ property: "size"
218
+ }, "var(--noctis-space-3\\.5)", "Edge length of a package-manager brand glyph.", "The square the pnpm/npm/yarn/bun/deno data-URI mark paints, in the header or a tab."),
219
+ raw("5745ed8b-20c7-46bc-937c-714679c7e4d5", {
220
+ kind: "component",
221
+ component: "code-block",
222
+ property: "body-padding-block"
223
+ }, "var(--noctis-space-4)", "Block padding of the code body.", "The vertical inset around the code inside a block, so the fence breathes regardless of highlighting."),
224
+ raw("32053a98-6240-49cb-9315-3ce5a04d5b3e", {
225
+ kind: "component",
226
+ component: "code-block",
227
+ property: "body-padding-inline"
228
+ }, "var(--noctis-space-4)", "Inline padding of the code body.", "The horizontal inset around the code inside a block; the line-number gutter (when present) sits within it."),
229
+ raw("ae3fd1b7-c774-447b-8ef2-d13f3787cd9c", {
230
+ kind: "component",
231
+ component: "code-block",
232
+ property: "body-font-size"
233
+ }, "var(--noctis-text-small)", "Font size of the code body.", "The monospace type size for code, on the small step so it tracks the type-scale knob."),
234
+ raw("7dd93b7b-ec01-466f-b594-5162c13953ba", {
235
+ kind: "component",
236
+ component: "code-block",
237
+ property: "body-line-height"
238
+ }, "1.55", "Line height of the code body.", "The leading between code lines — roomy enough to read dense tokens, tight enough to keep a block compact.")
239
+ ]
240
+ };
241
+ const codeTabs = {
242
+ component: "code-tabs",
243
+ category: "typography",
244
+ slotPrefix: "noctis",
245
+ anatomy: ["code-tabs", "code-tabs-panel"],
246
+ options: {},
247
+ states: [],
248
+ consumes: [],
249
+ mints: [
250
+ aliased("95926db7-7bc6-4c34-b117-7402e5801125", {
251
+ kind: "component",
252
+ component: "code-tabs",
253
+ property: "border-radius"
254
+ }, { raw: "var(--noctis-radius-lg)" }, "Corner radius of the code-tabs frame.", "The radius of the tabbed code group's frame; the large foundation radius, matching the code block."),
255
+ aliased("0837f354-f41e-4f56-8ea5-d3568ceca6ff", {
256
+ kind: "component",
257
+ component: "code-tabs",
258
+ anatomy: "tab",
259
+ property: "height"
260
+ }, { token: CONTROL_HEIGHT_SM }, "Height of a language tab.", "The height of a tab in the strip, on the compact control height."),
261
+ raw("4f8f546d-2ec4-4aa1-954c-5d0aafdc7dd9", {
262
+ kind: "component",
263
+ component: "code-tabs",
264
+ anatomy: "tab",
265
+ property: "padding-inline"
266
+ }, "0.625rem", "Inline padding of a language tab.", "The horizontal inset of a tab's logo and label."),
267
+ aliased("a612725e-68e7-4084-acc6-3a845685cd62", {
268
+ kind: "component",
269
+ component: "code-tabs",
270
+ anatomy: "tab",
271
+ property: "border-radius"
272
+ }, { raw: "var(--noctis-radius-md)" }, "Corner radius of a language tab.", "The radius of a tab's highlight; a tighter step than the frame, distinct from the segmented Tabs pill."),
273
+ raw("63c4f384-96f9-4dcd-970f-f44e3bc2a488", {
274
+ kind: "component",
275
+ component: "code-tabs",
276
+ anatomy: "strip",
277
+ property: "padding"
278
+ }, "0.375rem", "Padding around the tab strip.", "The inset between the strip edge and its tabs."),
279
+ raw("76c39086-f1ac-4d0e-89af-b7e5e9fe9e8f", {
280
+ kind: "component",
281
+ component: "code-tabs",
282
+ anatomy: "strip",
283
+ property: "gap"
284
+ }, "var(--noctis-space-2)", "Gap between the tab list and the strip's trailing copy button.", "The spacing between the strip's tab list and the copy affordance beside it."),
285
+ raw("6c5f68b8-f39f-4360-999a-2a54080af875", {
286
+ kind: "component",
287
+ component: "code-tabs",
288
+ anatomy: "list",
289
+ property: "gap"
290
+ }, "var(--noctis-space-1)", "Gap between adjacent language tabs.", "The spacing between tabs in the strip's list."),
291
+ raw("910d3213-5414-41cf-8a9f-73aab1fd22e6", {
292
+ kind: "component",
293
+ component: "code-tabs",
294
+ anatomy: "tab",
295
+ property: "gap"
296
+ }, "var(--noctis-space-1\\.5)", "Gap between a tab's logo and its label.", "The spacing between a tab's leading brand mark and its language label.")
297
+ ],
298
+ slotGroups: {
299
+ tab: ["code-tabs"],
300
+ strip: ["code-tabs"],
301
+ list: ["code-tabs"]
302
+ }
303
+ };
304
+ const codeCopy = {
305
+ component: "code-copy",
306
+ category: "actions",
307
+ slotPrefix: "noctis",
308
+ anatomy: ["code-copy"],
309
+ options: {},
310
+ states: [],
311
+ consumes: [],
312
+ mints: [aliased("1f6f6d6e-49e7-4ab5-b4ae-d8221c20319b", {
313
+ kind: "component",
314
+ component: "code-copy",
315
+ property: "size"
316
+ }, { token: CONTROL_HEIGHT_SM }, "Size of the copy button.", "The square edge of the copy affordance; matches the tab height so the strip aligns."), raw("782d8f35-8c60-48f0-a088-3a2250cb395a", {
317
+ kind: "component",
318
+ component: "code-copy",
319
+ anatomy: "glyph",
320
+ property: "size"
321
+ }, "var(--noctis-space-3\\.5)", "Edge length of the copy/check glyph inside the button.", "The square the clipboard and check marks paint, on the sm icon step.")],
322
+ slotGroups: { glyph: ["code-copy"] }
323
+ };
324
+ /** The four slots that share the `item` recipe — the `item`/`item-indicator` tokens attach to all four. */
325
+ const MENU_ITEM_SLOTS = [
326
+ "menu-item",
327
+ "menu-link-item",
328
+ "menu-checkbox-item",
329
+ "menu-radio-item",
330
+ "menu-submenu-trigger"
331
+ ];
332
+ const menu = {
333
+ component: "menu",
334
+ category: "overlays",
335
+ slotPrefix: "noctis",
336
+ anatomy: [
337
+ "menu-trigger",
338
+ "menu-content",
339
+ "menu-viewport",
340
+ "menu-group",
341
+ "menu-group-label",
342
+ "menu-item",
343
+ "menu-link-item",
344
+ "menu-checkbox-item",
345
+ "menu-radio-group",
346
+ "menu-radio-item",
347
+ "menu-item-indicator",
348
+ "menu-radio-dot",
349
+ "menu-submenu-trigger",
350
+ "menu-shortcut",
351
+ "menu-separator"
352
+ ],
353
+ options: { variant: ["default", "danger"] },
354
+ states: [
355
+ "highlighted",
356
+ "disabled",
357
+ "open",
358
+ "checked"
359
+ ],
360
+ consumes: [],
361
+ slotGroups: {
362
+ item: MENU_ITEM_SLOTS,
363
+ "item-indicator": MENU_ITEM_SLOTS
364
+ },
365
+ optionSlots: { variant: "menu-item" },
366
+ mints: [
367
+ raw("016a1166-e506-4887-8945-212cf5882d65", {
368
+ kind: "component",
369
+ component: "menu",
370
+ anatomy: "content",
371
+ property: "min-width"
372
+ }, "11rem", "Minimum width of the menu popup.", "The popup's min-width — wide enough that short labels don't read as cramped."),
373
+ raw("b17318ae-ea38-4a0d-abef-5d25894c0d83", {
374
+ kind: "component",
375
+ component: "menu",
376
+ anatomy: "viewport",
377
+ property: "padding"
378
+ }, "0.25rem", "Padding around the scrollable list inside the popup.", "The inset between the popup edge and its rows."),
379
+ raw("ba9068a1-515b-4d4e-9849-b925971e2465", {
380
+ kind: "component",
381
+ component: "menu",
382
+ anatomy: "item",
383
+ property: "height"
384
+ }, "2rem", "Minimum height of a menu row.", "The row's min-height; the inline padding rhythm fills any extra space."),
385
+ raw("38a7f799-88ae-4f1e-90d1-6606a11595c8", {
386
+ kind: "component",
387
+ component: "menu",
388
+ anatomy: "item",
389
+ property: "padding-inline"
390
+ }, "0.625rem", "Inline padding of a menu row.", "The horizontal inset of a row's content."),
391
+ raw("f01821df-fc11-416e-a3de-bb3aef3fb8f0", {
392
+ kind: "component",
393
+ component: "menu",
394
+ anatomy: "item",
395
+ property: "gap"
396
+ }, "0.625rem", "Gap between a row's icon and its label.", "The spacing between the leading icon/indicator column and the label."),
397
+ raw("bc44c606-4041-4ed5-a355-625a150b9d07", {
398
+ kind: "component",
399
+ component: "menu",
400
+ anatomy: "item",
401
+ property: "border-radius"
402
+ }, "var(--noctis-radius-sm)", "Corner radius of a menu row's highlight.", "The radius of the row's hover/active fill."),
403
+ aliased("076a7074-8b78-4314-84e5-fbb0d7d4c6da", {
404
+ kind: "component",
405
+ component: "menu",
406
+ anatomy: "item",
407
+ property: "color"
408
+ }, { role: "secondary" }, "Menu row label colour at rest.", "The resting text colour of a row; the danger variant re-points it to the danger role.", { variant: { danger: { role: "danger" } } }),
409
+ aliased("133eab4a-92b2-445f-91e7-6c161f12e26c", {
410
+ kind: "component",
411
+ component: "menu",
412
+ anatomy: "item",
413
+ property: "color",
414
+ state: "highlighted"
415
+ }, { role: "foreground" }, "Menu row label colour while highlighted.", "The text colour of a highlighted row; the danger variant keeps it the danger role.", { variant: { danger: { role: "danger" } } }),
416
+ aliased("bd1f6226-b73e-4987-bae6-2949fe67679c", {
417
+ kind: "component",
418
+ component: "menu",
419
+ anatomy: "item",
420
+ property: "background-color",
421
+ state: "highlighted"
422
+ }, { role: "control-ghost-hover" }, "Menu row highlight fill.", "The fill behind a highlighted row; the danger variant re-points it to the danger-muted role.", { variant: { danger: { role: "danger-muted" } } }),
423
+ raw("5c98df2c-f0b2-4832-b83b-8bd37645985c", {
424
+ kind: "component",
425
+ component: "menu",
426
+ anatomy: "item-indicator",
427
+ property: "size"
428
+ }, "0.875rem", "Size of the leading check/dot indicator and the inset spacer.", "The width and height of the indicator column, kept equal so labels align."),
429
+ raw("710aa600-9ba1-4a68-b3e7-fd8918610dbd", {
430
+ kind: "component",
431
+ component: "menu",
432
+ anatomy: "item",
433
+ property: "padding-block"
434
+ }, "var(--noctis-space-1\\.5)", "Block padding of a menu row.", "The vertical inset of a row's content, above the min-height floor."),
435
+ raw("85e460f7-4d8a-4623-bd4e-6f965671bdcf", {
436
+ kind: "component",
437
+ component: "menu",
438
+ anatomy: "radio-dot",
439
+ property: "size"
440
+ }, "var(--noctis-space-1\\.5)", "Size of the filled dot inside a checked radio item's indicator.", "The width and height of the radio dot, centred in the indicator column."),
441
+ raw("811d1379-2d23-4692-b90f-eaaff69a9b66", {
442
+ kind: "component",
443
+ component: "menu",
444
+ anatomy: "group-label",
445
+ property: "padding-inline"
446
+ }, "var(--noctis-space-2\\.5)", "Inline padding of a group label.", "The horizontal inset of a group heading, aligning it with the rows beneath."),
447
+ raw("b95a5173-982b-44c6-96f0-5c1a294448a7", {
448
+ kind: "component",
449
+ component: "menu",
450
+ anatomy: "group-label",
451
+ property: "padding-block-start"
452
+ }, "var(--noctis-space-1\\.5)", "Top inset of a group label.", "The block-start padding above a group heading, separating it from the rows before it."),
453
+ raw("4f633808-04d6-47dc-879c-c508f5ceb082", {
454
+ kind: "component",
455
+ component: "menu",
456
+ anatomy: "group-label",
457
+ property: "padding-block-end"
458
+ }, "var(--noctis-space-1)", "Bottom inset of a group label.", "The block-end padding tying a group heading to the rows it introduces."),
459
+ raw("d0e5cb2e-d0a9-424e-8a13-bab6d0be9d1b", {
460
+ kind: "component",
461
+ component: "menu",
462
+ anatomy: "shortcut",
463
+ property: "padding-inline-start"
464
+ }, "var(--noctis-space-4)", "Start inset of a row's trailing shortcut hint.", "The minimum breathing room between a row's label and its keyboard shortcut."),
465
+ raw("07c8edef-bce6-4016-9051-f9507ad02741", {
466
+ kind: "component",
467
+ component: "menu",
468
+ anatomy: "separator",
469
+ property: "thickness"
470
+ }, "var(--noctis-space-px)", "Thickness of the rule between menu groups.", "The hairline height of a separator; static 1px, never density-scaled.")
471
+ ]
472
+ };
473
+ const autocomplete = {
474
+ component: "autocomplete",
475
+ category: "fields",
476
+ slotPrefix: "noctis",
477
+ anatomy: [
478
+ "autocomplete-input",
479
+ "autocomplete-list",
480
+ "autocomplete-item",
481
+ "autocomplete-empty",
482
+ "autocomplete-group-label"
483
+ ],
484
+ options: { size: ["md", "lg"] },
485
+ states: [
486
+ "highlighted",
487
+ "disabled",
488
+ "active"
489
+ ],
490
+ consumes: [],
491
+ optionSlots: { size: "autocomplete-input" },
492
+ mints: [
493
+ aliased("db9c0855-75be-439f-9921-c1cef9797402", {
494
+ kind: "component",
495
+ component: "autocomplete",
496
+ anatomy: "input",
497
+ property: "height"
498
+ }, { raw: "var(--noctis-size-control-md)" }, "Height of the autocomplete input field.", "The field's control height per size.", { size: { lg: { raw: "var(--noctis-size-control-lg)" } } }),
499
+ aliased("f7b89b1e-9f6c-49cb-947a-2084cf7226d3", {
500
+ kind: "component",
501
+ component: "autocomplete",
502
+ anatomy: "input",
503
+ property: "padding-inline"
504
+ }, { raw: "0.75rem" }, "Inline padding of the text field.", "The horizontal inset of the input's text per size step.", { size: { lg: { raw: "0.875rem" } } }),
505
+ raw("c4f9a1d6-2e8b-4a35-9d07-6b1f8c3e5a92", {
506
+ kind: "component",
507
+ component: "autocomplete",
508
+ anatomy: "input",
509
+ property: "shadow"
510
+ }, "var(--noctis-shadow-inset)", "Resting inset shadow of the input field.", "The subtle inner shadow the field carries at rest, matching the rest of the field family (Input/Textarea/Combobox)."),
511
+ raw("03327f85-ebc3-458a-bec2-4695064edb57", {
512
+ kind: "component",
513
+ component: "autocomplete",
514
+ anatomy: "input",
515
+ property: "border-radius"
516
+ }, "var(--noctis-radius-control)", "Corner radius of the input field.", "The rounding of the field; follows the control-radius knob."),
517
+ raw("55a6b329-893f-4742-8d00-33790e2a7b9a", {
518
+ kind: "component",
519
+ component: "autocomplete",
520
+ anatomy: "list",
521
+ property: "padding"
522
+ }, "0.25rem", "Padding around the scrollable suggestions list.", "The inset between the popup edge and its rows."),
523
+ raw("1972a2d4-2c8b-4689-9543-214e68af3de6", {
524
+ kind: "component",
525
+ component: "autocomplete",
526
+ anatomy: "item",
527
+ property: "height"
528
+ }, "2rem", "Minimum height of a suggestion row.", "The row's min-height; the inline padding rhythm fills any extra space."),
529
+ raw("ab55d424-ff9e-4548-bf1f-e68f5bccff80", {
530
+ kind: "component",
531
+ component: "autocomplete",
532
+ anatomy: "item",
533
+ property: "padding-inline"
534
+ }, "0.625rem", "Inline padding of a suggestion row.", "The horizontal inset of a row's content."),
535
+ raw("8d17fc69-5a73-4c2c-b9ba-e5aa23a7c02f", {
536
+ kind: "component",
537
+ component: "autocomplete",
538
+ anatomy: "item",
539
+ property: "gap"
540
+ }, "0.5rem", "Gap between a suggestion's leading glyph and its label.", "The spacing between a row's optional icon column and its label."),
541
+ raw("b7e2c4a1-3f56-4d89-9a02-1c8e5f7b6d34", {
542
+ kind: "component",
543
+ component: "autocomplete",
544
+ anatomy: "item",
545
+ property: "padding-block"
546
+ }, "0.25rem", "Block padding of a suggestion row.", "The vertical inset of a row's content, so multi-line rows breathe; single-line rows keep their min-height."),
547
+ raw("5250e47a-3f0d-4167-9699-f5dd42ae6ab4", {
548
+ kind: "component",
549
+ component: "autocomplete",
550
+ anatomy: "item",
551
+ property: "border-radius"
552
+ }, "var(--noctis-radius-sm)", "Corner radius of a suggestion row's highlight.", "The radius of the row's highlight fill."),
553
+ aliased("e3a9d1c7-5b48-42f6-8e15-7d2a4c9f0b63", {
554
+ kind: "component",
555
+ component: "autocomplete",
556
+ anatomy: "item",
557
+ property: "color"
558
+ }, { role: "secondary" }, "Suggestion row label colour at rest.", "The resting text colour of a row."),
559
+ aliased("f1c8b5a3-6d29-47e8-9b04-3a5e1f8c7d92", {
560
+ kind: "component",
561
+ component: "autocomplete",
562
+ anatomy: "item",
563
+ property: "color",
564
+ state: "highlighted"
565
+ }, { role: "foreground" }, "Suggestion row label colour while highlighted.", "The text colour of the keyboard- or pointer-highlighted row."),
566
+ aliased("a298c8fe-389e-4fb0-b278-73b665591381", {
567
+ kind: "component",
568
+ component: "autocomplete",
569
+ anatomy: "item",
570
+ property: "background-color",
571
+ state: "highlighted"
572
+ }, { role: "control-ghost-hover" }, "Suggestion row highlight fill.", "The neutral fill behind the highlighted row; the accent stays a signal, not a hover."),
573
+ aliased("a4d7e2f9-8c13-45b6-9e07-2f6a3c1d5b84", {
574
+ kind: "component",
575
+ component: "autocomplete",
576
+ anatomy: "item",
577
+ property: "background-color",
578
+ state: "active"
579
+ }, { role: "control-ghost-selected" }, "Suggestion row pressed fill.", "The firmer neutral fill while a row is pressed, as tactile feedback before it commits."),
580
+ raw("1513ddf0-9085-4cda-895f-92633c80687e", {
581
+ kind: "component",
582
+ component: "autocomplete",
583
+ anatomy: "empty",
584
+ property: "padding-block"
585
+ }, "var(--noctis-space-6)", "Block padding of the empty / no-results message.", "The vertical breathing room around the centred no-results copy."),
586
+ raw("32f90d66-c5d0-4db7-b658-6e71773a68ae", {
587
+ kind: "component",
588
+ component: "autocomplete",
589
+ anatomy: "group-label",
590
+ property: "padding-inline"
591
+ }, "var(--noctis-space-2\\.5)", "Trailing inline padding of a group label.", "The end inset of a group heading."),
592
+ raw("c9b3f6a2-7e41-4d58-8a96-5c1e2f4b7d03", {
593
+ kind: "component",
594
+ component: "autocomplete",
595
+ anatomy: "group-label",
596
+ property: "padding-inline-start"
597
+ }, "0.625rem", "Leading inset of a group label.", "The start inset that lines a group heading up with the option row's content edge (the same inline padding the rows use). Keep it in step with the item inline padding.")
598
+ ]
599
+ };
600
+ const input = {
601
+ component: "input",
602
+ category: "fields",
603
+ slotPrefix: "noctis",
604
+ anatomy: [
605
+ "input",
606
+ "input-control",
607
+ "input-adornment"
608
+ ],
609
+ options: { size: ["md", "lg"] },
610
+ states: ["focus", "disabled"],
611
+ consumes: [],
612
+ optionSlots: { size: "input" },
613
+ mints: [
614
+ aliased("b4aff761-f288-4958-8428-2914bc4ce482", {
615
+ kind: "component",
616
+ component: "input",
617
+ property: "height"
618
+ }, { raw: "var(--noctis-size-control-md)" }, "Field height.", "The control height of the field shell per size; rides the shared control-height ladder, so it density-scales.", { size: { lg: { raw: "var(--noctis-size-control-lg)" } } }),
619
+ aliased("d6d86e84-d59a-4648-85e1-a347c2efccab", {
620
+ kind: "component",
621
+ component: "input",
622
+ property: "padding-inline"
623
+ }, { raw: "var(--noctis-space-3)" }, "Field inline padding.", "The horizontal inset between the field edge and its content per size; rides the spacing scale, so it density-scales with the rest of the field.", { size: { lg: { raw: "var(--noctis-space-4)" } } }),
624
+ aliased("ba2f6c55-3d79-4bfa-bed9-7befdf85d63e", {
625
+ kind: "component",
626
+ component: "input",
627
+ property: "font-size"
628
+ }, { raw: "var(--noctis-text-small)" }, "Field text size.", "The type size of the value and placeholder per size step.", { size: { lg: { raw: "var(--noctis-text-regular)" } } }),
629
+ raw("1b1445f1-be85-416c-a0ab-e8fa8bd69948", {
630
+ kind: "component",
631
+ component: "input",
632
+ property: "gap"
633
+ }, "var(--noctis-space-2)", "Gap between the field's adornments and its control.", "The spacing between a leading/trailing adornment and the editable input."),
634
+ raw("bcd7e6af-580c-4215-bd0c-e371ef74b619", {
635
+ kind: "component",
636
+ component: "input",
637
+ property: "border-radius"
638
+ }, "var(--noctis-radius-control)", "Field corner radius.", "The corner radius of the field shell; follows the radius knob, so it can pill at the Pill setting."),
639
+ raw("34329a93-1135-44ae-8c27-3fc1786ec9ed", {
640
+ kind: "component",
641
+ component: "input",
642
+ property: "transition-duration"
643
+ }, "var(--noctis-duration-quick)", "Field colour-transition duration.", "How long the border and surface cross-fade on hover, focus, and validity changes."),
644
+ aliased("4e8234bc-09d4-4dbd-abeb-fe77e1ff5609", {
645
+ kind: "component",
646
+ component: "input",
647
+ anatomy: "adornment",
648
+ property: "color"
649
+ }, { role: "placeholder" }, "Field adornment colour.", "The colour of a leading/trailing adornment's icon or text, quieter than the value."),
650
+ aliased("7e9304c0-7c53-429b-9f60-7534474f6864", {
651
+ kind: "component",
652
+ component: "input",
653
+ property: "shadow"
654
+ }, { raw: "var(--noctis-shadow-inset)" }, "Field rest shadow.", "The subtle inset seam painted at rest — the documented field-recipe shadow that gives the field its seated feel."),
655
+ raw("aef57bd6-cd42-4170-bc64-10a78a9ec3ca", {
656
+ kind: "component",
657
+ component: "input",
658
+ anatomy: "adornment",
659
+ property: "padding-inline"
660
+ }, "var(--noctis-space-2)", "Adornment inline inset.", "The breathing room a segmented adornment keeps between its content and the field edge so the text is never crowded."),
661
+ aliased("0f9acebc-f008-4358-9a36-b8fdb58beb3f", {
662
+ kind: "component",
663
+ component: "input",
664
+ property: "icon-size"
665
+ }, { raw: "var(--noctis-space-4)" }, "Field icon size.", "The glyph size the field imposes on icons inside its adornments and actions per size, so in-field glyphs don't drift across the family.", { size: { lg: { raw: "var(--noctis-space-5)" } } }),
666
+ aliased("6c43d854-7918-44b3-b611-cbd31613a951", {
667
+ kind: "component",
668
+ component: "input",
669
+ anatomy: "adornment",
670
+ property: "segment-background-color"
671
+ }, { role: "field-hover" }, "Segmented-adornment fill.", "The quiet fill of a bordered segment addon (e.g. `https://` ▸ field ▸ `.com`), a step off the field surface."),
672
+ aliased("ff62efc6-59cb-4559-85ad-61221158207e", {
673
+ kind: "component",
674
+ component: "input",
675
+ anatomy: "adornment",
676
+ property: "segment-border-color"
677
+ }, { role: "field-border" }, "Segmented-adornment divider.", "The logical divider between a bordered segment addon and the editable field.")
678
+ ]
679
+ };
680
+ const textarea = {
681
+ component: "textarea",
682
+ category: "fields",
683
+ slotPrefix: "noctis",
684
+ anatomy: [
685
+ "textarea",
686
+ "textarea-control",
687
+ "textarea-toolbar"
688
+ ],
689
+ options: { size: ["md", "lg"] },
690
+ states: ["focus", "disabled"],
691
+ consumes: [],
692
+ optionSlots: { size: "textarea" },
693
+ mints: [
694
+ aliased("b607ce9b-103e-4c70-af65-320ea8c64714", {
695
+ kind: "component",
696
+ component: "textarea",
697
+ property: "padding-inline"
698
+ }, { raw: "var(--noctis-space-3)" }, "Field inline padding.", "The horizontal inset between the field edge and its text per size; rides the spacing scale, so it density-scales.", { size: { lg: { raw: "var(--noctis-space-4)" } } }),
699
+ aliased("0549b544-5bb0-4c37-8f23-8b97e0ab8fd8", {
700
+ kind: "component",
701
+ component: "textarea",
702
+ property: "padding-block"
703
+ }, { raw: "var(--noctis-space-2)" }, "Field block padding.", "The vertical inset between the field edge and its text per size — a textarea top-aligns, unlike the single-line Input.", { size: { lg: { raw: "var(--noctis-space-3)" } } }),
704
+ aliased("762a91b2-99fe-4a4b-b66f-e764f5fc36c8", {
705
+ kind: "component",
706
+ component: "textarea",
707
+ property: "font-size"
708
+ }, { raw: "var(--noctis-text-small)" }, "Field text size.", "The type size of the value and placeholder per size step.", { size: { lg: { raw: "var(--noctis-text-regular)" } } }),
709
+ raw("9d360467-fb0b-4b8a-a5d7-6d32135e1b3b", {
710
+ kind: "component",
711
+ component: "textarea",
712
+ property: "gap"
713
+ }, "var(--noctis-space-2)", "Gap between the field's regions.", "The vertical spacing between the editable control and the toolbar beneath it."),
714
+ raw("46fdc4be-b549-432e-aaf2-a9ad666c9455", {
715
+ kind: "component",
716
+ component: "textarea",
717
+ property: "border-radius"
718
+ }, "var(--noctis-radius-lg)", "Field corner radius.", "The corner radius of the field shell. Uses the `min()`-capped box radius (not the uncapped control radius Input pills with), so a tall multi-line field never balloons into a pill at the Pill knob setting."),
719
+ raw("c43501ac-8ff5-46ef-9065-9efb87db058a", {
720
+ kind: "component",
721
+ component: "textarea",
722
+ property: "transition-duration"
723
+ }, "var(--noctis-duration-quick)", "Field colour-transition duration.", "How long the border and surface cross-fade on hover, focus, and validity changes."),
724
+ aliased("1d1bad1c-89ce-4f99-895d-43396f967aa7", {
725
+ kind: "component",
726
+ component: "textarea",
727
+ property: "shadow"
728
+ }, { raw: "var(--noctis-shadow-inset)" }, "Field rest shadow.", "The subtle inset seam painted at rest — the shared field-recipe shadow that gives the field its seated feel."),
729
+ aliased("b2b12ca4-55f8-4d7f-8bae-45262a5cffb1", {
730
+ kind: "component",
731
+ component: "textarea",
732
+ property: "icon-size"
733
+ }, { raw: "var(--noctis-space-4)" }, "Field icon size.", "The glyph size the field imposes on icons inside its toolbar actions per size, so in-field glyphs don't drift.", { size: { lg: { raw: "var(--noctis-space-5)" } } }),
734
+ raw("e939583e-b579-4027-8f80-cdbdce021e1c", {
735
+ kind: "component",
736
+ component: "textarea",
737
+ property: "min-block-size"
738
+ }, "4.5rem", "Minimum field height.", "The floor the auto-growing field starts at — roughly three lines — before it grows with content."),
739
+ raw("8cfa845c-07ef-49b0-a86b-4c1b0a966444", {
740
+ kind: "component",
741
+ component: "textarea",
742
+ property: "max-block-size"
743
+ }, "18rem", "Maximum field height.", "The ceiling the auto-growing field stops at before its content scrolls instead of growing further."),
744
+ raw("5f3f36da-ee0f-4899-98ba-4bf3b9c7b332", {
745
+ kind: "component",
746
+ component: "textarea",
747
+ anatomy: "toolbar",
748
+ property: "gap"
749
+ }, "var(--noctis-space-1)", "Gap between toolbar items.", "The spacing between adjacent actions (and the count) in the toolbar row."),
750
+ aliased("6f636f8c-9a8b-4a58-9ff0-0031ef44f388", {
751
+ kind: "component",
752
+ component: "textarea",
753
+ anatomy: "toolbar",
754
+ property: "border-color"
755
+ }, { role: "field-border" }, "Toolbar divider colour.", "The hairline rule separating the toolbar row from the editable control above it."),
756
+ raw("636e3826-7bf2-4f01-abd8-58de2f279afa", {
757
+ kind: "component",
758
+ component: "textarea",
759
+ anatomy: "toolbar",
760
+ property: "padding-block"
761
+ }, "var(--noctis-space-2)", "Toolbar block padding.", "The vertical inset of the toolbar row between its divider and the field's bottom edge.")
762
+ ]
763
+ };
764
+ const previewCard = {
765
+ component: "preview-card",
766
+ category: "overlays",
767
+ slotPrefix: "noctis",
768
+ anatomy: [
769
+ "preview-card-trigger",
770
+ "preview-card-popup",
771
+ "preview-card-viewport",
772
+ "preview-card-media",
773
+ "preview-card-title",
774
+ "preview-card-description",
775
+ "preview-card-meta"
776
+ ],
777
+ options: { density: ["comfortable", "compact"] },
778
+ optionSlots: { density: "preview-card-popup" },
779
+ states: [],
780
+ consumes: [],
781
+ mints: [
782
+ raw("13005cc8-d5d9-41dd-b74e-f5f1de3e3f52", {
783
+ kind: "component",
784
+ component: "preview-card",
785
+ anatomy: "popup",
786
+ property: "min-width"
787
+ }, "14rem", "Minimum width of the preview card popup.", "The popup's min-width — wide enough that a thumbnail and a line of text don't read as cramped."),
788
+ raw("a800347f-7576-42ea-a018-9e5dd7e538fe", {
789
+ kind: "component",
790
+ component: "preview-card",
791
+ anatomy: "popup",
792
+ property: "max-width"
793
+ }, "20rem", "Maximum width of the preview card popup.", "The popup's max-width — keeps a long preview from sprawling across the viewport."),
794
+ aliased("1b93fbf6-6c39-4e2c-a047-fd4456578f66", {
795
+ kind: "component",
796
+ component: "preview-card",
797
+ anatomy: "popup",
798
+ property: "padding"
799
+ }, { raw: "var(--noctis-space-4)" }, "Padding inside the preview card popup.", "The inset between the popup edge and its content; the compact density tightens it a step.", { density: { compact: { raw: "var(--noctis-space-3)" } } }),
800
+ raw("5487961c-2294-48b2-a22c-68fe92aa2738", {
801
+ kind: "component",
802
+ component: "preview-card",
803
+ anatomy: "popup",
804
+ property: "border-radius"
805
+ }, "var(--noctis-radius-md)", "Corner radius of the preview card popup.", "The radius of the popup surface; matches the menu/popover overlay tier, bounded so it never pills."),
806
+ aliased("951dd69f-ea34-400b-8802-6ed8970ebdeb", {
807
+ kind: "component",
808
+ component: "preview-card",
809
+ anatomy: "popup",
810
+ property: "gap"
811
+ }, { raw: "var(--noctis-space-2)" }, "Gap between stacked blocks inside the preview card popup.", "The vertical rhythm between a preview's media, heading, and body; the compact density tightens it.", { density: { compact: { raw: "var(--noctis-space-1\\.5)" } } }),
812
+ raw("6a40049a-60dd-439d-bcf4-8ae53454aa6f", {
813
+ kind: "component",
814
+ component: "preview-card",
815
+ anatomy: "popup",
816
+ property: "font-size"
817
+ }, "var(--noctis-text-small)", "Base text size inside the preview card popup.", "The popup's resting font size — a notch below body copy, since a preview is supplementary."),
818
+ aliased("ffbcf047-7d4a-439e-9bb4-fab18c44c7c0", {
819
+ kind: "component",
820
+ component: "preview-card",
821
+ anatomy: "popup",
822
+ property: "color"
823
+ }, { role: "secondary" }, "Base text colour inside the preview card popup.", "The popup's resting text colour; headings and links inside lift to their own roles."),
824
+ aliased("eb99a8e4-e924-437b-b781-c053994ae2d8", {
825
+ kind: "component",
826
+ component: "preview-card",
827
+ anatomy: "trigger",
828
+ property: "color"
829
+ }, { role: "accent" }, "Colour of the preview card trigger link.", "The trigger's link colour — the indigo signal accent, the one legitimate accent use on the component."),
830
+ raw("941b05f2-7494-4a1d-9167-a4076bedf1f8", {
831
+ kind: "component",
832
+ component: "preview-card",
833
+ anatomy: "trigger",
834
+ property: "underline-offset"
835
+ }, "var(--noctis-space-1)", "Underline offset of the preview card trigger link.", "How far the trigger's underline sits below the text on hover/focus and while the card is open."),
836
+ aliased("fec88957-7016-48f0-a4b2-7b0064f3cb8a", {
837
+ kind: "component",
838
+ component: "preview-card",
839
+ anatomy: "trigger",
840
+ property: "ring-color"
841
+ }, { role: "ring" }, "Focus-ring colour of the preview card trigger.", "The colour of the trigger's keyboard focus-visible outline."),
842
+ raw("25ce2ef8-9c91-4207-9682-24c258dd5b2a", {
843
+ kind: "component",
844
+ component: "preview-card",
845
+ anatomy: "media",
846
+ property: "aspect-ratio"
847
+ }, "16 / 9", "Aspect ratio reserved for the preview card media block.", "The ratio the media slot reserves up-front so the card doesn't reflow when a thumbnail loads."),
848
+ raw("7afeff31-e5ca-48a4-b3aa-353acdffb221", {
849
+ kind: "component",
850
+ component: "preview-card",
851
+ anatomy: "media",
852
+ property: "border-radius"
853
+ }, "var(--noctis-radius-sm)", "Corner radius of the preview card media block.", "The rounding of the media frame inside the padded card — a step tighter than the popup."),
854
+ aliased("434262fb-9524-4773-bfc3-4e65d1073f73", {
855
+ kind: "component",
856
+ component: "preview-card",
857
+ anatomy: "title",
858
+ property: "color"
859
+ }, { role: "foreground" }, "Colour of the preview card title.", "The title lifts to the foreground role so it leads over the secondary body copy."),
860
+ raw("f01c49e4-fec0-4b13-a6a3-0f48c8138cee", {
861
+ kind: "component",
862
+ component: "preview-card",
863
+ anatomy: "title",
864
+ property: "font-weight"
865
+ }, "var(--noctis-font-weight-medium)", "Font weight of the preview card title.", "A medium weight — enough to lead the card without shouting over the body."),
866
+ raw("3f77ac6f-b096-4b31-b00b-9508d8d17d7b", {
867
+ kind: "component",
868
+ component: "preview-card",
869
+ anatomy: "title",
870
+ property: "line-height"
871
+ }, "var(--noctis-leading-small)", "Line height of the preview card title.", "A tight leading that keeps the heading compact above the description."),
872
+ raw("e8a00a8b-8850-4842-a956-051aaaca2f18", {
873
+ kind: "component",
874
+ component: "preview-card",
875
+ anatomy: "description",
876
+ property: "line-height"
877
+ }, "var(--noctis-leading-small)", "Line height of the preview card description.", "Matches the title's leading so the heading and body read as one block."),
878
+ aliased("2cdb13e4-bd19-4c19-a123-61ab86e4d3cb", {
879
+ kind: "component",
880
+ component: "preview-card",
881
+ anatomy: "meta",
882
+ property: "color"
883
+ }, { role: "subtle" }, "Colour of the preview card meta row.", "The meta row drops to the subtle role — quieter than the body, for stats and label/value pairs."),
884
+ raw("ba9f62e8-baa1-4147-811e-c2e0355d7fbc", {
885
+ kind: "component",
886
+ component: "preview-card",
887
+ anatomy: "meta",
888
+ property: "gap"
889
+ }, "var(--noctis-space-4)", "Gap between items in the preview card meta row.", "The spacing between adjacent stats or label/value pairs in the meta row.")
890
+ ]
891
+ };
892
+ const popover = {
893
+ component: "popover",
894
+ category: "overlays",
895
+ slotPrefix: "noctis",
896
+ anatomy: [
897
+ "popover-trigger",
898
+ "popover-popup",
899
+ "popover-viewport",
900
+ "popover-title",
901
+ "popover-description",
902
+ "popover-close"
903
+ ],
904
+ options: {},
905
+ states: [],
906
+ consumes: [],
907
+ mints: [
908
+ raw("e75eec01-e980-4158-b16a-e011d846443e", {
909
+ kind: "component",
910
+ component: "popover",
911
+ anatomy: "popup",
912
+ property: "min-width"
913
+ }, "12rem", "Minimum width of the popover popup.", "The popup's min-width — wide enough that short content doesn't read as cramped. Set it to `var(--anchor-width)` to floor the popup at the trigger width, combobox-style."),
914
+ raw("2d2f974f-8f62-45bf-827f-fd0c4b2c1f84", {
915
+ kind: "component",
916
+ component: "popover",
917
+ anatomy: "popup",
918
+ property: "max-width"
919
+ }, "min(24rem, var(--available-width))", "Maximum width of the popover popup.", "The popup's max-width — caps wide content and never exceeds the space Base UI leaves to the viewport edge."),
920
+ raw("e9244b69-6235-44d9-810f-91508a3118e7", {
921
+ kind: "component",
922
+ component: "popover",
923
+ anatomy: "popup",
924
+ property: "padding"
925
+ }, "var(--noctis-space-4)", "Padding inside the popover popup.", "The inset between the popup edge and its title/description/content."),
926
+ raw("4a7eb745-e8b3-4aa5-8880-bf84641706f0", {
927
+ kind: "component",
928
+ component: "popover",
929
+ anatomy: "popup",
930
+ property: "gap"
931
+ }, "var(--noctis-space-2)", "Vertical gap between the popup's stacked regions.", "The spacing between the title, description, and the content beneath them."),
932
+ raw("95dbd134-4792-498c-ab8d-9847b5703dab", {
933
+ kind: "component",
934
+ component: "popover",
935
+ anatomy: "title",
936
+ property: "font-size"
937
+ }, "var(--noctis-text-regular)", "Font size of the popover title.", "The size of the popup's heading — a step above the description, the smaller half of the pair."),
938
+ raw("11a31fd4-b06b-42f8-b317-38c0a7cd1ad5", {
939
+ kind: "component",
940
+ component: "popover",
941
+ anatomy: "title",
942
+ property: "line-height"
943
+ }, "var(--noctis-leading-small)", "Line height of the popover title.", "A tight leading that keeps the heading compact and close to the description, not towering above it."),
944
+ raw("c9762089-f52a-47b9-9ff8-f5e30452b35a", {
945
+ kind: "component",
946
+ component: "popover",
947
+ anatomy: "title",
948
+ property: "font-weight"
949
+ }, "var(--noctis-font-weight-medium)", "Font weight of the popover title.", "A medium weight — enough to lead the header without shouting over the description."),
950
+ aliased("5f3f543e-e9b0-4da3-9667-f5517db9a3ee", {
951
+ kind: "component",
952
+ component: "popover",
953
+ anatomy: "title",
954
+ property: "color"
955
+ }, { role: "foreground" }, "Popover title colour.", "The text colour of the popup's heading."),
956
+ raw("0d19e01a-b920-454a-9ebe-e4dd5ae40ecc", {
957
+ kind: "component",
958
+ component: "popover",
959
+ anatomy: "description",
960
+ property: "font-size"
961
+ }, "var(--noctis-text-small)", "Font size of the popover description.", "The size of the supporting copy under the title."),
962
+ raw("ab621058-9f6c-4c43-9d19-f407baf6d084", {
963
+ kind: "component",
964
+ component: "popover",
965
+ anatomy: "description",
966
+ property: "line-height"
967
+ }, "var(--noctis-leading-small)", "Line height of the popover description.", "Matches the title's leading so the two lines sit as one tight header block."),
968
+ aliased("468d4201-4444-4562-830c-0741950cc61b", {
969
+ kind: "component",
970
+ component: "popover",
971
+ anatomy: "description",
972
+ property: "color"
973
+ }, { role: "muted" }, "Popover description colour.", "The muted text colour of the supporting copy under the title.")
974
+ ]
975
+ };
976
+ const tooltip = {
977
+ component: "tooltip",
978
+ category: "overlays",
979
+ slotPrefix: "noctis",
980
+ anatomy: ["tooltip-trigger", "tooltip-popup"],
981
+ options: {},
982
+ states: ["open"],
983
+ consumes: [],
984
+ mints: [
985
+ raw("83dee642-4628-453d-8b9f-a94fe777f538", {
986
+ kind: "component",
987
+ component: "tooltip",
988
+ anatomy: "popup",
989
+ property: "padding-inline"
990
+ }, "var(--noctis-space-2)", "Inline padding of the tooltip bubble.", "The horizontal inset between the bubble edge and its label; rides the spacing scale so it retunes with the density knob."),
991
+ raw("63b0dd76-5eef-4213-b516-8fde3012fc95", {
992
+ kind: "component",
993
+ component: "tooltip",
994
+ anatomy: "popup",
995
+ property: "padding-block"
996
+ }, "var(--noctis-space-1)", "Block padding of the tooltip bubble.", "The vertical inset between the bubble edge and its label; rides the spacing scale so it retunes with the density knob."),
997
+ raw("649fe191-9f4c-42c1-b611-8113a2c1b9b2", {
998
+ kind: "component",
999
+ component: "tooltip",
1000
+ anatomy: "popup",
1001
+ property: "max-inline-size"
1002
+ }, "18rem", "Maximum width of the tooltip bubble before its text wraps.", "The width ceiling that keeps a long hint readable instead of stretching across the viewport."),
1003
+ raw("fabd4e2b-08f2-475f-a8ef-56b2730432e7", {
1004
+ kind: "component",
1005
+ component: "tooltip",
1006
+ anatomy: "popup",
1007
+ property: "font-size"
1008
+ }, "var(--noctis-text-small)", "Font size of the tooltip label.", "The text size inside the bubble — a step below body text."),
1009
+ raw("0c5b0df2-fea9-48a1-9b0b-54f2f8e7063b", {
1010
+ kind: "component",
1011
+ component: "tooltip",
1012
+ anatomy: "popup",
1013
+ property: "border-radius"
1014
+ }, "var(--noctis-radius-sm)", "Corner radius of the tooltip bubble.", "The rounding of the bubble's corners; follows the radius knob on the sm step.")
1015
+ ]
1016
+ };
1017
+ const contextMenu = {
1018
+ component: "context-menu",
1019
+ category: "overlays",
1020
+ slotPrefix: "noctis",
1021
+ anatomy: [
1022
+ "context-menu-trigger",
1023
+ "context-menu-content",
1024
+ "context-menu-viewport"
1025
+ ],
1026
+ options: {},
1027
+ states: ["active", "open"],
1028
+ consumes: [],
1029
+ mints: [
1030
+ raw("e8c7e463-354d-48f0-aa8f-5a7df95226f5", {
1031
+ kind: "component",
1032
+ component: "context-menu",
1033
+ anatomy: "content",
1034
+ property: "min-width"
1035
+ }, "11rem", "Minimum width of the context-menu popup.", "The popup's min-width — kept the same as Menu's so the two overlays match; wide enough that short labels don't read as cramped."),
1036
+ raw("b03700ad-7008-4382-9b82-b42af3295724", {
1037
+ kind: "component",
1038
+ component: "context-menu",
1039
+ anatomy: "viewport",
1040
+ property: "padding"
1041
+ }, "0.25rem", "Padding around the scrollable list inside the popup.", "The inset between the popup edge and its rows — kept the same as Menu's so the two overlays match."),
1042
+ aliased("f1a9c7d2-3b4e-4c81-9a6f-2e7d8c1b0a55", {
1043
+ kind: "component",
1044
+ component: "context-menu",
1045
+ anatomy: "trigger",
1046
+ property: "background-color",
1047
+ state: "active"
1048
+ }, { role: "control-ghost" }, "Tint of the trigger area while a touch long-press is registering.", "The neutral fill behind the trigger during a long-press (Base UI's `data-pressed`), confirming the hold registered — a control-ghost wash, never accent (accent is signal-only); painted instantly, no transition."),
1049
+ raw("c4e2b8a1-7d63-4f29-8b15-6a0e3d9c2f7b", {
1050
+ kind: "component",
1051
+ component: "context-menu",
1052
+ anatomy: "trigger",
1053
+ property: "background-color",
1054
+ state: "open"
1055
+ }, "transparent", "Tint of the trigger area while its menu is open (off by default).", "An opt-in 'armed' fill behind the trigger for as long as the menu is open (Base UI's `data-popup-open`); transparent by default, override the public var to enable it.")
1056
+ ]
1057
+ };
1058
+ const button = {
1059
+ component: "button",
1060
+ category: "actions",
1061
+ slotPrefix: "noctis",
1062
+ marker: "button",
1063
+ anatomy: ["button", "button-spinner"],
1064
+ options: {
1065
+ variant: [
1066
+ "primary",
1067
+ "accent",
1068
+ "secondary",
1069
+ "outline",
1070
+ "ghost",
1071
+ "danger",
1072
+ "link"
1073
+ ],
1074
+ size: [
1075
+ "xs",
1076
+ "sm",
1077
+ "md",
1078
+ "lg"
1079
+ ],
1080
+ iconOnly: ["true", "false"],
1081
+ fullWidth: ["true", "false"]
1082
+ },
1083
+ states: [
1084
+ "hover",
1085
+ "active",
1086
+ "focus",
1087
+ "disabled"
1088
+ ],
1089
+ consumes: [],
1090
+ optionSlots: { size: "button" },
1091
+ mints: [
1092
+ aliased("b891cff4-6da7-4ac0-a9fb-0ea7ba2ff875", {
1093
+ kind: "component",
1094
+ component: "button",
1095
+ property: "height"
1096
+ }, { raw: "var(--noctis-size-control-md)" }, "Button height (and the side of an icon-only button).", "The control height per size; the icon-only square reads the same token.", { size: {
1097
+ xs: { raw: "var(--noctis-size-control-xs)" },
1098
+ sm: { raw: "var(--noctis-size-control-sm)" },
1099
+ lg: { raw: "var(--noctis-size-control-lg)" }
1100
+ } }),
1101
+ aliased("6f314fb2-7688-4e69-92ba-21af203a22c8", {
1102
+ kind: "component",
1103
+ component: "button",
1104
+ property: "padding-inline"
1105
+ }, { raw: "0.75rem" }, "Button inline padding.", "The horizontal inset of a button's label per size.", { size: {
1106
+ xs: { raw: "0.375rem" },
1107
+ sm: { raw: "0.5rem" },
1108
+ lg: { raw: "1rem" }
1109
+ } }),
1110
+ aliased("0db7797f-cd03-4fb3-9e6e-5ccd53585791", {
1111
+ kind: "component",
1112
+ component: "button",
1113
+ property: "gap"
1114
+ }, { raw: "0.375rem" }, "Gap between a button's icon and its label.", "The spacing between the leading/trailing glyph and the label per size.", { size: {
1115
+ xs: { raw: "0.25rem" },
1116
+ sm: { raw: "0.25rem" },
1117
+ lg: { raw: "0.5rem" }
1118
+ } }),
1119
+ aliased("3c9e1d72-5a84-4f1b-bf3e-7c2a9d6e4b08", {
1120
+ kind: "component",
1121
+ component: "button",
1122
+ property: "icon-size"
1123
+ }, { raw: "var(--noctis-space-4)" }, "Icon-only button glyph size.", "The glyph size an icon-only button imposes on its single icon per size — mirrors the leading/trailing icon scale so a bare glyph reads balanced in the square instead of at its own intrinsic dimensions.", { size: {
1124
+ xs: { raw: "var(--noctis-space-3)" },
1125
+ sm: { raw: "var(--noctis-space-3\\.5)" }
1126
+ } }),
1127
+ raw("b03b3eb4-3ed2-447c-9163-88ae90abbd70", {
1128
+ kind: "component",
1129
+ component: "button",
1130
+ property: "border-radius"
1131
+ }, "var(--noctis-radius-control)", "Button corner radius.", "The corner radius; follows the radius knob uncapped, so buttons go fully pill at the Pill setting."),
1132
+ aliased("d34e7314-d990-43b7-bf06-073b1abb0a4f", {
1133
+ kind: "component",
1134
+ component: "button",
1135
+ property: "font-size"
1136
+ }, { raw: "var(--noctis-text-small)" }, "Button label font size.", "The label type size per size step.", { size: {
1137
+ xs: { raw: "var(--noctis-text-mini)" },
1138
+ sm: { raw: "var(--noctis-text-mini)" },
1139
+ lg: { raw: "var(--noctis-text-regular)" }
1140
+ } }),
1141
+ raw("1645aee9-f8a0-423d-a117-8e45b4eeb556", {
1142
+ kind: "component",
1143
+ component: "button",
1144
+ property: "transition-duration"
1145
+ }, "var(--noctis-duration-quick)", "Button colour-transition duration.", "How long the variant fill/text cross-fades on hover and active.")
1146
+ ]
1147
+ };
1148
+ const buttonGroup = {
1149
+ component: "button-group",
1150
+ category: "actions",
1151
+ slotPrefix: "noctis",
1152
+ anatomy: ["button-group"],
1153
+ options: {},
1154
+ states: [],
1155
+ consumes: [],
1156
+ slotGroups: { seam: ["button-group"] },
1157
+ mints: [raw("75246e80-bc96-4deb-8c94-e59d36e50b6a", {
1158
+ kind: "component",
1159
+ component: "button-group",
1160
+ anatomy: "seam",
1161
+ property: "width"
1162
+ }, "1px", "Width of the divider between two attached segments.", "The thickness of the seam line drawn between welded buttons."), aliased("f4f147f3-dcde-47fb-81ca-ccb023f5bb46", {
1163
+ kind: "component",
1164
+ component: "button-group",
1165
+ anatomy: "seam",
1166
+ property: "color"
1167
+ }, { role: "border-strong" }, "Colour of the divider between two attached segments.", "The seam line's colour — the high-contrast strong role, so it reads across every button variant.")]
1168
+ };
1169
+ const tabs = {
1170
+ component: "tabs",
1171
+ category: "navigation",
1172
+ slotPrefix: "noctis",
1173
+ anatomy: [
1174
+ "tabs",
1175
+ "tabs-list",
1176
+ "tabs-tab",
1177
+ "tabs-indicator",
1178
+ "tabs-panel"
1179
+ ],
1180
+ options: {
1181
+ variant: [
1182
+ "line",
1183
+ "pill",
1184
+ "segmented"
1185
+ ],
1186
+ size: ["sm", "md"],
1187
+ color: ["primary", "accent"]
1188
+ },
1189
+ states: [],
1190
+ consumes: [],
1191
+ optionSlots: {
1192
+ variant: "tabs",
1193
+ size: "tabs",
1194
+ color: "tabs"
1195
+ },
1196
+ slotGroups: { root: ["tabs"] },
1197
+ mints: [
1198
+ raw("0ee27dfe-5513-423c-817f-56dc3686efaa", {
1199
+ kind: "component",
1200
+ component: "tabs",
1201
+ anatomy: "root",
1202
+ property: "gap"
1203
+ }, "var(--noctis-space-3)", "Gap between the tab strip and its panels.", "The spacing the root stack holds between the list and the active panel."),
1204
+ aliased("eb6270b9-abb4-43e4-9f10-61ccf75f9789", {
1205
+ kind: "component",
1206
+ component: "tabs",
1207
+ anatomy: "tab",
1208
+ property: "height"
1209
+ }, { raw: "var(--noctis-size-control-md)" }, "Tab height.", "The control height of a tab per size.", { size: { sm: { raw: "var(--noctis-size-control-sm)" } } }),
1210
+ aliased("9d2ea02f-7c5b-4a25-95b5-63baa4d0103b", {
1211
+ kind: "component",
1212
+ component: "tabs",
1213
+ anatomy: "tab",
1214
+ property: "padding-inline"
1215
+ }, { raw: "0.75rem" }, "Tab inline padding.", "The horizontal inset of a tab's label per size.", { size: { sm: { raw: "0.625rem" } } }),
1216
+ aliased("a74c7c08-4edb-4e72-bb24-671ab1efad84", {
1217
+ kind: "component",
1218
+ component: "tabs",
1219
+ anatomy: "tab",
1220
+ property: "gap"
1221
+ }, { raw: "0.5rem" }, "Gap between a tab's icon and its label.", "The spacing between a tab's leading glyph and its label per size.", { size: { sm: { raw: "0.375rem" } } }),
1222
+ aliased("cff0f3d4-a312-4c3a-b9fc-4848354ec0bc", {
1223
+ kind: "component",
1224
+ component: "tabs",
1225
+ anatomy: "tab",
1226
+ property: "font-size"
1227
+ }, { raw: "var(--noctis-text-small)" }, "Tab label font size.", "The tab label type size per size step.", { size: { sm: { raw: "var(--noctis-text-mini)" } } }),
1228
+ raw("a5e25929-a328-489c-beed-69dab9574455", {
1229
+ kind: "component",
1230
+ component: "tabs",
1231
+ anatomy: "list",
1232
+ property: "gap"
1233
+ }, "0.25rem", "Gap between tabs in the strip.", "The spacing between adjacent tabs."),
1234
+ raw("1d9b9ae1-9073-4831-be1a-d162ba95e71d", {
1235
+ kind: "component",
1236
+ component: "tabs",
1237
+ anatomy: "list",
1238
+ property: "border-radius"
1239
+ }, "var(--noctis-radius-control)", "Corner radius of the segmented track.", "The rounding of the sunken track the `segmented` variant holds around its tabs; follows the radius knob uncapped."),
1240
+ raw("306122a4-8c3e-4af2-bcd2-c2484de6fa36", {
1241
+ kind: "component",
1242
+ component: "tabs",
1243
+ anatomy: "tab",
1244
+ property: "border-radius"
1245
+ }, "var(--noctis-radius-control)", "Corner radius of a tab's focus and hover shape.", "The rounding of a tab in the `pill` and `segmented` variants; the `line` variant keeps its own free extreme."),
1246
+ raw("27a8bda9-fe9d-4fcc-b52d-6fa0abb15dbf", {
1247
+ kind: "component",
1248
+ component: "tabs",
1249
+ anatomy: "indicator",
1250
+ property: "border-radius"
1251
+ }, "var(--noctis-radius-control)", "Corner radius of the sliding active-tab indicator.", "The rounding of the `pill` fill and the `segmented` raised surface; the `line` underline keeps its own free extreme."),
1252
+ aliased("6f616208-da90-402a-8254-d4d334842a03", {
1253
+ kind: "component",
1254
+ component: "tabs",
1255
+ anatomy: "list",
1256
+ property: "padding"
1257
+ }, { raw: "0.25rem" }, "Inset between the segmented track and its tabs.", "The padding the sunken `segmented` track holds around its tabs per size; only the segmented look consumes it.", { size: { sm: { raw: "0.125rem" } } }),
1258
+ raw("2922aae3-d953-493a-bd92-669f4e97ad09", {
1259
+ kind: "component",
1260
+ component: "tabs",
1261
+ anatomy: "indicator",
1262
+ property: "height"
1263
+ }, "0.125rem", "Height of the `line` underline indicator.", "The thickness of the underline the `line` variant slides beneath the active tab."),
1264
+ aliased("cc774594-89fa-4235-a3cd-cefc7f36eca5", {
1265
+ kind: "component",
1266
+ component: "tabs",
1267
+ anatomy: "indicator",
1268
+ property: "background-color"
1269
+ }, { role: "foreground" }, "Fill of the sliding active-tab indicator.", "The indicator's colour — the underline (`line`), the raised neutral chip (`pill`, the `control-selected` fill ringed and shadowed into a crisp Linear pill), or the solid checked chip (`segmented`, the bold `primary` key by default — or the `accent`, set in CSS off `color=\"accent\"`).", { variant: {
1270
+ pill: { role: "control-selected" },
1271
+ segmented: { role: "primary" }
1272
+ } }),
1273
+ raw("e16a4e4b-45d3-4996-8205-99321685b677", {
1274
+ kind: "component",
1275
+ component: "tabs",
1276
+ anatomy: "indicator",
1277
+ property: "transition-duration"
1278
+ }, "var(--noctis-duration-regular)", "Duration of the indicator's slide between tabs.", "How long the active highlight takes to travel to the newly selected tab.")
1279
+ ]
1280
+ };
1281
+ const toolbar = {
1282
+ component: "toolbar",
1283
+ category: "navigation",
1284
+ slotPrefix: "noctis",
1285
+ anatomy: [
1286
+ "toolbar",
1287
+ "toolbar-separator",
1288
+ "toolbar-group",
1289
+ "toolbar-input",
1290
+ "toolbar-spacer"
1291
+ ],
1292
+ options: {
1293
+ size: ["sm", "md"],
1294
+ variant: [
1295
+ "framed",
1296
+ "plain",
1297
+ "floating"
1298
+ ]
1299
+ },
1300
+ states: [],
1301
+ consumes: [],
1302
+ optionSlots: { size: "toolbar" },
1303
+ mints: [
1304
+ raw("8091e5dd-04ad-4a1e-965b-9401f31187e9", {
1305
+ kind: "component",
1306
+ component: "toolbar",
1307
+ property: "gap"
1308
+ }, "var(--noctis-space-1)", "Gap between adjacent toolbar items.", "The spacing the toolbar row holds between its buttons, links, groups, and separators."),
1309
+ raw("394462e3-bfeb-4f6d-8732-ebfc0a6507f0", {
1310
+ kind: "component",
1311
+ component: "toolbar",
1312
+ property: "padding"
1313
+ }, "var(--noctis-space-1)", "Toolbar inner padding.", "The inset between the toolbar's border and its items."),
1314
+ raw("2f26f749-fda6-40e2-b03c-fde8985477f1", {
1315
+ kind: "component",
1316
+ component: "toolbar",
1317
+ property: "border-radius"
1318
+ }, "var(--noctis-radius-md)", "Toolbar corner radius.", "The rounding of the toolbar's framing border; capped surface radius, so it never pills."),
1319
+ raw("9b1d4c7e-2a83-4f06-bd51-8c0e7a2f9d34", {
1320
+ kind: "component",
1321
+ component: "toolbar",
1322
+ property: "item-radius"
1323
+ }, "var(--noctis-radius-sm)", "Corner radius of the hosted toolbar controls.", "The radius the toolbar caps its hosted buttons and toggles to, coordinated with the frame — they follow the radius knob uncapped on their own (`radius-control`), so the toolbar holds them to a subtle `radius-sm` to keep the cluster consistent."),
1324
+ raw("b3a42d3e-7902-4287-8f54-77c04bc8c7fd", {
1325
+ kind: "component",
1326
+ component: "toolbar",
1327
+ anatomy: "group",
1328
+ property: "gap"
1329
+ }, "0", "Gap between items welded inside a group.", "The spacing between buttons in a `Toolbar.Group` — zero by default so a group reads as one segmented cluster."),
1330
+ aliased("3c2080fd-cdaa-4b8b-b550-a890b71f40e4", {
1331
+ kind: "component",
1332
+ component: "toolbar",
1333
+ anatomy: "separator",
1334
+ property: "color"
1335
+ }, { role: "border" }, "Colour of the divider between toolbar item clusters.", "The hairline separator's colour — the default border role, so it reads as a quiet rule."),
1336
+ raw("7671a6be-87e5-464a-a48b-7a368ec7c152", {
1337
+ kind: "component",
1338
+ component: "toolbar",
1339
+ anatomy: "separator",
1340
+ property: "width"
1341
+ }, "1px", "Thickness of the divider between toolbar item clusters.", "The thickness of the hairline separator's rule."),
1342
+ raw("95ce57e0-2659-4bfd-995d-140a8d8379c4", {
1343
+ kind: "component",
1344
+ component: "toolbar",
1345
+ anatomy: "separator",
1346
+ property: "margin-inline"
1347
+ }, "var(--noctis-space-1)", "Inset around a toolbar separator.", "The spacing the hairline separator holds on each side from its neighbouring items."),
1348
+ aliased("a7f3c901-6b25-4e48-8d7a-2c0f9e63b815", {
1349
+ kind: "component",
1350
+ component: "toolbar",
1351
+ anatomy: "input",
1352
+ property: "height"
1353
+ }, { raw: "var(--noctis-size-control-sm)" }, "Toolbar input height.", "The control height of a `Toolbar.Input` field per size, kept level with the buttons beside it; `sm` drops to `control-xs`.", { size: { sm: { raw: "var(--noctis-size-control-xs)" } } }),
1354
+ aliased("c5e0a473-9d18-42f6-b6a1-7e4d8f02c9a3", {
1355
+ kind: "component",
1356
+ component: "toolbar",
1357
+ anatomy: "input",
1358
+ property: "padding-inline"
1359
+ }, { raw: "var(--noctis-space-2)" }, "Toolbar input inline padding.", "The horizontal inset of a `Toolbar.Input`'s text per size; tighter at `sm`.", { size: { sm: { raw: "var(--noctis-space-1\\.5)" } } }),
1360
+ raw("f2b81d60-3a47-4c95-8e0f-1d6c5b9a47e2", {
1361
+ kind: "component",
1362
+ component: "toolbar",
1363
+ anatomy: "input",
1364
+ property: "width"
1365
+ }, "5rem", "Default width of a toolbar input field.", "The resting width of a `Toolbar.Input` — sized for a short value like a zoom percentage; override per use.")
1366
+ ]
1367
+ };
1368
+ const accordion = {
1369
+ component: "accordion",
1370
+ category: "surfaces",
1371
+ slotPrefix: "noctis",
1372
+ anatomy: [
1373
+ "accordion",
1374
+ "accordion-item",
1375
+ "accordion-header",
1376
+ "accordion-trigger",
1377
+ "accordion-trigger-icon",
1378
+ "accordion-panel",
1379
+ "accordion-panel-content"
1380
+ ],
1381
+ options: { size: ["sm", "md"] },
1382
+ states: ["open", "disabled"],
1383
+ consumes: [],
1384
+ optionSlots: { size: "accordion" },
1385
+ slotGroups: { root: ["accordion"] },
1386
+ mints: [
1387
+ raw("357d6c6e-03dd-4074-bd96-137131011c84", {
1388
+ kind: "component",
1389
+ component: "accordion",
1390
+ anatomy: "trigger",
1391
+ property: "padding-inline"
1392
+ }, "0", "Inline padding of the trigger row.", "The horizontal inset of the trigger; `0` by default so the row and its dividers run edge to edge — re-point it (or pad the item) to inset a bordered or card layout."),
1393
+ aliased("c0747eaa-8d80-4930-a556-e44b2e3cd33f", {
1394
+ kind: "component",
1395
+ component: "accordion",
1396
+ anatomy: "trigger",
1397
+ property: "padding-block"
1398
+ }, { raw: "var(--noctis-space-4)" }, "Block padding of the trigger row.", "The vertical inset above and below the trigger's label per size, setting the row's generous height (`md` mirrors shadcn's `py-4`).", { size: { sm: { raw: "var(--noctis-space-3)" } } }),
1399
+ raw("eafde3e2-932d-46f0-9301-bfe91a88684e", {
1400
+ kind: "component",
1401
+ component: "accordion",
1402
+ anatomy: "trigger",
1403
+ property: "gap"
1404
+ }, "var(--noctis-space-2)", "Minimum gap between the trigger label and its chevron.", "The least spacing held between the trigger's label and the directional chevron when a long label reaches the row's end."),
1405
+ aliased("b0112ec1-c7c8-47df-89d7-8719940eddad", {
1406
+ kind: "component",
1407
+ component: "accordion",
1408
+ anatomy: "trigger",
1409
+ property: "font-size"
1410
+ }, { raw: "var(--noctis-text-small)" }, "Trigger label font size.", "The type size of the trigger's label per size.", { size: { sm: { raw: "var(--noctis-text-mini)" } } }),
1411
+ raw("317003a0-362e-4355-b543-347518221ad0", {
1412
+ kind: "component",
1413
+ component: "accordion",
1414
+ anatomy: "trigger",
1415
+ property: "font-weight"
1416
+ }, "var(--noctis-font-weight-medium)", "Trigger label font weight.", "The weight of the trigger's label, set a step above body so the section title reads as the control."),
1417
+ aliased("f904600e-393a-4352-a7e2-44135c789fd5", {
1418
+ kind: "component",
1419
+ component: "accordion",
1420
+ anatomy: "trigger-icon",
1421
+ property: "size"
1422
+ }, { raw: "var(--noctis-space-4)" }, "Size of the trigger chevron.", "The width and height of the muted directional chevron that rotates a half-turn when its panel opens, scaled per size.", { size: { sm: { raw: "var(--noctis-space-3\\.5)" } } }),
1423
+ raw("8aed68aa-f33d-4d3e-8527-eb049f5575dd", {
1424
+ kind: "component",
1425
+ component: "accordion",
1426
+ anatomy: "item",
1427
+ property: "border-color"
1428
+ }, "var(--noctis-color-border)", "Colour of the rule dividing items.", "The hairline border drawn under every item but the last, dividing the stack into one continuous list; retone it to match a bordered container."),
1429
+ raw("2895f0b4-a79a-47ae-953b-5a25e463b2c3", {
1430
+ kind: "component",
1431
+ component: "accordion",
1432
+ anatomy: "panel-content",
1433
+ property: "padding-inline"
1434
+ }, "0", "Inline padding of the panel content.", "The horizontal inset of the disclosed content; `0` by default so it aligns to the trigger edge — held on the inner wrapper so the panel can clip to a measured height while animating."),
1435
+ aliased("deefa4ff-ce32-4311-8f11-d47bb997c9f7", {
1436
+ kind: "component",
1437
+ component: "accordion",
1438
+ anatomy: "panel-content",
1439
+ property: "padding-block"
1440
+ }, { raw: "var(--noctis-space-4)" }, "Block padding below the panel content.", "The space below the disclosed content per size (the top is `0`, since the trigger's block-end padding already sets the gap); held on the inner wrapper so the panel can clip to a measured height while animating.", { size: { sm: { raw: "var(--noctis-space-3)" } } }),
1441
+ aliased("c4f8e1a6-9b2d-4e70-8a35-1f6c9d0e2b47", {
1442
+ kind: "component",
1443
+ component: "accordion",
1444
+ anatomy: "panel-content",
1445
+ property: "font-size"
1446
+ }, { raw: "var(--noctis-text-small)" }, "Panel content font size.", "The type size of the disclosed content per size, matched to the trigger's label.", { size: { sm: { raw: "var(--noctis-text-mini)" } } }),
1447
+ raw("c8ad399a-5fcd-4774-baab-c5a22a7523e2", {
1448
+ kind: "component",
1449
+ component: "accordion",
1450
+ anatomy: "panel-content",
1451
+ property: "transition-duration"
1452
+ }, "var(--noctis-duration-quick)", "Duration of the panel content's opacity fade.", "How long the disclosed content fades in and out, synced under the height animation so text doesn't pop at full opacity into a half-open clip."),
1453
+ aliased("f2ca420a-3d97-4fbc-8a2d-89fdc1665510", {
1454
+ kind: "component",
1455
+ component: "accordion",
1456
+ anatomy: "panel",
1457
+ property: "block-size"
1458
+ }, { raw: "var(--accordion-panel-height)" }, "Expanded height of the panel.", "The open height the panel animates to; defaults to Base UI's measured `--accordion-panel-height` so the content sizes itself, and collapses to `0` while closing."),
1459
+ raw("208699c5-333d-443e-ad1d-d925fd9487e4", {
1460
+ kind: "component",
1461
+ component: "accordion",
1462
+ anatomy: "panel",
1463
+ property: "transition-duration"
1464
+ }, "var(--noctis-duration-regular)", "Duration of the panel expand/collapse animation.", "How long the panel takes to animate its height open and closed.")
1465
+ ]
1466
+ };
1467
+ const numberField = {
1468
+ component: "number-field",
1469
+ category: "fields",
1470
+ slotPrefix: "noctis",
1471
+ anatomy: [
1472
+ "number-field",
1473
+ "number-field-group",
1474
+ "number-field-input",
1475
+ "number-field-prefix",
1476
+ "number-field-suffix",
1477
+ "number-field-increment",
1478
+ "number-field-decrement",
1479
+ "number-field-scrub-area",
1480
+ "number-field-scrub-area-cursor"
1481
+ ],
1482
+ options: {
1483
+ size: ["md", "lg"],
1484
+ steppers: [
1485
+ "end",
1486
+ "split",
1487
+ "stacked",
1488
+ "none"
1489
+ ]
1490
+ },
1491
+ states: [],
1492
+ consumes: [],
1493
+ optionSlots: { size: "number-field" },
1494
+ slotGroups: {
1495
+ stepper: ["number-field-increment", "number-field-decrement"],
1496
+ affix: ["number-field-prefix", "number-field-suffix"]
1497
+ },
1498
+ mints: [
1499
+ aliased("b8f8e380-c2b9-463e-b545-b4237e29a032", {
1500
+ kind: "component",
1501
+ component: "number-field",
1502
+ anatomy: "group",
1503
+ property: "height"
1504
+ }, { raw: "var(--noctis-size-control-md)" }, "Field height — the input shell and its steppers.", "The control height of the number field per size; the steppers fill it.", { size: { lg: { raw: "var(--noctis-size-control-lg)" } } }),
1505
+ raw("b45d153c-7c15-4bac-9f1f-c52ecff9ca4e", {
1506
+ kind: "component",
1507
+ component: "number-field",
1508
+ anatomy: "group",
1509
+ property: "border-radius"
1510
+ }, "var(--noctis-radius-control)", "Field corner radius.", "The rounding of the input shell; follows the radius knob uncapped, like other controls."),
1511
+ aliased("2a4fd04c-7b0f-4760-bb0a-163a67675a58", {
1512
+ kind: "component",
1513
+ component: "number-field",
1514
+ anatomy: "group",
1515
+ property: "shadow"
1516
+ }, { raw: "var(--noctis-shadow-inset)" }, "Field rest shadow.", "The subtle inset seam painted at rest — the documented field-recipe shadow shared with Input, giving the shell its seated feel."),
1517
+ aliased("cbfa8b51-387e-4535-8952-40fc70cdae04", {
1518
+ kind: "component",
1519
+ component: "number-field",
1520
+ anatomy: "input",
1521
+ property: "padding-inline"
1522
+ }, { raw: "var(--noctis-space-2\\.5)" }, "Inline padding of the numeric input.", "The horizontal inset of the typed value inside the field shell; rides the spacing scale, so it density-scales with the rest of the field."),
1523
+ aliased("2c23e332-5277-4fc2-9226-a2f44eef50d7", {
1524
+ kind: "component",
1525
+ component: "number-field",
1526
+ anatomy: "input",
1527
+ property: "font-size"
1528
+ }, { raw: "var(--noctis-text-small)" }, "Numeric input font size.", "The type size of the typed value per size step.", { size: { lg: { raw: "var(--noctis-text-regular)" } } }),
1529
+ aliased("302a9e30-0c32-4af9-88ec-457ecce01748", {
1530
+ kind: "component",
1531
+ component: "number-field",
1532
+ anatomy: "input",
1533
+ property: "min-inline-size"
1534
+ }, { raw: "var(--noctis-space-12)" }, "Minimum width of the numeric input.", "The least the input column shrinks to (3rem at rest), so short numbers keep a comfortable target; rides the spacing scale, so it density-scales."),
1535
+ aliased("861f77e3-bbcb-411f-ae0f-9e5f82657d0c", {
1536
+ kind: "component",
1537
+ component: "number-field",
1538
+ anatomy: "affix",
1539
+ property: "padding-inline"
1540
+ }, { raw: "var(--noctis-space-2\\.5)" }, "Inline padding of a prefix/suffix affix.", "The horizontal inset of a `$`/`px`-style affix inside the field shell, matching the input's own inset."),
1541
+ aliased("2b3c9d4e-5f60-4a71-8b92-c0d1e2f3a4b5", {
1542
+ kind: "component",
1543
+ component: "number-field",
1544
+ anatomy: "affix",
1545
+ property: "segment-background-color"
1546
+ }, { role: "field-hover" }, "Prefix/suffix affix fill.", "The quiet fill of a segmented affix cell ($, px, …), a step off the field surface — the same recipe as Input's segment adornment."),
1547
+ aliased("3c4d0e5f-6a71-4b82-9ca3-d1e2f3a4b5c6", {
1548
+ kind: "component",
1549
+ component: "number-field",
1550
+ anatomy: "affix",
1551
+ property: "segment-border-color"
1552
+ }, { role: "field-border" }, "Prefix/suffix affix divider.", "The logical divider between a segmented affix cell and the editable value, matching the field border."),
1553
+ aliased("70f2fbe3-ec69-4c7a-b653-5e5c7d7e7f86", {
1554
+ kind: "component",
1555
+ component: "number-field",
1556
+ anatomy: "affix",
1557
+ property: "color"
1558
+ }, { role: "muted" }, "Prefix/suffix affix colour.", "The colour of a non-interactive unit-hint affix, quieter than the typed value."),
1559
+ aliased("e2cb4ea0-8a84-440b-8db4-af77e4973d58", {
1560
+ kind: "component",
1561
+ component: "number-field",
1562
+ anatomy: "stepper",
1563
+ property: "width"
1564
+ }, { raw: "var(--noctis-size-control-sm)" }, "Width of an increment/decrement stepper — shared by both buttons.", "The inline size of a stepper button per field size, so the steppers stay a comfortable target and never pinch at `lg`; its block size fills (split) or halves (side) the shell.", { size: { lg: { raw: "var(--noctis-size-control-md)" } } }),
1565
+ raw("5ce8a07a-284f-4fbf-b191-debe6387a10a", {
1566
+ kind: "component",
1567
+ component: "number-field",
1568
+ anatomy: "scrub-area-cursor",
1569
+ property: "size"
1570
+ }, "var(--noctis-space-5)", "Size of the virtual scrub cursor.", "The edge length of the small inverse cursor block shown while scrubbing the value by drag.")
1571
+ ]
1572
+ };
1573
+ const navigationMenu = {
1574
+ component: "navigation-menu",
1575
+ category: "navigation",
1576
+ slotPrefix: "noctis",
1577
+ anatomy: [
1578
+ "navigation-menu",
1579
+ "navigation-menu-list",
1580
+ "navigation-menu-item",
1581
+ "navigation-menu-trigger",
1582
+ "navigation-menu-icon",
1583
+ "navigation-menu-content",
1584
+ "navigation-menu-link",
1585
+ "navigation-menu-link-title",
1586
+ "navigation-menu-link-description",
1587
+ "navigation-menu-section",
1588
+ "navigation-menu-section-title",
1589
+ "navigation-menu-separator",
1590
+ "navigation-menu-footer",
1591
+ "navigation-menu-positioner",
1592
+ "navigation-menu-popup",
1593
+ "navigation-menu-backdrop",
1594
+ "navigation-menu-viewport"
1595
+ ],
1596
+ options: { size: ["md", "sm"] },
1597
+ optionSlots: { size: "navigation-menu" },
1598
+ states: ["open"],
1599
+ consumes: [],
1600
+ mints: [
1601
+ raw("386e94fb-79f7-41b5-af29-ec10e329e28c", {
1602
+ kind: "component",
1603
+ component: "navigation-menu",
1604
+ anatomy: "list",
1605
+ property: "gap"
1606
+ }, "var(--noctis-space-1)", "Gap between top-level navigation items in the bar.", "The spacing between adjacent triggers and links in the navigation bar."),
1607
+ aliased("bd83efc7-9d28-4cd5-abda-5bb5e7cf4c0f", {
1608
+ kind: "component",
1609
+ component: "navigation-menu",
1610
+ anatomy: "trigger",
1611
+ property: "height"
1612
+ }, { raw: "var(--noctis-size-control-md)" }, "Height of a navigation trigger and top-level link.", "The control height of the bar's interactive items per size.", { size: { sm: { raw: "var(--noctis-size-control-sm)" } } }),
1613
+ aliased("8c52af12-8193-4418-b07b-a5f3f10be6b3", {
1614
+ kind: "component",
1615
+ component: "navigation-menu",
1616
+ anatomy: "trigger",
1617
+ property: "padding-inline"
1618
+ }, { raw: "0.75rem" }, "Inline padding of a navigation trigger and top-level link.", "The horizontal inset of a bar item's label per size.", { size: { sm: { raw: "0.5rem" } } }),
1619
+ raw("dc59e936-ecc6-46e1-8572-bc91ad8e4f94", {
1620
+ kind: "component",
1621
+ component: "navigation-menu",
1622
+ anatomy: "trigger",
1623
+ property: "gap"
1624
+ }, "0.375rem", "Gap between a trigger's label and its dropdown chevron.", "The spacing between a trigger's label and its trailing chevron icon."),
1625
+ raw("6abf26c3-eb3c-4b30-8e51-c6ebe72ad018", {
1626
+ kind: "component",
1627
+ component: "navigation-menu",
1628
+ anatomy: "trigger",
1629
+ property: "border-radius"
1630
+ }, "var(--noctis-radius-control)", "Corner radius of a bar item's hover and focus shape.", "The rounding of a trigger and top-level link; follows the radius knob."),
1631
+ raw("04e0a5b9-917f-4146-b178-b74d619985f7", {
1632
+ kind: "component",
1633
+ component: "navigation-menu",
1634
+ anatomy: "popup",
1635
+ property: "min-width"
1636
+ }, "12rem", "Minimum width of the flyout popup.", "The popup's min-width — wide enough that short content doesn't read as cramped."),
1637
+ raw("3ec0c18d-e840-4d9e-80cb-a1649fbece98", {
1638
+ kind: "component",
1639
+ component: "navigation-menu",
1640
+ anatomy: "positioner",
1641
+ property: "duration"
1642
+ }, "var(--noctis-duration-slow)", "Duration of the flyout's open, close, morph, and panel-slide motion.", "The shared motion duration — how long the popup morphs between panels and the panels cross-fade; inherited by the popup and content."),
1643
+ raw("a9ce0d3a-2262-485d-8706-400ef15a33bf", {
1644
+ kind: "component",
1645
+ component: "navigation-menu",
1646
+ anatomy: "positioner",
1647
+ property: "easing"
1648
+ }, "var(--noctis-ease-overlay)", "Easing curve of the flyout's motion.", "The shared easing — a strong ease-out so the box and panels settle smoothly; inherited by the popup and content."),
1649
+ raw("c44c563b-a1b7-4a50-82f5-11da8987205c", {
1650
+ kind: "component",
1651
+ component: "navigation-menu",
1652
+ anatomy: "content",
1653
+ property: "padding"
1654
+ }, "var(--noctis-space-2)", "Padding around the content inside the flyout popup.", "The inset between the popup edge and a panel's content."),
1655
+ raw("8f49c894-819c-4c10-a1f5-66fcc760cdc2", {
1656
+ kind: "component",
1657
+ component: "navigation-menu",
1658
+ anatomy: "content",
1659
+ property: "gap"
1660
+ }, "var(--noctis-space-1)", "Gap between rows of content inside the flyout popup.", "The vertical spacing the panel stack holds between its links."),
1661
+ raw("77e1f9b0-4a02-42ba-8ab2-795ccdcaf011", {
1662
+ kind: "component",
1663
+ component: "navigation-menu",
1664
+ anatomy: "link",
1665
+ property: "padding-inline"
1666
+ }, "var(--noctis-space-4)", "Inline padding of a flyout link row.", "The horizontal inset of a link's content inside a panel; generous so rich rows breathe."),
1667
+ raw("0a7ec4c2-c110-4115-a56b-4376a9ed5bf5", {
1668
+ kind: "component",
1669
+ component: "navigation-menu",
1670
+ anatomy: "link",
1671
+ property: "padding-block"
1672
+ }, "var(--noctis-space-3)", "Block padding of a flyout link row.", "The vertical inset of a link's content inside a panel."),
1673
+ raw("b7e1d2c3-4a05-4f86-9b71-2c8d0e4f6a90", {
1674
+ kind: "component",
1675
+ component: "navigation-menu",
1676
+ anatomy: "link",
1677
+ property: "gap"
1678
+ }, "0.125rem", "Gap between the two lines of a panel link.", "The vertical spacing between a panel link's eyebrow/title and its second line."),
1679
+ raw("a6bb3633-e236-4979-b7c3-188bc465c591", {
1680
+ kind: "component",
1681
+ component: "navigation-menu",
1682
+ anatomy: "link",
1683
+ property: "border-radius"
1684
+ }, "var(--noctis-radius-sm)", "Corner radius of a flyout link row's hover fill.", "The radius of a panel link's hover/active fill."),
1685
+ aliased("f0de9842-4fa1-43dc-b55e-bdba98355afb", {
1686
+ kind: "component",
1687
+ component: "navigation-menu",
1688
+ anatomy: "link-description",
1689
+ property: "color"
1690
+ }, { role: "muted" }, "Colour of a panel link's secondary description line.", "The quieter colour of the supporting line under a two-line panel link's title."),
1691
+ raw("3dd196c0-fef9-4428-afa7-83601b262ea7", {
1692
+ kind: "component",
1693
+ component: "navigation-menu",
1694
+ anatomy: "section",
1695
+ property: "gap"
1696
+ }, "var(--noctis-space-1\\.5)", "Gap between a panel section's title and its link column.", "The vertical spacing between a titled group's heading and the links beneath it."),
1697
+ aliased("03792dc3-193e-43a7-8b30-4d732352fe69", {
1698
+ kind: "component",
1699
+ component: "navigation-menu",
1700
+ anatomy: "section-title",
1701
+ property: "font-size"
1702
+ }, { raw: "var(--noctis-text-mini)" }, "Font size of a panel section's title.", "The type size of a titled group's small heading label."),
1703
+ aliased("e83b274b-4573-415d-b232-b9a96066e6c6", {
1704
+ kind: "component",
1705
+ component: "navigation-menu",
1706
+ anatomy: "section-title",
1707
+ property: "color"
1708
+ }, { role: "muted" }, "Colour of a panel section's title.", "The muted colour of a titled group's heading label."),
1709
+ raw("ee23ea9f-9a05-46c3-8ae1-f022e8189f4a", {
1710
+ kind: "component",
1711
+ component: "navigation-menu",
1712
+ anatomy: "separator",
1713
+ property: "margin-block"
1714
+ }, "var(--noctis-space-1)", "Block spacing around a panel separator.", "The vertical gap a divider holds from the content above and below it."),
1715
+ raw("c27497c5-5b03-4dc3-a434-b717491c9a8f", {
1716
+ kind: "component",
1717
+ component: "navigation-menu",
1718
+ anatomy: "footer",
1719
+ property: "padding-block"
1720
+ }, "var(--noctis-space-2)", "Block padding of a panel's pinned footer row.", "The vertical inset of the 'view all'/CTA row at a panel's end."),
1721
+ raw("92574d68-f4e9-4697-b676-efb7ead57b1c", {
1722
+ kind: "component",
1723
+ component: "navigation-menu",
1724
+ anatomy: "footer",
1725
+ property: "gap"
1726
+ }, "var(--noctis-space-2)", "Gap between a panel footer's content and its trailing call to action.", "The spacing between the footer's lead text and its 'view all' link.")
1727
+ ]
1728
+ };
1729
+ const menubar = {
1730
+ component: "menubar",
1731
+ category: "navigation",
1732
+ slotPrefix: "noctis",
1733
+ anatomy: ["menubar", "menubar-trigger"],
1734
+ options: { size: [
1735
+ "sm",
1736
+ "md",
1737
+ "lg"
1738
+ ] },
1739
+ states: [
1740
+ "highlighted",
1741
+ "disabled",
1742
+ "open"
1743
+ ],
1744
+ consumes: [],
1745
+ optionSlots: { size: "menubar" },
1746
+ slotGroups: { root: ["menubar"] },
1747
+ mints: [
1748
+ raw("51695f75-e1a5-4507-a874-58ae95940a11", {
1749
+ kind: "component",
1750
+ component: "menubar",
1751
+ anatomy: "root",
1752
+ property: "gap"
1753
+ }, "var(--noctis-space-1)", "Gap between top-level menu triggers in the bar.", "The spacing the bar holds between adjacent menu triggers."),
1754
+ raw("80f9d54e-20cf-415f-8d07-2cfd121a4c9f", {
1755
+ kind: "component",
1756
+ component: "menubar",
1757
+ anatomy: "root",
1758
+ property: "padding"
1759
+ }, "var(--noctis-space-1)", "Inset between the bar edge and its triggers.", "The padding around the row of triggers inside the bar."),
1760
+ aliased("e431a99e-ff34-4c81-ae1c-379b9676342c", {
1761
+ kind: "component",
1762
+ component: "menubar",
1763
+ anatomy: "trigger",
1764
+ property: "height"
1765
+ }, { raw: "var(--noctis-size-control-xs)" }, "Top-level trigger height.", "The control height of a menubar trigger per size; a notch under the control scale so the bar reads as compact chrome, lighter than its own menus.", { size: {
1766
+ md: { raw: "var(--noctis-size-control-sm)" },
1767
+ lg: { raw: "var(--noctis-size-control-md)" }
1768
+ } }),
1769
+ aliased("20129eb2-23a0-4cc7-946f-bf5df6f35b89", {
1770
+ kind: "component",
1771
+ component: "menubar",
1772
+ anatomy: "trigger",
1773
+ property: "padding-inline"
1774
+ }, { raw: "var(--noctis-space-1\\.5)" }, "Top-level trigger inline padding.", "The horizontal inset of a trigger's label per size; mirrors Button (xs/sm/md) so a bare-word trigger and a Button-rendered one match.", { size: {
1775
+ md: { raw: "var(--noctis-space-2)" },
1776
+ lg: { raw: "var(--noctis-space-3)" }
1777
+ } }),
1778
+ aliased("dea2801b-adb2-4a8b-970d-ea5699f9c7b1", {
1779
+ kind: "component",
1780
+ component: "menubar",
1781
+ anatomy: "trigger",
1782
+ property: "gap"
1783
+ }, { raw: "var(--noctis-space-1)" }, "Gap between a trigger's icon and its label.", "The spacing between a trigger's leading glyph and its label, per size; mirrors Button's gap (xs/sm/md).", { size: { lg: { raw: "var(--noctis-space-1\\.5)" } } }),
1784
+ aliased("d6fb17d2-b1d8-4add-921a-354cc6a215c4", {
1785
+ kind: "component",
1786
+ component: "menubar",
1787
+ anatomy: "trigger",
1788
+ property: "font-size"
1789
+ }, { raw: "var(--noctis-text-mini)" }, "Top-level trigger label font size.", "The trigger label type size per size step; mirrors Button (xs/sm/md → mini/mini/small) so the bar reads as compact chrome.", { size: {
1790
+ md: { raw: "var(--noctis-text-mini)" },
1791
+ lg: { raw: "var(--noctis-text-small)" }
1792
+ } }),
1793
+ raw("4b7143eb-4a1b-40dc-b8c6-cda8c620f8f6", {
1794
+ kind: "component",
1795
+ component: "menubar",
1796
+ anatomy: "trigger",
1797
+ property: "border-radius"
1798
+ }, "var(--noctis-radius-control)", "Corner radius of a top-level trigger.", "The rounding of a menubar trigger's hover/open shape; follows the radius knob uncapped."),
1799
+ aliased("948af090-b3c2-4f7a-a4f3-cc1ad4563ab8", {
1800
+ kind: "component",
1801
+ component: "menubar",
1802
+ anatomy: "trigger",
1803
+ property: "color"
1804
+ }, { role: "foreground" }, "Top-level trigger label colour at rest.", "The resting text colour of a menubar trigger; full-contrast chrome, like Tabs."),
1805
+ aliased("49c8ae52-b856-4dbe-ae0d-d07dd03a5c5b", {
1806
+ kind: "component",
1807
+ component: "menubar",
1808
+ anatomy: "trigger",
1809
+ property: "color",
1810
+ state: "highlighted"
1811
+ }, { role: "foreground" }, "Top-level trigger label colour while highlighted or open.", "The text colour of a trigger the pointer/keyboard is over, or whose menu is open."),
1812
+ aliased("76bd5d64-7b08-49f6-bd1c-7abd3896e17c", {
1813
+ kind: "component",
1814
+ component: "menubar",
1815
+ anatomy: "trigger",
1816
+ property: "background-color",
1817
+ state: "highlighted"
1818
+ }, { role: "control-ghost-hover" }, "Top-level trigger highlight fill.", "The neutral fill behind a highlighted or open trigger.")
1819
+ ]
1820
+ };
1821
+ const surface = {
1822
+ component: "surface",
1823
+ category: "surfaces",
1824
+ slotPrefix: "noctis",
1825
+ anatomy: ["surface"],
1826
+ options: {
1827
+ shade: [
1828
+ "base",
1829
+ "surface",
1830
+ "raised",
1831
+ "sunken"
1832
+ ],
1833
+ bordered: ["true", "false"],
1834
+ shadow: [
1835
+ "none",
1836
+ "card",
1837
+ "popover",
1838
+ "modal"
1839
+ ],
1840
+ elevation: [
1841
+ "elevated",
1842
+ "menu",
1843
+ "sunken"
1844
+ ]
1845
+ },
1846
+ states: [],
1847
+ consumes: [],
1848
+ mints: []
1849
+ };
1850
+ const scrollArea = {
1851
+ component: "scroll-area",
1852
+ category: "surfaces",
1853
+ slotPrefix: "noctis",
1854
+ anatomy: [
1855
+ "scroll-area",
1856
+ "scroll-area-viewport",
1857
+ "scroll-area-content",
1858
+ "scroll-area-scrollbar",
1859
+ "scroll-area-thumb",
1860
+ "scroll-area-corner"
1861
+ ],
1862
+ options: {
1863
+ type: [
1864
+ "hover",
1865
+ "scroll",
1866
+ "auto",
1867
+ "always"
1868
+ ],
1869
+ size: ["sm", "md"],
1870
+ overscroll: ["contain", "auto"]
1871
+ },
1872
+ states: ["hover", "active"],
1873
+ consumes: [],
1874
+ optionSlots: {
1875
+ type: "scroll-area",
1876
+ size: "scroll-area",
1877
+ overscroll: "scroll-area"
1878
+ },
1879
+ mints: [
1880
+ aliased("c260a347-dff0-4384-8f6b-bbd4ab24951c", {
1881
+ kind: "component",
1882
+ component: "scroll-area",
1883
+ anatomy: "scrollbar",
1884
+ property: "inline-size"
1885
+ }, { raw: "0.5rem" }, "Thickness of a scrollbar track — the vertical bar's width and the horizontal bar's height.", "How wide the thin overlay scrollbar gutter is at rest; the thumb sits inside it. Thinner at `sm`.", { size: { sm: { raw: "0.375rem" } } }),
1886
+ aliased("c3a4bf82-144b-4d48-87aa-a7f099fae2b0", {
1887
+ kind: "component",
1888
+ component: "scroll-area",
1889
+ anatomy: "scrollbar",
1890
+ property: "inline-size",
1891
+ state: "hover"
1892
+ }, { raw: "0.625rem" }, "Expanded gutter thickness while the thumb is hovered.", "How wide the gutter grows when the pointer is over the thumb — the macOS hover-expand. Wider than the idle thickness so the thumb reads as grabbable.", { size: { sm: { raw: "0.5rem" } } }),
1893
+ raw("ce74b110-2e5c-47b7-b544-00b7d9096851", {
1894
+ kind: "component",
1895
+ component: "scroll-area",
1896
+ anatomy: "scrollbar",
1897
+ property: "margin"
1898
+ }, "var(--noctis-space-0\\.5)", "Inset between a scrollbar and the viewport edge.", "The breathing room the scrollbar holds off the viewport's edges so the thumb never touches the border."),
1899
+ aliased("589dcd85-34a6-422a-ad7d-c81a79a414da", {
1900
+ kind: "component",
1901
+ component: "scroll-area",
1902
+ anatomy: "thumb",
1903
+ property: "background-color"
1904
+ }, { role: "scrollbar-thumb" }, "Thumb fill at rest.", "The neutral pill colour; the scope-aware `scrollbar-thumb` role (never the accent), so it re-derives inside a sunken/menu scope."),
1905
+ aliased("a0c86531-d2b2-4875-9acc-8488f95850a9", {
1906
+ kind: "component",
1907
+ component: "scroll-area",
1908
+ anatomy: "thumb",
1909
+ property: "background-color",
1910
+ state: "hover"
1911
+ }, { raw: "color-mix(in oklab, var(--noctis-color-scrollbar-thumb), var(--noctis-color-foreground) 18%)" }, "Thumb fill while hovered.", "The thumb firms up under the pointer — the `scrollbar-thumb` role nudged toward the foreground for more contrast; stays scope-aware because the role does."),
1912
+ aliased("7684b508-2805-4926-b1f9-6daedd26ce5b", {
1913
+ kind: "component",
1914
+ component: "scroll-area",
1915
+ anatomy: "thumb",
1916
+ property: "background-color",
1917
+ state: "active"
1918
+ }, { raw: "color-mix(in oklab, var(--noctis-color-scrollbar-thumb), var(--noctis-color-foreground) 32%)" }, "Thumb fill while dragging or scrolling.", "The darkest thumb shade, held while the thumb is dragged or the area is scrolling so the grabbed handle stays distinct."),
1919
+ raw("ea21eb07-85da-4593-9230-27e114f77f16", {
1920
+ kind: "component",
1921
+ component: "scroll-area",
1922
+ anatomy: "thumb",
1923
+ property: "min-block-size"
1924
+ }, "var(--noctis-space-5)", "Minimum length of the thumb on the vertical scrollbar.", "The floor the vertical thumb never shrinks below, so a long content list keeps a grabbable handle; bumped under a coarse pointer."),
1925
+ raw("ec0bff17-0935-4572-9120-44eeffd2551c", {
1926
+ kind: "component",
1927
+ component: "scroll-area",
1928
+ anatomy: "thumb",
1929
+ property: "min-inline-size"
1930
+ }, "var(--noctis-space-5)", "Minimum length of the thumb on the horizontal scrollbar.", "The floor the horizontal thumb never shrinks below, so a wide content row keeps a grabbable handle; bumped under a coarse pointer."),
1931
+ raw("89b6e2b8-43c9-4b99-8d82-e898574322db", {
1932
+ kind: "component",
1933
+ component: "scroll-area",
1934
+ anatomy: "thumb",
1935
+ property: "border-radius"
1936
+ }, "9999px", "Corner radius of the scrollbar thumb.", "The rounding of the thumb handle; fully pill so it reads as a slim capsule, independent of the radius knob."),
1937
+ raw("bb95080d-cce2-40af-9522-d59e33e78e34", {
1938
+ kind: "component",
1939
+ component: "scroll-area",
1940
+ anatomy: "scrollbar",
1941
+ property: "transition-duration"
1942
+ }, "var(--noctis-duration-regular)", "Duration of the scrollbar's fade in and out.", "How long the scrollbar takes to fade in on hover/scroll and fade back out when idle."),
1943
+ aliased("41e6652b-998f-4a53-bc33-dd69cb59b5f3", {
1944
+ kind: "component",
1945
+ component: "scroll-area",
1946
+ anatomy: "scrollbar",
1947
+ property: "track-background-color"
1948
+ }, { role: "well" }, "Gutter-track fill behind the thumb (the optional `track`).", "The faint channel painted behind the thumb when `track` is set (and for `type=\"always\"`); the surface-adaptive `well` overlay, so the gutter stays visible on any surface, also painting the corner."),
1949
+ raw("c9312dfe-f8ca-4e1d-9f66-966f1c72fb70", {
1950
+ kind: "component",
1951
+ component: "scroll-area",
1952
+ property: "fade-size"
1953
+ }, "var(--noctis-space-6)", "Length of the edge-fade mask.", "How far the scroll-shadow fade reaches in from an overflowing edge when `fade` is set; a colourless mask, so no accent and no rounding.")
1954
+ ]
1955
+ };
1956
+ const separator = {
1957
+ component: "separator",
1958
+ category: "surfaces",
1959
+ slotPrefix: "noctis",
1960
+ anatomy: ["separator"],
1961
+ options: { orientation: ["horizontal", "vertical"] },
1962
+ states: [],
1963
+ consumes: [],
1964
+ optionSlots: { orientation: "separator" },
1965
+ mints: [
1966
+ aliased("5145f0a5-f815-47ef-a208-20eb1346aa6f", {
1967
+ kind: "component",
1968
+ component: "separator",
1969
+ property: "background-color"
1970
+ }, { role: "border" }, "Hairline colour.", "The colour of the separator line; the neutral border role by default."),
1971
+ raw("ce087cf6-db0b-45db-8b90-cc6ee289471c", {
1972
+ kind: "component",
1973
+ component: "separator",
1974
+ property: "size"
1975
+ }, "var(--noctis-space-px)", "Hairline thickness — the line's cross-axis size.", "The thickness of the separator line (its block-size when horizontal, inline-size when vertical); the 1px space-scale step, matching the menu separator."),
1976
+ raw("671f2016-9599-4ec2-b450-36b5da497081", {
1977
+ kind: "component",
1978
+ component: "separator",
1979
+ property: "margin"
1980
+ }, "0px", "Inset pulled off each end of the line.", "The margin taken off both ends of the separator, letting it stop short of its container.")
1981
+ ]
1982
+ };
1983
+ const sheet = {
1984
+ component: "sheet",
1985
+ category: "overlays",
1986
+ slotPrefix: "noctis",
1987
+ anatomy: [
1988
+ "sheet-trigger",
1989
+ "sheet-backdrop",
1990
+ "sheet-viewport",
1991
+ "sheet-popup",
1992
+ "sheet-close",
1993
+ "sheet-header",
1994
+ "sheet-body",
1995
+ "sheet-footer",
1996
+ "sheet-title",
1997
+ "sheet-description"
1998
+ ],
1999
+ options: {
2000
+ side: [
2001
+ "start",
2002
+ "end",
2003
+ "top",
2004
+ "bottom"
2005
+ ],
2006
+ size: [
2007
+ "sm",
2008
+ "md",
2009
+ "lg",
2010
+ "xl",
2011
+ "full"
2012
+ ]
2013
+ },
2014
+ states: [],
2015
+ consumes: [],
2016
+ optionSlots: { size: "sheet-popup" },
2017
+ slotGroups: { region: [
2018
+ "sheet-header",
2019
+ "sheet-body",
2020
+ "sheet-footer"
2021
+ ] },
2022
+ mints: [
2023
+ aliased("c821fdd2-5a65-4336-9428-519d76595f2a", {
2024
+ kind: "component",
2025
+ component: "sheet",
2026
+ anatomy: "popup",
2027
+ property: "max-inline-size"
2028
+ }, { raw: "24rem" }, "Cross-axis cap of a side (start/end) sheet — its maximum width.", "The widest a side sheet grows to; the `full` size lifts the cap entirely.", { size: {
2029
+ sm: { raw: "20rem" },
2030
+ md: { raw: "24rem" },
2031
+ lg: { raw: "28rem" },
2032
+ xl: { raw: "32rem" },
2033
+ full: { raw: "none" }
2034
+ } }),
2035
+ aliased("5d35a893-7f16-4088-8c4d-16ff97e75c83", {
2036
+ kind: "component",
2037
+ component: "sheet",
2038
+ anatomy: "region",
2039
+ property: "padding"
2040
+ }, { raw: "var(--noctis-space-region)" }, "Inset of the sheet's header, body, and footer regions.", "The padding inside each panel region; aliases the shared region-padding scale."),
2041
+ raw("f91f5b53-2826-4282-985f-0f4f528a3163", {
2042
+ kind: "component",
2043
+ component: "sheet",
2044
+ anatomy: "header",
2045
+ property: "gap"
2046
+ }, "0.25rem", "Gap between the sheet title and its description.", "The vertical spacing stacking the header's title and description."),
2047
+ raw("bcb1d6ea-b41d-4df8-80cd-7e4dd659244a", {
2048
+ kind: "component",
2049
+ component: "sheet",
2050
+ anatomy: "header",
2051
+ property: "gutter-gap"
2052
+ }, "0.5rem", "Gap between the sheet header text and its corner action.", "The inline spacing reserving room for the close/action gutter beside the title column."),
2053
+ raw("744fb11b-1a10-49ba-9ca9-af6c3865c6cd", {
2054
+ kind: "component",
2055
+ component: "sheet",
2056
+ anatomy: "footer",
2057
+ property: "gap"
2058
+ }, "0.5rem", "Gap between the sheet's footer actions.", "The spacing between the footer's stacked or inline action buttons."),
2059
+ aliased("9fa0787f-aed8-49cb-97fb-bdd8e1598bbe", {
2060
+ kind: "component",
2061
+ component: "sheet",
2062
+ anatomy: "popup",
2063
+ property: "transition-duration"
2064
+ }, { raw: "var(--noctis-duration-regular)" }, "Duration of the sheet's slide-in/out.", "How long the panel takes to slide between docked and off-screen."),
2065
+ raw("1de92eca-e683-48c6-ae94-0e5e6597d210", {
2066
+ kind: "component",
2067
+ component: "sheet",
2068
+ anatomy: "popup",
2069
+ property: "peek-offset"
2070
+ }, "1.5rem", "How far each stacked panel peeks out per level of depth.", "The per-nesting-step distance a backgrounded sheet slides toward its edge so the stack fans out."),
2071
+ raw("46229e05-17b5-4952-93b3-8676639c9182", {
2072
+ kind: "component",
2073
+ component: "sheet",
2074
+ anatomy: "popup",
2075
+ property: "min-block-size"
2076
+ }, "var(--noctis-space-40)", "Height floor of a small top/bottom sheet.", "The min-height under the `sm` size's fractional height, so a shallow viewport never crushes the panel.")
2077
+ ]
2078
+ };
2079
+ const toast = {
2080
+ component: "toast",
2081
+ category: "overlays",
2082
+ slotPrefix: "noctis",
2083
+ anatomy: [
2084
+ "toast",
2085
+ "toast-viewport",
2086
+ "toast-content",
2087
+ "toast-title",
2088
+ "toast-description",
2089
+ "toast-icon",
2090
+ "toast-spinner",
2091
+ "toast-action",
2092
+ "toast-close"
2093
+ ],
2094
+ options: { type: [
2095
+ "info",
2096
+ "success",
2097
+ "warning",
2098
+ "danger",
2099
+ "loading",
2100
+ "error"
2101
+ ] },
2102
+ states: [],
2103
+ consumes: [],
2104
+ optionSlots: { type: "toast" },
2105
+ mints: [
2106
+ aliased("90451bac-835a-4bcc-b2fa-be6d12de5835", {
2107
+ kind: "component",
2108
+ component: "toast",
2109
+ property: "border-radius"
2110
+ }, { raw: "var(--noctis-radius-md)" }, "Corner radius of a toast.", "The rounding of a toast's corners; follows the radius knob on the md step, capped so it never pills."),
2111
+ raw("ca6a5aa6-1c79-46d9-8216-413b3238d693", {
2112
+ kind: "component",
2113
+ component: "toast",
2114
+ property: "padding"
2115
+ }, "1rem", "Inset of a toast's content.", "The padding between a toast's edge and its title, description, and actions."),
2116
+ raw("03a44014-b874-4f90-98b6-db2aa409ac22", {
2117
+ kind: "component",
2118
+ component: "toast",
2119
+ property: "gap"
2120
+ }, "0.75rem", "Gap between a toast's content column and its close button.", "The spacing separating the title/description/actions column from the trailing close button."),
2121
+ raw("c3f598d7-0cfa-419b-b3aa-7ea072346f8c", {
2122
+ kind: "component",
2123
+ component: "toast",
2124
+ property: "min-width"
2125
+ }, "20rem", "Minimum width of a toast.", "The toast's min-width — wide enough that a short message never reads as cramped."),
2126
+ raw("97900b60-0b7c-45b2-b30a-deceeeec6b8f", {
2127
+ kind: "component",
2128
+ component: "toast",
2129
+ property: "max-width"
2130
+ }, "24rem", "Maximum width of a toast.", "The widest a toast grows to before its description wraps."),
2131
+ aliased("18754e8a-a2d1-4065-8b31-802b12f4cb7a", {
2132
+ kind: "component",
2133
+ component: "toast",
2134
+ property: "color",
2135
+ state: "highlighted"
2136
+ }, { role: "muted" }, "Toast status accent colour — the leading status icon and the status-typed parts.", "The colour of a toast's leading status icon (and bare action); a neutral muted by default (a plain toast is not a signal), re-pointed per type to the matching status role.", { type: {
2137
+ info: { role: "info" },
2138
+ success: { role: "success" },
2139
+ warning: { role: "warning" },
2140
+ danger: { role: "danger" },
2141
+ loading: { role: "muted" },
2142
+ error: { role: "danger" }
2143
+ } }),
2144
+ raw("ea8bbe37-fe5a-44ec-9c60-82b66f52eeda", {
2145
+ kind: "component",
2146
+ component: "toast",
2147
+ property: "peek"
2148
+ }, "0.75rem", "How much of each toast behind the front one shows in the collapsed stack.", "The sliver of every card stacked behind the front one that stays visible when collapsed — the depth of the peek."),
2149
+ raw("67a24991-d2eb-4495-bb6e-ccd1757cb6f1", {
2150
+ kind: "component",
2151
+ component: "toast",
2152
+ anatomy: "content",
2153
+ property: "gap"
2154
+ }, "0.25rem", "Gap between a toast's title and its description.", "The vertical spacing stacking the title above the description and any actions."),
2155
+ raw("c0650095-4956-42a0-87ac-43f4dd5ccee5", {
2156
+ kind: "component",
2157
+ component: "toast",
2158
+ anatomy: "viewport",
2159
+ property: "padding"
2160
+ }, "var(--noctis-space-region)", "Inset of the toast viewport from the screen corner.", "The gap between the viewport's anchored corner and the edges of the screen."),
2161
+ raw("a93e48eb-b4ad-4833-a1c0-fa08679f5c92", {
2162
+ kind: "component",
2163
+ component: "toast",
2164
+ anatomy: "viewport",
2165
+ property: "gap"
2166
+ }, "0.75rem", "Gap between stacked toasts when the viewport is expanded.", "The spacing between adjacent toasts once the stack fans out on hover or focus."),
2167
+ raw("b8c1f6d3-2a47-4e90-9b15-3c7e0a4d8f62", {
2168
+ kind: "component",
2169
+ component: "toast",
2170
+ anatomy: "viewport",
2171
+ property: "inline-size"
2172
+ }, "20rem", "Width of the fixed toast stack.", "The viewport's own inline size (the toasts fill it); matches the toast min-width by default and is capped to the screen on narrow viewports."),
2173
+ raw("3f2a9c14-7b6e-4d51-9a02-1c8e5f0b7d34", {
2174
+ kind: "component",
2175
+ component: "toast",
2176
+ anatomy: "icon",
2177
+ property: "size"
2178
+ }, "1.25rem", "Size of a toast's leading status icon.", "The box size of the optional leading icon, aligned to the title line; it inherits the toast's status colour."),
2179
+ raw("a7d4e9b2-5c61-4f08-8e3a-2b9d6c1f4e57", {
2180
+ kind: "component",
2181
+ component: "toast",
2182
+ anatomy: "spinner",
2183
+ property: "size"
2184
+ }, "1.25rem", "Size of a toast's loading spinner.", "The box size of the spinner shown during a `loading` toast or a promise's pending phase; matches the icon size."),
2185
+ raw("c1b8f3a6-9d27-4e50-8a14-7f2c0b5e9d83", {
2186
+ kind: "component",
2187
+ component: "toast",
2188
+ property: "peek-scale-step"
2189
+ }, "0.05", "Per-index scale step of a collapsed stack.", "How much each toast shrinks behind the front one in the collapsed peek — the larger the step, the deeper the stack reads."),
2190
+ raw("d2f7a410-6c93-4b8e-9f21-5a0e7c4b1d96", {
2191
+ kind: "component",
2192
+ component: "toast",
2193
+ property: "height"
2194
+ }, "var(--toast-height)", "The toast's own measured height — the height it expands to when the stack fans out.", "A passthrough of Base UI's measured `--toast-height`; the natural height each card animates to when expanded."),
2195
+ raw("f4b9c0d7-8e15-42a3-bc6f-1d3a9e2c5b40", {
2196
+ kind: "component",
2197
+ component: "toast",
2198
+ property: "frontmost-height"
2199
+ }, "var(--toast-frontmost-height, var(--toast-height))", "The frontmost toast's height — every card clamps to this while collapsed.", "A passthrough of Base UI's `--toast-frontmost-height`; the collapsed height every card clamps to so none pokes out of the stack.")
2200
+ ]
2201
+ };
2202
+ const collapsible = {
2203
+ component: "collapsible",
2204
+ category: "surfaces",
2205
+ slotPrefix: "noctis",
2206
+ anatomy: [
2207
+ "collapsible",
2208
+ "collapsible-trigger",
2209
+ "collapsible-panel",
2210
+ "collapsible-heading",
2211
+ "collapsible-group"
2212
+ ],
2213
+ options: {},
2214
+ states: [],
2215
+ consumes: [],
2216
+ mints: [
2217
+ raw("285e9d2a-4b5e-4880-a006-0bcd48b4ad76", {
2218
+ kind: "component",
2219
+ component: "collapsible",
2220
+ anatomy: "trigger",
2221
+ property: "gap"
2222
+ }, "var(--noctis-space-2)", "Gap between the trigger's label and its disclosure chevron.", "The spacing inside the trigger row; widen it to push the chevron further from the label."),
2223
+ raw("9f69f8f9-c86f-4de9-b690-f1a88a63277d", {
2224
+ kind: "component",
2225
+ component: "collapsible",
2226
+ anatomy: "trigger",
2227
+ property: "padding-block"
2228
+ }, "var(--noctis-space-2)", "Vertical padding of the trigger row.", "How tall the trigger sits; the seam a consumer retunes for a denser or roomier disclosure header."),
2229
+ raw("5e684a33-6c11-47da-a4d6-9a4d14a48c73", {
2230
+ kind: "component",
2231
+ component: "collapsible",
2232
+ anatomy: "trigger",
2233
+ property: "padding-inline"
2234
+ }, "var(--noctis-space-3)", "Horizontal padding of the trigger row.", "The inset of the trigger's label and chevron from the disclosure's edges."),
2235
+ raw("f1d835d9-141f-4d21-94e0-9a54610f8019", {
2236
+ kind: "component",
2237
+ component: "collapsible",
2238
+ anatomy: "trigger",
2239
+ property: "font-size"
2240
+ }, "var(--noctis-text-small)", "The trigger label's font size.", "The disclosure trigger's type scale; the seam a consumer retunes for a larger or smaller header."),
2241
+ raw("221e85c2-0de4-408d-86b1-1c43143a33d9", {
2242
+ kind: "component",
2243
+ component: "collapsible",
2244
+ anatomy: "panel",
2245
+ property: "padding-block"
2246
+ }, "var(--noctis-space-3)", "Vertical padding of the revealed panel content.", "The breathing room above and below the disclosed content when the panel is open."),
2247
+ raw("0c7f9627-b43f-4847-b410-372b30975e67", {
2248
+ kind: "component",
2249
+ component: "collapsible",
2250
+ anatomy: "panel",
2251
+ property: "padding-inline"
2252
+ }, "var(--noctis-space-3)", "Horizontal padding of the revealed panel content.", "The content's inset from the disclosure's edges; the component owns this so an example never hand-pads the content."),
2253
+ raw("a1b1c6af-9255-459e-9933-03798106fa3b", {
2254
+ kind: "component",
2255
+ component: "collapsible",
2256
+ anatomy: "panel",
2257
+ property: "transition-duration"
2258
+ }, "var(--noctis-duration-regular)", "Duration of the panel's open/close height animation.", "How long the panel takes to expand and collapse; the seam a region retunes to speed up or slow down the reveal."),
2259
+ raw("b21e2ade-794f-4ec3-b042-a2ece50ca2c5", {
2260
+ kind: "component",
2261
+ component: "collapsible",
2262
+ anatomy: "panel",
2263
+ property: "height"
2264
+ }, "var(--collapsible-panel-height)", "The height the open/close animation transitions to.", "A passthrough of Base UI's measured panel height; the animated target the panel collapses from and to."),
2265
+ raw("df189ec4-71e7-4a0a-9236-af0f653e4bac", {
2266
+ kind: "component",
2267
+ component: "collapsible",
2268
+ anatomy: "group",
2269
+ property: "divider"
2270
+ }, "var(--noctis-color-divider)", "Divider drawn between stacked disclosures and under an open trigger inside a group.", "Set to retone or remove the rule a `Collapsible.Group` paints around and between its stacked items.")
2271
+ ]
2272
+ };
2273
+ const alertDialog = {
2274
+ component: "alert-dialog",
2275
+ category: "overlays",
2276
+ slotPrefix: "noctis",
2277
+ anatomy: [
2278
+ "alert-dialog-trigger",
2279
+ "alert-dialog-backdrop",
2280
+ "alert-dialog-viewport",
2281
+ "alert-dialog-popup",
2282
+ "alert-dialog-close",
2283
+ "alert-dialog-header",
2284
+ "alert-dialog-body",
2285
+ "alert-dialog-footer",
2286
+ "alert-dialog-icon",
2287
+ "alert-dialog-title",
2288
+ "alert-dialog-description",
2289
+ "alert-dialog-cancel",
2290
+ "alert-dialog-action"
2291
+ ],
2292
+ options: {
2293
+ tone: [
2294
+ "neutral",
2295
+ "danger",
2296
+ "warning"
2297
+ ],
2298
+ size: ["sm", "md"]
2299
+ },
2300
+ states: [],
2301
+ consumes: [],
2302
+ optionSlots: {
2303
+ tone: "alert-dialog-popup",
2304
+ size: "alert-dialog-popup"
2305
+ },
2306
+ slotGroups: { region: [
2307
+ "alert-dialog-header",
2308
+ "alert-dialog-body",
2309
+ "alert-dialog-footer"
2310
+ ] },
2311
+ mints: [
2312
+ aliased("f10dd31d-8c4a-45c3-bd44-d16b482a14dc", {
2313
+ kind: "component",
2314
+ component: "alert-dialog",
2315
+ anatomy: "popup",
2316
+ property: "max-inline-size"
2317
+ }, { raw: "28rem" }, "Maximum width of the centred confirmation panel.", "The widest the dialog grows; size-keyed, and on narrow viewports it shrinks to fit the viewport padding.", { size: {
2318
+ sm: { raw: "22rem" },
2319
+ md: { raw: "28rem" }
2320
+ } }),
2321
+ aliased("f19080db-4983-4c94-8436-a0d2a63ce8f1", {
2322
+ kind: "component",
2323
+ component: "alert-dialog",
2324
+ anatomy: "popup",
2325
+ property: "border-radius"
2326
+ }, { raw: "var(--noctis-radius-lg)" }, "Corner radius of the confirmation panel.", "The rounding of the panel's outer corners; the large foundation step, capped so it stays a surface — matching Dialog."),
2327
+ aliased("8f7577f3-f085-4dfe-96bd-09abf8f340dd", {
2328
+ kind: "component",
2329
+ component: "alert-dialog",
2330
+ anatomy: "region",
2331
+ property: "padding"
2332
+ }, { raw: "var(--noctis-space-region)" }, "Inset of the dialog's header, body, and footer regions.", "The padding inside each panel region; aliases the shared region-padding scale."),
2333
+ raw("591146b5-a126-4b91-beac-b73ec0c51006", {
2334
+ kind: "component",
2335
+ component: "alert-dialog",
2336
+ anatomy: "header",
2337
+ property: "gap"
2338
+ }, "0.25rem", "Gap between the dialog title and its description.", "The vertical spacing stacking the header's title and description."),
2339
+ raw("c59e5325-9dc8-4d8e-83cb-afb5fbe64f39", {
2340
+ kind: "component",
2341
+ component: "alert-dialog",
2342
+ anatomy: "footer",
2343
+ property: "gap"
2344
+ }, "0.5rem", "Gap between the dialog's footer actions.", "The spacing between the Cancel and Action buttons in the footer."),
2345
+ aliased("5641ed41-e4e6-4721-8f6a-56735dca9825", {
2346
+ kind: "component",
2347
+ component: "alert-dialog",
2348
+ anatomy: "popup",
2349
+ property: "transition-duration"
2350
+ }, { raw: "var(--noctis-duration-overlay)" }, "Duration of the dialog's scale-fade in/out.", "How long the panel takes to fade and scale between hidden and centred."),
2351
+ raw("be77f0cf-f759-4eb9-a98e-4c851fe6e668", {
2352
+ kind: "component",
2353
+ component: "alert-dialog",
2354
+ anatomy: "viewport",
2355
+ property: "padding"
2356
+ }, "var(--noctis-space-16)", "Breathing room between the panel and the viewport edges.", "The minimum gap kept around the centred panel so it never touches the screen edges."),
2357
+ raw("df4e3fc5-d304-40e2-99c9-cd04a6bd446b", {
2358
+ kind: "component",
2359
+ component: "alert-dialog",
2360
+ anatomy: "icon",
2361
+ property: "size"
2362
+ }, "var(--noctis-space-10)", "Size of the leading tone-icon badge.", "The square tinted badge holding the header's severity glyph."),
2363
+ raw("50c1c753-bc03-4326-a0b0-6d8c824bdd03", {
2364
+ kind: "component",
2365
+ component: "alert-dialog",
2366
+ anatomy: "icon",
2367
+ property: "glyph-size"
2368
+ }, "var(--noctis-space-5)", "Size of the severity glyph inside its badge.", "The icon itself, set smaller than the badge so it sits in a comfortable tonal field."),
2369
+ raw("9d990400-6fdc-445f-bbcf-69a2530927ac", {
2370
+ kind: "component",
2371
+ component: "alert-dialog",
2372
+ anatomy: "popup",
2373
+ property: "peek-scale"
2374
+ }, "0.97", "Scale of a backgrounded alert dialog when a nested dialog opens over it.", "How far the back layer recedes so a stack of confirmations reads as depth.")
2375
+ ]
2376
+ };
2377
+ const rail = {
2378
+ component: "rail",
2379
+ category: "surfaces",
2380
+ slotPrefix: "noctis",
2381
+ anatomy: [
2382
+ "rail",
2383
+ "rail-trigger",
2384
+ "rail-layout",
2385
+ "rail-content",
2386
+ "rail-panel",
2387
+ "rail-surface",
2388
+ "rail-close",
2389
+ "rail-header",
2390
+ "rail-body",
2391
+ "rail-title"
2392
+ ],
2393
+ options: {
2394
+ side: ["start", "end"],
2395
+ size: [
2396
+ "xs",
2397
+ "sm",
2398
+ "md",
2399
+ "lg"
2400
+ ],
2401
+ variant: ["squeeze", "push"]
2402
+ },
2403
+ states: [],
2404
+ consumes: [],
2405
+ optionSlots: { size: "rail-panel" },
2406
+ slotGroups: { collapse: ["rail-panel"] },
2407
+ mints: [
2408
+ raw("17f5a4c6-bade-49cf-bd7d-711253c10586", {
2409
+ kind: "component",
2410
+ component: "rail",
2411
+ anatomy: "panel",
2412
+ property: "max-inline-size"
2413
+ }, "90vw", "Viewport-relative cap on the rail panel's width.", "The widest the panel grows on narrow viewports, so a wide size never spans the whole screen."),
2414
+ raw("03a8ddb0-bc05-4b29-b430-2197bf0dd9a5", {
2415
+ kind: "component",
2416
+ component: "rail",
2417
+ anatomy: "collapse",
2418
+ property: "width"
2419
+ }, "var(--collapsible-panel-width)", "The width the collapse animation transitions to.", "A passthrough of Base UI's measured panel width; the animated open target of the docked rail."),
2420
+ aliased("b3501955-fd21-4841-b8e3-ed28ebefd340", {
2421
+ kind: "component",
2422
+ component: "rail",
2423
+ anatomy: "panel",
2424
+ property: "width"
2425
+ }, { raw: "22rem" }, "The rail panel's width.", "How wide the docked rail is; size-keyed, and the seam a consumer retunes per region.", { size: {
2426
+ xs: { raw: "14rem" },
2427
+ sm: { raw: "18rem" },
2428
+ md: { raw: "22rem" },
2429
+ lg: { raw: "28rem" }
2430
+ } }),
2431
+ aliased("da670f86-fae3-4ca0-925f-8bfd0b4c2ba6", {
2432
+ kind: "component",
2433
+ component: "rail",
2434
+ property: "padding"
2435
+ }, { raw: "var(--noctis-space-region)" }, "Inset of the rail's header and body regions.", "The padding inside each rail region; aliases the shared region-padding scale."),
2436
+ raw("3d2cb271-6596-4207-983e-5a8951f0a65b", {
2437
+ kind: "component",
2438
+ component: "rail",
2439
+ anatomy: "header",
2440
+ property: "gap"
2441
+ }, "0.5rem", "Gap between the rail's header title and its corner actions.", "The spacing between the title and the close/action controls in the rail header.")
2442
+ ]
2443
+ };
2444
+ const combobox = {
2445
+ component: "combobox",
2446
+ category: "fields",
2447
+ slotPrefix: "noctis",
2448
+ anatomy: [
2449
+ "combobox-input",
2450
+ "combobox-list",
2451
+ "combobox-item",
2452
+ "combobox-item-indicator",
2453
+ "combobox-empty",
2454
+ "combobox-group-label",
2455
+ "combobox-chip"
2456
+ ],
2457
+ options: { size: ["md", "lg"] },
2458
+ states: [
2459
+ "highlighted",
2460
+ "disabled",
2461
+ "selected",
2462
+ "active"
2463
+ ],
2464
+ consumes: [],
2465
+ optionSlots: { size: "combobox-input" },
2466
+ slotGroups: { "item-indicator": ["combobox-item", "combobox-item-indicator"] },
2467
+ mints: [
2468
+ aliased("471417bd-d0ea-4433-b85f-b2d73e45b71a", {
2469
+ kind: "component",
2470
+ component: "combobox",
2471
+ anatomy: "input",
2472
+ property: "height"
2473
+ }, { raw: "var(--noctis-size-control-md)" }, "Height of the text field.", "The control height of the input per size step.", { size: { lg: { raw: "var(--noctis-size-control-lg)" } } }),
2474
+ aliased("75e19bc6-2d0a-4512-9631-a206802daf5a", {
2475
+ kind: "component",
2476
+ component: "combobox",
2477
+ anatomy: "input",
2478
+ property: "padding-inline"
2479
+ }, { raw: "0.75rem" }, "Inline padding of the text field.", "The horizontal inset of the input's text per size step.", { size: { lg: { raw: "0.875rem" } } }),
2480
+ raw("d0891545-f9f4-4c80-b606-6636809f1ca2", {
2481
+ kind: "component",
2482
+ component: "combobox",
2483
+ anatomy: "input",
2484
+ property: "border-radius"
2485
+ }, "var(--noctis-radius-control)", "Corner radius of the text field.", "The rounding of the input; follows the radius knob uncapped, like other controls."),
2486
+ raw("f1a7c2e9-6b04-4d8e-9c31-2a5f8e0b7d63", {
2487
+ kind: "component",
2488
+ component: "combobox",
2489
+ anatomy: "input",
2490
+ property: "shadow"
2491
+ }, "var(--noctis-shadow-inset)", "Resting inset shadow of the text field.", "The subtle inner shadow the field carries at rest, matching the rest of the field family (Input/Textarea)."),
2492
+ raw("d01a0a33-e195-46f6-9e25-835eadee8bf0", {
2493
+ kind: "component",
2494
+ component: "combobox",
2495
+ anatomy: "list",
2496
+ property: "padding"
2497
+ }, "0.25rem", "Padding around the scrollable list inside the popup.", "The inset between the popup edge and its rows."),
2498
+ raw("439d3a8a-c721-4d28-9935-f13dd2dda7aa", {
2499
+ kind: "component",
2500
+ component: "combobox",
2501
+ anatomy: "item",
2502
+ property: "height"
2503
+ }, "2rem", "Minimum height of an option row.", "The row's min-height; the inline padding rhythm fills any extra space."),
2504
+ raw("468b9dae-cd0e-49ce-9663-14ad635e346f", {
2505
+ kind: "component",
2506
+ component: "combobox",
2507
+ anatomy: "item",
2508
+ property: "padding-inline"
2509
+ }, "0.625rem", "Inline padding of an option row.", "The horizontal inset of a row's content."),
2510
+ raw("c05d0e17-3b16-4011-ae00-f727dd04ac44", {
2511
+ kind: "component",
2512
+ component: "combobox",
2513
+ anatomy: "item",
2514
+ property: "gap"
2515
+ }, "0.5rem", "Gap between an option's check column and its label.", "The spacing between the leading indicator column and the label."),
2516
+ raw("d4e7a0c3-8f25-4b19-9a46-3c7e1f6d8a52", {
2517
+ kind: "component",
2518
+ component: "combobox",
2519
+ anatomy: "item",
2520
+ property: "padding-block"
2521
+ }, "0.25rem", "Block padding of an option row.", "The vertical inset of a row's content, so multi-line (structured) rows breathe; single-line rows keep their min-height."),
2522
+ raw("59a10778-a124-4c54-85c8-8e82513b29a6", {
2523
+ kind: "component",
2524
+ component: "combobox",
2525
+ anatomy: "item",
2526
+ property: "border-radius"
2527
+ }, "var(--noctis-radius-sm)", "Corner radius of an option row's highlight.", "The radius of the row's hover/highlight fill."),
2528
+ aliased("66478868-5358-4388-9230-e1a1e5ea5a0e", {
2529
+ kind: "component",
2530
+ component: "combobox",
2531
+ anatomy: "item",
2532
+ property: "color"
2533
+ }, { role: "secondary" }, "Option row label colour at rest.", "The resting text colour of a row."),
2534
+ aliased("2a44da3c-c09a-4730-8084-841488afdf0a", {
2535
+ kind: "component",
2536
+ component: "combobox",
2537
+ anatomy: "item",
2538
+ property: "color",
2539
+ state: "highlighted"
2540
+ }, { role: "foreground" }, "Option row label colour while highlighted.", "The text colour of the keyboard- or pointer-highlighted row."),
2541
+ aliased("7a8806a4-e069-4127-8c2d-31dde43f8947", {
2542
+ kind: "component",
2543
+ component: "combobox",
2544
+ anatomy: "item",
2545
+ property: "background-color",
2546
+ state: "highlighted"
2547
+ }, { role: "control-ghost-hover" }, "Option row highlight fill.", "The neutral fill behind the highlighted row (signal-free, not the accent)."),
2548
+ aliased("b3f4d9e2-7c61-4a08-9e35-1d8f2a6b4c70", {
2549
+ kind: "component",
2550
+ component: "combobox",
2551
+ anatomy: "item",
2552
+ property: "background-color",
2553
+ state: "active"
2554
+ }, { role: "control-ghost-selected" }, "Option row pressed fill.", "The firmer neutral fill while a row is pressed, as tactile feedback before selection commits."),
2555
+ raw("3f2a01a0-5c0c-44e1-b693-1e869d75e181", {
2556
+ kind: "component",
2557
+ component: "combobox",
2558
+ anatomy: "item-indicator",
2559
+ property: "size"
2560
+ }, "0.75rem", "Size of the leading selected-check indicator column.", "The width and height of the check column, kept equal so labels align."),
2561
+ raw("8ae7e3f3-f295-4f7a-a0b7-f33b67859671", {
2562
+ kind: "component",
2563
+ component: "combobox",
2564
+ anatomy: "empty",
2565
+ property: "padding-block"
2566
+ }, "var(--noctis-space-6)", "Block padding of the empty / no-results message.", "The vertical breathing room around the centred no-results copy."),
2567
+ raw("a28d904b-e13c-4ce1-bc46-b426adf102c3", {
2568
+ kind: "component",
2569
+ component: "combobox",
2570
+ anatomy: "group-label",
2571
+ property: "padding-inline"
2572
+ }, "var(--noctis-space-2\\.5)", "Trailing inline padding of a group label.", "The end inset of a group heading."),
2573
+ raw("e5b8c1a4-9d36-4f72-8a05-2c6e4b7f9d18", {
2574
+ kind: "component",
2575
+ component: "combobox",
2576
+ anatomy: "group-label",
2577
+ property: "padding-inline-start"
2578
+ }, "0.625rem", "Leading inset of a group label.", "The start inset that lines a group heading up with the option ROW's content edge (the same inline padding the rows use) — one check column to the left of the option labels, so the heading reads as a header outdented from the options rather than a row aligned with them. Keep it in step with the item inline padding."),
2579
+ raw("20ee59a3-5dbe-4132-8494-d4eb1fbebf8b", {
2580
+ kind: "component",
2581
+ component: "combobox",
2582
+ anatomy: "chip",
2583
+ property: "gap"
2584
+ }, "var(--noctis-space-1\\.5)", "Gap between a multi-select chip's label and its remove control.", "The spacing inside a selected-value chip."),
2585
+ raw("a2bca4c6-3dc5-4bd5-a897-25a992b0a902", {
2586
+ kind: "component",
2587
+ component: "combobox",
2588
+ anatomy: "chip",
2589
+ property: "border-radius"
2590
+ }, "var(--noctis-radius-sm)", "Corner radius of a multi-select chip.", "The rounding of a selected-value chip in the input.")
2591
+ ]
2592
+ };
2593
+ const searchDialog = {
2594
+ component: "search-dialog",
2595
+ category: "overlays",
2596
+ slotPrefix: "noctis",
2597
+ anatomy: [
2598
+ "search-dialog",
2599
+ "search-dialog-header",
2600
+ "search-dialog-input",
2601
+ "search-dialog-results",
2602
+ "search-dialog-result",
2603
+ "search-dialog-footer"
2604
+ ],
2605
+ options: {},
2606
+ states: [],
2607
+ consumes: [],
2608
+ slotGroups: {
2609
+ "esc-key": ["search-dialog-header"],
2610
+ "result-body": ["search-dialog-result"],
2611
+ "result-title-row": ["search-dialog-result"],
2612
+ "result-meta": ["search-dialog-result"],
2613
+ "result-mark": ["search-dialog-result"],
2614
+ centered: ["search-dialog"],
2615
+ hint: ["search-dialog-footer"],
2616
+ "hint-keys": ["search-dialog-footer"]
2617
+ },
2618
+ mints: [
2619
+ raw("aaf2efab-787e-40f2-b3ff-b2f7e2ab9a4b", {
2620
+ kind: "component",
2621
+ component: "search-dialog",
2622
+ property: "inset-block-start"
2623
+ }, "12vh", "Distance from the top of the viewport to the dialog.", "How far down the dialog floats; smaller values raise it toward the top."),
2624
+ raw("9fc2ff3d-f120-42fc-b19f-90f9c1a3f721", {
2625
+ kind: "component",
2626
+ component: "search-dialog",
2627
+ property: "height"
2628
+ }, "min(56vh, 420px)", "Fixed height of the dialog so it never jumps as results stream in.", "The dialog's locked height; capped at 420px on tall viewports."),
2629
+ raw("5972b742-5d02-49e9-af3f-ccfc378c5d18", {
2630
+ kind: "component",
2631
+ component: "search-dialog",
2632
+ property: "width"
2633
+ }, "min(40rem, 92vw)", "Width of the dialog.", "The dialog's width; shrinks to 92vw on narrow viewports."),
2634
+ raw("5cc879f2-d37e-4ef3-b6dc-1bac65095b77", {
2635
+ kind: "component",
2636
+ component: "search-dialog",
2637
+ property: "border-radius"
2638
+ }, "var(--noctis-radius-xl)", "Corner radius of the dialog.", "The rounding of the dialog's outer corners."),
2639
+ raw("9cd198d3-302d-4840-b0b1-d202ec6b85b8", {
2640
+ kind: "component",
2641
+ component: "search-dialog",
2642
+ anatomy: "input",
2643
+ property: "height"
2644
+ }, "3rem", "Height of the search input row.", "The tap target of the query input; taller than a standard control for a command-bar feel."),
2645
+ raw("f41eb94d-b389-442e-8c45-6172c4c5d6f7", {
2646
+ kind: "component",
2647
+ component: "search-dialog",
2648
+ anatomy: "result",
2649
+ property: "padding-inline"
2650
+ }, "0.625rem", "Inline padding of a result row.", "The horizontal inset of a result row's content."),
2651
+ raw("a96b45bb-989d-48aa-9c6f-2c090e016d5a", {
2652
+ kind: "component",
2653
+ component: "search-dialog",
2654
+ anatomy: "result",
2655
+ property: "padding-block"
2656
+ }, "0.5rem", "Block padding of a result row.", "The vertical inset of a result row's content."),
2657
+ raw("e2fc2d8c-8b30-4c96-ae5f-40a58343f384", {
2658
+ kind: "component",
2659
+ component: "search-dialog",
2660
+ anatomy: "result",
2661
+ property: "border-radius"
2662
+ }, "var(--noctis-radius-md)", "Corner radius of a result row's highlight.", "The rounding of the active/hovered row fill."),
2663
+ raw("ff83219b-83f8-4b52-bcf2-d3477973e83d", {
2664
+ kind: "component",
2665
+ component: "search-dialog",
2666
+ anatomy: "result",
2667
+ property: "gap"
2668
+ }, "0.75rem", "Gap between a result row's icon and its text column.", "The spacing between the leading file icon and the title/excerpt column."),
2669
+ aliased("50663a1d-5f25-4a18-a49b-e2f546701e44", {
2670
+ kind: "component",
2671
+ component: "search-dialog",
2672
+ anatomy: "result",
2673
+ property: "background-color",
2674
+ state: "highlighted"
2675
+ }, { role: "selected" }, "Fill behind the active result row.", "The selection fill on the active row — the one the keyboard cursor or pointer is on; reads at a glance in both modes."),
2676
+ aliased("5864a13d-f09a-4b10-ac37-3ec449a84430", {
2677
+ kind: "component",
2678
+ component: "search-dialog",
2679
+ property: "transition-duration"
2680
+ }, { raw: "var(--noctis-duration-overlay)" }, "Duration of the dialog's scale-fade enter/exit.", "How long the dialog takes to scale and fade in and out."),
2681
+ raw("c97d3129-3930-4166-87ba-fcd7eb62daab", {
2682
+ kind: "component",
2683
+ component: "search-dialog",
2684
+ anatomy: "header",
2685
+ property: "gap"
2686
+ }, "var(--noctis-space-3)", "Gap between the header's icon, input, spinner, and Esc chip.", "The spacing between adjacent items in the search header row."),
2687
+ raw("cef01f40-8c98-44d7-a30e-7d0d2d36af20", {
2688
+ kind: "component",
2689
+ component: "search-dialog",
2690
+ anatomy: "header",
2691
+ property: "padding-inline"
2692
+ }, "var(--noctis-space-4)", "Inline padding of the header row.", "The horizontal inset of the search header's content."),
2693
+ raw("85e1c2b6-2181-4219-81b0-78e08068712a", {
2694
+ kind: "component",
2695
+ component: "search-dialog",
2696
+ anatomy: "esc-key",
2697
+ property: "height"
2698
+ }, "var(--noctis-size-control-xs)", "Height of the trailing Esc chip.", "The chip's height, on the smallest control step so it stays a hint, not a button."),
2699
+ raw("82f1151d-ea3a-4660-958e-1f26342c971d", {
2700
+ kind: "component",
2701
+ component: "search-dialog",
2702
+ anatomy: "esc-key",
2703
+ property: "border-radius"
2704
+ }, "0.3em", "Corner radius of the Esc chip.", "The rounding of the Esc chip's corners — the tight keycap radius, matching the footer Kbd caps."),
2705
+ raw("f0d667ae-a836-4940-9bc3-28fc95a4092f", {
2706
+ kind: "component",
2707
+ component: "search-dialog",
2708
+ anatomy: "esc-key",
2709
+ property: "shadow"
2710
+ }, "inset 0 0.07em 0 0 oklch(from var(--noctis-color-kbd) calc(l + 0.05) c h), inset 0 -0.09em 0 0 oklch(from var(--noctis-color-kbd) calc(l - 0.08) c h), 0 0.1em 0.12em -0.04em oklch(from var(--noctis-engine-shadow-color) l c h / 0.2)", "Depth shadow of the Esc chip.", "The layered keycap shadow that gives the Esc chip its raised, physical-key depth, matching the footer Kbd caps."),
2711
+ raw("b4b54b50-7207-4ff8-b8fe-b1a87a6253dc", {
2712
+ kind: "component",
2713
+ component: "search-dialog",
2714
+ anatomy: "esc-key",
2715
+ property: "padding-inline"
2716
+ }, "var(--noctis-space-1\\.5)", "Inline padding of the Esc chip.", "The horizontal inset of the chip's label."),
2717
+ raw("7739e514-46d1-4a69-af3e-70bb38ff51fd", {
2718
+ kind: "component",
2719
+ component: "search-dialog",
2720
+ anatomy: "results",
2721
+ property: "gap"
2722
+ }, "var(--noctis-space-px)", "Gap between result rows.", "The hairline spacing between adjacent rows in the results list."),
2723
+ raw("2c27f37e-0f60-4fc9-883c-b28f934b7dc3", {
2724
+ kind: "component",
2725
+ component: "search-dialog",
2726
+ anatomy: "results",
2727
+ property: "padding"
2728
+ }, "var(--noctis-space-2)", "Padding around the results list.", "The inset between the scroll area's edge and its rows."),
2729
+ raw("b590919b-b6e1-4758-9895-2e9604174db7", {
2730
+ kind: "component",
2731
+ component: "search-dialog",
2732
+ anatomy: "result-body",
2733
+ property: "gap"
2734
+ }, "var(--noctis-space-0\\.5)", "Gap between a result's title row and its excerpt.", "The vertical rhythm inside a result's text column."),
2735
+ raw("4c5cfc47-2853-43de-8ab8-d22ee07ad6a0", {
2736
+ kind: "component",
2737
+ component: "search-dialog",
2738
+ anatomy: "result-title-row",
2739
+ property: "gap"
2740
+ }, "var(--noctis-space-3)", "Gap between a result's title and its trailing breadcrumb.", "The spacing keeping a row's title clear of the page path beside it."),
2741
+ raw("68b4031c-4ffc-44e8-9522-626f3305410a", {
2742
+ kind: "component",
2743
+ component: "search-dialog",
2744
+ anatomy: "result-meta",
2745
+ property: "gap"
2746
+ }, "var(--noctis-space-1\\.5)", "Gap between a result's breadcrumb segments.", "The spacing between the trailing page-path pieces of a row."),
2747
+ raw("0aa8a08e-cae4-46bf-adf3-92eb0e24abe0", {
2748
+ kind: "component",
2749
+ component: "search-dialog",
2750
+ anatomy: "result-mark",
2751
+ property: "border-radius"
2752
+ }, "var(--noctis-radius-xs)", "Corner radius of an excerpt's match highlight.", "The rounding of the `<mark>` pill behind a matched term."),
2753
+ raw("8844e8f5-a63a-4006-bd58-c0758c90a34c", {
2754
+ kind: "component",
2755
+ component: "search-dialog",
2756
+ anatomy: "result-mark",
2757
+ property: "padding-inline"
2758
+ }, "var(--noctis-space-0\\.5)", "Inline padding of an excerpt's match highlight.", "The horizontal inset of the `<mark>` pill around a matched term."),
2759
+ raw("f1ee64cd-7932-4233-bd8c-e0ecd2cdaa85", {
2760
+ kind: "component",
2761
+ component: "search-dialog",
2762
+ anatomy: "centered",
2763
+ property: "padding-inline"
2764
+ }, "var(--noctis-space-4)", "Inline padding of the centered empty/loading message.", "The horizontal inset of the message shell shown before results arrive."),
2765
+ raw("2b656a19-197a-46fa-a491-90f1f6f5e28c", {
2766
+ kind: "component",
2767
+ component: "search-dialog",
2768
+ anatomy: "footer",
2769
+ property: "gap"
2770
+ }, "var(--noctis-space-4)", "Gap between the footer's keyboard hints.", "The spacing between adjacent hints in the footer row."),
2771
+ raw("aeba8f89-ab73-41ac-879b-5dfbbda0d355", {
2772
+ kind: "component",
2773
+ component: "search-dialog",
2774
+ anatomy: "footer",
2775
+ property: "padding-inline"
2776
+ }, "var(--noctis-space-3)", "Inline padding of the footer row.", "The horizontal inset of the footer's hints."),
2777
+ raw("2cee6405-5e0b-413e-8c40-21a4a98cb176", {
2778
+ kind: "component",
2779
+ component: "search-dialog",
2780
+ anatomy: "footer",
2781
+ property: "padding-block"
2782
+ }, "var(--noctis-space-2)", "Block padding of the footer row.", "The vertical inset of the footer's hints."),
2783
+ raw("da302a5a-f7af-41a0-9853-b9bc947156e3", {
2784
+ kind: "component",
2785
+ component: "search-dialog",
2786
+ anatomy: "hint",
2787
+ property: "gap"
2788
+ }, "var(--noctis-space-1\\.5)", "Gap between a hint's keys and its label.", "The spacing between a footer hint's key cluster and its caption."),
2789
+ raw("9d9fda2f-f3e3-47bf-bf43-77254d031876", {
2790
+ kind: "component",
2791
+ component: "search-dialog",
2792
+ anatomy: "hint-keys",
2793
+ property: "gap"
2794
+ }, "var(--noctis-space-1)", "Gap between the keys inside a hint's key cluster.", "The spacing between adjacent key glyphs in a footer hint.")
2795
+ ]
2796
+ };
2797
+ const dialog = {
2798
+ component: "dialog",
2799
+ category: "overlays",
2800
+ slotPrefix: "noctis",
2801
+ anatomy: [
2802
+ "dialog-trigger",
2803
+ "dialog-backdrop",
2804
+ "dialog-viewport",
2805
+ "dialog-popup",
2806
+ "dialog-close",
2807
+ "dialog-header",
2808
+ "dialog-body",
2809
+ "dialog-footer",
2810
+ "dialog-title",
2811
+ "dialog-description"
2812
+ ],
2813
+ options: { size: [
2814
+ "sm",
2815
+ "md",
2816
+ "lg",
2817
+ "full"
2818
+ ] },
2819
+ states: [],
2820
+ consumes: [],
2821
+ optionSlots: { size: "dialog-popup" },
2822
+ slotGroups: { region: [
2823
+ "dialog-header",
2824
+ "dialog-body",
2825
+ "dialog-footer"
2826
+ ] },
2827
+ mints: [
2828
+ aliased("32aa7028-8016-4970-86dc-6d6b35f98d09", {
2829
+ kind: "component",
2830
+ component: "dialog",
2831
+ anatomy: "popup",
2832
+ property: "max-inline-size"
2833
+ }, { raw: "32rem" }, "Cross-axis cap of the centered dialog — its maximum width.", "The widest the dialog grows to; size-keyed, and the seam a consumer retunes per region.", { size: {
2834
+ sm: { raw: "24rem" },
2835
+ md: { raw: "32rem" },
2836
+ lg: { raw: "42rem" },
2837
+ full: { raw: "none" }
2838
+ } }),
2839
+ aliased("e52fa585-5eb4-49bb-92bd-37f4ecff4f83", {
2840
+ kind: "component",
2841
+ component: "dialog",
2842
+ anatomy: "popup",
2843
+ property: "border-radius"
2844
+ }, { raw: "var(--noctis-radius-lg)" }, "Corner radius of the dialog frame.", "The rounding of the dialog's outer corners; the large foundation step, capped so it stays a surface."),
2845
+ aliased("b524e510-86f7-4d6b-b0a2-0ba6028e36bf", {
2846
+ kind: "component",
2847
+ component: "dialog",
2848
+ anatomy: "region",
2849
+ property: "padding"
2850
+ }, { raw: "var(--noctis-space-region)" }, "Inset of the dialog's header, body, and footer regions.", "The padding inside each dialog region; aliases the shared region-padding scale."),
2851
+ raw("e6bf0ccc-3938-4a75-a9ee-6d7ebda9edad", {
2852
+ kind: "component",
2853
+ component: "dialog",
2854
+ anatomy: "header",
2855
+ property: "gap"
2856
+ }, "0.25rem", "Gap between the dialog title and its description.", "The vertical spacing stacking the header's title and description."),
2857
+ raw("b31de04d-8654-4537-af4f-9811d55ae3cb", {
2858
+ kind: "component",
2859
+ component: "dialog",
2860
+ anatomy: "header",
2861
+ property: "gutter-gap"
2862
+ }, "0.5rem", "Gap between the dialog header text and its corner action.", "The inline spacing reserving room for the close/action gutter beside the title column."),
2863
+ raw("819dd47c-94ff-4e09-ab4e-2863ba77840d", {
2864
+ kind: "component",
2865
+ component: "dialog",
2866
+ anatomy: "footer",
2867
+ property: "gap"
2868
+ }, "0.5rem", "Gap between the dialog's footer actions.", "The spacing between the footer's stacked or inline action buttons."),
2869
+ raw("c10cabfe-d72a-4c70-8220-37f222078c08", {
2870
+ kind: "component",
2871
+ component: "dialog",
2872
+ anatomy: "popup",
2873
+ property: "min-inline-size"
2874
+ }, "20rem", "Width floor of a small dialog.", "The narrowest a dialog gets so a `sm` panel stays readable."),
2875
+ raw("9e01ef8d-2d14-4590-9051-6635399f341e", {
2876
+ kind: "component",
2877
+ component: "dialog",
2878
+ anatomy: "popup",
2879
+ property: "peek-scale"
2880
+ }, "0.97", "Scale of a backgrounded dialog when a nested dialog opens over it.", "How far the back layer recedes so the stack reads as depth."),
2881
+ raw("ffdf0356-3338-4deb-b48b-8681728a9ea5", {
2882
+ kind: "component",
2883
+ component: "dialog",
2884
+ anatomy: "body",
2885
+ property: "scroll-cue-start"
2886
+ }, "linear-gradient(to bottom, var(--noctis-color-overlay), transparent)", "Shadow revealed at the dialog body's top edge when content is clipped above.", "The scroll-boundary cue fading in at the start edge of the scrollable body."),
2887
+ raw("66160a1b-26ed-4a54-8732-9fc857dc662b", {
2888
+ kind: "component",
2889
+ component: "dialog",
2890
+ anatomy: "body",
2891
+ property: "scroll-cue-end"
2892
+ }, "linear-gradient(to top, var(--noctis-color-overlay), transparent)", "Shadow revealed at the dialog body's bottom edge when content is clipped below.", "The scroll-boundary cue fading in at the end edge of the scrollable body."),
2893
+ aliased("555c035d-8257-430a-982e-9e23fbc51df7", {
2894
+ kind: "component",
2895
+ component: "dialog",
2896
+ anatomy: "popup",
2897
+ property: "transition-duration"
2898
+ }, { raw: "var(--noctis-duration-overlay)" }, "Duration of the dialog's scale-fade enter/exit.", "How long the dialog takes to scale and fade in and out.")
2899
+ ]
2900
+ };
2901
+ const colorPicker = {
2902
+ component: "color-picker",
2903
+ category: "fields",
2904
+ slotPrefix: "noctis",
2905
+ anatomy: [
2906
+ "color-picker-panel",
2907
+ "color-picker-area",
2908
+ "color-picker-area-thumb",
2909
+ "color-picker-hue",
2910
+ "color-picker-hue-thumb",
2911
+ "color-picker-alpha",
2912
+ "color-picker-alpha-thumb",
2913
+ "color-picker-swatch",
2914
+ "color-picker-eye-dropper",
2915
+ "color-picker-format-tabs",
2916
+ "color-picker-input"
2917
+ ],
2918
+ options: {},
2919
+ states: [],
2920
+ consumes: [],
2921
+ slotGroups: {
2922
+ panel: ["color-picker-panel"],
2923
+ "channel-row": ["color-picker-hue", "color-picker-alpha"],
2924
+ "channel-thumb": ["color-picker-hue-thumb", "color-picker-alpha-thumb"],
2925
+ "format-toggle": ["color-picker-format-tabs"]
2926
+ },
2927
+ mints: [
2928
+ raw("cab7d5ec-6e92-4163-9454-b6e46e6eebea", {
2929
+ kind: "component",
2930
+ component: "color-picker",
2931
+ anatomy: "panel",
2932
+ property: "width"
2933
+ }, "16rem", "Width of the picker card.", "The fixed width of the inline-panel card."),
2934
+ raw("600b7461-4bfb-42a1-b403-eba082c1a038", {
2935
+ kind: "component",
2936
+ component: "color-picker",
2937
+ anatomy: "panel",
2938
+ property: "padding"
2939
+ }, "0.75rem", "Inner padding of the picker card.", "The inset between the card edge and its controls."),
2940
+ raw("1a1261f9-e404-4e1c-a6fa-c29653d6e7ce", {
2941
+ kind: "component",
2942
+ component: "color-picker",
2943
+ anatomy: "panel",
2944
+ property: "gap"
2945
+ }, "0.75rem", "Gap between the picker card's stacked controls.", "The vertical rhythm between the field, rails, and input."),
2946
+ raw("5f23bac2-989f-47db-adda-5c9d48607e42", {
2947
+ kind: "component",
2948
+ component: "color-picker",
2949
+ anatomy: "panel",
2950
+ property: "border-radius"
2951
+ }, "var(--noctis-radius-md)", "Corner radius of the picker card.", "The radius of the inline-panel card."),
2952
+ raw("84609f2a-6d8d-4ff5-8174-a9de08c393c8", {
2953
+ kind: "component",
2954
+ component: "color-picker",
2955
+ anatomy: "area",
2956
+ property: "height"
2957
+ }, "11rem", "Height of the 2D saturation/brightness field.", "The vertical extent of the colour field; its width fills the card."),
2958
+ raw("3ad7dc70-1d16-4cc5-862c-65918ba25616", {
2959
+ kind: "component",
2960
+ component: "color-picker",
2961
+ anatomy: "area-thumb",
2962
+ property: "size"
2963
+ }, "1rem", "Size of the field's draggable thumb.", "The width and height of the saturation/brightness handle."),
2964
+ raw("f1aae399-c35b-478a-b71b-3d716c87c662", {
2965
+ kind: "component",
2966
+ component: "color-picker",
2967
+ anatomy: "hue",
2968
+ property: "height"
2969
+ }, "0.875rem", "Height of a slider rail (hue, and the alpha rail that aliases it).", "The thickness of the hue and alpha rails."),
2970
+ aliased("540ed088-22dc-4517-b1ca-883e62fbb45c", {
2971
+ kind: "component",
2972
+ component: "color-picker",
2973
+ anatomy: "alpha",
2974
+ property: "height"
2975
+ }, { raw: "0.875rem" }, "Height of the alpha rail.", "The thickness of the alpha rail; the same rail height as the hue rail so the two stay matched."),
2976
+ aliased("21285101-e306-43ed-a5fc-fd48e7acafc1", {
2977
+ kind: "component",
2978
+ component: "color-picker",
2979
+ anatomy: "swatch",
2980
+ property: "size"
2981
+ }, { raw: "var(--noctis-size-control-sm)" }, "Size of the live preview swatch inside the card.", "The width and height of the preview swatch; the small control size."),
2982
+ raw("4565ac71-7f51-4680-beb5-b9b162417be9", {
2983
+ kind: "component",
2984
+ component: "color-picker",
2985
+ anatomy: "input",
2986
+ property: "height"
2987
+ }, "var(--noctis-size-control-md)", "Height of the colour value input.", "The height of the text field that reads and writes the colour."),
2988
+ raw("d4d7951e-196f-4685-8aa1-7265bdebd10d", {
2989
+ kind: "component",
2990
+ component: "color-picker",
2991
+ anatomy: "area",
2992
+ property: "border-radius"
2993
+ }, "var(--noctis-radius-sm)", "Corner radius of the 2D saturation/brightness field.", "The rounding of the colour field's corners."),
2994
+ raw("35b6c070-3ac2-453f-8a2c-c63c60b3a5c3", {
2995
+ kind: "component",
2996
+ component: "color-picker",
2997
+ anatomy: "area-thumb",
2998
+ property: "border-width"
2999
+ }, "2px", "Border width of the field's draggable thumb.", "The white inner border fencing the saturation/brightness handle off the field."),
3000
+ raw("92eeb98d-184c-4e05-8e86-6566177717ad", {
3001
+ kind: "component",
3002
+ component: "color-picker",
3003
+ anatomy: "area-thumb",
3004
+ property: "ring-width"
3005
+ }, "1px", "Ring width of the field's draggable thumb.", "The dark outer ring keeping the handle legible on light hues."),
3006
+ raw("8b16f238-0f1a-471f-ac73-83318bf5b84a", {
3007
+ kind: "component",
3008
+ component: "color-picker",
3009
+ anatomy: "channel-row",
3010
+ property: "height"
3011
+ }, "var(--noctis-space-5)", "Height of a channel slider row — shared by the hue and alpha rails.", "The hit-target height of a rail row; the visible track is thinner and centres inside it."),
3012
+ raw("e040c1ee-7e17-4d0e-961e-2f970eeb77d8", {
3013
+ kind: "component",
3014
+ component: "color-picker",
3015
+ anatomy: "channel-thumb",
3016
+ property: "size"
3017
+ }, "var(--noctis-space-4)", "Size of a channel slider's thumb — shared by the hue and alpha rails.", "The width and height of the colour-filled disc riding a rail."),
3018
+ raw("84fd60f0-7ea1-4dfb-9064-17a279a333ad", {
3019
+ kind: "component",
3020
+ component: "color-picker",
3021
+ anatomy: "swatch",
3022
+ property: "border-radius"
3023
+ }, "var(--noctis-radius-control)", "Corner radius of the live preview swatch.", "The rounding of the preview swatch inside the card; follows the radius knob uncapped."),
3024
+ aliased("5617dcf8-966c-4da3-a733-b0978b57ebd3", {
3025
+ kind: "component",
3026
+ component: "color-picker",
3027
+ anatomy: "swatch",
3028
+ property: "border-color"
3029
+ }, { role: "border" }, "Border colour of the live preview swatch.", "The hairline fencing the preview swatch off whatever colour it shows."),
3030
+ raw("fc715b2d-f55b-451a-928d-d3bdd4c53687", {
3031
+ kind: "component",
3032
+ component: "color-picker",
3033
+ anatomy: "format-tabs",
3034
+ property: "gap"
3035
+ }, "var(--noctis-space-0\\.5)", "Gap between the format toggle buttons.", "The spacing between adjacent toggles in the format strip."),
3036
+ raw("bdf0470f-dd07-4c9b-9cf1-22e86d0a4243", {
3037
+ kind: "component",
3038
+ component: "color-picker",
3039
+ anatomy: "format-tabs",
3040
+ property: "padding"
3041
+ }, "var(--noctis-space-0\\.5)", "Padding around the format toggle strip.", "The inset between the strip's track and its toggles."),
3042
+ raw("41dfcb49-5aa6-4c42-9bd8-6a448997067c", {
3043
+ kind: "component",
3044
+ component: "color-picker",
3045
+ anatomy: "format-tabs",
3046
+ property: "border-radius"
3047
+ }, "var(--noctis-radius-sm)", "Corner radius of the format toggle strip.", "The rounding of the track holding the format toggles."),
3048
+ raw("07b31600-43b6-4ba6-911f-b511c5fe5390", {
3049
+ kind: "component",
3050
+ component: "color-picker",
3051
+ anatomy: "format-toggle",
3052
+ property: "border-radius"
3053
+ }, "var(--noctis-radius-xs)", "Corner radius of a format toggle button.", "The rounding of a single toggle inside the strip; a step tighter than the track."),
3054
+ raw("c07774cc-ab88-4e01-bf52-e055d2a42dd4", {
3055
+ kind: "component",
3056
+ component: "color-picker",
3057
+ anatomy: "format-toggle",
3058
+ property: "padding-inline"
3059
+ }, "var(--noctis-space-2)", "Inline padding of a format toggle button.", "The horizontal inset of a toggle's label."),
3060
+ raw("a1fe2b3d-503b-4c8b-b438-1422470fbeb2", {
3061
+ kind: "component",
3062
+ component: "color-picker",
3063
+ anatomy: "format-toggle",
3064
+ property: "padding-block"
3065
+ }, "var(--noctis-space-1)", "Block padding of a format toggle button.", "The vertical inset of a toggle's label."),
3066
+ raw("e6f66663-bb3f-4e79-bd12-95f5b5b30b2b", {
3067
+ kind: "component",
3068
+ component: "color-picker",
3069
+ anatomy: "input",
3070
+ property: "border-radius"
3071
+ }, "var(--noctis-radius-sm)", "Corner radius of the colour value input.", "The rounding of the text field that reads and writes the colour."),
3072
+ raw("15517a6e-27ae-4523-a108-ade7ddfc6d0b", {
3073
+ kind: "component",
3074
+ component: "color-picker",
3075
+ anatomy: "input",
3076
+ property: "padding-inline"
3077
+ }, "var(--noctis-space-2)", "Inline padding of the colour value input.", "The horizontal inset of the input's text.")
3078
+ ]
3079
+ };
3080
+ const otpField = {
3081
+ component: "otp-field",
3082
+ category: "fields",
3083
+ slotPrefix: "noctis",
3084
+ anatomy: [
3085
+ "otp-field",
3086
+ "otp-field-input",
3087
+ "otp-field-separator"
3088
+ ],
3089
+ options: { size: ["md", "lg"] },
3090
+ states: [],
3091
+ consumes: [],
3092
+ optionSlots: { size: "otp-field" },
3093
+ mints: [
3094
+ raw("2f176e3a-3a80-45d1-8817-8e8c832db202", {
3095
+ kind: "component",
3096
+ component: "otp-field",
3097
+ property: "gap"
3098
+ }, "0.5rem", "Gap between the OTP slot cells.", "The spacing between adjacent character cells in an OTP field."),
3099
+ aliased("8f5ec28f-8210-4cae-8ecb-b35a1322284e", {
3100
+ kind: "component",
3101
+ component: "otp-field",
3102
+ anatomy: "input",
3103
+ property: "block-size"
3104
+ }, { raw: "var(--noctis-size-control-md)" }, "Height of an OTP slot cell.", "The height of a single character cell; follows the control-height ladder per size.", { size: { lg: { raw: "var(--noctis-size-control-lg)" } } }),
3105
+ aliased("20b98dc7-c5ae-42d6-b2b4-f97b8bf02efa", {
3106
+ kind: "component",
3107
+ component: "otp-field",
3108
+ anatomy: "input",
3109
+ property: "inline-size"
3110
+ }, { raw: "var(--noctis-size-control-md)" }, "Width of an OTP slot cell.", "The width of a single character cell; tracks the cell height for a square 1:1 slot. Minted separately from the height so it can be overridden for a narrower cell without touching the height.", { size: { lg: { raw: "var(--noctis-size-control-lg)" } } }),
3111
+ aliased("ddc3c35b-384c-4444-acdb-05428f1e466a", {
3112
+ kind: "component",
3113
+ component: "otp-field",
3114
+ anatomy: "input",
3115
+ property: "font-size"
3116
+ }, { raw: "var(--noctis-text-regular)" }, "Font size of the character in an OTP slot cell.", "The size of the digit/character rendered in a cell; follows the text scale per size.", { size: { lg: { raw: "var(--noctis-text-large)" } } }),
3117
+ raw("8bf999ab-b69d-4f41-8c2f-07dd2dadc1c0", {
3118
+ kind: "component",
3119
+ component: "otp-field",
3120
+ anatomy: "input",
3121
+ property: "border-radius"
3122
+ }, "var(--noctis-radius-control)", "Corner radius of an OTP slot cell.", "The rounding of a single character cell; follows the radius knob like other controls."),
3123
+ raw("a1c4e7f2-9b3d-4e6a-8c12-5f7d9e2a4b60", {
3124
+ kind: "component",
3125
+ component: "otp-field",
3126
+ anatomy: "input",
3127
+ property: "ring-width"
3128
+ }, "var(--noctis-size-focus-ring-width)", "Focus-ring width of the active OTP slot cell.", "The spread of the single-layer box-shadow ring drawn on the focused cell; aligns the cell's ring seam with the fields family (color-swatch's `ring-width`), kept flush — no offset — because an offset ring reads noisy on adjacent gapped cells."),
3129
+ raw("b2d5f8a3-1c4e-4f7b-9d23-6a8e0f3b5c71", {
3130
+ kind: "component",
3131
+ component: "otp-field",
3132
+ anatomy: "separator",
3133
+ property: "size"
3134
+ }, "1rem", "Length of the group separator bar.", "Height of the thin divider drawn between OTP cell groups (the `123-456` grouping); about 40% of a cell, centred between the groups.")
3135
+ ]
3136
+ };
3137
+ /**
3138
+ * A single-select control: a `radio-group` of circular `radio` boxes, each holding a `radio-indicator`
3139
+ * dot. The box is a sharp-cornered exception — `rounded-full` for a true circle — with an accent border
3140
+ * and dot in the checked state and the focus-ring outline on keyboard focus. The minted seam is the box
3141
+ * edge, its border width and radius, the dot edge, and the group gap; the box edge and dot edge re-point
3142
+ * per the `size` axis the box stamps as `data-size`.
3143
+ */
3144
+ const radio = {
3145
+ component: "radio",
3146
+ category: "fields",
3147
+ slotPrefix: "noctis",
3148
+ anatomy: [
3149
+ "radio-group",
3150
+ "radio",
3151
+ "radio-indicator",
3152
+ "radio-field",
3153
+ "radio-label",
3154
+ "radio-description",
3155
+ "radio-card"
3156
+ ],
3157
+ options: {
3158
+ size: [
3159
+ "sm",
3160
+ "md",
3161
+ "lg"
3162
+ ],
3163
+ orientation: ["vertical", "horizontal"]
3164
+ },
3165
+ states: [
3166
+ "checked",
3167
+ "disabled",
3168
+ "focus"
3169
+ ],
3170
+ consumes: [],
3171
+ optionSlots: {
3172
+ size: "radio",
3173
+ orientation: "radio-group"
3174
+ },
3175
+ mints: [
3176
+ aliased("df09ca71-5b65-4fa4-af15-c7dca7c99c67", {
3177
+ kind: "component",
3178
+ component: "radio",
3179
+ property: "size"
3180
+ }, { raw: "1.125rem" }, "Edge length of a radio box.", "The width and height of the circular radio control; `md` by default, `sm` for dense rows, `lg` for cards and touch.", { size: {
3181
+ sm: { raw: "1rem" },
3182
+ lg: { raw: "1.25rem" }
3183
+ } }),
3184
+ raw("cdba26a5-eb83-419f-aae4-b439fdc89905", {
3185
+ kind: "component",
3186
+ component: "radio",
3187
+ property: "border-width"
3188
+ }, "1px", "Border width of a radio box.", "The hairline that outlines an unchecked radio; thickens to the accent border when checked."),
3189
+ raw("ad1ba065-7b00-40c7-a067-737dab52f60a", {
3190
+ kind: "component",
3191
+ component: "radio",
3192
+ property: "border-radius"
3193
+ }, "9999px", "Corner radius of a radio box.", "A radio is a genuine circle, so it stays fully round regardless of the radius knob."),
3194
+ aliased("fc8d4315-bfd8-442b-8166-15ada9e5ae07", {
3195
+ kind: "component",
3196
+ component: "radio",
3197
+ anatomy: "indicator",
3198
+ property: "size"
3199
+ }, { raw: "0.5rem" }, "Edge length of the radio dot.", "The accent dot shown inside a checked radio; re-points per the `size` axis to stay proportional.", { size: {
3200
+ sm: { raw: "0.375rem" },
3201
+ lg: { raw: "0.625rem" }
3202
+ } }),
3203
+ raw("3f3d3772-9190-44c5-b242-03973f135952", {
3204
+ kind: "component",
3205
+ component: "radio",
3206
+ anatomy: "group",
3207
+ property: "gap"
3208
+ }, "0.625rem", "Gap between radios in a group.", "The spacing between adjacent radios in a group, in either orientation."),
3209
+ raw("b1d4a7e2-3c6f-4e90-9a2d-7f5c4e8b1a06", {
3210
+ kind: "component",
3211
+ component: "radio",
3212
+ anatomy: "field",
3213
+ property: "gap"
3214
+ }, "0.5rem", "Gap between the radio box and its label in a field row.", "The inline spacing between the box and the label inside `Radio.Field`, mirroring `Checkbox.Field`."),
3215
+ raw("f51d6121-63dd-41a1-ad3e-cb5732f57ae9", {
3216
+ kind: "component",
3217
+ component: "radio",
3218
+ anatomy: "description",
3219
+ property: "gap"
3220
+ }, "0.25rem", "Gap between a radio's label and its description.", "The block spacing between a radio row's label and its helper text in `Radio.Description`."),
3221
+ raw("cd34344b-5975-4a05-8a73-eeeb40823bb9", {
3222
+ kind: "component",
3223
+ component: "radio",
3224
+ anatomy: "card",
3225
+ property: "padding"
3226
+ }, "0.75rem", "Inset of a radio card's content from its border.", "The padding inside the selectable `Radio.Card` target, between its border and the radio + label.")
3227
+ ]
3228
+ };
3229
+ /**
3230
+ * The avatar mints its box edge and its initials type, both retuned per the `size` axis (`xs`…`xl`),
3231
+ * plus the corner radius the `square` shape reads (the default `circle` shape is the literal
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
3234
+ * light/dark values and never re-themes on the accent. Its sizes are a deliberate own scale (not the
3235
+ * control-height ladder) — an avatar is an image footprint, not a control.
3236
+ */
3237
+ const avatar = {
3238
+ component: "avatar",
3239
+ category: "data",
3240
+ slotPrefix: "noctis",
3241
+ anatomy: [
3242
+ "avatar",
3243
+ "avatar-image",
3244
+ "avatar-fallback",
3245
+ "avatar-indicator",
3246
+ "avatar-skeleton",
3247
+ "avatar-group"
3248
+ ],
3249
+ options: {
3250
+ size: [
3251
+ "2xs",
3252
+ "xs",
3253
+ "sm",
3254
+ "md",
3255
+ "lg",
3256
+ "xl"
3257
+ ],
3258
+ shape: ["circle", "rounded"],
3259
+ spacing: ["tight", "cozy"]
3260
+ },
3261
+ states: [],
3262
+ consumes: [],
3263
+ optionSlots: {
3264
+ size: "avatar",
3265
+ shape: "avatar",
3266
+ spacing: "avatar-group"
3267
+ },
3268
+ mints: [
3269
+ aliased("cfaab165-a64f-4caa-966e-dc5652317708", {
3270
+ kind: "component",
3271
+ component: "avatar",
3272
+ property: "size"
3273
+ }, { raw: "2.5rem" }, "Edge length of the avatar — its width and height.", "The footprint of an avatar per size step; an own scale, not the control-height ladder.", { size: {
3274
+ "2xs": { raw: "1.25rem" },
3275
+ xs: { raw: "1.5rem" },
3276
+ sm: { raw: "2rem" },
3277
+ lg: { raw: "3rem" },
3278
+ xl: { raw: "4rem" }
3279
+ } }),
3280
+ aliased("57b85114-7cef-468f-aa27-e22a8c2e8365", {
3281
+ kind: "component",
3282
+ component: "avatar",
3283
+ property: "font-size"
3284
+ }, { raw: "var(--noctis-text-small)" }, "Initials type size in the fallback.", "The font size of the initials shown when no image loads, per size step.", { size: {
3285
+ "2xs": { raw: "var(--noctis-text-mini)" },
3286
+ xs: { raw: "var(--noctis-text-mini)" },
3287
+ sm: { raw: "var(--noctis-text-mini)" },
3288
+ lg: { raw: "var(--noctis-text-regular)" },
3289
+ xl: { raw: "var(--noctis-text-large)" }
3290
+ } }),
3291
+ raw("aae1e8f4-c5f2-4e00-af99-b4b63556cdbe", {
3292
+ kind: "component",
3293
+ component: "avatar",
3294
+ property: "border-radius"
3295
+ }, "var(--noctis-radius-md)", "Corner radius of a `rounded` avatar.", "The rounding of the rounded shape; follows the radius knob on the capped md step. The default circle shape stays the literal full-round extreme."),
3296
+ raw("94062749-9a88-45cf-96f6-5ff60798278b", {
3297
+ kind: "component",
3298
+ component: "avatar",
3299
+ property: "ring-width"
3300
+ }, "1px", "Hairline ring width separating an avatar from its surface or its neighbours.", "The box-shadow ring drawn on a `ring`-flagged avatar and on every child of an avatar group."),
3301
+ raw("70e504d7-7c57-410b-9f95-0d156b16f4c9", {
3302
+ kind: "component",
3303
+ component: "avatar",
3304
+ property: "ring-offset-width"
3305
+ }, "2px", "Canvas-coloured gap between an avatar and its separating / selection ring.", "The offset that sets the group separating ring (and the account selection ring) off the avatar so each reads against the next; mirrors color-swatch's ring offset."),
3306
+ aliased("bec30dcf-d9f0-4b72-b17e-4d4a49d0abef", {
3307
+ kind: "component",
3308
+ component: "avatar",
3309
+ property: "group-overlap"
3310
+ }, { raw: "0.625rem" }, "Inline overlap between stacked avatars in a group.", "The amount each avatar in a group slides under its predecessor (applied as a negative inline margin), per size; set on every avatar so a grouped child reads its own size's overlap, and the `cozy`/`tight` spacing axis scales it in CSS.", { size: {
3311
+ "2xs": { raw: "0.3125rem" },
3312
+ xs: { raw: "0.375rem" },
3313
+ sm: { raw: "0.5rem" },
3314
+ lg: { raw: "0.75rem" },
3315
+ xl: { raw: "1rem" }
3316
+ } }),
3317
+ aliased("0cbfaf25-03c8-40f7-ba31-2aeae85a70e2", {
3318
+ kind: "component",
3319
+ component: "avatar",
3320
+ anatomy: "group",
3321
+ property: "ring-color"
3322
+ }, { role: "background" }, "Canvas-coloured separating ring on grouped avatars.", "The colour of the gap ring between overlapping avatars (and behind a corner indicator) so each reads against the next; the page canvas, not a new role."),
3323
+ aliased("ddb85396-6f7b-48b1-ba12-f4f9b8eaa174", {
3324
+ kind: "component",
3325
+ component: "avatar",
3326
+ anatomy: "indicator",
3327
+ property: "size"
3328
+ }, { raw: "0.75rem" }, "Edge length of the corner presence/status dot.", "The diameter of the indicator badge, per avatar size step so the dot scales with the box.", { size: {
3329
+ "2xs": { raw: "0.375rem" },
3330
+ xs: { raw: "0.5rem" },
3331
+ sm: { raw: "0.625rem" },
3332
+ lg: { raw: "0.875rem" },
3333
+ xl: { raw: "1rem" }
3334
+ } }),
3335
+ raw("da63849e-6e91-4bd2-bf4d-fd3a1fa62e2a", {
3336
+ kind: "component",
3337
+ component: "avatar",
3338
+ anatomy: "indicator",
3339
+ property: "inset"
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
+ ]
3342
+ };
3343
+ const colorSwatch = {
3344
+ component: "color-swatch",
3345
+ category: "fields",
3346
+ slotPrefix: "noctis",
3347
+ anatomy: [
3348
+ "color-swatch",
3349
+ "color-swatch-picker",
3350
+ "color-swatch-picker-item"
3351
+ ],
3352
+ options: { size: [
3353
+ "xs",
3354
+ "sm",
3355
+ "md",
3356
+ "lg"
3357
+ ] },
3358
+ states: [],
3359
+ consumes: [],
3360
+ optionSlots: { size: "color-swatch" },
3361
+ mints: [
3362
+ aliased("7db0ae30-1b8f-4a95-a096-a2f581f2f4b4", {
3363
+ kind: "component",
3364
+ component: "color-swatch",
3365
+ property: "size"
3366
+ }, { raw: "var(--noctis-size-control-md)" }, "Edge length of a colour swatch.", "The width and height of a swatch chip; follows the control-height ladder per size.", { size: {
3367
+ xs: { raw: "var(--noctis-size-control-xs)" },
3368
+ sm: { raw: "var(--noctis-size-control-sm)" },
3369
+ lg: { raw: "var(--noctis-size-control-lg)" }
3370
+ } }),
3371
+ raw("30bcaea9-44b7-49f8-9673-cdc2231769a8", {
3372
+ kind: "component",
3373
+ component: "color-swatch",
3374
+ anatomy: "picker",
3375
+ property: "gap"
3376
+ }, "0.5rem", "Gap between swatches in a picker grid.", "The spacing between adjacent swatches in a swatch picker."),
3377
+ raw("4352ea5f-2cb5-4496-a509-6112bde9f95e", {
3378
+ kind: "component",
3379
+ component: "color-swatch",
3380
+ property: "border-radius"
3381
+ }, "var(--noctis-radius-control)", "Corner radius of a `control`-shaped swatch chip.", "The default chip rounding; follows the radius knob uncapped. The `none` and `full` shapes stay literal extremes."),
3382
+ raw("1d6f88b8-72bf-4706-af3f-74a534f7dd2d", {
3383
+ kind: "component",
3384
+ component: "color-swatch",
3385
+ property: "border-radius-soft"
3386
+ }, "var(--noctis-radius-sm)", "Corner radius of a `soft`-shaped swatch chip.", "The gentler rounding option; follows the radius knob on the capped sm step."),
3387
+ raw("7d8d6e43-82bf-4192-9d91-341fc8a354ac", {
3388
+ kind: "component",
3389
+ component: "color-swatch",
3390
+ anatomy: "picker-item",
3391
+ property: "ring-width"
3392
+ }, "2px", "Ring width of a checked picker swatch.", "The accent selection ring drawn around the chosen swatch in a picker."),
3393
+ raw("4649acc0-e151-4196-b86d-3ffb5b18b708", {
3394
+ kind: "component",
3395
+ component: "color-swatch",
3396
+ anatomy: "picker-item",
3397
+ property: "ring-offset-width"
3398
+ }, "2px", "Ring offset of a checked picker swatch.", "The canvas-coloured gap between the chosen swatch and its selection ring."),
3399
+ raw("b7e9c1a4-3f02-4d6e-9a18-6c0b2f5e8d31", {
3400
+ kind: "component",
3401
+ component: "color-swatch",
3402
+ anatomy: "picker-item",
3403
+ property: "border-radius"
3404
+ }, "var(--noctis-radius-control)", "Corner radius of a `control`-shaped picker swatch.", "Mirrors the chip's control rounding on the picker item itself, so the checked selection ring follows the swatch shape."),
3405
+ raw("c8f0d2b5-4019-4e7f-8b29-7d1c3a6f9e42", {
3406
+ kind: "component",
3407
+ component: "color-swatch",
3408
+ anatomy: "picker-item",
3409
+ property: "border-radius-soft"
3410
+ }, "var(--noctis-radius-sm)", "Corner radius of a `soft`-shaped picker swatch.", "Mirrors the chip's soft rounding on the picker item itself, so the checked selection ring follows the swatch shape.")
3411
+ ]
3412
+ };
3413
+ const slider = {
3414
+ component: "slider",
3415
+ category: "fields",
3416
+ slotPrefix: "noctis",
3417
+ anatomy: [
3418
+ "slider",
3419
+ "slider-header",
3420
+ "slider-label",
3421
+ "slider-value",
3422
+ "slider-control",
3423
+ "slider-track",
3424
+ "slider-indicator",
3425
+ "slider-thumb",
3426
+ "slider-thumb-value",
3427
+ "slider-marks",
3428
+ "slider-mark",
3429
+ "slider-mark-label"
3430
+ ],
3431
+ options: { size: ["sm", "md"] },
3432
+ states: [],
3433
+ consumes: [],
3434
+ optionSlots: { size: "slider" },
3435
+ slotGroups: { root: ["slider"] },
3436
+ mints: [
3437
+ raw("529e5583-27e2-4374-870c-89839e013ba6", {
3438
+ kind: "component",
3439
+ component: "slider",
3440
+ anatomy: "root",
3441
+ property: "gap"
3442
+ }, "var(--noctis-space-2)", "Gap between the slider's label/value row and its control.", "The vertical rhythm the root stack holds between the optional label/value header and the rail."),
3443
+ aliased("e0e7d6ee-bcd1-47c4-8a9a-2706e528f4d8", {
3444
+ kind: "component",
3445
+ component: "slider",
3446
+ anatomy: "control",
3447
+ property: "block-size"
3448
+ }, { raw: "var(--noctis-size-control-md)" }, "Height of the interactive control row.", "The pointer hit-area the rail and thumbs sit centred within, per size; the rail itself is thinner.", { size: { sm: { raw: "var(--noctis-size-control-sm)" } } }),
3449
+ aliased("db7065dc-a80c-48cd-a073-b7ccc626c698", {
3450
+ kind: "component",
3451
+ component: "slider",
3452
+ anatomy: "track",
3453
+ property: "block-size"
3454
+ }, { raw: "0.375rem" }, "Thickness of the rail the indicator fills.", "The block size of the sunken track, per size; a bespoke rail metric (no foundation size step matches a track this thin).", { size: { sm: { raw: "0.25rem" } } }),
3455
+ raw("e821f1fa-999a-4ef5-a2bb-4dfbfa211730", {
3456
+ kind: "component",
3457
+ component: "slider",
3458
+ anatomy: "track",
3459
+ property: "border-radius"
3460
+ }, "var(--noctis-radius-full)", "Corner radius of the rail and its fill.", "The rounding of the sunken track and the indicator fill; the genuine-circle `radius-full` token gives the rail its pill ends (the thumb reads the same token for its disc)."),
3461
+ aliased("5741d4c2-29f2-4c4c-8e97-69c282046c52", {
3462
+ kind: "component",
3463
+ component: "slider",
3464
+ anatomy: "track",
3465
+ property: "background-color"
3466
+ }, { role: "well" }, "Fill of the unfilled rail.", "The recessed track colour behind the indicator; the surface-adaptive `well` overlay, so the rail stays visible on any surface (a `sunken` rail collapses on a sunken or dark backdrop)."),
3467
+ aliased("751b7ae3-05cf-4920-8a9e-7d93a972f71e", {
3468
+ kind: "component",
3469
+ component: "slider",
3470
+ anatomy: "indicator",
3471
+ property: "background-color"
3472
+ }, { role: "accent" }, "Fill of the filled portion of the rail.", "The indicator colour — the accent signals the selected value (or range) up to the thumb."),
3473
+ aliased("58754a66-87f9-40bb-8b25-affdec3edcca", {
3474
+ kind: "component",
3475
+ component: "slider",
3476
+ anatomy: "thumb",
3477
+ property: "size"
3478
+ }, { raw: "1.125rem" }, "Diameter of a draggable thumb.", "The width and height of a handle, per size; a bespoke control metric (no foundation size step matches the disc diameter).", { size: { sm: { raw: "0.875rem" } } }),
3479
+ raw("a9772869-592a-4f12-ab1e-43db5769bc98", {
3480
+ kind: "component",
3481
+ component: "slider",
3482
+ anatomy: "thumb",
3483
+ property: "border-width"
3484
+ }, "2px", "Border width of a thumb.", "The ring of background colour around a thumb that sets it off from the rail beneath it; a bespoke hairline (no foundation border step matches)."),
3485
+ raw("28943965-d2db-4379-b6d9-3699f63dc824", {
3486
+ kind: "component",
3487
+ component: "slider",
3488
+ anatomy: "thumb",
3489
+ property: "outline-width"
3490
+ }, "3px", "Thickness of the soft focus halo outside the thumb's focus ring.", "The accent glow drawn beyond the crisp focus ring when a thumb is focused (mirrors the switch's layered ring)."),
3491
+ aliased("0d4d123c-c584-470c-849e-e5036b825742", {
3492
+ kind: "component",
3493
+ component: "slider",
3494
+ anatomy: "thumb-value",
3495
+ property: "background-color"
3496
+ }, { role: "inverse" }, "Fill of the drag value bubble.", "The background of the optional `Slider.ThumbValue` readout; the inverse role reads on any surface and never borrows the accent (which stays the fill's signal)."),
3497
+ aliased("f3bb30a6-f0ac-4809-8165-16af35b0233d", {
3498
+ kind: "component",
3499
+ component: "slider",
3500
+ anatomy: "thumb-value",
3501
+ property: "color"
3502
+ }, { role: "inverse-foreground" }, "Text colour of the drag value bubble.", "The foreground of the `Slider.ThumbValue` readout, paired with its inverse fill."),
3503
+ raw("054c3f3f-aefd-4600-bc33-3c681a9b2732", {
3504
+ kind: "component",
3505
+ component: "slider",
3506
+ anatomy: "thumb-value",
3507
+ property: "gap"
3508
+ }, "0.5rem", "Offset of the drag value bubble above the thumb.", "The gap between the thumb and the readout floating above it; keeps the value clear of the finger on touch."),
3509
+ raw("f06340eb-9bcb-42f2-abed-99b0b8bff784", {
3510
+ kind: "component",
3511
+ component: "slider",
3512
+ anatomy: "mark",
3513
+ property: "size"
3514
+ }, "2px", "Thickness of a step mark.", "The width of a sharp `Slider.Mark` tick (its block thickness when the slider is vertical)."),
3515
+ aliased("654fc774-cac2-4702-81e7-f4f30bcbb219", {
3516
+ kind: "component",
3517
+ component: "slider",
3518
+ anatomy: "mark",
3519
+ property: "background-color"
3520
+ }, { role: "border" }, "Colour of an unpassed step mark.", "A tick the value has not yet reached reads in the neutral `border` role; ticks the value has passed switch to the accent (the fill's signal) in CSS.")
3521
+ ]
3522
+ };
3523
+ const checkbox = {
3524
+ component: "checkbox",
3525
+ category: "fields",
3526
+ slotPrefix: "noctis",
3527
+ anatomy: [
3528
+ "checkbox",
3529
+ "checkbox-indicator",
3530
+ "checkbox-group",
3531
+ "checkbox-field",
3532
+ "checkbox-label"
3533
+ ],
3534
+ options: {
3535
+ size: [
3536
+ "sm",
3537
+ "md",
3538
+ "lg"
3539
+ ],
3540
+ orientation: ["vertical", "horizontal"]
3541
+ },
3542
+ states: [
3543
+ "checked",
3544
+ "disabled",
3545
+ "focus"
3546
+ ],
3547
+ consumes: [],
3548
+ optionSlots: {
3549
+ size: "checkbox",
3550
+ orientation: "checkbox-group"
3551
+ },
3552
+ mints: [
3553
+ aliased("ed97d891-867d-4308-8790-c805f1a60d91", {
3554
+ kind: "component",
3555
+ component: "checkbox",
3556
+ property: "size"
3557
+ }, { raw: "1.125rem" }, "Edge length of the checkbox box.", "The width and height of the square box; re-points per size (sm 1rem / md 1.125rem / lg 1.25rem).", { size: {
3558
+ sm: { raw: "1rem" },
3559
+ lg: { raw: "1.25rem" }
3560
+ } }),
3561
+ raw("91e69791-22ad-41e2-8f11-16e976b8949f", {
3562
+ kind: "component",
3563
+ component: "checkbox",
3564
+ property: "border-radius"
3565
+ }, "var(--noctis-radius-xs)", "Corner radius of the checkbox box.", "The rounding of the box's corners; follows the radius knob on the capped xs step."),
3566
+ raw("bf4378a5-fb55-43b0-b340-8387a0837d6b", {
3567
+ kind: "component",
3568
+ component: "checkbox",
3569
+ property: "border-width"
3570
+ }, "1px", "Border width of the checkbox box.", "The hairline outlining the unchecked box."),
3571
+ raw("5ed08efe-52f0-4efc-956b-470a7182d1ac", {
3572
+ kind: "component",
3573
+ component: "checkbox",
3574
+ property: "hit-area"
3575
+ }, "1.5rem", "Minimum tappable target size around the box.", "The edge length of the invisible hit area centred over the box, so every size clears the 24px touch-target minimum without shifting layout."),
3576
+ aliased("a25a518b-41e4-4863-8b8a-b62d36bb9db0", {
3577
+ kind: "component",
3578
+ component: "checkbox",
3579
+ anatomy: "indicator",
3580
+ property: "size"
3581
+ }, { raw: "0.875rem" }, "Edge length of the indicator glyph.", "The width and height of the check / indeterminate glyph; re-points per size to sit inside the box.", { size: {
3582
+ sm: { raw: "0.75rem" },
3583
+ lg: { raw: "1rem" }
3584
+ } }),
3585
+ raw("b96c37aa-373a-4ff8-b90c-7b4a9a35041e", {
3586
+ kind: "component",
3587
+ component: "checkbox",
3588
+ anatomy: "field",
3589
+ property: "gap"
3590
+ }, "0.5rem", "Gap between the box and its label in a field row.", "The inline spacing between the box and the label inside `Checkbox.Field`."),
3591
+ raw("69a56c2e-1b12-41fd-accb-ce0300e5a070", {
3592
+ kind: "component",
3593
+ component: "checkbox",
3594
+ anatomy: "group",
3595
+ property: "gap"
3596
+ }, "0.625rem", "Gap between checkboxes in a group.", "The spacing between adjacent checkbox rows in a `CheckboxGroup`.")
3597
+ ]
3598
+ };
3599
+ /**
3600
+ * Switch is a Root track plus a Thumb. The minted seam covers the track geometry (a bespoke compact
3601
+ * scale — the track is shorter than a control, so its block/inline sizes are fractions of the
3602
+ * `control-xs` rung, re-pointed per `sm`/`md`/`lg`), the framing padding and border
3603
+ * width, the thumb diameter, the touch-area cover that keeps the compact sizes tappable, the focus
3604
+ * halo, the slide's motion duration, and the track/thumb colours (aliasing the `field`/`accent`/
3605
+ * `foreground` roles, re-pointed for the checked signal). The `size` axis stamps `data-size` on the
3606
+ * root track; the thumb and its travel re-point off that ancestor compound.
3607
+ */
3608
+ const switchControl = {
3609
+ component: "switch",
3610
+ category: "fields",
3611
+ slotPrefix: "noctis",
3612
+ anatomy: [
3613
+ "switch",
3614
+ "switch-thumb",
3615
+ "switch-field",
3616
+ "switch-label"
3617
+ ],
3618
+ options: { size: [
3619
+ "sm",
3620
+ "md",
3621
+ "lg"
3622
+ ] },
3623
+ states: [
3624
+ "checked",
3625
+ "disabled",
3626
+ "focus"
3627
+ ],
3628
+ consumes: [],
3629
+ optionSlots: { size: "switch" },
3630
+ mints: [
3631
+ aliased("d5686475-b050-4388-a6ce-1e56fff2897c", {
3632
+ kind: "component",
3633
+ component: "switch",
3634
+ property: "block-size"
3635
+ }, { raw: "var(--noctis-size-control-xs)" }, "Track height of a switch.", "The block size of the switch track; a compact fraction of the control ladder, smaller at `sm` and larger at `lg`.", { size: {
3636
+ sm: { raw: "calc(var(--noctis-size-control-xs) * 0.8)" },
3637
+ lg: { raw: "calc(var(--noctis-size-control-xs) * 1.2)" }
3638
+ } }),
3639
+ aliased("5e2888c0-a470-4775-af42-6fb58ac2b21e", {
3640
+ kind: "component",
3641
+ component: "switch",
3642
+ property: "inline-size"
3643
+ }, { raw: "calc(var(--noctis-size-control-xs) * 1.8)" }, "Track width of a switch.", "The inline size of the switch track; sized so the thumb travels a clear gap between off and on.", { size: {
3644
+ sm: { raw: "calc(var(--noctis-size-control-xs) * 1.4)" },
3645
+ lg: { raw: "calc(var(--noctis-size-control-xs) * 2.2)" }
3646
+ } }),
3647
+ raw("2d6d8360-c527-4a28-9012-18b8231e785c", {
3648
+ kind: "component",
3649
+ component: "switch",
3650
+ property: "padding"
3651
+ }, "2px", "Inset framing the thumb inside the track.", "The padding between the track edge and the thumb at rest; also the thumb's travel inset."),
3652
+ raw("b6656354-bebb-4516-b39b-7909dfbe72f5", {
3653
+ kind: "component",
3654
+ component: "switch",
3655
+ property: "border-width"
3656
+ }, "1px", "Border width of the switch track.", "The hairline around the track; also subtracted from the thumb's travel so it stays inside the border."),
3657
+ aliased("1dd7de91-d611-4100-a19d-5978d91bbf17", {
3658
+ kind: "component",
3659
+ component: "switch",
3660
+ anatomy: "thumb",
3661
+ property: "size"
3662
+ }, { raw: "calc(var(--noctis-size-control-xs) * 0.7)" }, "Diameter of the switch thumb.", "The height of the round thumb; the track height minus twice the framing padding and border.", { size: {
3663
+ sm: { raw: "calc(var(--noctis-size-control-xs) * 0.5)" },
3664
+ lg: { raw: "calc(var(--noctis-size-control-xs) * 0.9)" }
3665
+ } }),
3666
+ raw("cf3c0b94-6dc3-4e8d-8a4d-5d2c95e47627", {
3667
+ kind: "component",
3668
+ component: "switch",
3669
+ property: "inset"
3670
+ }, "6px", "Touch-area cover extending the tap target past the track edge.", "How far the invisible hit area reaches beyond every track edge, keeping the compact sizes tappable."),
3671
+ raw("509fddbb-142d-42e8-80e8-5e3d57622c32", {
3672
+ kind: "component",
3673
+ component: "switch",
3674
+ property: "outline-width"
3675
+ }, "3px", "Thickness of the soft focus halo outside the focus ring.", "The accent glow drawn beyond the crisp focus ring when the switch is focused."),
3676
+ raw("d18eceb3-aabb-40d8-b790-783b254a21e9", {
3677
+ kind: "component",
3678
+ component: "switch",
3679
+ property: "transition-duration"
3680
+ }, "var(--noctis-duration-quick)", "Duration of the thumb-slide and track-colour transition.", "How long the thumb takes to slide between off and on; honoured only when motion is allowed."),
3681
+ aliased("1d49b75b-cb6d-4543-9ae9-acf8233ffc30", {
3682
+ kind: "component",
3683
+ component: "switch",
3684
+ property: "background-color"
3685
+ }, { role: "well" }, "Track fill when the switch is off.", "The unchecked track background; the surface-adaptive `well` overlay so the off pill stays visible on any surface (a `control` fill collapses on a control-toned bed), paired with the `border-strong` hairline."),
3686
+ aliased("69c5b983-0741-4cff-abf7-9b1f3649c843", {
3687
+ kind: "component",
3688
+ component: "switch",
3689
+ property: "background-color",
3690
+ state: "checked"
3691
+ }, { role: "accent" }, "Track fill when the switch is on.", "The checked track background; the `accent` signal by default."),
3692
+ aliased("44a9be61-78bd-4c00-bf2b-bc3dcad2cc71", {
3693
+ kind: "component",
3694
+ component: "switch",
3695
+ property: "border-color"
3696
+ }, { role: "border-strong" }, "Track border when the switch is off.", "The unchecked track hairline colour; the load-bearing `border-strong` outline so the off pill stays delimited on any surface (the faint `field-border` collapses on a matching bed)."),
3697
+ aliased("40589e34-ceb5-46a3-9618-53f384393dd1", {
3698
+ kind: "component",
3699
+ component: "switch",
3700
+ property: "border-color",
3701
+ state: "checked"
3702
+ }, { role: "accent" }, "Track border when the switch is on.", "The checked track hairline colour; matches the `accent` fill by default."),
3703
+ aliased("42a0d87f-f49a-42ec-b4fc-848ed75663f1", {
3704
+ kind: "component",
3705
+ component: "switch",
3706
+ anatomy: "thumb",
3707
+ property: "background-color"
3708
+ }, { role: "accent-foreground" }, "Thumb fill when the switch is off.", "The knob colour; the `accent-foreground` knockout, a near-white that stays light in both themes."),
3709
+ aliased("520a93ee-2c88-4eb6-a94a-3ad2b45ed598", {
3710
+ kind: "component",
3711
+ component: "switch",
3712
+ anatomy: "thumb",
3713
+ property: "background-color",
3714
+ state: "checked"
3715
+ }, { role: "accent-foreground" }, "Thumb fill when the switch is on.", "The knob colour when checked; the same `accent-foreground` knockout, so the knob never inverts."),
3716
+ raw("8dbf6d74-0d88-4036-865f-27f19071a1a5", {
3717
+ kind: "component",
3718
+ component: "switch",
3719
+ anatomy: "field",
3720
+ property: "gap"
3721
+ }, "0.75rem", "Gap between a switch and its label in a field row.", "The spacing between the track and its label inside `Switch.Field`.")
3722
+ ]
3723
+ };
3724
+ /**
3725
+ * The icon primitive mints its size token, retuned per the `size` axis: one `--noctis-icon-size`
3726
+ * seam whose default is the `md` edge and whose other steps re-point under the `data-size` the root
3727
+ * `noctis-icon` slot stamps — the same shape as Button's height. Each step aliases the spacing foundation
3728
+ * the old `size-*` utility rendered, so a glyph's edge length still follows the density knob.
3729
+ */
3730
+ const progress = {
3731
+ component: "progress",
3732
+ category: "data",
3733
+ slotPrefix: "noctis",
3734
+ anatomy: [
3735
+ "progress",
3736
+ "progress-track",
3737
+ "progress-indicator",
3738
+ "progress-label",
3739
+ "progress-value"
3740
+ ],
3741
+ options: {
3742
+ tone: [
3743
+ "neutral",
3744
+ "success",
3745
+ "warning",
3746
+ "danger"
3747
+ ],
3748
+ size: ["sm", "md"],
3749
+ labels: ["top", "side"]
3750
+ },
3751
+ states: [],
3752
+ consumes: [],
3753
+ optionSlots: {
3754
+ size: "progress",
3755
+ tone: "progress",
3756
+ labels: "progress"
3757
+ },
3758
+ slotGroups: { root: ["progress"] },
3759
+ mints: [
3760
+ raw("412df98c-f906-4b62-a34f-dae13035c1ce", {
3761
+ kind: "component",
3762
+ component: "progress",
3763
+ anatomy: "root",
3764
+ property: "gap"
3765
+ }, "var(--noctis-space-2)", "Gap between the label/value header row and the track.", "The spacing the root stack holds between the header row and the progress track."),
3766
+ aliased("2295eee6-05c5-46e8-b0b5-1dc4d1916e4a", {
3767
+ kind: "component",
3768
+ component: "progress",
3769
+ anatomy: "track",
3770
+ property: "block-size"
3771
+ }, { raw: "0.5rem" }, "Track thickness — the height of the bar.", "The block size of the progress track and its fill per size; a thin 8px rail at `md` (the default) and a 4px rail at `sm`, matching Meter. Override with the `thickness` prop or the public var for any height.", { size: { sm: { raw: "0.25rem" } } }),
3772
+ raw("06db387e-90c5-41c5-8e42-0a08bbbc6e6a", {
3773
+ kind: "component",
3774
+ component: "progress",
3775
+ anatomy: "track",
3776
+ property: "border-radius"
3777
+ }, "var(--noctis-radius-control)", "Track corner radius.", "The rounding of the track and its fill ends; follows the radius knob uncapped so a thin bar reads as a rounded rail."),
3778
+ aliased("d40a6cc0-636f-46b1-a0e1-40e2fbf6d7bd", {
3779
+ kind: "component",
3780
+ component: "progress",
3781
+ anatomy: "track",
3782
+ property: "background-color"
3783
+ }, { role: "well" }, "Track fill colour — the unfilled groove.", "The recessed neutral the track shows behind the indicator; the surface-adaptive `well` overlay, so the groove stays visible on any surface."),
3784
+ aliased("558b48be-bb6d-45cb-b176-6d4992d6bfd5", {
3785
+ kind: "component",
3786
+ component: "progress",
3787
+ anatomy: "indicator",
3788
+ property: "background-color"
3789
+ }, { role: "accent" }, "Indicator fill colour — the completed portion.", "The accent fill the indicator paints over the completed portion; the tone axis re-points it to a status role for a task outcome (failed/at-risk/succeeded).", { tone: {
3790
+ success: { role: "success" },
3791
+ warning: { role: "warning" },
3792
+ danger: { role: "danger" }
3793
+ } }),
3794
+ raw("487c7e44-a426-4acd-8a08-db59393518a0", {
3795
+ kind: "component",
3796
+ component: "progress",
3797
+ anatomy: "indicator",
3798
+ property: "border-radius"
3799
+ }, "var(--noctis-radius-control)", "Indicator corner radius.", "The rounding of the filled portion's ends; its own knob, defaulting to the same radius as the track."),
3800
+ raw("4bd1b7c1-036b-4a05-85e5-4a465f2db80c", {
3801
+ kind: "component",
3802
+ component: "progress",
3803
+ anatomy: "indicator",
3804
+ property: "transition-duration"
3805
+ }, "var(--noctis-duration-regular)", "Duration of the determinate fill's growth.", "How long the indicator takes to animate to a newly set value."),
3806
+ aliased("beca6739-e7e9-4d3a-965f-9802da1aad64", {
3807
+ kind: "component",
3808
+ component: "progress",
3809
+ anatomy: "label",
3810
+ property: "color"
3811
+ }, { role: "foreground" }, "Label text colour.", "The colour of the progress bar's label; minted (not hardcoded) so it is overridable and matches Meter."),
3812
+ aliased("226733a3-7faf-4da1-abf2-0263737a988e", {
3813
+ kind: "component",
3814
+ component: "progress",
3815
+ anatomy: "value",
3816
+ property: "color"
3817
+ }, { role: "muted" }, "Value text colour.", "The colour of the formatted value readout, quieter than the label by design; matches Meter."),
3818
+ raw("adbd2c72-05b2-4260-8850-2dcea7263e5a", {
3819
+ kind: "component",
3820
+ component: "progress",
3821
+ anatomy: "label",
3822
+ property: "font-size"
3823
+ }, "var(--noctis-text-small)", "Label font size.", "The type size of the progress bar's label."),
3824
+ raw("944bce97-5125-4c91-b35d-6278f42269df", {
3825
+ kind: "component",
3826
+ component: "progress",
3827
+ anatomy: "value",
3828
+ property: "font-size"
3829
+ }, "var(--noctis-text-small)", "Value font size.", "The type size of the formatted value text.")
3830
+ ]
3831
+ };
3832
+ const icon = {
3833
+ component: "icon",
3834
+ category: "system",
3835
+ slotPrefix: "noctis",
3836
+ anatomy: ["icon"],
3837
+ options: { size: [
3838
+ "xs",
3839
+ "sm",
3840
+ "md",
3841
+ "lg",
3842
+ "xl"
3843
+ ] },
3844
+ states: [],
3845
+ consumes: [],
3846
+ optionSlots: { size: "icon" },
3847
+ mints: [aliased("ab895e50-6750-48e6-a59d-2d915654665c", {
3848
+ kind: "component",
3849
+ component: "icon",
3850
+ property: "size"
3851
+ }, { raw: "var(--noctis-space-4)" }, "Edge length of an icon glyph.", "The width and height of a glyph per size step; `md` by default.", { size: {
3852
+ xs: { raw: "var(--noctis-space-3)" },
3853
+ sm: { raw: "var(--noctis-space-3\\.5)" },
3854
+ lg: { raw: "var(--noctis-space-5)" },
3855
+ xl: { raw: "var(--noctis-space-6)" }
3856
+ } })]
3857
+ };
3858
+ /**
3859
+ * The labelling and validation wiring layer. `Field` ties a label, control, description, and error
3860
+ * message together (Base UI manages the `aria-describedby`/`aria-labelledby` relationships); `Fieldset`
3861
+ * groups related fields under a shared legend; `Form` consolidates submission and validation. It mints
3862
+ * the typographic and rhythm knobs a consumer would retune per design — the vertical gaps between a
3863
+ * field's parts, the label/description/error/legend type sizes — leaving colour to the semantic roles
3864
+ * (the error reads `danger`).
3865
+ */
3866
+ const field = {
3867
+ component: "field",
3868
+ category: "fields",
3869
+ slotPrefix: "noctis",
3870
+ anatomy: [
3871
+ "field",
3872
+ "field-label",
3873
+ "field-control",
3874
+ "field-description",
3875
+ "field-error",
3876
+ "field-fieldset",
3877
+ "field-fieldset-legend",
3878
+ "field-form",
3879
+ "field-action",
3880
+ "field-count"
3881
+ ],
3882
+ options: {},
3883
+ states: ["disabled"],
3884
+ consumes: [],
3885
+ mints: [
3886
+ raw("71743988-e7bd-41bc-aebb-557d95be3104", {
3887
+ kind: "component",
3888
+ component: "field",
3889
+ property: "gap"
3890
+ }, "var(--noctis-space-1\\.5)", "Vertical rhythm between a field's parts (label, control, description, error).", "The block gap stacking a field's label, control, and helper text."),
3891
+ raw("277c4e3c-ac4e-4f98-81f5-39320b684989", {
3892
+ kind: "component",
3893
+ component: "field",
3894
+ anatomy: "label",
3895
+ property: "font-size"
3896
+ }, "var(--noctis-text-small)", "Field label type size.", "The font size of a field's label."),
3897
+ raw("48dc0204-6b5d-4dbc-a4d8-a5979d07d150", {
3898
+ kind: "component",
3899
+ component: "field",
3900
+ anatomy: "description",
3901
+ property: "font-size"
3902
+ }, "var(--noctis-text-small)", "Field description type size.", "The font size of a field's supporting description text."),
3903
+ raw("c4b49f75-8222-40b8-b533-5ea714574a0e", {
3904
+ kind: "component",
3905
+ component: "field",
3906
+ anatomy: "error",
3907
+ property: "font-size"
3908
+ }, "var(--noctis-text-small)", "Field error-message type size.", "The font size of a field's validation error message."),
3909
+ raw("f0490015-a0c2-4064-b296-8e14b116c93a", {
3910
+ kind: "component",
3911
+ component: "field",
3912
+ anatomy: "fieldset",
3913
+ property: "gap"
3914
+ }, "var(--noctis-space-4)", "Vertical rhythm between the fields grouped in a fieldset.", "The block gap between the legend and fields inside a fieldset."),
3915
+ raw("e374b2f0-b47f-48e3-bfdb-1b6e336e2b64", {
3916
+ kind: "component",
3917
+ component: "field",
3918
+ anatomy: "fieldset-legend",
3919
+ property: "font-size"
3920
+ }, "var(--noctis-text-regular)", "Fieldset legend type size.", "The font size of a fieldset's legend."),
3921
+ raw("c528d129-4091-4c50-b544-262c0895b7f7", {
3922
+ kind: "component",
3923
+ component: "field",
3924
+ anatomy: "form",
3925
+ property: "gap"
3926
+ }, "var(--noctis-space-5)", "Vertical rhythm between the fields and fieldsets stacked in a form.", "The block gap stacking a form's fields and fieldsets."),
3927
+ aliased("5b4d5a86-b46d-448f-836e-9543e1709ded", {
3928
+ kind: "component",
3929
+ component: "field",
3930
+ anatomy: "label",
3931
+ property: "color"
3932
+ }, { role: "foreground" }, "Field label text colour.", "The text colour of a field's label; full-strength foreground so the label leads the field."),
3933
+ aliased("089c2a38-89ec-4025-9602-6f10c10aa310", {
3934
+ kind: "component",
3935
+ component: "field",
3936
+ anatomy: "description",
3937
+ property: "color"
3938
+ }, { role: "muted" }, "Field description text colour.", "The text colour of a field's supporting description; muted so it sits below the label."),
3939
+ aliased("b3b8e944-220c-4d0d-a43a-e64c046ae389", {
3940
+ kind: "component",
3941
+ component: "field",
3942
+ anatomy: "error",
3943
+ property: "color"
3944
+ }, { role: "danger" }, "Field error-message text colour.", "The text colour of a field's validation error; the danger role signals the invalid state."),
3945
+ raw("04ce46ab-bd4c-4036-935e-f6e3c9505539", {
3946
+ kind: "component",
3947
+ component: "field",
3948
+ anatomy: "action",
3949
+ property: "size"
3950
+ }, "var(--noctis-space-6)", "In-field action size.", "The square side of an in-field action — a compact icon button. The host field overrides it per size (roughly its glyph size plus a tight inset); the default is the medium step."),
3951
+ aliased("333c603c-e341-4028-9ab4-ea4434f466be", {
3952
+ kind: "component",
3953
+ component: "field",
3954
+ anatomy: "action",
3955
+ property: "color"
3956
+ }, { role: "placeholder" }, "In-field action colour.", "The rest colour of an in-field action's glyph, as quiet as a placeholder until hovered."),
3957
+ aliased("50a09308-e52a-4d68-92e4-886120e2decd", {
3958
+ kind: "component",
3959
+ component: "field",
3960
+ anatomy: "action",
3961
+ property: "color",
3962
+ state: "hover"
3963
+ }, { role: "foreground" }, "In-field action hover colour.", "The glyph colour an in-field action lifts to on hover — the full foreground, never an accent."),
3964
+ aliased("170e1658-b367-4b1b-bd82-ea3117ff0389", {
3965
+ kind: "component",
3966
+ component: "field",
3967
+ anatomy: "action",
3968
+ property: "background-color",
3969
+ state: "hover"
3970
+ }, { role: "control-ghost-hover" }, "In-field action hover fill.", "The neutral ghost-control fill an in-field action takes on hover — the shared affordance idiom, never an accent wash."),
3971
+ aliased("63041e83-c92c-4b8e-b9e1-7447884d71c5", {
3972
+ kind: "component",
3973
+ component: "field",
3974
+ anatomy: "count",
3975
+ property: "color"
3976
+ }, { role: "muted" }, "Character-count colour.", "The quiet rest colour of the in-field character-count readout, well below the value in emphasis."),
3977
+ aliased("6528fde1-f2f2-449d-8e50-243ee6ea0559", {
3978
+ kind: "component",
3979
+ component: "field",
3980
+ anatomy: "count",
3981
+ property: "color-warning"
3982
+ }, { role: "warning" }, "Character-count near-limit colour.", "The warning colour the count escalates to as it nears the limit, ahead of the danger role at the limit.")
3983
+ ]
3984
+ };
3985
+ /** The polymorphic styled-element base. Zero styling of its own, so it mints nothing. */
3986
+ const primitive = {
3987
+ component: "primitive",
3988
+ slotPrefix: "noctis",
3989
+ anatomy: ["primitive"],
3990
+ options: {},
3991
+ states: [],
3992
+ consumes: [],
3993
+ mints: []
3994
+ };
3995
+ /**
3996
+ * The radius escape hatch. It sets the `--radius` knob (and the `data-radius-scope` attribute) the
3997
+ * whole `rounded-*` scale re-derives from, so it mints no component token of its own — the knob is the
3998
+ * established T1 seam.
3999
+ */
4000
+ const radiusScope = {
4001
+ component: "radius-scope",
4002
+ slotPrefix: "noctis",
4003
+ anatomy: ["radius-scope"],
4004
+ options: {},
4005
+ states: [],
4006
+ consumes: [],
4007
+ mints: []
4008
+ };
4009
+ /** Visually hides content while keeping it in the a11y tree (`sr-only`). No anatomy-level seam to mint. */
4010
+ const visuallyHidden = {
4011
+ component: "visually-hidden",
4012
+ slotPrefix: "noctis",
4013
+ anatomy: ["visually-hidden"],
4014
+ options: {},
4015
+ states: [],
4016
+ consumes: [],
4017
+ mints: []
4018
+ };
4019
+ const toggle = {
4020
+ component: "toggle",
4021
+ category: "actions",
4022
+ slotPrefix: "noctis",
4023
+ anatomy: ["toggle", "toggle-group"],
4024
+ options: {
4025
+ variant: [
4026
+ "ghost",
4027
+ "accent",
4028
+ "primary",
4029
+ "outline"
4030
+ ],
4031
+ size: [
4032
+ "xs",
4033
+ "sm",
4034
+ "md",
4035
+ "lg"
4036
+ ]
4037
+ },
4038
+ states: ["selected"],
4039
+ consumes: [],
4040
+ optionSlots: {
4041
+ variant: "toggle",
4042
+ size: "toggle"
4043
+ },
4044
+ mints: [
4045
+ aliased("ce74b4fc-3413-43b3-9e7a-56a21b53c5df", {
4046
+ kind: "component",
4047
+ component: "toggle",
4048
+ property: "height"
4049
+ }, { raw: "var(--noctis-size-control-md)" }, "Toggle height (and the side of an icon-only toggle).", "The control height per size; an icon-only square toggle reads the same token.", { size: {
4050
+ xs: { raw: "var(--noctis-size-control-xs)" },
4051
+ sm: { raw: "var(--noctis-size-control-sm)" },
4052
+ lg: { raw: "var(--noctis-size-control-lg)" }
4053
+ } }),
4054
+ aliased("9f3482a0-6901-4a28-82a5-da018a8a9dc9", {
4055
+ kind: "component",
4056
+ component: "toggle",
4057
+ property: "padding-inline"
4058
+ }, { raw: "0.625rem" }, "Toggle inline padding.", "The horizontal inset of a toggle's label per size.", { size: {
4059
+ xs: { raw: "0.375rem" },
4060
+ sm: { raw: "0.5rem" },
4061
+ lg: { raw: "0.875rem" }
4062
+ } }),
4063
+ aliased("b10358a3-7343-421f-bd48-07553ba62742", {
4064
+ kind: "component",
4065
+ component: "toggle",
4066
+ property: "gap"
4067
+ }, { raw: "0.375rem" }, "Gap between a toggle's icon and its label.", "The spacing between the leading glyph and the label per size.", { size: {
4068
+ xs: { raw: "0.1875rem" },
4069
+ sm: { raw: "0.25rem" },
4070
+ lg: { raw: "0.5rem" }
4071
+ } }),
4072
+ raw("95e3d739-6c2a-4a46-ac09-b8c0d4054e3d", {
4073
+ kind: "component",
4074
+ component: "toggle",
4075
+ property: "border-radius"
4076
+ }, "var(--noctis-radius-control)", "Toggle corner radius.", "The corner radius; follows the radius knob uncapped, like Button, so toggles go fully pill at the Pill setting."),
4077
+ aliased("b1d4f8a2-3c7e-4e91-9a6d-2f5c8b0e7d34", {
4078
+ kind: "component",
4079
+ component: "toggle",
4080
+ property: "icon-size"
4081
+ }, { raw: "var(--noctis-space-4)" }, "Icon-only toggle glyph size.", "The glyph size an icon-only toggle imposes on its single icon per size — mirrors the button icon scale so a bare glyph reads balanced in the square instead of at its own intrinsic dimensions.", { size: {
4082
+ xs: { raw: "var(--noctis-space-3)" },
4083
+ sm: { raw: "var(--noctis-space-3\\.5)" }
4084
+ } }),
4085
+ aliased("6e658ecc-0ceb-445c-856e-8ba4f0ef4995", {
4086
+ kind: "component",
4087
+ component: "toggle",
4088
+ property: "font-size"
4089
+ }, { raw: "var(--noctis-text-small)" }, "Toggle label font size.", "The label type size per size step.", { size: {
4090
+ xs: { raw: "var(--noctis-text-mini)" },
4091
+ sm: { raw: "var(--noctis-text-mini)" },
4092
+ lg: { raw: "var(--noctis-text-regular)" }
4093
+ } }),
4094
+ raw("a8cfc863-a2e6-4523-b935-ba4e7e561dc8", {
4095
+ kind: "component",
4096
+ component: "toggle",
4097
+ property: "transition-duration"
4098
+ }, "var(--noctis-duration-quick)", "Toggle colour-transition duration.", "How long the resting/hover/pressed fill cross-fades."),
4099
+ raw("4bfdcb10-60ff-4918-9e14-b0ae113e3ccb", {
4100
+ kind: "component",
4101
+ component: "toggle",
4102
+ anatomy: "group",
4103
+ property: "gap"
4104
+ }, "var(--noctis-space-1)", "Gap between toggles in a group.", "The spacing between adjacent toggle buttons in a toggle group.")
4105
+ ]
4106
+ };
4107
+ const COMPONENT_DECLARATIONS = [
4108
+ autocomplete,
4109
+ field,
4110
+ textarea,
4111
+ kbd,
4112
+ {
4113
+ component: "meter",
4114
+ category: "data",
4115
+ slotPrefix: "noctis",
4116
+ anatomy: [
4117
+ "meter",
4118
+ "meter-track",
4119
+ "meter-indicator",
4120
+ "meter-label",
4121
+ "meter-value"
4122
+ ],
4123
+ options: {
4124
+ tone: [
4125
+ "neutral",
4126
+ "success",
4127
+ "warning",
4128
+ "danger"
4129
+ ],
4130
+ size: ["sm", "md"],
4131
+ labels: ["top", "side"]
4132
+ },
4133
+ states: [],
4134
+ consumes: [],
4135
+ slotGroups: { root: ["meter"] },
4136
+ optionSlots: {
4137
+ tone: "meter",
4138
+ size: "meter",
4139
+ labels: "meter"
4140
+ },
4141
+ mints: [
4142
+ raw("91495771-19ef-45e2-b7f4-526460524be5", {
4143
+ kind: "component",
4144
+ component: "meter",
4145
+ anatomy: "root",
4146
+ property: "gap"
4147
+ }, "var(--noctis-space-2)", "Gap between the meter's label/value row and its track.", "The spacing the root stack holds between the caption row and the bar; matches Progress's root gap."),
4148
+ aliased("2f8eec2b-c963-4da4-8c33-537308155d79", {
4149
+ kind: "component",
4150
+ component: "meter",
4151
+ anatomy: "track",
4152
+ property: "block-size"
4153
+ }, { raw: "0.5rem" }, "Track thickness — the height of the bar.", "The block size of the meter bar per size; a thin 8px rail at `md` (the default, matching Progress) and a 4px rail at `sm`. Override with the `thickness` prop or the public var for any height.", { size: { sm: { raw: "0.25rem" } } }),
4154
+ raw("0da84751-c276-40fd-943f-2ecbd3e827a5", {
4155
+ kind: "component",
4156
+ component: "meter",
4157
+ anatomy: "track",
4158
+ property: "border-radius"
4159
+ }, "var(--noctis-radius-control)", "Track corner radius.", "The rounding of the track and its fill ends; follows the radius knob uncapped so a thin bar reads as a rounded rail, exactly like Progress."),
4160
+ aliased("8de32fe3-5eaf-4022-9252-eeeb1af7d310", {
4161
+ kind: "component",
4162
+ component: "meter",
4163
+ anatomy: "track",
4164
+ property: "background-color"
4165
+ }, { role: "well" }, "Track fill — the unfilled remainder of the bar.", "The recessed groove the indicator fills against; the surface-adaptive `well` overlay, so the remainder stays visible on any surface."),
4166
+ aliased("5a8beaee-0637-40b4-8100-4850cf770faf", {
4167
+ kind: "component",
4168
+ component: "meter",
4169
+ anatomy: "indicator",
4170
+ property: "background-color"
4171
+ }, { role: "foreground" }, "Indicator fill — the measured portion of the bar.", "The fill colour of the filled portion; the tone axis re-points it to a status role.", { tone: {
4172
+ success: { role: "success" },
4173
+ warning: { role: "warning" },
4174
+ danger: { role: "danger" }
4175
+ } }),
4176
+ raw("45125082-e990-4bab-9dfd-38f53b14c04b", {
4177
+ kind: "component",
4178
+ component: "meter",
4179
+ anatomy: "indicator",
4180
+ property: "border-radius"
4181
+ }, "var(--noctis-radius-control)", "Indicator corner radius.", "The rounding of the filled portion's ends; follows the radius knob, matching the track."),
4182
+ raw("3a416a48-cd55-4cf6-bf93-18ef8c9d5001", {
4183
+ kind: "component",
4184
+ component: "meter",
4185
+ anatomy: "indicator",
4186
+ property: "transition-duration"
4187
+ }, "var(--noctis-duration-regular)", "Duration of the fill's growth.", "How long the indicator takes to ease to a newly set value; mirrors Progress, and is dropped under reduced motion."),
4188
+ aliased("a3c80ee2-4573-44fb-b8a2-9df408316d75", {
4189
+ kind: "component",
4190
+ component: "meter",
4191
+ anatomy: "label",
4192
+ property: "color"
4193
+ }, { role: "foreground" }, "Label text colour.", "The colour of the meter's caption label."),
4194
+ aliased("c86193f2-4390-4b12-8bf1-2528d50863c8", {
4195
+ kind: "component",
4196
+ component: "meter",
4197
+ anatomy: "value",
4198
+ property: "color"
4199
+ }, { role: "muted" }, "Value text colour.", "The colour of the formatted value readout, quieter than the label by design."),
4200
+ raw("3626baf7-024c-41a1-aa1f-28d710e84392", {
4201
+ kind: "component",
4202
+ component: "meter",
4203
+ anatomy: "label",
4204
+ property: "font-size"
4205
+ }, "var(--noctis-text-small)", "Label font size.", "The type size of the meter's caption label; per-part to match Progress's token shape."),
4206
+ raw("5d91fea3-5ab7-4a8a-9e19-9cef2b1277f0", {
4207
+ kind: "component",
4208
+ component: "meter",
4209
+ anatomy: "value",
4210
+ property: "font-size"
4211
+ }, "var(--noctis-text-small)", "Value font size.", "The type size of the formatted value readout; per-part to match Progress's token shape."),
4212
+ aliased("15e1a9a7-570f-495d-9246-8f4429b25714", {
4213
+ kind: "component",
4214
+ component: "meter",
4215
+ anatomy: "track",
4216
+ property: "threshold-marker-color"
4217
+ }, { raw: "color-mix(in oklch, var(--noctis-color-foreground) 30%, transparent)" }, "Threshold marker colour.", "The colour of the optional hairline drawn on the track at the `high` boundary; a translucent foreground overlay just one step more opaque than the `well` track fill (the foreground at 20%), so the tick sits a touch lighter than the empty track — a restrained notch, not a bright line — and still lightens faintly through the coloured indicator where the value has passed the boundary, in either mode. Shown only when thresholds are declared. (Replaces the old `border` role, which painted a near-black hairline darker than the track.)"),
4218
+ raw("a4337dad-e8f2-4e3f-899f-1534021ac8ad", {
4219
+ kind: "component",
4220
+ component: "meter",
4221
+ anatomy: "track",
4222
+ property: "threshold-marker-inline-size"
4223
+ }, "1px", "Threshold marker thickness.", "The width of the `high`-boundary hairline; a single sharp line, not a segmented zone.")
4224
+ ]
4225
+ },
4226
+ inlineCode,
4227
+ input,
4228
+ table,
4229
+ codeBlock,
4230
+ codeTabs,
4231
+ codeCopy,
4232
+ menu,
4233
+ menubar,
4234
+ previewCard,
4235
+ popover,
4236
+ tooltip,
4237
+ contextMenu,
4238
+ button,
4239
+ buttonGroup,
4240
+ tabs,
4241
+ toolbar,
4242
+ accordion,
4243
+ toggle,
4244
+ numberField,
4245
+ navigationMenu,
4246
+ surface,
4247
+ scrollArea,
4248
+ separator,
4249
+ sheet,
4250
+ toast,
4251
+ collapsible,
4252
+ alertDialog,
4253
+ rail,
4254
+ combobox,
4255
+ searchDialog,
4256
+ dialog,
4257
+ colorPicker,
4258
+ radio,
4259
+ colorSwatch,
4260
+ slider,
4261
+ checkbox,
4262
+ avatar,
4263
+ otpField,
4264
+ switchControl,
4265
+ progress,
4266
+ {
4267
+ component: "select",
4268
+ category: "fields",
4269
+ slotPrefix: "noctis",
4270
+ anatomy: [
4271
+ "select-trigger",
4272
+ "select-value",
4273
+ "select-icon",
4274
+ "select-backdrop",
4275
+ "select-popup",
4276
+ "select-scroll-up-arrow",
4277
+ "select-list",
4278
+ "select-scroll-down-arrow",
4279
+ "select-item",
4280
+ "select-item-icon",
4281
+ "select-item-text",
4282
+ "select-item-description",
4283
+ "select-item-indicator",
4284
+ "select-group",
4285
+ "select-group-label",
4286
+ "select-separator"
4287
+ ],
4288
+ options: { size: ["md", "lg"] },
4289
+ states: [
4290
+ "highlighted",
4291
+ "selected",
4292
+ "disabled",
4293
+ "open"
4294
+ ],
4295
+ consumes: [],
4296
+ optionSlots: { size: "select-trigger" },
4297
+ mints: [
4298
+ aliased("869094bf-6153-42fd-b8ba-406f299b7f34", {
4299
+ kind: "component",
4300
+ component: "select",
4301
+ anatomy: "trigger",
4302
+ property: "height"
4303
+ }, { raw: "var(--noctis-size-control-md)" }, "Height of the select trigger.", "The trigger control height per size; rides the shared control-height ladder, so it density-scales.", { size: { lg: { raw: "var(--noctis-size-control-lg)" } } }),
4304
+ aliased("e61a08e8-8f15-4464-8fe7-a0f1838cca5e", {
4305
+ kind: "component",
4306
+ component: "select",
4307
+ anatomy: "trigger",
4308
+ property: "padding-inline"
4309
+ }, { raw: "var(--noctis-space-3)" }, "Inline padding of the select trigger.", "The horizontal inset between the trigger edges and its value/icon per size; rides the spacing scale.", { size: { lg: { raw: "var(--noctis-space-4)" } } }),
4310
+ raw("6e084602-b661-4b79-b656-039563fc06fc", {
4311
+ kind: "component",
4312
+ component: "select",
4313
+ anatomy: "trigger",
4314
+ property: "gap"
4315
+ }, "var(--noctis-space-2)", "Gap between the trigger value and its chevron.", "The spacing separating the selected value from the trailing chevron."),
4316
+ raw("ad91b12d-287d-4980-9457-c81f500bb5cc", {
4317
+ kind: "component",
4318
+ component: "select",
4319
+ anatomy: "trigger",
4320
+ property: "border-radius"
4321
+ }, "var(--noctis-radius-control)", "Corner radius of the select trigger.", "The trigger's corner radius; follows the control radius knob like other fields."),
4322
+ aliased("4a72f934-219a-44a3-ad5b-9975306d2e10", {
4323
+ kind: "component",
4324
+ component: "select",
4325
+ anatomy: "trigger",
4326
+ property: "font-size"
4327
+ }, { raw: "var(--noctis-text-small)" }, "Font size of the select trigger value.", "The type size of the selected value per size step.", { size: { lg: { raw: "var(--noctis-text-regular)" } } }),
4328
+ aliased("5e1ec70a-0001-4a1b-8c2d-3e4f5a6b7c01", {
4329
+ kind: "component",
4330
+ component: "select",
4331
+ anatomy: "trigger",
4332
+ property: "shadow"
4333
+ }, { raw: "var(--noctis-shadow-inset)" }, "Select trigger rest shadow.", "The subtle inset shadow the trigger wears at rest, matching the rest of the field family."),
4334
+ raw("e029e70d-4af2-4a10-89ce-d92841093e92", {
4335
+ kind: "component",
4336
+ component: "select",
4337
+ anatomy: "popup",
4338
+ property: "min-width"
4339
+ }, "8rem", "Minimum width of the select popup.", "The popup's min-width floor; it otherwise matches the trigger width and stretches to the longest row."),
4340
+ raw("5e1ec70a-000d-4a1b-8c2d-3e4f5a6b7c0d", {
4341
+ kind: "component",
4342
+ component: "select",
4343
+ anatomy: "popup",
4344
+ property: "max-width"
4345
+ }, "24rem", "Maximum width of the select popup.", "The cap the popup grows to before rows truncate with an ellipsis (also bounded by the viewport)."),
4346
+ raw("5e1ec70a-000f-4a1b-8c2d-3e4f5a6b7c0f", {
4347
+ kind: "component",
4348
+ component: "select",
4349
+ anatomy: "popup",
4350
+ property: "overlay-inset"
4351
+ }, "0px", "Overlay-placement width compensation for the select popup.", "Extra inline width the popup adds in overlay placement (`alignItemWithTrigger`) so that, once shifted to line the selected row up under the trigger value, it still fully covers the trigger; 0 otherwise. `select.css` resolves it from a row's leading inset (and the icon column when rows carry icons)."),
4352
+ aliased("5e1ec70a-000c-4a1b-8c2d-3e4f5a6b7c0c", {
4353
+ kind: "component",
4354
+ component: "select",
4355
+ anatomy: "backdrop",
4356
+ property: "background-color"
4357
+ }, { raw: "transparent" }, "Select backdrop scrim colour.", "The fill of the modal backdrop behind the popup; transparent by default (no page dimming) — re-point to a scrim role to dim."),
4358
+ raw("5e1ec70a-0008-4a1b-8c2d-3e4f5a6b7c08", {
4359
+ kind: "component",
4360
+ component: "select",
4361
+ anatomy: "scroll-up-arrow",
4362
+ property: "height"
4363
+ }, "var(--noctis-space-6)", "Height of the sticky scroll-up arrow.", "The grab strip pinned to the popup's top edge while there is more to scroll up to."),
4364
+ aliased("5e1ec70a-0009-4a1b-8c2d-3e4f5a6b7c09", {
4365
+ kind: "component",
4366
+ component: "select",
4367
+ anatomy: "scroll-up-arrow",
4368
+ property: "color"
4369
+ }, { role: "muted" }, "Colour of the scroll-up arrow glyph.", "The muted chevron marking that the list scrolls further up."),
4370
+ raw("5e1ec70a-000a-4a1b-8c2d-3e4f5a6b7c0a", {
4371
+ kind: "component",
4372
+ component: "select",
4373
+ anatomy: "scroll-down-arrow",
4374
+ property: "height"
4375
+ }, "var(--noctis-space-6)", "Height of the sticky scroll-down arrow.", "The grab strip pinned to the popup's bottom edge while there is more to scroll down to."),
4376
+ aliased("5e1ec70a-000b-4a1b-8c2d-3e4f5a6b7c0b", {
4377
+ kind: "component",
4378
+ component: "select",
4379
+ anatomy: "scroll-down-arrow",
4380
+ property: "color"
4381
+ }, { role: "muted" }, "Colour of the scroll-down arrow glyph.", "The muted chevron marking that the list scrolls further down."),
4382
+ raw("6a319dbf-06e5-4895-a363-2d51d38860e6", {
4383
+ kind: "component",
4384
+ component: "select",
4385
+ anatomy: "list",
4386
+ property: "padding"
4387
+ }, "0.25rem", "Padding around the scrollable list inside the popup.", "The inset between the popup edge and its rows."),
4388
+ raw("a5f28d78-ebe1-4daf-a417-5b01ded4da36", {
4389
+ kind: "component",
4390
+ component: "select",
4391
+ anatomy: "item",
4392
+ property: "height"
4393
+ }, "2rem", "Minimum height of a select row.", "The row's min-height; the inline padding rhythm fills any extra space."),
4394
+ raw("c2b78994-1f4c-4020-8869-d31e1e39c953", {
4395
+ kind: "component",
4396
+ component: "select",
4397
+ anatomy: "item",
4398
+ property: "padding-inline"
4399
+ }, "0.625rem", "Inline padding of a select row.", "The horizontal inset of a row's content."),
4400
+ raw("8971bb97-fc31-4237-a458-d2274017c492", {
4401
+ kind: "component",
4402
+ component: "select",
4403
+ anatomy: "item",
4404
+ property: "gap"
4405
+ }, "0.625rem", "Gap between a row's leading icon, its label, and the trailing check.", "The spacing between the leading icon column, the label, and the trailing selected-check."),
4406
+ raw("7f48bacf-d976-4c27-b2c9-31c52ac5a473", {
4407
+ kind: "component",
4408
+ component: "select",
4409
+ anatomy: "item",
4410
+ property: "border-radius"
4411
+ }, "var(--noctis-radius-sm)", "Corner radius of a select row's highlight.", "The radius of the row's hover/highlight fill."),
4412
+ aliased("5e1ec70a-0002-4a1b-8c2d-3e4f5a6b7c02", {
4413
+ kind: "component",
4414
+ component: "select",
4415
+ anatomy: "item",
4416
+ property: "color"
4417
+ }, { role: "foreground" }, "Select row label colour.", "The full-strength text colour of a row; the trailing check inherits it."),
4418
+ aliased("5e1ec70a-0003-4a1b-8c2d-3e4f5a6b7c03", {
4419
+ kind: "component",
4420
+ component: "select",
4421
+ anatomy: "item",
4422
+ property: "color",
4423
+ state: "highlighted"
4424
+ }, { role: "foreground" }, "Select row label colour while highlighted.", "The text colour of the pointer/keyboard-highlighted row, at full strength."),
4425
+ aliased("5e1ec70a-0004-4a1b-8c2d-3e4f5a6b7c04", {
4426
+ kind: "component",
4427
+ component: "select",
4428
+ anatomy: "item",
4429
+ property: "background-color",
4430
+ state: "highlighted"
4431
+ }, { role: "control-ghost-hover" }, "Select row highlight fill.", "The neutral fill behind the highlighted row — the only row fill (the selected row is marked by its trailing check, not a tint)."),
4432
+ raw("5e1ec70a-0005-4a1b-8c2d-3e4f5a6b7c05", {
4433
+ kind: "component",
4434
+ component: "select",
4435
+ anatomy: "item",
4436
+ property: "icon-size"
4437
+ }, "1rem", "Size of a row's leading icon, colour dot, or avatar.", "The width and height of the optional leading-content column on a row, kept equal so labels align."),
4438
+ aliased("5e1ec70a-0006-4a1b-8c2d-3e4f5a6b7c06", {
4439
+ kind: "component",
4440
+ component: "select",
4441
+ anatomy: "item-description",
4442
+ property: "font-size"
4443
+ }, { raw: "var(--noctis-text-mini)" }, "Font size of a row's secondary description line.", "The type size of the muted second line on a two-line row."),
4444
+ aliased("5e1ec70a-0007-4a1b-8c2d-3e4f5a6b7c07", {
4445
+ kind: "component",
4446
+ component: "select",
4447
+ anatomy: "item-description",
4448
+ property: "color"
4449
+ }, { role: "muted" }, "Colour of a row's secondary description line.", "The muted colour of the second line on a two-line row."),
4450
+ raw("5379da10-9a25-4470-816e-1f87434156b6", {
4451
+ kind: "component",
4452
+ component: "select",
4453
+ anatomy: "item-indicator",
4454
+ property: "size"
4455
+ }, "0.875rem", "Size of the trailing check on a selected row.", "The width and height of the trailing selected-check glyph."),
4456
+ raw("33b6f5d1-5d0a-4d6a-9d3e-2c7c2f6a91ab", {
4457
+ kind: "component",
4458
+ component: "select",
4459
+ anatomy: "separator",
4460
+ property: "thickness"
4461
+ }, "var(--noctis-space-px)", "Thickness of the rule between select groups.", "The hairline height of a separator; static 1px, never density-scaled."),
4462
+ raw("5e1ec70a-000e-4a1b-8c2d-3e4f5a6b7c0e", {
4463
+ kind: "component",
4464
+ component: "select",
4465
+ anatomy: "group-label",
4466
+ property: "padding-inline"
4467
+ }, "0.625rem", "Inline padding of a group label.", "The horizontal inset of a group heading — matched to a row's inline padding so the heading aligns with the labels beneath it (the heading owns its own inset; the row's internal isn't in scope here)."),
4468
+ raw("114c0575-2e22-42a4-8609-a0254a9a1720", {
4469
+ kind: "component",
4470
+ component: "select",
4471
+ anatomy: "group-label",
4472
+ property: "padding-block-start"
4473
+ }, "var(--noctis-space-2)", "Top inset of a group label.", "The block-start padding above a group heading, separating it from the rows before it."),
4474
+ raw("17a3de33-34f2-4c2d-8336-0df627ceed79", {
4475
+ kind: "component",
4476
+ component: "select",
4477
+ anatomy: "group-label",
4478
+ property: "padding-block-end"
4479
+ }, "var(--noctis-space-1\\.5)", "Bottom inset of a group label.", "The block-end padding tying a group heading to the rows it introduces.")
4480
+ ]
4481
+ },
4482
+ icon,
4483
+ primitive,
4484
+ radiusScope,
4485
+ visuallyHidden
4486
+ ];
4487
+ //#endregion
4488
+ export { COMPONENT_DECLARATIONS };