@oxyhq/bloom 1.0.0 → 1.0.2

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 (218) hide show
  1. package/README.md +16 -4
  2. package/docs/accordion.mdx +69 -0
  3. package/docs/activity-heatmap.mdx +71 -0
  4. package/docs/admonition.mdx +77 -0
  5. package/docs/alert-dialog.mdx +75 -0
  6. package/docs/alert.mdx +93 -0
  7. package/docs/animated-check.mdx +53 -0
  8. package/docs/aspect-ratio.mdx +45 -0
  9. package/docs/avatar-group.mdx +91 -0
  10. package/docs/avatar.mdx +126 -0
  11. package/docs/badge.mdx +74 -0
  12. package/docs/benefit-list.mdx +56 -0
  13. package/docs/bottom-sheet.mdx +103 -0
  14. package/docs/button.mdx +218 -0
  15. package/docs/card.mdx +106 -0
  16. package/docs/checkbox.mdx +59 -0
  17. package/docs/chip.mdx +53 -0
  18. package/docs/code.mdx +50 -0
  19. package/docs/combobox.mdx +64 -0
  20. package/docs/command.mdx +85 -0
  21. package/docs/composition-bar.mdx +63 -0
  22. package/docs/connection-dots.mdx +50 -0
  23. package/docs/connection-status.mdx +56 -0
  24. package/docs/content-panel.mdx +62 -0
  25. package/docs/context-menu.mdx +65 -0
  26. package/docs/design-tokens.mdx +254 -0
  27. package/docs/dialog.mdx +277 -0
  28. package/docs/divider.mdx +56 -0
  29. package/docs/dot-grid-meter.mdx +66 -0
  30. package/docs/dropdown-menu.mdx +161 -0
  31. package/docs/error-boundary.mdx +72 -0
  32. package/docs/fab.mdx +67 -0
  33. package/docs/field.mdx +70 -0
  34. package/docs/fill.mdx +58 -0
  35. package/docs/fonts.mdx +144 -0
  36. package/docs/frosted-icon-button.mdx +60 -0
  37. package/docs/getting-started.mdx +75 -0
  38. package/docs/grid.mdx +64 -0
  39. package/docs/hooks.mdx +81 -0
  40. package/docs/icon-circle.mdx +66 -0
  41. package/docs/icons.mdx +69 -0
  42. package/docs/image-aspect-ratio-cache.mdx +63 -0
  43. package/docs/image-resolver.mdx +66 -0
  44. package/docs/index.mdx +44 -0
  45. package/docs/input-group.mdx +58 -0
  46. package/docs/item.mdx +69 -0
  47. package/docs/kbd.mdx +57 -0
  48. package/docs/label.mdx +50 -0
  49. package/docs/link-preview.mdx +66 -0
  50. package/docs/list.mdx +72 -0
  51. package/docs/loading.mdx +129 -0
  52. package/docs/media-inset-border.mdx +52 -0
  53. package/docs/menubar.mdx +86 -0
  54. package/docs/migrating-to-1.0.mdx +434 -0
  55. package/docs/motion.mdx +83 -0
  56. package/docs/overlay.mdx +75 -0
  57. package/docs/popover.mdx +73 -0
  58. package/docs/portal.mdx +63 -0
  59. package/docs/pressable-scale.mdx +51 -0
  60. package/docs/profile-card.mdx +66 -0
  61. package/docs/progressive-blur.mdx +54 -0
  62. package/docs/prompt-input.mdx +183 -0
  63. package/docs/provider.mdx +64 -0
  64. package/docs/radio-indicator.mdx +60 -0
  65. package/docs/radio.mdx +65 -0
  66. package/docs/scroll.mdx +66 -0
  67. package/docs/search.mdx +67 -0
  68. package/docs/segmented-control.mdx +76 -0
  69. package/docs/select.mdx +93 -0
  70. package/docs/settings-list.mdx +186 -0
  71. package/docs/skeleton.mdx +66 -0
  72. package/docs/slider.mdx +73 -0
  73. package/docs/stat-bar.mdx +59 -0
  74. package/docs/stat-widgets.mdx +33 -0
  75. package/docs/styles.mdx +61 -0
  76. package/docs/subtle-hover.mdx +53 -0
  77. package/docs/surfaces.mdx +72 -0
  78. package/docs/switch.mdx +90 -0
  79. package/docs/tab-bar.mdx +386 -0
  80. package/docs/tabs.mdx +75 -0
  81. package/docs/text-field.mdx +187 -0
  82. package/docs/theme.mdx +67 -0
  83. package/docs/toast.mdx +285 -0
  84. package/docs/tooltip.mdx +67 -0
  85. package/docs/typography.mdx +88 -0
  86. package/docs/user-hover-card.mdx +140 -0
  87. package/docs/zoomable-image-gallery.mdx +66 -0
  88. package/lib/commonjs/design-tokens/color-roles.js +21 -1
  89. package/lib/commonjs/design-tokens/color-roles.js.map +1 -1
  90. package/lib/commonjs/design-tokens/index.js +6 -0
  91. package/lib/commonjs/design-tokens/index.js.map +1 -1
  92. package/lib/commonjs/design-tokens/tailwind-preset.js +3 -1
  93. package/lib/commonjs/design-tokens/tailwind-preset.js.map +1 -1
  94. package/lib/commonjs/design-tokens/theme-css.js +1 -0
  95. package/lib/commonjs/design-tokens/theme-css.js.map +1 -1
  96. package/lib/commonjs/design-tokens/theme.css +3 -0
  97. package/lib/commonjs/design-tokens/tokens-json.js +13 -4
  98. package/lib/commonjs/design-tokens/tokens-json.js.map +1 -1
  99. package/lib/commonjs/design-tokens/tokens.json +6227 -265
  100. package/lib/commonjs/index.js +7 -0
  101. package/lib/commonjs/index.js.map +1 -1
  102. package/lib/commonjs/index.web.js +7 -0
  103. package/lib/commonjs/index.web.js.map +1 -1
  104. package/lib/commonjs/theme/ambient-store.js +16 -1
  105. package/lib/commonjs/theme/ambient-store.js.map +1 -1
  106. package/lib/commonjs/theme/color-policy.js +30 -33
  107. package/lib/commonjs/theme/color-policy.js.map +1 -1
  108. package/lib/commonjs/theme/color-presets.js +413 -166
  109. package/lib/commonjs/theme/color-presets.js.map +1 -1
  110. package/lib/commonjs/theme/color-scope/seed-scope.js +1 -0
  111. package/lib/commonjs/theme/color-scope/seed-scope.js.map +1 -1
  112. package/lib/commonjs/theme/glass-colors.js +18 -21
  113. package/lib/commonjs/theme/glass-colors.js.map +1 -1
  114. package/lib/commonjs/theme/index.js +30 -0
  115. package/lib/commonjs/theme/index.js.map +1 -1
  116. package/lib/commonjs/theme/index.web.js +30 -0
  117. package/lib/commonjs/theme/index.web.js.map +1 -1
  118. package/lib/module/design-tokens/color-roles.js +20 -0
  119. package/lib/module/design-tokens/color-roles.js.map +1 -1
  120. package/lib/module/design-tokens/index.js +2 -2
  121. package/lib/module/design-tokens/index.js.map +1 -1
  122. package/lib/module/design-tokens/tailwind-preset.js +4 -2
  123. package/lib/module/design-tokens/tailwind-preset.js.map +1 -1
  124. package/lib/module/design-tokens/theme-css.js +2 -1
  125. package/lib/module/design-tokens/theme-css.js.map +1 -1
  126. package/lib/module/design-tokens/theme.css +3 -0
  127. package/lib/module/design-tokens/tokens-json.js +14 -5
  128. package/lib/module/design-tokens/tokens-json.js.map +1 -1
  129. package/lib/module/design-tokens/tokens.json +6227 -265
  130. package/lib/module/index.js +1 -1
  131. package/lib/module/index.js.map +1 -1
  132. package/lib/module/index.web.js +1 -1
  133. package/lib/module/index.web.js.map +1 -1
  134. package/lib/module/theme/ambient-store.js +16 -1
  135. package/lib/module/theme/ambient-store.js.map +1 -1
  136. package/lib/module/theme/color-policy.js +30 -33
  137. package/lib/module/theme/color-policy.js.map +1 -1
  138. package/lib/module/theme/color-presets.js +412 -165
  139. package/lib/module/theme/color-presets.js.map +1 -1
  140. package/lib/module/theme/color-scope/seed-scope.js +2 -1
  141. package/lib/module/theme/color-scope/seed-scope.js.map +1 -1
  142. package/lib/module/theme/glass-colors.js +18 -21
  143. package/lib/module/theme/glass-colors.js.map +1 -1
  144. package/lib/module/theme/index.js +1 -1
  145. package/lib/module/theme/index.js.map +1 -1
  146. package/lib/module/theme/index.web.js +1 -1
  147. package/lib/module/theme/index.web.js.map +1 -1
  148. package/lib/typescript/commonjs/design-tokens/color-roles.d.ts +20 -0
  149. package/lib/typescript/commonjs/design-tokens/color-roles.d.ts.map +1 -1
  150. package/lib/typescript/commonjs/design-tokens/index.d.ts +3 -3
  151. package/lib/typescript/commonjs/design-tokens/index.d.ts.map +1 -1
  152. package/lib/typescript/commonjs/design-tokens/tailwind-preset.d.ts.map +1 -1
  153. package/lib/typescript/commonjs/design-tokens/theme-css.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/design-tokens/tokens-json.d.ts +12 -3
  155. package/lib/typescript/commonjs/design-tokens/tokens-json.d.ts.map +1 -1
  156. package/lib/typescript/commonjs/index.d.ts +2 -2
  157. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  158. package/lib/typescript/commonjs/index.web.d.ts +2 -2
  159. package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
  160. package/lib/typescript/commonjs/theme/ambient-store.d.ts.map +1 -1
  161. package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
  162. package/lib/typescript/commonjs/theme/color-presets.d.ts +386 -62
  163. package/lib/typescript/commonjs/theme/color-presets.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/theme/color-scope/seed-scope.d.ts.map +1 -1
  165. package/lib/typescript/commonjs/theme/glass-colors.d.ts +18 -21
  166. package/lib/typescript/commonjs/theme/glass-colors.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/theme/index.d.ts +2 -2
  168. package/lib/typescript/commonjs/theme/index.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/theme/index.web.d.ts +2 -2
  170. package/lib/typescript/commonjs/theme/index.web.d.ts.map +1 -1
  171. package/lib/typescript/module/design-tokens/color-roles.d.ts +20 -0
  172. package/lib/typescript/module/design-tokens/color-roles.d.ts.map +1 -1
  173. package/lib/typescript/module/design-tokens/index.d.ts +3 -3
  174. package/lib/typescript/module/design-tokens/index.d.ts.map +1 -1
  175. package/lib/typescript/module/design-tokens/tailwind-preset.d.ts.map +1 -1
  176. package/lib/typescript/module/design-tokens/theme-css.d.ts.map +1 -1
  177. package/lib/typescript/module/design-tokens/tokens-json.d.ts +12 -3
  178. package/lib/typescript/module/design-tokens/tokens-json.d.ts.map +1 -1
  179. package/lib/typescript/module/index.d.ts +2 -2
  180. package/lib/typescript/module/index.d.ts.map +1 -1
  181. package/lib/typescript/module/index.web.d.ts +2 -2
  182. package/lib/typescript/module/index.web.d.ts.map +1 -1
  183. package/lib/typescript/module/theme/ambient-store.d.ts.map +1 -1
  184. package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
  185. package/lib/typescript/module/theme/color-presets.d.ts +386 -62
  186. package/lib/typescript/module/theme/color-presets.d.ts.map +1 -1
  187. package/lib/typescript/module/theme/color-scope/seed-scope.d.ts.map +1 -1
  188. package/lib/typescript/module/theme/glass-colors.d.ts +18 -21
  189. package/lib/typescript/module/theme/glass-colors.d.ts.map +1 -1
  190. package/lib/typescript/module/theme/index.d.ts +2 -2
  191. package/lib/typescript/module/theme/index.d.ts.map +1 -1
  192. package/lib/typescript/module/theme/index.web.d.ts +2 -2
  193. package/lib/typescript/module/theme/index.web.d.ts.map +1 -1
  194. package/package.json +5 -2
  195. package/src/__tests__/support/collision-fixture-barrel.ts +20 -0
  196. package/src/__tests__/support/constructed-style-sheets.ts +68 -0
  197. package/src/__tests__/support/press-host.ts +30 -0
  198. package/src/__tests__/support/rendered-style.ts +99 -0
  199. package/src/__tests__/support/unread-hook-fixture.ts +33 -0
  200. package/src/design-tokens/color-roles.ts +21 -0
  201. package/src/design-tokens/index.ts +3 -2
  202. package/src/design-tokens/tailwind-preset.ts +3 -2
  203. package/src/design-tokens/theme-css.ts +2 -1
  204. package/src/design-tokens/theme.css +3 -0
  205. package/src/design-tokens/tokens-json.ts +29 -9
  206. package/src/design-tokens/tokens.json +6227 -265
  207. package/src/glass/GlassSurface.tsx +2 -2
  208. package/src/index.ts +2 -0
  209. package/src/index.web.ts +2 -0
  210. package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +4082 -0
  211. package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
  212. package/src/theme/ambient-store.ts +21 -1
  213. package/src/theme/color-policy.ts +33 -38
  214. package/src/theme/color-presets.ts +473 -146
  215. package/src/theme/color-scope/seed-scope.ts +2 -1
  216. package/src/theme/glass-colors.ts +18 -21
  217. package/src/theme/index.ts +16 -1
  218. package/src/theme/index.web.ts +16 -1
