@cueplusplus/ui 0.18.2 → 0.19.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 (136) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/brand/_motif-seed.js +20 -0
  3. package/dist/brand/gloss-object.d.ts +23 -0
  4. package/dist/brand/gloss-object.js +108 -0
  5. package/dist/brand/halftone.d.ts +23 -0
  6. package/dist/brand/halftone.js +54 -0
  7. package/dist/brand/index.d.ts +6 -1
  8. package/dist/brand/motif.d.ts +32 -0
  9. package/dist/brand/motif.js +71 -0
  10. package/dist/brand/particle-mark.d.ts +29 -0
  11. package/dist/brand/particle-mark.js +137 -0
  12. package/dist/brand/ribbon.d.ts +20 -0
  13. package/dist/brand/ribbon.js +54 -0
  14. package/dist/chrome/announcement-bar.d.ts +30 -0
  15. package/dist/chrome/announcement-bar.js +38 -0
  16. package/dist/chrome/app-bar.d.ts +4 -1
  17. package/dist/chrome/app-bar.js +7 -2
  18. package/dist/chrome/app-shell.js +8 -1
  19. package/dist/chrome/band.d.ts +3 -1
  20. package/dist/chrome/band.js +4 -3
  21. package/dist/chrome/hero.d.ts +61 -0
  22. package/dist/chrome/hero.js +108 -0
  23. package/dist/chrome/index.d.ts +6 -1
  24. package/dist/chrome/index.js +6 -1
  25. package/dist/chrome/keyword.d.ts +22 -0
  26. package/dist/chrome/keyword.js +28 -0
  27. package/dist/chrome/logo-strip.d.ts +23 -0
  28. package/dist/chrome/logo-strip.js +43 -0
  29. package/dist/chrome/page-shell.js +13 -1
  30. package/dist/chrome/stat-band.d.ts +32 -0
  31. package/dist/chrome/stat-band.js +39 -0
  32. package/dist/dmx/channel-matrix.js +5 -3
  33. package/dist/dmx/dmx-strip.js +5 -3
  34. package/dist/elements/animated-number.js +4 -1
  35. package/dist/elements/replay.d.ts +1 -1
  36. package/dist/elements/replay.js +5 -2
  37. package/dist/elements/scroll-anchor.js +4 -1
  38. package/dist/index.d.ts +13 -1
  39. package/dist/index.js +14 -2
  40. package/dist/instruments/index.js +1 -1
  41. package/dist/instruments/stat.js +1 -1
  42. package/dist/instruments/terminal-frame.js +5 -2
  43. package/dist/layout/grid.js +4 -2
  44. package/dist/layout/preview.js +4 -188
  45. package/dist/layout/sidebar.js +88 -52
  46. package/dist/overlays/_surface.d.ts +2 -2
  47. package/dist/primitives/button.js +22 -3
  48. package/dist/primitives/chip.js +62 -6
  49. package/dist/styles.css +26 -0
  50. package/dist/system/_scoped-pairing.js +18 -0
  51. package/dist/system/_stage-scope.js +199 -0
  52. package/dist/system/_style-check.js +1 -1
  53. package/dist/system/_style-chip.js +1 -1
  54. package/dist/system/_style-group-label.js +7 -3
  55. package/dist/system/_style-hero-title.js +41 -0
  56. package/dist/system/_style-kbd.js +1 -1
  57. package/dist/system/_style-label-ink.js +12 -5
  58. package/dist/system/_style-menu.js +1 -1
  59. package/dist/system/_style-page-title.js +1 -1
  60. package/dist/system/_style-segmented-control.js +1 -1
  61. package/dist/system/_style-skeleton.js +1 -1
  62. package/dist/system/_style-tab.js +1 -1
  63. package/dist/system/font-scope.d.ts +38 -0
  64. package/dist/system/font-scope.js +69 -0
  65. package/dist/system/index.d.ts +3 -1
  66. package/dist/system/index.js +3 -1
  67. package/dist/system/portal.js +7 -1
  68. package/dist/system/still.d.ts +32 -0
  69. package/dist/system/still.js +47 -0
  70. package/manifest/components/alert-dialog.json +1 -1
  71. package/manifest/components/announcement-bar.json +82 -0
  72. package/manifest/components/app-bar.json +3 -2
  73. package/manifest/components/app-shell.json +3 -0
  74. package/manifest/components/autocomplete.json +1 -0
  75. package/manifest/components/band.json +2 -1
  76. package/manifest/components/bento.json +12 -12
  77. package/manifest/components/button.json +1 -0
  78. package/manifest/components/channel-matrix.json +1 -0
  79. package/manifest/components/chart-tooltip-content.json +1 -0
  80. package/manifest/components/checkbox-group.json +1 -1
  81. package/manifest/components/checkbox.json +1 -1
  82. package/manifest/components/chip.json +1 -0
  83. package/manifest/components/combobox.json +1 -0
  84. package/manifest/components/command-palette.json +1 -0
  85. package/manifest/components/context-menu.json +1 -1
  86. package/manifest/components/density.json +6 -2
  87. package/manifest/components/dialog.json +1 -1
  88. package/manifest/components/dmx-bar.json +1 -1
  89. package/manifest/components/dmx-strip.json +1 -1
  90. package/manifest/components/drawer.json +1 -1
  91. package/manifest/components/dropdown-menu.json +1 -0
  92. package/manifest/components/font-scope.json +81 -0
  93. package/manifest/components/footer.json +0 -1
  94. package/manifest/components/gloss-object.json +81 -0
  95. package/manifest/components/grid.json +6 -6
  96. package/manifest/components/halftone.json +79 -0
  97. package/manifest/components/hero.json +204 -0
  98. package/manifest/components/hover-card.json +1 -1
  99. package/manifest/components/kbd.json +1 -0
  100. package/manifest/components/keyword.json +67 -0
  101. package/manifest/components/ledger.json +4 -4
  102. package/manifest/components/logo-strip.json +93 -0
  103. package/manifest/components/markdown-text.json +2 -2
  104. package/manifest/components/menubar.json +1 -1
  105. package/manifest/components/motif.json +90 -0
  106. package/manifest/components/multi-select.json +1 -0
  107. package/manifest/components/navigation-menu.json +1 -0
  108. package/manifest/components/page-shell.json +5 -0
  109. package/manifest/components/particle-mark.json +75 -0
  110. package/manifest/components/popover.json +1 -1
  111. package/manifest/components/preview.json +9 -4
  112. package/manifest/components/radio-group.json +0 -1
  113. package/manifest/components/radio.json +0 -1
  114. package/manifest/components/ribbon.json +65 -0
  115. package/manifest/components/scrollable-tabs-list.json +1 -0
  116. package/manifest/components/segmented-control.json +1 -0
  117. package/manifest/components/sheet.json +1 -1
  118. package/manifest/components/sidebar.json +1 -0
  119. package/manifest/components/skeleton.json +1 -0
  120. package/manifest/components/stack.json +4 -4
  121. package/manifest/components/stat-band.json +68 -0
  122. package/manifest/components/stat.json +1 -1
  123. package/manifest/components/still-provider.json +60 -0
  124. package/manifest/components/switch.json +0 -1
  125. package/manifest/components/table.json +1 -1
  126. package/manifest/components/tabs.json +1 -0
  127. package/manifest/components/tags-input.json +1 -0
  128. package/manifest/components/theme-configurator.json +1 -0
  129. package/manifest/components/theme-provider.json +9 -4
  130. package/manifest/components/toast.json +1 -0
  131. package/manifest/components/tooltip.json +1 -1
  132. package/manifest/fixtures.json +18 -0
  133. package/manifest/manifest.json +267 -55
  134. package/manifest/tokens.json +91 -3
  135. package/package.json +4 -4
  136. package/dist/system/_paint-ground-pattern.js +0 -30
