@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.
- package/README.md +16 -4
- package/docs/accordion.mdx +69 -0
- package/docs/activity-heatmap.mdx +71 -0
- package/docs/admonition.mdx +77 -0
- package/docs/alert-dialog.mdx +75 -0
- package/docs/alert.mdx +93 -0
- package/docs/animated-check.mdx +53 -0
- package/docs/aspect-ratio.mdx +45 -0
- package/docs/avatar-group.mdx +91 -0
- package/docs/avatar.mdx +126 -0
- package/docs/badge.mdx +74 -0
- package/docs/benefit-list.mdx +56 -0
- package/docs/bottom-sheet.mdx +103 -0
- package/docs/button.mdx +218 -0
- package/docs/card.mdx +106 -0
- package/docs/checkbox.mdx +59 -0
- package/docs/chip.mdx +53 -0
- package/docs/code.mdx +50 -0
- package/docs/combobox.mdx +64 -0
- package/docs/command.mdx +85 -0
- package/docs/composition-bar.mdx +63 -0
- package/docs/connection-dots.mdx +50 -0
- package/docs/connection-status.mdx +56 -0
- package/docs/content-panel.mdx +62 -0
- package/docs/context-menu.mdx +65 -0
- package/docs/design-tokens.mdx +254 -0
- package/docs/dialog.mdx +277 -0
- package/docs/divider.mdx +56 -0
- package/docs/dot-grid-meter.mdx +66 -0
- package/docs/dropdown-menu.mdx +161 -0
- package/docs/error-boundary.mdx +72 -0
- package/docs/fab.mdx +67 -0
- package/docs/field.mdx +70 -0
- package/docs/fill.mdx +58 -0
- package/docs/fonts.mdx +144 -0
- package/docs/frosted-icon-button.mdx +60 -0
- package/docs/getting-started.mdx +75 -0
- package/docs/grid.mdx +64 -0
- package/docs/hooks.mdx +81 -0
- package/docs/icon-circle.mdx +66 -0
- package/docs/icons.mdx +69 -0
- package/docs/image-aspect-ratio-cache.mdx +63 -0
- package/docs/image-resolver.mdx +66 -0
- package/docs/index.mdx +44 -0
- package/docs/input-group.mdx +58 -0
- package/docs/item.mdx +69 -0
- package/docs/kbd.mdx +57 -0
- package/docs/label.mdx +50 -0
- package/docs/link-preview.mdx +66 -0
- package/docs/list.mdx +72 -0
- package/docs/loading.mdx +129 -0
- package/docs/media-inset-border.mdx +52 -0
- package/docs/menubar.mdx +86 -0
- package/docs/migrating-to-1.0.mdx +434 -0
- package/docs/motion.mdx +83 -0
- package/docs/overlay.mdx +75 -0
- package/docs/popover.mdx +73 -0
- package/docs/portal.mdx +63 -0
- package/docs/pressable-scale.mdx +51 -0
- package/docs/profile-card.mdx +66 -0
- package/docs/progressive-blur.mdx +54 -0
- package/docs/prompt-input.mdx +183 -0
- package/docs/provider.mdx +64 -0
- package/docs/radio-indicator.mdx +60 -0
- package/docs/radio.mdx +65 -0
- package/docs/scroll.mdx +66 -0
- package/docs/search.mdx +67 -0
- package/docs/segmented-control.mdx +76 -0
- package/docs/select.mdx +93 -0
- package/docs/settings-list.mdx +186 -0
- package/docs/skeleton.mdx +66 -0
- package/docs/slider.mdx +73 -0
- package/docs/stat-bar.mdx +59 -0
- package/docs/stat-widgets.mdx +33 -0
- package/docs/styles.mdx +61 -0
- package/docs/subtle-hover.mdx +53 -0
- package/docs/surfaces.mdx +72 -0
- package/docs/switch.mdx +90 -0
- package/docs/tab-bar.mdx +386 -0
- package/docs/tabs.mdx +75 -0
- package/docs/text-field.mdx +187 -0
- package/docs/theme.mdx +67 -0
- package/docs/toast.mdx +285 -0
- package/docs/tooltip.mdx +67 -0
- package/docs/typography.mdx +88 -0
- package/docs/user-hover-card.mdx +140 -0
- package/docs/zoomable-image-gallery.mdx +66 -0
- package/lib/commonjs/design-tokens/color-roles.js +21 -1
- package/lib/commonjs/design-tokens/color-roles.js.map +1 -1
- package/lib/commonjs/design-tokens/index.js +6 -0
- package/lib/commonjs/design-tokens/index.js.map +1 -1
- package/lib/commonjs/design-tokens/tailwind-preset.js +3 -1
- package/lib/commonjs/design-tokens/tailwind-preset.js.map +1 -1
- package/lib/commonjs/design-tokens/theme-css.js +1 -0
- package/lib/commonjs/design-tokens/theme-css.js.map +1 -1
- package/lib/commonjs/design-tokens/theme.css +3 -0
- package/lib/commonjs/design-tokens/tokens-json.js +13 -4
- package/lib/commonjs/design-tokens/tokens-json.js.map +1 -1
- package/lib/commonjs/design-tokens/tokens.json +6227 -265
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js +7 -0
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/theme/ambient-store.js +16 -1
- package/lib/commonjs/theme/ambient-store.js.map +1 -1
- package/lib/commonjs/theme/color-policy.js +30 -33
- package/lib/commonjs/theme/color-policy.js.map +1 -1
- package/lib/commonjs/theme/color-presets.js +413 -166
- package/lib/commonjs/theme/color-presets.js.map +1 -1
- package/lib/commonjs/theme/color-scope/seed-scope.js +1 -0
- package/lib/commonjs/theme/color-scope/seed-scope.js.map +1 -1
- package/lib/commonjs/theme/glass-colors.js +18 -21
- package/lib/commonjs/theme/glass-colors.js.map +1 -1
- package/lib/commonjs/theme/index.js +30 -0
- package/lib/commonjs/theme/index.js.map +1 -1
- package/lib/commonjs/theme/index.web.js +30 -0
- package/lib/commonjs/theme/index.web.js.map +1 -1
- package/lib/module/design-tokens/color-roles.js +20 -0
- package/lib/module/design-tokens/color-roles.js.map +1 -1
- package/lib/module/design-tokens/index.js +2 -2
- package/lib/module/design-tokens/index.js.map +1 -1
- package/lib/module/design-tokens/tailwind-preset.js +4 -2
- package/lib/module/design-tokens/tailwind-preset.js.map +1 -1
- package/lib/module/design-tokens/theme-css.js +2 -1
- package/lib/module/design-tokens/theme-css.js.map +1 -1
- package/lib/module/design-tokens/theme.css +3 -0
- package/lib/module/design-tokens/tokens-json.js +14 -5
- package/lib/module/design-tokens/tokens-json.js.map +1 -1
- package/lib/module/design-tokens/tokens.json +6227 -265
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +1 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/theme/ambient-store.js +16 -1
- package/lib/module/theme/ambient-store.js.map +1 -1
- package/lib/module/theme/color-policy.js +30 -33
- package/lib/module/theme/color-policy.js.map +1 -1
- package/lib/module/theme/color-presets.js +412 -165
- package/lib/module/theme/color-presets.js.map +1 -1
- package/lib/module/theme/color-scope/seed-scope.js +2 -1
- package/lib/module/theme/color-scope/seed-scope.js.map +1 -1
- package/lib/module/theme/glass-colors.js +18 -21
- package/lib/module/theme/glass-colors.js.map +1 -1
- package/lib/module/theme/index.js +1 -1
- package/lib/module/theme/index.js.map +1 -1
- package/lib/module/theme/index.web.js +1 -1
- package/lib/module/theme/index.web.js.map +1 -1
- package/lib/typescript/commonjs/design-tokens/color-roles.d.ts +20 -0
- package/lib/typescript/commonjs/design-tokens/color-roles.d.ts.map +1 -1
- package/lib/typescript/commonjs/design-tokens/index.d.ts +3 -3
- package/lib/typescript/commonjs/design-tokens/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/design-tokens/tailwind-preset.d.ts.map +1 -1
- package/lib/typescript/commonjs/design-tokens/theme-css.d.ts.map +1 -1
- package/lib/typescript/commonjs/design-tokens/tokens-json.d.ts +12 -3
- package/lib/typescript/commonjs/design-tokens/tokens-json.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +2 -2
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.web.d.ts +2 -2
- package/lib/typescript/commonjs/index.web.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/ambient-store.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-presets.d.ts +386 -62
- package/lib/typescript/commonjs/theme/color-presets.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/color-scope/seed-scope.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/glass-colors.d.ts +18 -21
- package/lib/typescript/commonjs/theme/glass-colors.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/index.d.ts +2 -2
- package/lib/typescript/commonjs/theme/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/theme/index.web.d.ts +2 -2
- package/lib/typescript/commonjs/theme/index.web.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/color-roles.d.ts +20 -0
- package/lib/typescript/module/design-tokens/color-roles.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/index.d.ts +3 -3
- package/lib/typescript/module/design-tokens/index.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/tailwind-preset.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/theme-css.d.ts.map +1 -1
- package/lib/typescript/module/design-tokens/tokens-json.d.ts +12 -3
- package/lib/typescript/module/design-tokens/tokens-json.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +2 -2
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/index.web.d.ts +2 -2
- package/lib/typescript/module/index.web.d.ts.map +1 -1
- package/lib/typescript/module/theme/ambient-store.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-policy.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-presets.d.ts +386 -62
- package/lib/typescript/module/theme/color-presets.d.ts.map +1 -1
- package/lib/typescript/module/theme/color-scope/seed-scope.d.ts.map +1 -1
- package/lib/typescript/module/theme/glass-colors.d.ts +18 -21
- package/lib/typescript/module/theme/glass-colors.d.ts.map +1 -1
- package/lib/typescript/module/theme/index.d.ts +2 -2
- package/lib/typescript/module/theme/index.d.ts.map +1 -1
- package/lib/typescript/module/theme/index.web.d.ts +2 -2
- package/lib/typescript/module/theme/index.web.d.ts.map +1 -1
- package/package.json +5 -2
- package/src/__tests__/support/collision-fixture-barrel.ts +20 -0
- package/src/__tests__/support/constructed-style-sheets.ts +68 -0
- package/src/__tests__/support/press-host.ts +30 -0
- package/src/__tests__/support/rendered-style.ts +99 -0
- package/src/__tests__/support/unread-hook-fixture.ts +33 -0
- package/src/design-tokens/color-roles.ts +21 -0
- package/src/design-tokens/index.ts +3 -2
- package/src/design-tokens/tailwind-preset.ts +3 -2
- package/src/design-tokens/theme-css.ts +2 -1
- package/src/design-tokens/theme.css +3 -0
- package/src/design-tokens/tokens-json.ts +29 -9
- package/src/design-tokens/tokens.json +6227 -265
- package/src/glass/GlassSurface.tsx +2 -2
- package/src/index.ts +2 -0
- package/src/index.web.ts +2 -0
- package/src/theme/__tests__/__fixtures__/golden-resolved-tokens.json +4082 -0
- package/src/theme/__tests__/fixtures/color-engine-golden.json +1 -0
- package/src/theme/ambient-store.ts +21 -1
- package/src/theme/color-policy.ts +33 -38
- package/src/theme/color-presets.ts +473 -146
- package/src/theme/color-scope/seed-scope.ts +2 -1
- package/src/theme/glass-colors.ts +18 -21
- package/src/theme/index.ts +16 -1
- package/src/theme/index.web.ts +16 -1
|
@@ -1,89 +1,413 @@
|
|
|
1
1
|
import type { SchemeVariant } from './color-engine';
|
|
2
|
-
|
|
3
|
-
/**
|
|
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.
|
|
16
|
-
*
|
|
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.
|
|
21
|
-
*/
|
|
2
|
+
/** Why a preset is not offered to every user. Absent means it is free. */
|
|
22
3
|
export type ColorPresetGate =
|
|
23
4
|
/** Reserved for the account whose brand it is — not purchasable. */
|
|
24
5
|
'handle'
|
|
25
6
|
/** Sold with a subscription. */
|
|
26
7
|
| 'premium';
|
|
8
|
+
/** Stable picker/playground categories, ordered from specific to general. */
|
|
9
|
+
declare const COLOR_PRESET_FAMILY_SOURCES: readonly [{
|
|
10
|
+
readonly name: "brand";
|
|
11
|
+
readonly displayName: "Brand";
|
|
12
|
+
readonly description: "Reserved ecosystem identities.";
|
|
13
|
+
}, {
|
|
14
|
+
readonly name: "botanical";
|
|
15
|
+
readonly displayName: "Botanical";
|
|
16
|
+
readonly description: "Greens, jade and living hues.";
|
|
17
|
+
}, {
|
|
18
|
+
readonly name: "ocean";
|
|
19
|
+
readonly displayName: "Ocean";
|
|
20
|
+
readonly description: "Blue, cyan and aquatic identities.";
|
|
21
|
+
}, {
|
|
22
|
+
readonly name: "sunset";
|
|
23
|
+
readonly displayName: "Sunset";
|
|
24
|
+
readonly description: "Red, orange and golden identities.";
|
|
25
|
+
}, {
|
|
26
|
+
readonly name: "earth";
|
|
27
|
+
readonly displayName: "Earth";
|
|
28
|
+
readonly description: "Warm mineral and grounded identities.";
|
|
29
|
+
}, {
|
|
30
|
+
readonly name: "jewel";
|
|
31
|
+
readonly displayName: "Jewel";
|
|
32
|
+
readonly description: "Purple, rose and saturated gem hues.";
|
|
33
|
+
}, {
|
|
34
|
+
readonly name: "neutral";
|
|
35
|
+
readonly displayName: "Neutral";
|
|
36
|
+
readonly description: "Slate, graphite and monochrome.";
|
|
37
|
+
}];
|
|
38
|
+
export type ColorPresetFamily = (typeof COLOR_PRESET_FAMILY_SOURCES)[number]['name'];
|
|
39
|
+
export interface ColorPresetFamilyDefinition {
|
|
40
|
+
name: ColorPresetFamily;
|
|
41
|
+
displayName: string;
|
|
42
|
+
description: string;
|
|
43
|
+
}
|
|
44
|
+
export declare const COLOR_PRESET_FAMILY_REGISTRY: readonly ColorPresetFamilyDefinition[];
|
|
45
|
+
export declare const COLOR_PRESET_FAMILIES: readonly ColorPresetFamily[];
|
|
46
|
+
export type ColorPresetPairing = 'derived' | 'curated';
|
|
47
|
+
/**
|
|
48
|
+
* The ONE authored preset source.
|
|
49
|
+
*
|
|
50
|
+
* Everything public below — the name union, ordered registry, lookup record,
|
|
51
|
+
* hex lookup, gate lists, family groups and playground list — is derived from
|
|
52
|
+
* this tuple. A preset is a seed recipe, never a frozen light/dark token table;
|
|
53
|
+
* Bloom's colour policy resolves both modes at runtime.
|
|
54
|
+
*/
|
|
55
|
+
declare const COLOR_PRESET_SOURCES: readonly [{
|
|
56
|
+
readonly name: "teal";
|
|
57
|
+
readonly displayName: "Teal";
|
|
58
|
+
readonly family: "ocean";
|
|
59
|
+
readonly description: "Deep teal identity with dynamically derived split-complementary accents.";
|
|
60
|
+
readonly hex: "#005c67";
|
|
61
|
+
readonly variant: "vivid";
|
|
62
|
+
readonly pairing: "derived";
|
|
63
|
+
}, {
|
|
64
|
+
readonly name: "blue";
|
|
65
|
+
readonly displayName: "Blue";
|
|
66
|
+
readonly family: "ocean";
|
|
67
|
+
readonly description: "Clear social blue with vivid generated supporting colours.";
|
|
68
|
+
readonly hex: "#1d9bf0";
|
|
69
|
+
readonly variant: "vivid";
|
|
70
|
+
readonly pairing: "derived";
|
|
71
|
+
}, {
|
|
72
|
+
readonly name: "green";
|
|
73
|
+
readonly displayName: "Green";
|
|
74
|
+
readonly family: "botanical";
|
|
75
|
+
readonly description: "Fresh green identity with dynamically generated contrast accents.";
|
|
76
|
+
readonly hex: "#10b981";
|
|
77
|
+
readonly variant: "vivid";
|
|
78
|
+
readonly pairing: "derived";
|
|
79
|
+
}, {
|
|
80
|
+
readonly name: "yellow";
|
|
81
|
+
readonly displayName: "Yellow";
|
|
82
|
+
readonly family: "sunset";
|
|
83
|
+
readonly description: "A signal-yellow identity deliberately brought deep enough for a white label.";
|
|
84
|
+
readonly hex: "#ffd400";
|
|
85
|
+
readonly variant: "vivid";
|
|
86
|
+
readonly pairing: "derived";
|
|
87
|
+
readonly label: "white";
|
|
88
|
+
}, {
|
|
89
|
+
readonly name: "red";
|
|
90
|
+
readonly displayName: "Red";
|
|
91
|
+
readonly family: "sunset";
|
|
92
|
+
readonly description: "Direct red identity with contrasting generated accent arms.";
|
|
93
|
+
readonly hex: "#ef4444";
|
|
94
|
+
readonly variant: "vivid";
|
|
95
|
+
readonly pairing: "derived";
|
|
96
|
+
}, {
|
|
97
|
+
readonly name: "purple";
|
|
98
|
+
readonly displayName: "Purple";
|
|
99
|
+
readonly family: "jewel";
|
|
100
|
+
readonly description: "Bright purple identity with dynamically derived action colours.";
|
|
101
|
+
readonly hex: "#b866ff";
|
|
102
|
+
readonly variant: "vivid";
|
|
103
|
+
readonly pairing: "derived";
|
|
104
|
+
}, {
|
|
105
|
+
readonly name: "pink";
|
|
106
|
+
readonly displayName: "Pink";
|
|
107
|
+
readonly family: "jewel";
|
|
108
|
+
readonly description: "Hot pink identity with a vivid generated complement.";
|
|
109
|
+
readonly hex: "#f91880";
|
|
110
|
+
readonly variant: "vivid";
|
|
111
|
+
readonly pairing: "derived";
|
|
112
|
+
}, {
|
|
113
|
+
readonly name: "sky";
|
|
114
|
+
readonly displayName: "Sky";
|
|
115
|
+
readonly family: "ocean";
|
|
116
|
+
readonly description: "Open sky blue with dynamically generated supporting accents.";
|
|
117
|
+
readonly hex: "#03a9f4";
|
|
118
|
+
readonly variant: "vivid";
|
|
119
|
+
readonly pairing: "derived";
|
|
120
|
+
}, {
|
|
121
|
+
readonly name: "orange";
|
|
122
|
+
readonly displayName: "Orange";
|
|
123
|
+
readonly family: "sunset";
|
|
124
|
+
readonly description: "A gamut-aware orange that stays orange at white-label fill tones.";
|
|
125
|
+
readonly hex: "#ff7a00";
|
|
126
|
+
readonly variant: "vivid";
|
|
127
|
+
readonly pairing: "derived";
|
|
128
|
+
}, {
|
|
129
|
+
readonly name: "mint";
|
|
130
|
+
readonly displayName: "Mint";
|
|
131
|
+
readonly family: "botanical";
|
|
132
|
+
readonly description: "Cool mint identity with vivid generated supporting hues.";
|
|
133
|
+
readonly hex: "#14b8a6";
|
|
134
|
+
readonly variant: "vivid";
|
|
135
|
+
readonly pairing: "derived";
|
|
136
|
+
}, {
|
|
137
|
+
readonly name: "oxy";
|
|
138
|
+
readonly displayName: "Oxy";
|
|
139
|
+
readonly family: "brand";
|
|
140
|
+
readonly description: "Oxy purple, reserved for the Oxy account identity.";
|
|
141
|
+
readonly hex: "#c46ede";
|
|
142
|
+
readonly variant: "vivid";
|
|
143
|
+
readonly pairing: "derived";
|
|
144
|
+
readonly gate: "handle";
|
|
145
|
+
}, {
|
|
146
|
+
readonly name: "faircoin";
|
|
147
|
+
readonly displayName: "FairCoin";
|
|
148
|
+
readonly family: "brand";
|
|
149
|
+
readonly description: "FairCoin lime, reserved for the FairCoin account identity.";
|
|
150
|
+
readonly hex: "#9ffb50";
|
|
151
|
+
readonly variant: "vivid";
|
|
152
|
+
readonly pairing: "derived";
|
|
153
|
+
readonly gate: "handle";
|
|
154
|
+
}, {
|
|
155
|
+
readonly name: "pumpkin";
|
|
156
|
+
readonly displayName: "Pumpkin";
|
|
157
|
+
readonly family: "sunset";
|
|
158
|
+
readonly description: "Golden pumpkin orange with a generated split complement.";
|
|
159
|
+
readonly hex: "#ff9800";
|
|
160
|
+
readonly variant: "vivid";
|
|
161
|
+
readonly pairing: "derived";
|
|
162
|
+
}, {
|
|
163
|
+
readonly name: "gray";
|
|
164
|
+
readonly displayName: "Slate";
|
|
165
|
+
readonly family: "neutral";
|
|
166
|
+
readonly description: "Cool slate identity with restrained chroma and generated accents.";
|
|
167
|
+
readonly hex: "#607d8b";
|
|
168
|
+
readonly variant: "vivid";
|
|
169
|
+
readonly pairing: "derived";
|
|
170
|
+
}, {
|
|
171
|
+
readonly name: "brown";
|
|
172
|
+
readonly displayName: "Brown";
|
|
173
|
+
readonly family: "earth";
|
|
174
|
+
readonly description: "Deep earthen brown with a contrasting generated action colour.";
|
|
175
|
+
readonly hex: "#813519";
|
|
176
|
+
readonly variant: "vivid";
|
|
177
|
+
readonly pairing: "derived";
|
|
178
|
+
}, {
|
|
179
|
+
readonly name: "peach";
|
|
180
|
+
readonly displayName: "Peach";
|
|
181
|
+
readonly family: "earth";
|
|
182
|
+
readonly description: "Warm peach identity with dynamically derived contrast accents.";
|
|
183
|
+
readonly hex: "#ffb28d";
|
|
184
|
+
readonly variant: "vivid";
|
|
185
|
+
readonly pairing: "derived";
|
|
186
|
+
}, {
|
|
187
|
+
readonly name: "rose";
|
|
188
|
+
readonly displayName: "Rose";
|
|
189
|
+
readonly family: "jewel";
|
|
190
|
+
readonly description: "Light rose identity with generated vivid supporting hues.";
|
|
191
|
+
readonly hex: "#fcaffe";
|
|
192
|
+
readonly variant: "vivid";
|
|
193
|
+
readonly pairing: "derived";
|
|
194
|
+
}, {
|
|
195
|
+
readonly name: "mono";
|
|
196
|
+
readonly displayName: "Monochrome";
|
|
197
|
+
readonly family: "neutral";
|
|
198
|
+
readonly description: "Colourless identity and surfaces, derived as a true greyscale theme.";
|
|
199
|
+
readonly hex: "#000000";
|
|
200
|
+
readonly variant: "monochrome";
|
|
201
|
+
readonly pairing: "derived";
|
|
202
|
+
readonly gate: "premium";
|
|
203
|
+
}, {
|
|
204
|
+
readonly name: "grove";
|
|
205
|
+
readonly displayName: "Grove + Marigold";
|
|
206
|
+
readonly family: "botanical";
|
|
207
|
+
readonly description: "Green identity with warm marigold reserved for the action that must win.";
|
|
208
|
+
readonly hex: "#087a3e";
|
|
209
|
+
readonly tertiaryHex: "#ffb000";
|
|
210
|
+
readonly variant: "vivid";
|
|
211
|
+
readonly pairing: "curated";
|
|
212
|
+
readonly featured: true;
|
|
213
|
+
}, {
|
|
214
|
+
readonly name: "ember";
|
|
215
|
+
readonly displayName: "Terracotta + Saffron";
|
|
216
|
+
readonly family: "earth";
|
|
217
|
+
readonly description: "Terracotta identity with a high-energy saffron action.";
|
|
218
|
+
readonly hex: "#b52f0c";
|
|
219
|
+
readonly tertiaryHex: "#ffb000";
|
|
220
|
+
readonly variant: "vivid";
|
|
221
|
+
readonly pairing: "curated";
|
|
222
|
+
readonly featured: true;
|
|
223
|
+
}, {
|
|
224
|
+
readonly name: "merlot";
|
|
225
|
+
readonly displayName: "Oxblood + Coral";
|
|
226
|
+
readonly family: "jewel";
|
|
227
|
+
readonly description: "Deep wine identity with coral action, expressive without reading destructive.";
|
|
228
|
+
readonly hex: "#a5003c";
|
|
229
|
+
readonly tertiaryHex: "#ff542e";
|
|
230
|
+
readonly variant: "vivid";
|
|
231
|
+
readonly pairing: "curated";
|
|
232
|
+
readonly featured: true;
|
|
233
|
+
}, {
|
|
234
|
+
readonly name: "cobalt";
|
|
235
|
+
readonly displayName: "Cobalt + Signal Yellow";
|
|
236
|
+
readonly family: "ocean";
|
|
237
|
+
readonly description: "Cobalt structure cut by a saturated signal-yellow action.";
|
|
238
|
+
readonly hex: "#154fd7";
|
|
239
|
+
readonly tertiaryHex: "#ffd000";
|
|
240
|
+
readonly variant: "vivid";
|
|
241
|
+
readonly pairing: "curated";
|
|
242
|
+
readonly featured: true;
|
|
243
|
+
}, {
|
|
244
|
+
readonly name: "jade";
|
|
245
|
+
readonly displayName: "Jade + Tangerine";
|
|
246
|
+
readonly family: "botanical";
|
|
247
|
+
readonly description: "Clean jade identity with a direct tangerine action.";
|
|
248
|
+
readonly hex: "#007a4b";
|
|
249
|
+
readonly tertiaryHex: "#ff5e00";
|
|
250
|
+
readonly variant: "vivid";
|
|
251
|
+
readonly pairing: "curated";
|
|
252
|
+
readonly featured: true;
|
|
253
|
+
}, {
|
|
254
|
+
readonly name: "pine";
|
|
255
|
+
readonly displayName: "Pine + Rose";
|
|
256
|
+
readonly family: "botanical";
|
|
257
|
+
readonly description: "Sober pine identity with a vivid rose action.";
|
|
258
|
+
readonly hex: "#135c2d";
|
|
259
|
+
readonly tertiaryHex: "#f0005a";
|
|
260
|
+
readonly variant: "vivid";
|
|
261
|
+
readonly pairing: "curated";
|
|
262
|
+
readonly featured: true;
|
|
263
|
+
}, {
|
|
264
|
+
readonly name: "olive";
|
|
265
|
+
readonly displayName: "Olive + Lilac";
|
|
266
|
+
readonly family: "earth";
|
|
267
|
+
readonly description: "Editorial olive identity with an unexpected clear lilac action.";
|
|
268
|
+
readonly hex: "#5f6400";
|
|
269
|
+
readonly tertiaryHex: "#7c25e8";
|
|
270
|
+
readonly variant: "vivid";
|
|
271
|
+
readonly pairing: "curated";
|
|
272
|
+
readonly featured: true;
|
|
273
|
+
}, {
|
|
274
|
+
readonly name: "lagoon";
|
|
275
|
+
readonly displayName: "Teal + Coral";
|
|
276
|
+
readonly family: "ocean";
|
|
277
|
+
readonly description: "Aquatic teal identity with a warm coral action.";
|
|
278
|
+
readonly hex: "#00706d";
|
|
279
|
+
readonly tertiaryHex: "#ff4935";
|
|
280
|
+
readonly variant: "vivid";
|
|
281
|
+
readonly pairing: "curated";
|
|
282
|
+
readonly featured: true;
|
|
283
|
+
}, {
|
|
284
|
+
readonly name: "navy";
|
|
285
|
+
readonly displayName: "Navy + Apricot";
|
|
286
|
+
readonly family: "ocean";
|
|
287
|
+
readonly description: "Serious navy identity softened by a human apricot action.";
|
|
288
|
+
readonly hex: "#0b2c72";
|
|
289
|
+
readonly tertiaryHex: "#ff6b20";
|
|
290
|
+
readonly variant: "vivid";
|
|
291
|
+
readonly pairing: "curated";
|
|
292
|
+
readonly featured: true;
|
|
293
|
+
}, {
|
|
294
|
+
readonly name: "azure";
|
|
295
|
+
readonly displayName: "Sky + Vermilion";
|
|
296
|
+
readonly family: "ocean";
|
|
297
|
+
readonly description: "Airy sky identity with a decisive vermilion action.";
|
|
298
|
+
readonly hex: "#006a94";
|
|
299
|
+
readonly tertiaryHex: "#e82e12";
|
|
300
|
+
readonly variant: "vivid";
|
|
301
|
+
readonly pairing: "curated";
|
|
302
|
+
readonly featured: true;
|
|
303
|
+
}, {
|
|
304
|
+
readonly name: "violet";
|
|
305
|
+
readonly displayName: "Violet + Lime";
|
|
306
|
+
readonly family: "jewel";
|
|
307
|
+
readonly description: "Deep violet identity with an electric lime action.";
|
|
308
|
+
readonly hex: "#7227c4";
|
|
309
|
+
readonly tertiaryHex: "#78c900";
|
|
310
|
+
readonly variant: "vivid";
|
|
311
|
+
readonly pairing: "curated";
|
|
312
|
+
readonly featured: true;
|
|
313
|
+
}, {
|
|
314
|
+
readonly name: "lavender";
|
|
315
|
+
readonly displayName: "Lavender + Brass";
|
|
316
|
+
readonly family: "jewel";
|
|
317
|
+
readonly description: "Calm lavender identity with a warmer, more editorial brass action.";
|
|
318
|
+
readonly hex: "#5c3db5";
|
|
319
|
+
readonly tertiaryHex: "#d98900";
|
|
320
|
+
readonly variant: "vivid";
|
|
321
|
+
readonly pairing: "curated";
|
|
322
|
+
readonly featured: true;
|
|
323
|
+
}, {
|
|
324
|
+
readonly name: "plum";
|
|
325
|
+
readonly displayName: "Plum + Aqua";
|
|
326
|
+
readonly family: "jewel";
|
|
327
|
+
readonly description: "Nocturnal plum identity with a bright aqua action.";
|
|
328
|
+
readonly hex: "#8d075f";
|
|
329
|
+
readonly tertiaryHex: "#00aeb8";
|
|
330
|
+
readonly variant: "vivid";
|
|
331
|
+
readonly pairing: "curated";
|
|
332
|
+
readonly featured: true;
|
|
333
|
+
}, {
|
|
334
|
+
readonly name: "cherry";
|
|
335
|
+
readonly displayName: "Cherry + Powder Blue";
|
|
336
|
+
readonly family: "jewel";
|
|
337
|
+
readonly description: "Cherry identity with a cool powder-blue counterpoint.";
|
|
338
|
+
readonly hex: "#b00038";
|
|
339
|
+
readonly tertiaryHex: "#2979e8";
|
|
340
|
+
readonly variant: "vivid";
|
|
341
|
+
readonly pairing: "curated";
|
|
342
|
+
readonly featured: true;
|
|
343
|
+
}, {
|
|
344
|
+
readonly name: "chocolate";
|
|
345
|
+
readonly displayName: "Chocolate + Cyan";
|
|
346
|
+
readonly family: "earth";
|
|
347
|
+
readonly description: "Material chocolate identity with a crisp technological cyan action.";
|
|
348
|
+
readonly hex: "#7a2a00";
|
|
349
|
+
readonly tertiaryHex: "#00aabe";
|
|
350
|
+
readonly variant: "vivid";
|
|
351
|
+
readonly pairing: "curated";
|
|
352
|
+
readonly featured: true;
|
|
353
|
+
}, {
|
|
354
|
+
readonly name: "graphite";
|
|
355
|
+
readonly displayName: "Graphite + Acid";
|
|
356
|
+
readonly family: "neutral";
|
|
357
|
+
readonly description: "Near-neutral identity that gives the stage to an acid-green action.";
|
|
358
|
+
readonly hex: "#272b28";
|
|
359
|
+
readonly tertiaryHex: "#78c900";
|
|
360
|
+
readonly variant: "vivid";
|
|
361
|
+
readonly pairing: "curated";
|
|
362
|
+
readonly featured: true;
|
|
363
|
+
}];
|
|
364
|
+
/** Preset identifiers are inferred from the authored registry, never repeated. */
|
|
365
|
+
export type AppColorName = (typeof COLOR_PRESET_SOURCES)[number]['name'];
|
|
366
|
+
/**
|
|
367
|
+
* Backwards-compatible named-preset contract. Rich picker metadata lives on
|
|
368
|
+
* {@link ColorPresetRecipe} so existing consumers constructing this type do not
|
|
369
|
+
* acquire new required fields in a patch release.
|
|
370
|
+
*/
|
|
27
371
|
export interface AppColorPreset {
|
|
28
372
|
name: AppColorName;
|
|
29
|
-
/** The brand seed colour, `#rrggbb`. Also the value the colour picker matches. */
|
|
30
373
|
hex: string;
|
|
31
|
-
/** The tonal scheme variant the engine derives roles with. */
|
|
32
374
|
variant: SchemeVariant;
|
|
33
|
-
/**
|
|
34
|
-
* Optional explicit secondary-accent seed, `#rrggbb`. When set, the secondary
|
|
35
|
-
* palette is PINNED to this brand colour (hue + chroma preserved; M3 role tones
|
|
36
|
-
* still apply) instead of the derived hue-rotation of {@link AppColorPreset.hex}.
|
|
37
|
-
* Bloom's built-in presets do NOT set this, so their generated output is
|
|
38
|
-
* unchanged; a consumer brand with a distinct accent (blue primary + yellow
|
|
39
|
-
* secondary) sets it to pin its real accent family.
|
|
40
|
-
*/
|
|
41
375
|
secondaryHex?: string;
|
|
42
|
-
/**
|
|
43
|
-
* Optional explicit tertiary-accent seed, `#rrggbb`. Same semantics as
|
|
44
|
-
* {@link AppColorPreset.secondaryHex} for the tertiary palette.
|
|
45
|
-
*/
|
|
46
376
|
tertiaryHex?: string;
|
|
47
|
-
/**
|
|
48
|
-
* Force the fill to a tone a WHITE label fits, in BOTH modes — overriding the
|
|
49
|
-
* budget that otherwise lets an already-light seed keep its own tone in dark
|
|
50
|
-
* and take a black label.
|
|
51
|
-
*
|
|
52
|
-
* It has to be declared, because it cannot be derived: `yellow` (seed tone 86)
|
|
53
|
-
* wants to come down to a deep gold with white on it, and `faircoin` (tone 90)
|
|
54
|
-
* wants to stay a bright lime with black on it. Two seeds four tones apart,
|
|
55
|
-
* opposite answers — nothing in the hex distinguishes them, only what the brand
|
|
56
|
-
* is for.
|
|
57
|
-
*/
|
|
58
377
|
label?: 'white';
|
|
59
|
-
/**
|
|
60
|
-
* Who may pick this preset. Absent = everyone. Bloom only DECLARES the gate;
|
|
61
|
-
* whether a given viewer satisfies it is the consuming app's question, since
|
|
62
|
-
* only the app knows who is signed in and what they pay for.
|
|
63
|
-
*/
|
|
64
378
|
gate?: ColorPresetGate;
|
|
65
379
|
}
|
|
66
|
-
/**
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
380
|
+
/** Enriched registry entry for a picker or colour playground. */
|
|
381
|
+
export interface ColorPresetRecipe extends AppColorPreset {
|
|
382
|
+
displayName: string;
|
|
383
|
+
family: ColorPresetFamily;
|
|
384
|
+
description: string;
|
|
385
|
+
pairing: ColorPresetPairing;
|
|
386
|
+
featured: boolean;
|
|
387
|
+
}
|
|
388
|
+
/** Stable ordered entries for pickers, filters and the Storybook playground. */
|
|
389
|
+
export declare const COLOR_PRESET_REGISTRY: readonly ColorPresetRecipe[];
|
|
73
390
|
export declare const APP_COLOR_NAMES: readonly AppColorName[];
|
|
391
|
+
export declare const APP_COLOR_PRESETS: Record<AppColorName, AppColorPreset>;
|
|
74
392
|
export declare const HEX_TO_APP_COLOR: Record<string, AppColorName>;
|
|
75
393
|
export declare function hexToAppColorName(hex: string): AppColorName;
|
|
394
|
+
/** The sixteen approved paired directions in the permanent Mention playground. */
|
|
395
|
+
export declare const COLOR_PLAYGROUND_NAMES: readonly AppColorName[];
|
|
396
|
+
export interface ColorPresetGroup extends ColorPresetFamilyDefinition {
|
|
397
|
+
presets: readonly ColorPresetRecipe[];
|
|
398
|
+
}
|
|
399
|
+
/** Ordered family metadata and entries for consumer pickers. */
|
|
400
|
+
export declare const COLOR_PRESET_GROUPS: Readonly<Record<ColorPresetFamily, ColorPresetGroup>>;
|
|
76
401
|
/**
|
|
77
|
-
*
|
|
78
|
-
*
|
|
79
|
-
* each preset; `oxy` reads most faithfully as `vibrant`, everything else keeps a
|
|
80
|
-
* bold `vibrant` derivation to match the prior saturated palette.
|
|
402
|
+
* Historically each preset carried a full light/dark map of raw HSL triples.
|
|
403
|
+
* The engine now derives every role from the registry's seeds.
|
|
81
404
|
*/
|
|
82
|
-
export
|
|
405
|
+
export type PresetTokens = Record<string, string>;
|
|
83
406
|
/** Available to every user, signed in or not. */
|
|
84
407
|
export declare const FREE_COLOR_NAMES: readonly AppColorName[];
|
|
85
408
|
/** Reserved for the account whose brand it is (`oxy`, `faircoin`) — not for sale. */
|
|
86
409
|
export declare const HANDLE_COLOR_NAMES: readonly AppColorName[];
|
|
87
410
|
/** Sold with a subscription. */
|
|
88
411
|
export declare const PREMIUM_COLOR_NAMES: readonly AppColorName[];
|
|
412
|
+
export {};
|
|
89
413
|
//# sourceMappingURL=color-presets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-presets.d.ts","sourceRoot":"","sources":["../../../../src/theme/color-presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"color-presets.d.ts","sourceRoot":"","sources":["../../../../src/theme/color-presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-scope.d.ts","sourceRoot":"","sources":["../../../../../src/theme/color-scope/seed-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"seed-scope.d.ts","sourceRoot":"","sources":["../../../../../src/theme/color-scope/seed-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AA0B1F;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAevF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4C9E;AAED,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBpF"}
|
|
@@ -16,23 +16,22 @@
|
|
|
16
16
|
*
|
|
17
17
|
* The 15% that bleeds through moves the pane TOWARD the surface under it, and
|
|
18
18
|
* in light mode that means lighter — which is the direction a white label can
|
|
19
|
-
* least afford. Measured over
|
|
19
|
+
* least afford. Measured over 34 presets x 2 modes x 5 Bloom surfaces:
|
|
20
20
|
*
|
|
21
|
-
* `Button` primary
|
|
22
|
-
* 4.17..4.49, ALL of them in LIGHT mode, across
|
|
23
|
-
* presets (blue, faircoin, green,
|
|
24
|
-
* rose, sky, yellow).
|
|
25
|
-
* `Button` destructive 0 of
|
|
21
|
+
* `Button` primary 38 of 340 rows fall below WCAG AA, in the band
|
|
22
|
+
* 4.17..4.49, ALL of them in LIGHT mode, across fourteen
|
|
23
|
+
* presets (blue, faircoin, green, lagoon, lavender, mint,
|
|
24
|
+
* olive, orange, pine, plum, pumpkin, rose, sky, yellow).
|
|
25
|
+
* `Button` destructive 0 of 340. Worst 5.32.
|
|
26
26
|
*
|
|
27
|
-
* As a SOLID fill all
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
* bar; re-measure both numbers on every alpha or surface change.
|
|
27
|
+
* As a SOLID fill all 680 Button rows pass. The original 18 presets retain
|
|
28
|
+
* their exact 30/180 shipped failure set; all eight added failures belong to
|
|
29
|
+
* the new recipes. A browser helper briefly reported 45 only because it parsed
|
|
30
|
+
* the structured `GLASS_SHEEN.bottom` stop as CSS; that was measurement drift,
|
|
31
|
+
* never the shipped oracle and never a threshold being relaxed.
|
|
33
32
|
*
|
|
34
33
|
* The alpha at which the failures reach zero is **0.89** (worst 4.52), and the
|
|
35
|
-
* curve between is steep: 0.86 ->
|
|
34
|
+
* curve between is steep: 0.86 -> 25 rows, 0.87 -> 14, 0.88 -> 5, 0.89 -> 0.
|
|
36
35
|
* So AA compliance costs four hundredths of alpha. 0.85 is kept because it is
|
|
37
36
|
* the reference's own value and matching the reference is the requirement;
|
|
38
37
|
* `glass-colors.test.ts` pins the compromise as an EXACT failure count and an
|
|
@@ -168,7 +167,7 @@ export interface GlassColors {
|
|
|
168
167
|
* `colors.negative`, `colors.success` — rather than a tone name, because the
|
|
169
168
|
* caller is the only one who knows which token its variant means. `Button`'s
|
|
170
169
|
* `destructive` is `colors.negative` (the engine's error ROLE) and not
|
|
171
|
-
* `colors.error` (the fixed status seed): measured, those two differ in all
|
|
170
|
+
* `colors.error` (the fixed status seed): measured, those two differ in all 68
|
|
172
171
|
* preset x mode combinations and by as much as `rgb(255 180 171)` against
|
|
173
172
|
* `rgb(209 45 50)` on `teal`/dark, so a tone vocabulary here would have
|
|
174
173
|
* silently repainted every destructive button on the way past.
|
|
@@ -183,13 +182,11 @@ export interface GlassColors {
|
|
|
183
182
|
* It is worth writing down WHY it is that token, because at 0.25 it was
|
|
184
183
|
* `colors.text` and that was correct THEN: a pane that is three-quarters
|
|
185
184
|
* backdrop takes its luminance from the page, so it needed the page's reading
|
|
186
|
-
* colour
|
|
187
|
-
*
|
|
188
|
-
*
|
|
189
|
-
*
|
|
190
|
-
*
|
|
191
|
-
* alpha did. Neither count is permanent; the gate re-measures both on every
|
|
192
|
-
* alpha or surface change and reports them side by side.
|
|
185
|
+
* colour. At 0.85 the pane is the fill, so it takes the fill's own label: on
|
|
186
|
+
* the complete 2040-row matrix (34 presets x 2 modes x 6 tones x 5 surfaces),
|
|
187
|
+
* `colors.text` fails AA on 1714 rows (worst 1.21) against the on-fill token's
|
|
188
|
+
* 305 (worst 4.17). Neither count is permanent; the gate re-measures and pins
|
|
189
|
+
* both on every alpha or surface change.
|
|
193
190
|
*/
|
|
194
191
|
export declare function resolveGlassColors(fill: string): GlassColors;
|
|
195
192
|
//# sourceMappingURL=glass-colors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glass-colors.d.ts","sourceRoot":"","sources":["../../../../src/theme/glass-colors.ts"],"names":[],"mappings":"AAyEA
|
|
1
|
+
{"version":3,"file":"glass-colors.d.ts","sourceRoot":"","sources":["../../../../src/theme/glass-colors.ts"],"names":[],"mappings":"AAyEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;IAItB,0EAA0E;;CAElE,CAAC;AAEX,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElF,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAE1D;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,6CAA6C,CAAC;AAE9E,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,eAAoC,CAAC;AAEnE;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,QAA4K,CAAC;AAE9M;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,oBAAoB,QAA6B,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAM5D"}
|
|
@@ -16,8 +16,8 @@ export type { AmbientThemeState, AmbientThemeApi, AmbientAccents, UseAmbientThem
|
|
|
16
16
|
export { useNavigationTheme } from './use-navigation-theme';
|
|
17
17
|
export type { NavigationTheme, NavigationThemeFont } from './use-navigation-theme';
|
|
18
18
|
export type { Theme, ThemeColors, ThemeMode, ThemeGradient, ThemeGradients } from './types';
|
|
19
|
-
export type { AppColorName, AppColorPreset, ColorPresetGate, PresetTokens } from './color-presets';
|
|
20
|
-
export { APP_COLOR_NAMES, FREE_COLOR_NAMES, HANDLE_COLOR_NAMES, PREMIUM_COLOR_NAMES, APP_COLOR_PRESETS, HEX_TO_APP_COLOR, hexToAppColorName, } from './color-presets';
|
|
19
|
+
export type { AppColorName, AppColorPreset, ColorPresetFamily, ColorPresetFamilyDefinition, ColorPresetGate, ColorPresetGroup, ColorPresetPairing, ColorPresetRecipe, PresetTokens, } from './color-presets';
|
|
20
|
+
export { APP_COLOR_NAMES, COLOR_PLAYGROUND_NAMES, COLOR_PRESET_FAMILIES, COLOR_PRESET_FAMILY_REGISTRY, COLOR_PRESET_GROUPS, COLOR_PRESET_REGISTRY, FREE_COLOR_NAMES, HANDLE_COLOR_NAMES, PREMIUM_COLOR_NAMES, APP_COLOR_PRESETS, HEX_TO_APP_COLOR, hexToAppColorName, } from './color-presets';
|
|
21
21
|
export { parseRgb, parseRgba, withAlpha } from './color-utils';
|
|
22
22
|
export type { RgbChannels, RgbaChannels } from './color-utils';
|
|
23
23
|
export { pressedSurface, PRESS_LAYER_ALPHA } from './press-colors';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/theme/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAepE,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5F,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/theme/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAepE,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5F,YAAY,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK/D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -16,8 +16,8 @@ export type { AmbientThemeState, AmbientThemeApi, AmbientAccents, UseAmbientThem
|
|
|
16
16
|
export { useNavigationTheme } from './use-navigation-theme';
|
|
17
17
|
export type { NavigationTheme, NavigationThemeFont } from './use-navigation-theme';
|
|
18
18
|
export type { Theme, ThemeColors, ThemeMode, ThemeGradient, ThemeGradients } from './types';
|
|
19
|
-
export type { AppColorName, AppColorPreset, ColorPresetGate, PresetTokens } from './color-presets';
|
|
20
|
-
export { APP_COLOR_NAMES, FREE_COLOR_NAMES, HANDLE_COLOR_NAMES, PREMIUM_COLOR_NAMES, APP_COLOR_PRESETS, HEX_TO_APP_COLOR, hexToAppColorName, } from './color-presets';
|
|
19
|
+
export type { AppColorName, AppColorPreset, ColorPresetFamily, ColorPresetFamilyDefinition, ColorPresetGate, ColorPresetGroup, ColorPresetPairing, ColorPresetRecipe, PresetTokens, } from './color-presets';
|
|
20
|
+
export { APP_COLOR_NAMES, COLOR_PLAYGROUND_NAMES, COLOR_PRESET_FAMILIES, COLOR_PRESET_FAMILY_REGISTRY, COLOR_PRESET_GROUPS, COLOR_PRESET_REGISTRY, FREE_COLOR_NAMES, HANDLE_COLOR_NAMES, PREMIUM_COLOR_NAMES, APP_COLOR_PRESETS, HEX_TO_APP_COLOR, hexToAppColorName, } from './color-presets';
|
|
21
21
|
export { parseRgb, parseRgba, withAlpha } from './color-utils';
|
|
22
22
|
export type { RgbChannels, RgbaChannels } from './color-utils';
|
|
23
23
|
export { pressedSurface, PRESS_LAYER_ALPHA } from './press-colors';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/theme/index.web.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAepE,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5F,YAAY,
|
|
1
|
+
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../../src/theme/index.web.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC9E,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAepE,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACnF,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC5F,YAAY,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,4BAA4B,EAC5B,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/D,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAK/D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|