@@ -1,184 +1,431 @@
1
1
  "use strict";
2
2
 
3
+ /** Why a preset is not offered to every user. Absent means it is free. */
4
+
5
+ /** Stable picker/playground categories, ordered from specific to general. */
6
+ const COLOR_PRESET_FAMILY_SOURCES = [{
7
+ name: 'brand',
8
+ displayName: 'Brand',
9
+ description: 'Reserved ecosystem identities.'
10
+ }, {
11
+ name: 'botanical',
12
+ displayName: 'Botanical',
13
+ description: 'Greens, jade and living hues.'
14
+ }, {
15
+ name: 'ocean',
16
+ displayName: 'Ocean',
17
+ description: 'Blue, cyan and aquatic identities.'
18
+ }, {
19
+ name: 'sunset',
20
+ displayName: 'Sunset',
21
+ description: 'Red, orange and golden identities.'
22
+ }, {
23
+ name: 'earth',
24
+ displayName: 'Earth',
25
+ description: 'Warm mineral and grounded identities.'
26
+ }, {
27
+ name: 'jewel',
28
+ displayName: 'Jewel',
29
+ description: 'Purple, rose and saturated gem hues.'
30
+ }, {
31
+ name: 'neutral',
32
+ displayName: 'Neutral',
33
+ description: 'Slate, graphite and monochrome.'
34
+ }];
35
+ export const COLOR_PRESET_FAMILY_REGISTRY = COLOR_PRESET_FAMILY_SOURCES;
36
+ export const COLOR_PRESET_FAMILIES = COLOR_PRESET_FAMILY_REGISTRY.map(({
37
+ name
38
+ }) => name);
3
39
  /**
4
- * A single colour preset: a brand SEED colour plus the tonal scheme variant to
5
- * derive its full role set with.
6
- *
7
- * Every preset's palette is now GENERATED by Bloom's dependency-free colour
8
- * engine (`color-engine/`) from this seed — no hand-authored HSL triples. The
9
- * engine's `generateRoleColors({ seed, variant, isDark })` yields the full
10
- * Material-3 role set for light and dark; `getPresetVars` (in `preset-vars.ts`)
11
- * maps those roles onto Bloom's canonical token names. A user-picked colour
12
- * flows through the identical path — a preset is just a fixed seed.
13
- */
14
- /**
15
- * Why a preset is not offered to every user. Absent means it is.
40
+ * The ONE authored preset source.
16
41
  *
17
- * The two are NOT interchangeable and must not collapse back into one list: a
18
- * `handle` preset belongs to a specific account and cannot be bought, while a
19
- * `premium` one is exactly what is bought. Conflating them is how the picker
20
- * came to offer both of Oxy's reserved brand colours to everybody.
42
+ * Everything public below the name union, ordered registry, lookup record,
43
+ * hex lookup, gate lists, family groups and playground list is derived from
44
+ * this tuple. A preset is a seed recipe, never a frozen light/dark token table;
45
+ * Bloom's colour policy resolves both modes at runtime.
21
46
  */