@@ -23,7 +23,7 @@
23
23
  },
24
24
  {
25
25
  "name": "gap",
26
- "type": "0 | 4 | 8 | 1 | 2 | 3 | 5 | 6 | 7",
26
+ "type": "0 | 1 | 4 | 8 | 2 | 3 | 5 | 6 | 7",
27
27
  "required": false,
28
28
  "defaultValue": "4",
29
29
  "description": "Which rung of the density space ladder to spend between children. Defaults to `4`.",
@@ -31,14 +31,14 @@
31
31
  "kind": "enum",
32
32
  "members": [
33
33
  0,
34
- 4,
35
- 8,
36
34
  1,
37
35
  2,
38
36
  3,
37
+ 4,
39
38
  5,
40
39
  6,
41
- 7
40
+ 7,
41
+ 8
42
42
  ],
43
43
  "min": 0,
44
44
  "max": 8
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "StatBand",
3
+ "slug": "stat-band",
4
+ "group": "chrome",
5
+ "importPath": "@cueplusplus/ui",
6
+ "peerDependencies": [],
7
+ "clientOnly": false,
8
+ "description": "A row of named figures: the KPI band under a report's title.\n\nBuilt from `Stat`, so each figure keeps its caption-over-reading voice and its\ntabular numerals. The style set decides the band's look: `style-stat-divider`\ndraws a rule between figures, and `Stat` reads `style-stat-numeral-ink` for the\nreading's colour. Unset, there is no rule and the reading keeps its ink. A\nwrapped row's first figure draws no rule, so a narrow screen never shows a\ndivider hanging off the left edge.\n\nStatic markup — no `\"use client\"`.",
9
+ "props": [
10
+ {
11
+ "name": "stats",
12
+ "type": "readonly StatBandStat[]",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "The figures, in reading order. One to six sit in one row; more wrap.",
16
+ "control": {
17
+ "kind": "array",
18
+ "fixture": "sample.stats"
19
+ }
20
+ }
21
+ ],
22
+ "typeReferences": [
23
+ "React.ComponentPropsWithoutRef<\"div\">"
24
+ ],
25
+ "subcomponents": [],
26
+ "parts": [],
27
+ "variants": {},
28
+ "defaultVariants": {},
29
+ "tokensUsed": [
30
+ "--cue-space-5",
31
+ "--cue-style-stat-divider"
32
+ ],
33
+ "summary": "A row of named figures, each a `Stat`: the KPI band under a report's title.",
34
+ "examples": [
35
+ {
36
+ "title": "Usage",
37
+ "code": "<StatBand stats={[{ label: \"SKUs\", value: \"1,091\" }, { label: \"Brands\", value: \"148\" }]} />",
38
+ "language": "tsx"
39
+ }
40
+ ],
41
+ "status": "stable",
42
+ "url": "/docs/components/stat-band",
43
+ "mdUrl": "/docs/components/stat-band.md",
44
+ "jsonUrl": "/r/components/stat-band.json",
45
+ "whenToUse": [
46
+ "Three to six headline figures under a report or dashboard title.",
47
+ "Inside `Hero`'s `stats` slot, where the inverse card draws them on its dark ground."
48
+ ],
49
+ "whenNotToUse": [
50
+ "A table of figures to compare. Use `Table` or `DataTable`.",
51
+ "One figure on its own. Use `Stat`."
52
+ ],
53
+ "commonMistakes": [
54
+ "Drawing dividers by hand. The style set's `style-stat-divider` decides whether figures are ruled, and a wrapped row's first figure drops its rule."
55
+ ],
56
+ "specimens": [
57
+ {
58
+ "title": "StatBand",
59
+ "group": "chrome",
60
+ "components": [
61
+ "StatBand"
62
+ ],
63
+ "code": "<StatBand\n className=\"w-full\"\n stats={Array.from({ length: 7 }, (_, index) => ({\n label: [\"Lines\", \"Brands\", \"Stores\", \"Weeks\", \"Cases\", \"Suppliers\", \"Regions\"][index]!,\n value: [\"1,091\", \"148\", \"812\", \"52\", \"4.2m\", \"63\", \"9\"][index]!,\n }))}\n/>",
64
+ "note": "A row of named figures, built from Stat. The set draws the rule between them and picks the reading's ink; a wrapped row's first figure never hangs a rule off the edge.",
65
+ "interaction": "none. Narrow the window: seven figures wrap without a stray divider."
66
+ }
67
+ ]
68
+ }
@@ -73,7 +73,6 @@
73
73
  "--cue-danger",
