@growth-labs/cms 0.5.25 → 0.5.27
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/dist/providers/null.d.ts.map +1 -1
- package/dist/providers/null.js +8 -0
- package/dist/providers/null.js.map +1 -1
- package/dist/providers/types.d.ts +26 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/ui/client/mount.d.ts +1 -0
- package/dist/ui/client/mount.d.ts.map +1 -1
- package/dist/ui/client/mount.js +1 -0
- package/dist/ui/client/mount.js.map +1 -1
- package/dist/ui/components/CmsApp.js +2 -11
- package/dist/ui/components/CmsApp.js.map +1 -1
- package/dist/ui/components/Sidebar.d.ts.map +1 -1
- package/dist/ui/components/Sidebar.js +2 -2
- package/dist/ui/components/Sidebar.js.map +1 -1
- package/dist/ui/components/Topbar.d.ts.map +1 -1
- package/dist/ui/components/Topbar.js +1 -10
- package/dist/ui/components/Topbar.js.map +1 -1
- package/dist/ui/editor/ContentForm.d.ts.map +1 -1
- package/dist/ui/editor/ContentForm.js +7 -8
- package/dist/ui/editor/ContentForm.js.map +1 -1
- package/dist/ui/editor/Rte.js +3 -3
- package/dist/ui/editor/Rte.js.map +1 -1
- package/dist/ui/inspector/FoundryTab.js +1 -1
- package/dist/ui/inspector/FoundryTab.js.map +1 -1
- package/dist/ui/pages/admin.astro +1 -1
- package/dist/ui/screens/AnalyticsScreen.d.ts +7 -0
- package/dist/ui/screens/AnalyticsScreen.d.ts.map +1 -1
- package/dist/ui/screens/AnalyticsScreen.js +38 -9
- package/dist/ui/screens/AnalyticsScreen.js.map +1 -1
- package/dist/ui/screens/AuthorsScreen.js +1 -1
- package/dist/ui/screens/ContentInsightsScreen.js +1 -1
- package/dist/ui/screens/ContentInsightsScreen.js.map +1 -1
- package/dist/ui/screens/EditorScreen.d.ts +3 -0
- package/dist/ui/screens/EditorScreen.d.ts.map +1 -1
- package/dist/ui/screens/EditorScreen.js +15 -9
- package/dist/ui/screens/EditorScreen.js.map +1 -1
- package/dist/ui/screens/LibraryScreen.js +2 -2
- package/dist/ui/screens/LibraryScreen.js.map +1 -1
- package/dist/ui/screens/SettingsScreen.js +1 -1
- package/dist/ui/screens/SubscriptionsScreen.js +2 -2
- package/dist/ui/screens/analytics-data.d.ts.map +1 -1
- package/dist/ui/screens/analytics-data.js +16 -1
- package/dist/ui/screens/analytics-data.js.map +1 -1
- package/dist/ui/styles/broadsheet.css +131 -156
- package/dist/ui/styles/growth-labs-tokens.css +149 -0
- package/dist/ui/theme.d.ts +7 -4
- package/dist/ui/theme.d.ts.map +1 -1
- package/dist/ui/theme.js +24 -65
- package/dist/ui/theme.js.map +1 -1
- package/dist/ui/use-tweaks.d.ts.map +1 -1
- package/dist/ui/use-tweaks.js +2 -1
- package/dist/ui/use-tweaks.js.map +1 -1
- package/package.json +1 -1
- package/src/providers/null.ts +8 -0
- package/src/providers/types.ts +27 -1
- package/src/ui/client/mount.tsx +1 -0
- package/src/ui/components/CmsApp.tsx +3 -20
- package/src/ui/components/Sidebar.tsx +5 -11
- package/src/ui/components/Topbar.tsx +2 -13
- package/src/ui/editor/ContentForm.tsx +7 -8
- package/src/ui/editor/Rte.tsx +3 -3
- package/src/ui/inspector/FoundryTab.tsx +1 -1
- package/src/ui/pages/admin.astro +1 -1
- package/src/ui/screens/AnalyticsScreen.tsx +86 -7
- package/src/ui/screens/AuthorsScreen.tsx +1 -1
- package/src/ui/screens/ContentInsightsScreen.tsx +1 -1
- package/src/ui/screens/EditorScreen.tsx +17 -9
- package/src/ui/screens/LibraryScreen.tsx +5 -2
- package/src/ui/screens/SettingsScreen.tsx +1 -1
- package/src/ui/screens/SubscriptionsScreen.tsx +2 -2
- package/src/ui/screens/analytics-data.ts +16 -2
- package/src/ui/styles/broadsheet.css +131 -156
- package/src/ui/styles/growth-labs-tokens.css +149 -0
- package/src/ui/theme.ts +29 -68
- package/src/ui/use-tweaks.ts +2 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/* @growth-labs/cms token snapshot.
|
|
2
|
+
* Source: growthlabs-work/src/styles/ds/tokens/{colors,effects,spacing,themes,typography}.css
|
|
3
|
+
* Verified: 2026-08-21. Package-owned because growthlabs-work is not a runtime dependency. */
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--gl-mint-100: #DFFBE7;
|
|
7
|
+
--gl-mint-200: #B3FBE8;
|
|
8
|
+
--gl-aqua-300: #9AFBE9;
|
|
9
|
+
--gl-cyan-400: #50F5EC;
|
|
10
|
+
--gl-cyan-500: #46FBF5;
|
|
11
|
+
--gl-teal-400: #3ED1C6;
|
|
12
|
+
--gl-teal-500: #1FA3A8;
|
|
13
|
+
--gl-blue-400: #44C2ED;
|
|
14
|
+
--gl-blue-500: #2CA8E0;
|
|
15
|
+
--gl-coral: #F56A61;
|
|
16
|
+
--gl-coral-soft: #F89787;
|
|
17
|
+
--gl-orange: #F7A34B;
|
|
18
|
+
--gl-orange-soft: #FBB35E;
|
|
19
|
+
--gl-pink: #F0659C;
|
|
20
|
+
--gl-magenta: #F230B7;
|
|
21
|
+
--gl-purple: #8C5FD3;
|
|
22
|
+
--gl-violet: #8075ED;
|
|
23
|
+
--gl-periwinkle: #B3C5EA;
|
|
24
|
+
--gl-interactive: #2F6FBD;
|
|
25
|
+
--gl-interactive-hover: #3578C4;
|
|
26
|
+
--gl-interactive-active: #245CA8;
|
|
27
|
+
--gl-focus-ring: #1E5EA8;
|
|
28
|
+
--gl-white: #FFFFFF;
|
|
29
|
+
--gl-off-white: #F8FAFA;
|
|
30
|
+
--gl-light-gray: #F5F6F8;
|
|
31
|
+
--gl-mist: #ECF1F0;
|
|
32
|
+
--gl-mint-wash: #CFEDE8;
|
|
33
|
+
--gl-border: #D6DEE3;
|
|
34
|
+
--gl-gray: #B3B3B3;
|
|
35
|
+
--gl-text-light: #8C8C8C;
|
|
36
|
+
--gl-text: #4D4D4D;
|
|
37
|
+
--gl-charcoal: #2B2F33;
|
|
38
|
+
--gl-ink-900: #16191C;
|
|
39
|
+
--gl-ink-800: #1E2227;
|
|
40
|
+
--gl-ink-700: #262A30;
|
|
41
|
+
--gl-ink-600: #2F343A;
|
|
42
|
+
--gl-ink-500: #3A4046;
|
|
43
|
+
--gl-ink-text: #E7ECEB;
|
|
44
|
+
--gl-ink-text-soft: #A7B0B4;
|
|
45
|
+
--gl-ink-text-mute: #79838A;
|
|
46
|
+
--gl-gradient: linear-gradient(135deg, #A4F1D8 0%, #3ED1C6 50%, #2CA8E0 100%);
|
|
47
|
+
--gl-gradient-bright: linear-gradient(135deg, #DFFBE7 0%, #83FBEC 50%, #44C2ED 100%);
|
|
48
|
+
--gl-gradient-warm: linear-gradient(135deg, #F7A34B 0%, #F56A61 55%, #F0659C 100%);
|
|
49
|
+
|
|
50
|
+
--surface-page: var(--gl-mist);
|
|
51
|
+
--surface-card: var(--gl-white);
|
|
52
|
+
--surface-muted: var(--gl-light-gray);
|
|
53
|
+
--surface-inverse: var(--gl-charcoal);
|
|
54
|
+
--surface-nav: rgba(255, 255, 255, 0.82);
|
|
55
|
+
--surface-raised-nav: rgba(255, 255, 255, 0.92);
|
|
56
|
+
--text-primary: var(--gl-text);
|
|
57
|
+
--text-strong: var(--gl-charcoal);
|
|
58
|
+
--text-secondary: var(--gl-text-light);
|
|
59
|
+
--text-muted: var(--gl-gray);
|
|
60
|
+
--text-on-dark: var(--gl-white);
|
|
61
|
+
--text-on-inverse: var(--gl-white);
|
|
62
|
+
--text-accent: var(--gl-interactive);
|
|
63
|
+
--border-default: var(--gl-border);
|
|
64
|
+
--border-strong: var(--gl-gray);
|
|
65
|
+
--accent-primary: var(--gl-teal-400);
|
|
66
|
+
--accent-primary-strong: var(--gl-teal-500);
|
|
67
|
+
--accent-secondary: var(--gl-blue-500);
|
|
68
|
+
--accent-cta: var(--gl-interactive);
|
|
69
|
+
--accent-cta-hover: var(--gl-interactive-hover);
|
|
70
|
+
--accent-cta-active: var(--gl-interactive-active);
|
|
71
|
+
--accent-warm: var(--gl-coral);
|
|
72
|
+
--focus-ring: var(--gl-focus-ring);
|
|
73
|
+
|
|
74
|
+
--radius-none: 0;
|
|
75
|
+
--radius-sm: 2px;
|
|
76
|
+
--radius-md: 4px;
|
|
77
|
+
--radius-control: 6px;
|
|
78
|
+
--radius-pill: 999px;
|
|
79
|
+
--radius-circle: 50%;
|
|
80
|
+
--shadow-faint: 0 6px 14px rgba(77, 77, 77, 0.06);
|
|
81
|
+
--shadow-card: 0 8px 18px rgba(77, 77, 77, 0.08);
|
|
82
|
+
--shadow-raised: 0 14px 30px rgba(43, 47, 51, 0.12);
|
|
83
|
+
--shadow-chip: 0 10px 20px rgba(43, 47, 51, 0.10);
|
|
84
|
+
--shadow-glow: 0 0 0 6px rgba(62, 209, 198, 0.18);
|
|
85
|
+
--ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
|
|
86
|
+
--ease-out: cubic-bezier(0.16, 1, 0.3, 1);
|
|
87
|
+
--duration-fast: 90ms;
|
|
88
|
+
--duration-base: 140ms;
|
|
89
|
+
--duration-slow: 320ms;
|
|
90
|
+
--blur-panel: blur(14px);
|
|
91
|
+
--border-thin: 1px;
|
|
92
|
+
--border-thick: 2px;
|
|
93
|
+
|
|
94
|
+
--space-0: 0;
|
|
95
|
+
--space-1: 4px;
|
|
96
|
+
--space-2: 8px;
|
|
97
|
+
--space-3: 12px;
|
|
98
|
+
--space-4: 16px;
|
|
99
|
+
--space-5: 24px;
|
|
100
|
+
--space-6: 32px;
|
|
101
|
+
--space-7: 48px;
|
|
102
|
+
--space-8: 64px;
|
|
103
|
+
--space-9: 96px;
|
|
104
|
+
--space-10: 128px;
|
|
105
|
+
|
|
106
|
+
--font-display: "Space Grotesk", "Lato", system-ui, sans-serif;
|
|
107
|
+
--font-body: "Lato", "Space Grotesk", system-ui, sans-serif;
|
|
108
|
+
--font-mono: "Space Grotesk", ui-monospace, "SF Mono", Menlo, monospace;
|
|
109
|
+
--weight-light: 300;
|
|
110
|
+
--weight-regular: 400;
|
|
111
|
+
--weight-medium: 500;
|
|
112
|
+
--weight-semibold: 600;
|
|
113
|
+
--weight-bold: 700;
|
|
114
|
+
--tracking-tighter: -0.02em;
|
|
115
|
+
--tracking-wide: 0.02em;
|
|
116
|
+
--tracking-eyebrow: 0.08em;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
[data-theme="dark"],
|
|
120
|
+
.gl-dark {
|
|
121
|
+
color-scheme: dark;
|
|
122
|
+
--surface-page: var(--gl-ink-800);
|
|
123
|
+
--surface-card: var(--gl-ink-700);
|
|
124
|
+
--surface-muted: var(--gl-ink-600);
|
|
125
|
+
--surface-inverse: var(--gl-mist);
|
|
126
|
+
--surface-nav: rgba(24, 27, 31, 0.82);
|
|
127
|
+
--surface-raised-nav: rgba(24, 27, 31, 0.92);
|
|
128
|
+
--text-primary: var(--gl-ink-text);
|
|
129
|
+
--text-strong: var(--gl-ink-text);
|
|
130
|
+
--text-secondary: var(--gl-ink-text-soft);
|
|
131
|
+
--text-muted: var(--gl-ink-text-mute);
|
|
132
|
+
--text-on-dark: var(--gl-ink-text);
|
|
133
|
+
--text-on-inverse: var(--gl-charcoal);
|
|
134
|
+
--text-accent: var(--gl-cyan-400);
|
|
135
|
+
--border-default: rgba(255, 255, 255, 0.12);
|
|
136
|
+
--border-strong: rgba(255, 255, 255, 0.24);
|
|
137
|
+
--accent-primary: var(--gl-teal-400);
|
|
138
|
+
--accent-primary-strong: var(--gl-cyan-400);
|
|
139
|
+
--accent-secondary: var(--gl-blue-400);
|
|
140
|
+
--accent-cta: #3F86D8;
|
|
141
|
+
--accent-cta-hover: var(--gl-blue-400);
|
|
142
|
+
--accent-cta-active: var(--gl-interactive);
|
|
143
|
+
--focus-ring: var(--gl-cyan-400);
|
|
144
|
+
--shadow-faint: 0 6px 14px rgba(0, 0, 0, 0.35);
|
|
145
|
+
--shadow-card: 0 8px 18px rgba(0, 0, 0, 0.42);
|
|
146
|
+
--shadow-raised: 0 16px 34px rgba(0, 0, 0, 0.52);
|
|
147
|
+
--shadow-chip: 0 10px 20px rgba(0, 0, 0, 0.45);
|
|
148
|
+
--shadow-glow: 0 0 0 6px rgba(62, 209, 198, 0.22);
|
|
149
|
+
}
|
package/src/ui/theme.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// the useTweaks effect; broadsheet.css carries the rest.
|
|
1
|
+
// Compatibility helpers for the fixed Growth Labs visual contract. Theme and
|
|
2
|
+
// density remain user preferences; brand accent and typography do not.
|
|
4
3
|
|
|
5
4
|
export interface AccentSet {
|
|
6
5
|
a: string
|
|
@@ -9,66 +8,25 @@ export interface AccentSet {
|
|
|
9
8
|
tint: string
|
|
10
9
|
ring: string
|
|
11
10
|
}
|
|
12
|
-
|
|
11
|
+
type BrandAccentName = 'Growth Labs'
|
|
12
|
+
export type AccentName = BrandAccentName | 'Ink blue' | 'Press red' | 'Forest' | 'Violet'
|
|
13
13
|
|
|
14
|
-
export const ACCENTS: Record<
|
|
15
|
-
'
|
|
16
|
-
a: '#
|
|
17
|
-
s: '#
|
|
18
|
-
fg: '#
|
|
19
|
-
tint: 'rgba(
|
|
20
|
-
ring: '
|
|
21
|
-
},
|
|
22
|
-
'Press red': {
|
|
23
|
-
a: '#b23a2e',
|
|
24
|
-
s: '#962f25',
|
|
25
|
-
fg: '#ffffff',
|
|
26
|
-
tint: 'rgba(178,58,46,0.10)',
|
|
27
|
-
ring: 'rgba(178,58,46,0.38)',
|
|
28
|
-
},
|
|
29
|
-
Forest: {
|
|
30
|
-
a: '#1f6b4a',
|
|
31
|
-
s: '#19583d',
|
|
32
|
-
fg: '#ffffff',
|
|
33
|
-
tint: 'rgba(31,107,74,0.10)',
|
|
34
|
-
ring: 'rgba(31,107,74,0.38)',
|
|
35
|
-
},
|
|
36
|
-
Violet: {
|
|
37
|
-
a: '#5b4bc4',
|
|
38
|
-
s: '#4c3ea8',
|
|
39
|
-
fg: '#ffffff',
|
|
40
|
-
tint: 'rgba(91,75,196,0.10)',
|
|
41
|
-
ring: 'rgba(91,75,196,0.38)',
|
|
14
|
+
export const ACCENTS: Record<BrandAccentName, AccentSet> = {
|
|
15
|
+
'Growth Labs': {
|
|
16
|
+
a: '#2F6FBD',
|
|
17
|
+
s: '#245CA8',
|
|
18
|
+
fg: '#FFFFFF',
|
|
19
|
+
tint: 'rgba(62,209,198,0.14)',
|
|
20
|
+
ring: '#1E5EA8',
|
|
42
21
|
},
|
|
43
22
|
}
|
|
44
|
-
export const ACCENTS_DARK: Record<
|
|
45
|
-
'
|
|
46
|
-
a: '#
|
|
47
|
-
s: '#
|
|
48
|
-
fg: '#
|
|
49
|
-
tint: 'rgba(
|
|
50
|
-
ring: '
|
|
51
|
-
},
|
|
52
|
-
'Press red': {
|
|
53
|
-
a: '#ef6e62',
|
|
54
|
-
s: '#e05348',
|
|
55
|
-
fg: '#1d0a08',
|
|
56
|
-
tint: 'rgba(239,110,98,0.16)',
|
|
57
|
-
ring: 'rgba(239,110,98,0.45)',
|
|
58
|
-
},
|
|
59
|
-
Forest: {
|
|
60
|
-
a: '#4ec98a',
|
|
61
|
-
s: '#3bb476',
|
|
62
|
-
fg: '#06160f',
|
|
63
|
-
tint: 'rgba(78,201,138,0.16)',
|
|
64
|
-
ring: 'rgba(78,201,138,0.45)',
|
|
65
|
-
},
|
|
66
|
-
Violet: {
|
|
67
|
-
a: '#9d8df0',
|
|
68
|
-
s: '#8978e6',
|
|
69
|
-
fg: '#0e0a1d',
|
|
70
|
-
tint: 'rgba(157,141,240,0.16)',
|
|
71
|
-
ring: 'rgba(157,141,240,0.45)',
|
|
23
|
+
export const ACCENTS_DARK: Record<BrandAccentName, AccentSet> = {
|
|
24
|
+
'Growth Labs': {
|
|
25
|
+
a: '#3F86D8',
|
|
26
|
+
s: '#2F6FBD',
|
|
27
|
+
fg: '#FFFFFF',
|
|
28
|
+
tint: 'rgba(62,209,198,0.18)',
|
|
29
|
+
ring: '#50F5EC',
|
|
72
30
|
},
|
|
73
31
|
}
|
|
74
32
|
|
|
@@ -77,23 +35,26 @@ export type Density = 'compact' | 'regular' | 'comfy'
|
|
|
77
35
|
export type PreviewPos = 'right' | 'bottom' | 'off'
|
|
78
36
|
|
|
79
37
|
export const TWEAK_DEFAULTS = {
|
|
80
|
-
theme: '
|
|
81
|
-
accent: '
|
|
38
|
+
theme: 'light' as ThemeMode,
|
|
39
|
+
accent: 'Growth Labs' as AccentName,
|
|
82
40
|
density: 'regular' as Density,
|
|
83
41
|
previewPos: 'off' as PreviewPos,
|
|
84
|
-
serifDisplay:
|
|
42
|
+
serifDisplay: false,
|
|
85
43
|
}
|
|
86
44
|
|
|
87
|
-
const
|
|
88
|
-
|
|
45
|
+
const DISPLAY = '"Space Grotesk", "Lato", system-ui, sans-serif'
|
|
46
|
+
|
|
47
|
+
export function serifVar(_serifDisplay: boolean): string {
|
|
48
|
+
return DISPLAY
|
|
49
|
+
}
|
|
89
50
|
|
|
90
|
-
export function
|
|
91
|
-
return
|
|
51
|
+
export function inverseTextVar(theme: ThemeMode): string {
|
|
52
|
+
return theme === 'dark' ? '#2B2F33' : '#FFFFFF'
|
|
92
53
|
}
|
|
93
54
|
|
|
94
55
|
export function resolveAccentVars(theme: ThemeMode, accent: AccentName): Record<string, string> {
|
|
95
56
|
const table = theme === 'dark' ? ACCENTS_DARK : ACCENTS
|
|
96
|
-
const set = table[accent] ?? table['
|
|
57
|
+
const set = table[accent as BrandAccentName] ?? table['Growth Labs']
|
|
97
58
|
return {
|
|
98
59
|
'--accent': set.a,
|
|
99
60
|
'--accent-strong': set.s,
|
package/src/ui/use-tweaks.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useCallback, useEffect, useState } from 'react'
|
|
2
|
-
import { resolveAccentVars, serifVar } from './theme.js'
|
|
2
|
+
import { inverseTextVar, resolveAccentVars, serifVar } from './theme.js'
|
|
3
3
|
import { applyTweak, loadTweaks, saveTweaks, type TweakState } from './tweaks.js'
|
|
4
4
|
|
|
5
5
|
export function useTweaks(): {
|
|
@@ -26,6 +26,7 @@ export function useTweaks(): {
|
|
|
26
26
|
for (const [k, val] of Object.entries(resolveAccentVars(t.theme, t.accent)))
|
|
27
27
|
root.style.setProperty(k, val)
|
|
28
28
|
root.style.setProperty('--serif', serifVar(t.serifDisplay))
|
|
29
|
+
root.style.setProperty('--text-on-inverse', inverseTextVar(t.theme))
|
|
29
30
|
}, [t.theme, t.density, t.accent, t.serifDisplay])
|
|
30
31
|
return { t, setTweak }
|
|
31
32
|
}
|