47
+ const COLOR_PRESET_SOURCES = [{
48
+ name: 'teal',
49
+ displayName: 'Teal',
50
+ family: 'ocean',
51
+ description: 'Deep teal identity with dynamically derived split-complementary accents.',
52
+ hex: '#005c67',
53
+ variant: 'vivid',
54
+ pairing: 'derived'
55
+ }, {
56
+ name: 'blue',
57
+ displayName: 'Blue',
58
+ family: 'ocean',
59
+ description: 'Clear social blue with vivid generated supporting colours.',
60
+ hex: '#1d9bf0',
61
+ variant: 'vivid',
62
+ pairing: 'derived'
63
+ }, {
64
+ name: 'green',
65
+ displayName: 'Green',
66
+ family: 'botanical',
67
+ description: 'Fresh green identity with dynamically generated contrast accents.',
68
+ hex: '#10b981',
69
+ variant: 'vivid',
70
+ pairing: 'derived'
71
+ }, {
72
+ name: 'yellow',
73
+ displayName: 'Yellow',
74
+ family: 'sunset',
75
+ description: 'A signal-yellow identity deliberately brought deep enough for a white label.',
76
+ hex: '#ffd400',
77
+ variant: 'vivid',
78
+ pairing: 'derived',
79
+ label: 'white'
80
+ }, {
81
+ name: 'red',
82
+ displayName: 'Red',
83
+ family: 'sunset',
84
+ description: 'Direct red identity with contrasting generated accent arms.',
85
+ hex: '#ef4444',
86
+ variant: 'vivid',
87
+ pairing: 'derived'
88
+ }, {
89
+ name: 'purple',
90
+ displayName: 'Purple',
91
+ family: 'jewel',
92
+ description: 'Bright purple identity with dynamically derived action colours.',
93
+ hex: '#b866ff',
94
+ variant: 'vivid',
95
+ pairing: 'derived'
96
+ }, {
97
+ name: 'pink',
98
+ displayName: 'Pink',
99
+ family: 'jewel',
100
+ description: 'Hot pink identity with a vivid generated complement.',
101
+ hex: '#f91880',
102
+ variant: 'vivid',
103
+ pairing: 'derived'
104
+ }, {
105
+ name: 'sky',
106
+ displayName: 'Sky',
107
+ family: 'ocean',
108
+ description: 'Open sky blue with dynamically generated supporting accents.',
109
+ hex: '#03a9f4',
110
+ variant: 'vivid',
111
+ pairing: 'derived'
112
+ }, {
113
+ name: 'orange',
114
+ displayName: 'Orange',
115
+ family: 'sunset',
116
+ description: 'A gamut-aware orange that stays orange at white-label fill tones.',
117
+ hex: '#ff7a00',
118
+ variant: 'vivid',
119
+ pairing: 'derived'
120
+ }, {
121
+ name: 'mint',
122
+ displayName: 'Mint',
123
+ family: 'botanical',
124
+ description: 'Cool mint identity with vivid generated supporting hues.',
125
+ hex: '#14b8a6',
126
+ variant: 'vivid',
127
+ pairing: 'derived'
128
+ }, {
129
+ name: 'oxy',
130
+ displayName: 'Oxy',
131
+ family: 'brand',
132
+ description: 'Oxy purple, reserved for the Oxy account identity.',
133
+ hex: '#c46ede',
134
+ variant: 'vivid',
135
+ pairing: 'derived',
136
+ gate: 'handle'
137
+ }, {
138
+ name: 'faircoin',
139
+ displayName: 'FairCoin',
140
+ family: 'brand',
141
+ description: 'FairCoin lime, reserved for the FairCoin account identity.',
142
+ hex: '#9ffb50',
143
+ variant: 'vivid',
144
+ pairing: 'derived',
145
+ gate: 'handle'
146
+ }, {
147
+ name: 'pumpkin',
148
+ displayName: 'Pumpkin',
149
+ family: 'sunset',
150
+ description: 'Golden pumpkin orange with a generated split complement.',
151
+ hex: '#ff9800',
152
+ variant: 'vivid',
153
+ pairing: 'derived'
154
+ }, {
155
+ name: 'gray',
156
+ displayName: 'Slate',
157
+ family: 'neutral',
158
+ description: 'Cool slate identity with restrained chroma and generated accents.',
159
+ hex: '#607d8b',
160
+ variant: 'vivid',
161
+ pairing: 'derived'
162
+ }, {
163
+ name: 'brown',
164
+ displayName: 'Brown',
165
+ family: 'earth',
166
+ description: 'Deep earthen brown with a contrasting generated action colour.',
167
+ hex: '#813519',
168
+ variant: 'vivid',
169
+ pairing: 'derived'
170
+ }, {
171
+ name: 'peach',
172
+ displayName: 'Peach',
173
+ family: 'earth',
174
+ description: 'Warm peach identity with dynamically derived contrast accents.',
175
+ hex: '#ffb28d',
176
+ variant: 'vivid',
177
+ pairing: 'derived'
178
+ }, {
179
+ name: 'rose',
180
+ displayName: 'Rose',
181
+ family: 'jewel',
182
+ description: 'Light rose identity with generated vivid supporting hues.',
183
+ hex: '#fcaffe',
184
+ variant: 'vivid',
185
+ pairing: 'derived'
186
+ }, {
187
+ name: 'mono',
188
+ displayName: 'Monochrome',
189
+ family: 'neutral',
190
+ description: 'Colourless identity and surfaces, derived as a true greyscale theme.',
191
+ hex: '#000000',
192
+ variant: 'monochrome',
193
+ pairing: 'derived',
194
+ gate: 'premium'
195
+ }, {
196
+ name: 'grove',
197
+ displayName: 'Grove + Marigold',
198
+ family: 'botanical',
199
+ description: 'Green identity with warm marigold reserved for the action that must win.',
200
+ hex: '#087a3e',
201
+ tertiaryHex: '#ffb000',
202
+ variant: 'vivid',
203
+ pairing: 'curated',
204
+ featured: true
205
+ }, {
206
+ name: 'ember',
207
+ displayName: 'Terracotta + Saffron',
208
+ family: 'earth',
209
+ description: 'Terracotta identity with a high-energy saffron action.',
210
+ hex: '#b52f0c',
211
+ tertiaryHex: '#ffb000',
212
+ variant: 'vivid',
213
+ pairing: 'curated',
214
+ featured: true
215
+ }, {
216
+ name: 'merlot',
217
+ displayName: 'Oxblood + Coral',
218
+ family: 'jewel',
219
+ description: 'Deep wine identity with coral action, expressive without reading destructive.',
220
+ hex: '#a5003c',
221
+ tertiaryHex: '#ff542e',
222
+ variant: 'vivid',
223
+ pairing: 'curated',
224
+ featured: true
225
+ }, {
226
+ name: 'cobalt',
227
+ displayName: 'Cobalt + Signal Yellow',
228
+ family: 'ocean',
229
+ description: 'Cobalt structure cut by a saturated signal-yellow action.',
230
+ hex: '#154fd7',
231
+ tertiaryHex: '#ffd000',
232
+ variant: 'vivid',
233
+ pairing: 'curated',
234
+ featured: true
235
+ }, {
236
+ name: 'jade',
237
+ displayName: 'Jade + Tangerine',
238
+ family: 'botanical',
239
+ description: 'Clean jade identity with a direct tangerine action.',
240
+ hex: '#007a4b',
241
+ tertiaryHex: '#ff5e00',
242
+ variant: 'vivid',
243
+ pairing: 'curated',
244
+ featured: true
245
+ }, {
246
+ name: 'pine',
247
+ displayName: 'Pine + Rose',
248
+ family: 'botanical',
249
+ description: 'Sober pine identity with a vivid rose action.',
250
+ hex: '#135c2d',
251
+ tertiaryHex: '#f0005a',
252
+ variant: 'vivid',
253
+ pairing: 'curated',
254
+ featured: true
255
+ }, {
256
+ name: 'olive',
257
+ displayName: 'Olive + Lilac',
258
+ family: 'earth',
259
+ description: 'Editorial olive identity with an unexpected clear lilac action.',
260
+ hex: '#5f6400',
261
+ tertiaryHex: '#7c25e8',
262
+ variant: 'vivid',
263
+ pairing: 'curated',
264
+ featured: true
265
+ }, {
266
+ name: 'lagoon',
267
+ displayName: 'Teal + Coral',
268
+ family: 'ocean',
269
+ description: 'Aquatic teal identity with a warm coral action.',
270
+ hex: '#00706d',
271
+ tertiaryHex: '#ff4935',
272
+ variant: 'vivid',
273
+ pairing: 'curated',
274
+ featured: true
275
+ }, {
276
+ name: 'navy',
277
+ displayName: 'Navy + Apricot',
278
+ family: 'ocean',
279
+ description: 'Serious navy identity softened by a human apricot action.',
280
+ hex: '#0b2c72',
281
+ tertiaryHex: '#ff6b20',
282
+ variant: 'vivid',
283
+ pairing: 'curated',
284
+ featured: true
285
+ }, {
286
+ name: 'azure',
287
+ displayName: 'Sky + Vermilion',
288
+ family: 'ocean',
289
+ description: 'Airy sky identity with a decisive vermilion action.',
290
+ hex: '#006a94',
291
+ tertiaryHex: '#e82e12',
292
+ variant: 'vivid',
293
+ pairing: 'curated',
294
+ featured: true
295
+ }, {
296
+ name: 'violet',
297
+ displayName: 'Violet + Lime',
298
+ family: 'jewel',
299
+ description: 'Deep violet identity with an electric lime action.',
300
+ hex: '#7227c4',
301
+ tertiaryHex: '#78c900',
302
+ variant: 'vivid',
303
+ pairing: 'curated',
304
+ featured: true
305
+ }, {
306
+ name: 'lavender',
307
+ displayName: 'Lavender + Brass',
308
+ family: 'jewel',
309
+ description: 'Calm lavender identity with a warmer, more editorial brass action.',
310
+ hex: '#5c3db5',
311
+ tertiaryHex: '#d98900',
312
+ variant: 'vivid',
313
+ pairing: 'curated',
314
+ featured: true
315
+ }, {
316
+ name: 'plum',
317
+ displayName: 'Plum + Aqua',
318
+ family: 'jewel',
319
+ description: 'Nocturnal plum identity with a bright aqua action.',
320
+ hex: '#8d075f',
321
+ tertiaryHex: '#00aeb8',
322
+ variant: 'vivid',
323
+ pairing: 'curated',
324
+ featured: true
325
+ }, {
326
+ name: 'cherry',
327
+ displayName: 'Cherry + Powder Blue',
328
+ family: 'jewel',
329
+ description: 'Cherry identity with a cool powder-blue counterpoint.',
330
+ hex: '#b00038',
331
+ tertiaryHex: '#2979e8',
332
+ variant: 'vivid',
333
+ pairing: 'curated',
334
+ featured: true
335
+ }, {
336
+ name: 'chocolate',
337
+ displayName: 'Chocolate + Cyan',
338
+ family: 'earth',
339
+ description: 'Material chocolate identity with a crisp technological cyan action.',
340
+ hex: '#7a2a00',
341
+ tertiaryHex: '#00aabe',
342
+ variant: 'vivid',
343
+ pairing: 'curated',
344
+ featured: true
345
+ }, {
346
+ name: 'graphite',
347
+ displayName: 'Graphite + Acid',
348
+ family: 'neutral',
349
+ description: 'Near-neutral identity that gives the stage to an acid-green action.',
350
+ hex: '#272b28',
351
+ tertiaryHex: '#78c900',
352
+ variant: 'vivid',
353
+ pairing: 'curated',
354
+ featured: true
355
+ }];
356
+
357
+ /** Preset identifiers are inferred from the authored registry, never repeated. */
22
358
 