74
74
  "--cue-fg",
75
75
  "--cue-fg-muted",
76
- "--cue-fg-subtle",
77
76
  "--cue-font-mono",
78
77
  "--cue-info",
79
78
  "--cue-ok",
@@ -90,6 +89,7 @@
90
89
  "--cue-style-stat-detail-size",
91
90
  "--cue-style-stat-gap",
92
91
  "--cue-style-stat-leading",
92
+ "--cue-style-stat-numeral-ink",
93
93
  "--cue-style-stat-size",
94
94
  "--cue-style-stat-tracking",
95
95
  "--cue-style-stat-weight",
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "StillProvider",
3
+ "slug": "still-provider",
4
+ "group": "system",
5
+ "importPath": "@cueplusplus/ui",
6
+ "peerDependencies": [],
7
+ "clientOnly": true,
8
+ "description": "Hold a subtree still (see {@link useStill}). A gallery frame mounts one with\n`still` when it is a thumbnail.",
9
+ "props": [
10
+ {
11
+ "name": "still",
12
+ "type": "boolean",
13
+ "required": true,
14
+ "defaultValue": null,
15
+ "description": "`true` holds everything under it still. Nested providers can only add stillness, never remove it.",
16
+ "control": {
17
+ "kind": "boolean"
18
+ }
19
+ },
20
+ {
21
+ "name": "children",
22
+ "type": "ReactNode",
23
+ "required": false,
24
+ "defaultValue": null,
25
+ "description": "What it holds still. Optional, as `ThemeProvider`'s is: an empty provider renders nothing.",
26
+ "control": {
27
+ "kind": "node",
28
+ "fixture": "children.text"
29
+ }
30
+ }
31
+ ],
32
+ "typeReferences": [],
33
+ "subcomponents": [],
34
+ "parts": [],
35
+ "variants": {},
36
+ "defaultVariants": {},
37
+ "tokensUsed": [],
38
+ "summary": "Holds a subtree still: no motif animates, no replay plays, no live readout loops.",
39
+ "examples": [
40
+ {
41
+ "title": "Usage",
42
+ "code": "<StillProvider still><Page /></StillProvider>",
43
+ "language": "tsx"
44
+ }
45
+ ],
46
+ "status": "stable",
47
+ "url": "/docs/components/still-provider",
48
+ "mdUrl": "/docs/components/still-provider.md",
49
+ "jsonUrl": "/r/components/still-provider.json",
50
+ "whenToUse": [
51
+ "A gallery thumbnail or any preview that must cost nothing at rest.",
52
+ "A screenshot or print view."
53
+ ],
54
+ "whenNotToUse": [
55
+ "Reduced motion for a reader. `useStill` already folds in `prefers-reduced-motion`; the provider is for previews."
56
+ ],
57
+ "commonMistakes": [
58
+ "Expecting a nested `still={false}` to undo an outer one. Stillness only adds."
59
+ ]
60
+ }
@@ -62,7 +62,6 @@
62
62
  "--cue-danger-fg",