23
359
  /**
24
- * Historically each preset carried a full light/dark map of raw HSL triples.
25
- * That map is gone the engine derives every role from {@link AppColorPreset.hex}.
26
- * The type alias is retained for the public `PresetTokens` export shape (the
27
- * resolved `--token -> value` record that `getPresetVars` produces).
360
+ * Backwards-compatible named-preset contract. Rich picker metadata lives on
361
+ * {@link ColorPresetRecipe} so existing consumers constructing this type do not
362
+ * acquire new required fields in a patch release.
28
363
  */
29
364
 
30
- export const APP_COLOR_NAMES = ['teal', 'blue', 'green', 'yellow', 'red', 'purple', 'pink', 'sky', 'orange', 'mint', 'oxy', 'faircoin', 'pumpkin', 'gray', 'brown', 'peach', 'rose', 'mono'];
31
- export const HEX_TO_APP_COLOR = {
32
- '#005c67': 'teal',
33
- '#1d9bf0': 'blue',
34
- '#10b981': 'green',
35
- '#ffd400': 'yellow',
36
- '#ef4444': 'red',
37
- '#b866ff': 'purple',
38
- '#f91880': 'pink',
39
- '#03a9f4': 'sky',
40
- '#ff7a00': 'orange',
41
- '#14b8a6': 'mint',
42
- '#c46ede': 'oxy',
43
- '#9ffb50': 'faircoin',
44
- '#ff9800': 'pumpkin',
45
- '#607d8b': 'gray',
46
- '#813519': 'brown',
47
- '#ffb28d': 'peach',
48
- '#fcaffe': 'rose',
49
- '#000000': 'mono'
50
- };
365
+ /** Enriched registry entry for a picker or colour playground. */
366
+
367
+ /** Stable ordered entries for pickers, filters and the Storybook playground. */
368
+ export const COLOR_PRESET_REGISTRY = COLOR_PRESET_SOURCES.map(source => ({
369
+ featured: false,
370
+ ...source
371
+ }));
372
+ export const APP_COLOR_NAMES = COLOR_PRESET_REGISTRY.map(({
373
+ name
374
+ }) => name);
375
+ export const APP_COLOR_PRESETS = COLOR_PRESET_REGISTRY.reduce((presets, preset) => {
376
+ // Preserve the historical runtime shape as well as its TypeScript type.
377
+ // Picker metadata belongs to COLOR_PRESET_REGISTRY; adding it invisibly to
378
+ // this older record would change Object.keys()/serialization in consumers.
379
+ presets[preset.name] = {
380
+ name: preset.name,
381
+ hex: preset.hex,
382
+ variant: preset.variant,
383
+ ...(preset.secondaryHex !== undefined ? {
384
+ secondaryHex: preset.secondaryHex
385
+ } : {}),
386
+ ...(preset.tertiaryHex !== undefined ? {
387
+ tertiaryHex: preset.tertiaryHex
388
+ } : {}),
389
+ ...(preset.label !== undefined ? {
390
+ label: preset.label
391
+ } : {}),
392
+ ...(preset.gate !== undefined ? {
393
+ gate: preset.gate
394
+ } : {})
395
+ };
396
+ return presets;
397
+ }, {});
398
+ export const HEX_TO_APP_COLOR = COLOR_PRESET_REGISTRY.reduce((names, preset) => {
399
+ names[preset.hex.toLowerCase()] = preset.name;
400
+ return names;
401
+ }, {});
51
402
  export function hexToAppColorName(hex) {
52
403
  return HEX_TO_APP_COLOR[hex.toLowerCase()] ?? 'teal';
53
404
  }