63
63
  "--cue-fg",
64
64
  "--cue-fg-muted",
65
- "--cue-fg-subtle",
66
65
  "--cue-focus",
67
66
  "--cue-focus-ring",
68
67
  "--cue-font-mono",
@@ -111,9 +111,9 @@
111
111
  "control": {
112
112
  "kind": "enum",
113
113
  "members": [
114
- 4,
115
114
  2,
116
115
  3,
116
+ 4,
117
117
  5,
118
118
  6
119
119
  ],
@@ -120,6 +120,7 @@
120
120
  "--cue-space-4",
121
121
  "--cue-space-5",
122
122
  "--cue-style-control-face",
123
+ "--cue-style-control-radius",
123
124
  "--cue-style-focus-width",
124
125
  "--cue-style-group-gap",
125
126
  "--cue-style-segment-edge",
@@ -261,6 +261,7 @@
261
261
  "--cue-style-chip-size",
262
262
  "--cue-style-chip-tracking",
263
263
  "--cue-style-control-face",
264
+ "--cue-style-control-radius",
264
265
  "--cue-style-control-step-size",
265
266
  "--cue-style-disabled-edge",
266
267
  "--cue-style-disabled-fill",
@@ -155,6 +155,7 @@
155
155
  "--cue-style-body-size",
156
156
  "--cue-style-body-weight",
157
157
  "--cue-style-control-face",
158
+ "--cue-style-control-radius",
158
159
  "--cue-style-display-variation",
159
160
  "--cue-style-group-label-ink",
160
161
  "--cue-style-group-label-pad",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  {
63
63
  "name": "font",
64
- "type": "\"source\" | \"system\" | \"geist\" | \"geist-mono\" | \"inter\" | \"plex\" | \"roboto\" | \"apple\" | \"office\" | \"inter-source\" | \"dm\" | \"calsans\"",
64
+ "type": "\"source\" | \"system\" | \"geist\" | \"geist-mono\" | \"inter\" | \"plex\" | \"roboto\" | \"apple\" | \"office\" | \"inter-source\" | \"dm\" | \"calsans\" | \"fraunces-mono\"",
65
65
  "required": false,
66
66
  "defaultValue": null,
67
67
  "description": "Initial font pairing.\n\nDefaults to the pairing the active theme's manifest names in\n`fontPairings.default` — §5's rule, the density prop's rule one axis over\n— and to `\"system\"` when it names none: the platform's own faces, nothing\ndownloaded, and the theme keeps whatever monospace it authored.\n\nA pairing that needs delivering is a set of *names*: this library ships no\nfont files, and a pairing nobody delivers falls through its stack to the\nplatform rather than failing. See `FONT_PAIRINGS[font].faces` for the\ncustom properties an app assigns to make one resolve.\n\n**Root-level only.** There is no font island: a nested provider forwards\nthis axis to the root, ignores this prop, and its `setFont` drives the root.\nA page that changed face halfway down is a page with a bug, and a specimen\nthat genuinely wants one — a picker row, a docs page showing all twelve —\nneeds nothing from this library but `data-font` on a `<div>`.",
@@ -79,19 +79,21 @@
79
79
  "office",
80
80
  "inter-source",
81
81
  "dm",
82
- "calsans"
82
+ "calsans",
83
+ "fraunces-mono"
83
84
  ]
84
85
  }
85
86
  },
86
87
  {
87
88
  "name": "styleSet",
88
- "type": "\"console\" | \"editorial\" | \"marketing\" | \"graphite\" | \"tender\" | \"zine\" | \"kiln\" | \"porcelain\"",
89
+ "type": "\"command\" | \"console\" | \"editorial\" | \"marketing\" | \"graphite\" | \"tender\" | \"zine\" | \"kiln\" | \"porcelain\" | \"ledger\" | \"monolith\" | \"prism\"",
89
90
  "required": false,
90
91
  "defaultValue": null,
91
92
  "description": "Page composition for this subtree: `console`, `editorial`, `marketing` or\n`graphite`.\n\n**`styleSet`, not `style`.** This interface already has a\n`style?: React.CSSProperties` a few lines below, applied to the provider\nroot, and a second meaning for that name would be the one collision every\nconsumer of this component would have to think about. The DOM attribute is\n`data-style`, matching the four public axes — `data-cue-*` is this tree's\nprefix for *internal* attributes (`data-cue-theme`, `data-cue-fidelity`), and\na public axis wearing the internal prefix would be the more confusing of the\ntwo mistakes.\n\nUnset, **no attribute is stamped at all**, and that is the promise: an\napplication that has never heard of this axis renders the markup it rendered\nbefore it existed and stores the preference object it stored before it\nexisted. A style set is opt-in page composition, not a fourth thing every\npage has.\n\nLike the other three axes this is an *initial* value the provider then holds\nas state, so `setStyleSet` can drive it; a changed prop is adopted after\nmount. Unlike the font pairing it has an island form, so a nested provider\nthat names a set holds its own rather than handing the axis up to the root.\n\nA nested provider that names **none** holds none: the set around it\ninherits through its element, and `useTheme().styleSet` inside it reports\nthat set **live** — a stored set the root restores after mount, or a later\n`setStyleSet` at the root, reaches it and its portals. If it names a\n`theme` or a `mode`, it also restates that set as `data-style` on its\nelement — still the page's set, followed live, never its own — because a\nset's block declares values that read the theme (a band's rule and\nground), and a custom property resolves where it is declared: restated,\nthey resolve against this island's theme instead of the page's.",
92
93
  "control": {
93
94
  "kind": "enum",
94
95
  "members": [
96
+ "command",
95
97
  "console",
96
98
  "editorial",
97
99
  "marketing",
@@ -99,7 +101,10 @@
99
101
  "tender",
100
102
  "zine",
101
103
  "kiln",
102
- "porcelain"
104
+ "porcelain",
105
+ "ledger",
106
+ "monolith",
107
+ "prism"
103
108
  ]
104
109
  }
105
110
  },