54
405
 
55
- /**
56
- * The 13 named presets, each a brand seed + scheme variant. The engine derives
57
- * the full role set (light + dark) from the seed. Seeds are the brand hex of
58
- * each preset; `oxy` reads most faithfully as `vibrant`, everything else keeps a
59
- * bold `vibrant` derivation to match the prior saturated palette.
60
- */
61
- export const APP_COLOR_PRESETS = {
62
- teal: {
63
- name: 'teal',
64
- hex: '#005c67',
65
- variant: 'vivid'
66
- },
67
- blue: {
68
- name: 'blue',
69
- hex: '#1d9bf0',
70
- variant: 'vivid'
71
- },
72
- green: {
73
- name: 'green',
74
- hex: '#10b981',
75
- variant: 'vivid'
76
- },
77
- yellow: {
78
- name: 'yellow',
79
- hex: '#ffd400',
80
- variant: 'vivid',
81
- label: 'white'
82
- },
83
- red: {
84
- name: 'red',
85
- hex: '#ef4444',
86
- variant: 'vivid'
87
- },
88
- purple: {
89
- name: 'purple',
90
- hex: '#b866ff',
91
- variant: 'vivid'
92
- },
93
- pink: {
94
- name: 'pink',
95
- hex: '#f91880',
96
- variant: 'vivid'
97
- },
98
- sky: {
99
- name: 'sky',
100
- hex: '#03a9f4',
101
- variant: 'vivid'
102
- },
103
- // Deliberately NOT Tailwind's orange-500 (`#f97316`). That seed sits at HCT hue
104
- // 46, which reads as orange only because it is also light: at hue 46 the sRGB
105
- // gamut allows a chroma of just 62 at the tones a white label needs (<= 49), so
106
- // the brand fill resolved to `rgb(177 76 0)` — a brown. Hue 34 carries a chroma
107
- // of 84 at that same tone, with the same white label and the same contrast
108
- // headroom, so the fill reads as orange instead of paying for the hue twice.
109
- orange: {
110
- name: 'orange',
111
- hex: '#ff7a00',
112
- variant: 'vivid'
113
- },
114
- mint: {
115
- name: 'mint',
116
- hex: '#14b8a6',
117
- variant: 'vivid'
118
- },
119
- oxy: {
120
- name: 'oxy',
121
- hex: '#c46ede',
122
- variant: 'vivid',
123
- gate: 'handle'
124
- },
125
- faircoin: {
126
- name: 'faircoin',
127
- hex: '#9ffb50',
128
- variant: 'vivid',
129
- gate: 'handle'
130
- },
131
- pumpkin: {
132
- name: 'pumpkin',
133
- hex: '#ff9800',
134
- variant: 'vivid'
135
- },
136
- gray: {
137
- name: 'gray',
138
- hex: '#607d8b',
139
- variant: 'vivid'
140
- },
141
- brown: {
142
- name: 'brown',
143
- hex: '#813519',
144
- variant: 'vivid'
145
- },
146
- peach: {
147
- name: 'peach',
148
- hex: '#ffb28d',
149
- variant: 'vivid'
150
- },
151
- rose: {
152
- name: 'rose',
153
- hex: '#fcaffe',
154
- variant: 'vivid'
155
- },
156
- /**
157
- * No colour at all — the black-and-white theme. Its seed carries zero chroma,
158
- * which is the whole mechanism: the policy derives a greyscale palette from any
159
- * seed with none, so a user who picks a grey in the colour wheel lands here too
160
- * rather than on a nearly-grey approximation.
161
- */
162
- mono: {
163
- name: 'mono',
164
- hex: '#000000',
165
- variant: 'monochrome',
166
- gate: 'premium'
167
- }
168
- };
406
+ /** The sixteen approved paired directions in the permanent Mention playground. */
407
+ export const COLOR_PLAYGROUND_NAMES = COLOR_PRESET_REGISTRY.filter(({
408
+ featured
409
+ }) => featured).map(({
410
+ name
411
+ }) => name);
412
+ /** Ordered family metadata and entries for consumer pickers. */
413
+ export const COLOR_PRESET_GROUPS = COLOR_PRESET_FAMILY_REGISTRY.reduce((groups, family) => {
414
+ groups[family.name] = {
415
+ ...family,
416
+ presets: COLOR_PRESET_REGISTRY.filter(preset => preset.family === family.name)
417
+ };
418
+ return groups;
419
+ }, {});
169
420
 