@@ -109,6 +109,7 @@
109
109
  "--cue-style-body-size",
110
110
  "--cue-style-body-weight",
111
111
  "--cue-style-control-face",
112
+ "--cue-style-control-radius",
112
113
  "--cue-style-display-variation",
113
114
  "--cue-style-focus-width",
114
115
  "--cue-style-group-label-ink",
@@ -145,7 +145,6 @@
145
145
  "--cue-control-sm",
146
146
  "--cue-fg",
147
147
  "--cue-fg-muted",
148
- "--cue-fg-subtle",
149
148
  "--cue-font-mono",
150
149
  "--cue-leading-ui",
151
150
  "--cue-paint-rim-width",
@@ -172,6 +171,7 @@
172
171
  "--cue-style-body-size",
173
172
  "--cue-style-body-weight",
174
173
  "--cue-style-control-face",
174
+ "--cue-style-control-radius",
175
175
  "--cue-style-display-variation",
176
176
  "--cue-style-group-label-ink",
177
177
  "--cue-style-group-label-pad",
@@ -37,6 +37,16 @@
37
37
  "kind": "node",
38
38
  "label": "Three toggles"
39
39
  },
40
+ {
41
+ "id": "media.motif",
42
+ "kind": "node",
43
+ "label": "A seeded motif"
44
+ },
45
+ {
46
+ "id": "media.stats",
47
+ "kind": "node",
48
+ "label": "A band of four figures"
49
+ },
40
50
  {
41
51
  "id": "bento.tiles",
42
52
  "kind": "node",
@@ -119,6 +129,14 @@
119
129
  "kind": "array",
120
130
  "label": "5 cue rows"
121
131
  },
132
+ {
133
+ "id": "sample.stats",
134
+ "kind": "array",
135
+ "label": "4 named figures",
136
+ "accepts": [
137
+ "readonly StatBandStat[]"
138
+ ]
139
+ },
122
140
  {
123
141
  "id": "sample.blend-modes",
124
142
  "kind": "array",