170
421
  /**
171
- * The three gate groups, DERIVED from the presets rather than listed again, so a
172
- * preset cannot be gated in one place and offered in another. Together they
173
- * partition {@link APP_COLOR_NAMES} exactly — asserted in
174
- * `__tests__/color-preset-gates.test.ts`, since a preset silently missing from
175
- * every group would simply vanish from a picker with no error anywhere.
176
- *
177
- * A consumer builds its visible list from these; it must NOT start from
178
- * `APP_COLOR_NAMES` and add the unlocked ones, which yields the gated presets to
179
- * everybody and duplicates whatever the viewer did unlock.
422
+ * Historically each preset carried a full light/dark map of raw HSL triples.
423
+ * The engine now derives every role from the registry's seeds.
180
424
  */
181
- const namesGatedBy = gate => APP_COLOR_NAMES.filter(name => APP_COLOR_PRESETS[name].gate === gate);
425
+
426
+ const namesGatedBy = gate => COLOR_PRESET_REGISTRY.filter(preset => preset.gate === gate).map(({
427
+ name
428
+ }) => name);
182
429
 
183
430
  /** Available to every user, signed in or not. */
184
431
  export const FREE_COLOR_NAMES = namesGatedBy(undefined);
@@ -1 +1 @@
1
- {"version":3,"names":["APP_COLOR_NAMES","HEX_TO_APP_COLOR","hexToAppColorName","hex","toLowerCase","APP_COLOR_PRESETS","teal","name","variant","blue","green","yellow","label","red","purple","pink","sky","orange","mint","oxy","gate","faircoin","pumpkin","gray","brown","peach","rose","mono","namesGatedBy","filter","FREE_COLOR_NAMES","undefined","HANDLE_COLOR_NAMES","PREMIUM_COLOR_NAMES"],"sourceRoot":"../../../src","sources":["theme/color-presets.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["COLOR_PRESET_FAMILY_SOURCES","name","displayName","description","COLOR_PRESET_FAMILY_REGISTRY","COLOR_PRESET_FAMILIES","map","COLOR_PRESET_SOURCES","family","hex","variant","pairing","label","gate","tertiaryHex","featured","COLOR_PRESET_REGISTRY","source","APP_COLOR_NAMES","APP_COLOR_PRESETS","reduce","presets","preset","secondaryHex","undefined","HEX_TO_APP_COLOR","names","toLowerCase","hexToAppColorName","COLOR_PLAYGROUND_NAMES","filter","COLOR_PRESET_GROUPS","groups","namesGatedBy","FREE_COLOR_NAMES","HANDLE_COLOR_NAMES","PREMIUM_COLOR_NAMES"],"sourceRoot":"../../../src","sources":["theme/color-presets.ts"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { generateRoleColors } from "../color-engine/index.js";
4
4
  import { buildPolicyTokens, isColourlessSeed } from "../color-policy.js";
5
- import { BORDER_ROLES, FILL_ROLES, TEXT_ROLES } from "../../design-tokens/color-roles.js";
5
+ import { ACCENT_TEXT_ROLES, BORDER_ROLES, FILL_ROLES, TEXT_ROLES } from "../../design-tokens/color-roles.js";
6
6
 
7
7
  /**
8
8
  * Every alias `theme.css` declares at `:root` as a reference to a canonical
@@ -21,6 +21,7 @@ import { BORDER_ROLES, FILL_ROLES, TEXT_ROLES } from "../../design-tokens/color-
21
21
  const SCOPED_ALIASES = {
22
22
  ...FILL_ROLES,
23
23
  ...TEXT_ROLES,
24
+ ...ACCENT_TEXT_ROLES,
24
25
  ...BORDER_ROLES,
25
26
  divider: 'var(--border)'
26
27
  };