@growth-labs/cms 0.5.26 → 0.5.29

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 (89) hide show
  1. package/README.md +20 -0
  2. package/dist/engine/slug.d.ts.map +1 -1
  3. package/dist/engine/slug.js +11 -1
  4. package/dist/engine/slug.js.map +1 -1
  5. package/dist/integration/options.d.ts +196 -0
  6. package/dist/integration/options.d.ts.map +1 -1
  7. package/dist/integration/options.js +62 -0
  8. package/dist/integration/options.js.map +1 -1
  9. package/dist/routes/content.d.ts.map +1 -1
  10. package/dist/routes/content.js +30 -0
  11. package/dist/routes/content.js.map +1 -1
  12. package/dist/ui/client/mount.d.ts +1 -0
  13. package/dist/ui/client/mount.d.ts.map +1 -1
  14. package/dist/ui/client/mount.js +2 -0
  15. package/dist/ui/client/mount.js.map +1 -1
  16. package/dist/ui/components/CmsApp.js +2 -11
  17. package/dist/ui/components/CmsApp.js.map +1 -1
  18. package/dist/ui/components/Sidebar.d.ts.map +1 -1
  19. package/dist/ui/components/Sidebar.js +2 -2
  20. package/dist/ui/components/Sidebar.js.map +1 -1
  21. package/dist/ui/components/Topbar.d.ts.map +1 -1
  22. package/dist/ui/components/Topbar.js +1 -10
  23. package/dist/ui/components/Topbar.js.map +1 -1
  24. package/dist/ui/editor/ContentForm.d.ts +3 -1
  25. package/dist/ui/editor/ContentForm.d.ts.map +1 -1
  26. package/dist/ui/editor/ContentForm.js +42 -16
  27. package/dist/ui/editor/ContentForm.js.map +1 -1
  28. package/dist/ui/editor/Rte.js +3 -3
  29. package/dist/ui/editor/Rte.js.map +1 -1
  30. package/dist/ui/editor/content-payload.d.ts +12 -0
  31. package/dist/ui/editor/content-payload.d.ts.map +1 -1
  32. package/dist/ui/editor/content-payload.js +24 -0
  33. package/dist/ui/editor/content-payload.js.map +1 -1
  34. package/dist/ui/inspector/FoundryTab.js +1 -1
  35. package/dist/ui/inspector/FoundryTab.js.map +1 -1
  36. package/dist/ui/pages/admin.astro +1 -1
  37. package/dist/ui/screens/AuthorsScreen.js +1 -1
  38. package/dist/ui/screens/ContentInsightsScreen.js +1 -1
  39. package/dist/ui/screens/ContentInsightsScreen.js.map +1 -1
  40. package/dist/ui/screens/ContentRoute.d.ts +3 -1
  41. package/dist/ui/screens/ContentRoute.d.ts.map +1 -1
  42. package/dist/ui/screens/ContentRoute.js +2 -2
  43. package/dist/ui/screens/ContentRoute.js.map +1 -1
  44. package/dist/ui/screens/EditorScreen.d.ts +6 -1
  45. package/dist/ui/screens/EditorScreen.d.ts.map +1 -1
  46. package/dist/ui/screens/EditorScreen.js +17 -11
  47. package/dist/ui/screens/EditorScreen.js.map +1 -1
  48. package/dist/ui/screens/LibraryScreen.js +2 -2
  49. package/dist/ui/screens/LibraryScreen.js.map +1 -1
  50. package/dist/ui/screens/SettingsScreen.js +1 -1
  51. package/dist/ui/screens/SubscriptionsScreen.js +2 -2
  52. package/dist/ui/screens/registry.d.ts +3 -1
  53. package/dist/ui/screens/registry.d.ts.map +1 -1
  54. package/dist/ui/screens/registry.js +2 -2
  55. package/dist/ui/screens/registry.js.map +1 -1
  56. package/dist/ui/styles/broadsheet.css +131 -156
  57. package/dist/ui/styles/growth-labs-tokens.css +149 -0
  58. package/dist/ui/theme.d.ts +7 -4
  59. package/dist/ui/theme.d.ts.map +1 -1
  60. package/dist/ui/theme.js +24 -65
  61. package/dist/ui/theme.js.map +1 -1
  62. package/dist/ui/use-tweaks.d.ts.map +1 -1
  63. package/dist/ui/use-tweaks.js +2 -1
  64. package/dist/ui/use-tweaks.js.map +1 -1
  65. package/package.json +1 -1
  66. package/src/engine/slug.ts +12 -1
  67. package/src/integration/options.ts +69 -0
  68. package/src/routes/content.ts +37 -0
  69. package/src/ui/client/mount.tsx +2 -0
  70. package/src/ui/components/CmsApp.tsx +3 -20
  71. package/src/ui/components/Sidebar.tsx +5 -11
  72. package/src/ui/components/Topbar.tsx +2 -13
  73. package/src/ui/editor/ContentForm.tsx +81 -13
  74. package/src/ui/editor/Rte.tsx +3 -3
  75. package/src/ui/editor/content-payload.ts +39 -0
  76. package/src/ui/inspector/FoundryTab.tsx +1 -1
  77. package/src/ui/pages/admin.astro +1 -1
  78. package/src/ui/screens/AuthorsScreen.tsx +1 -1
  79. package/src/ui/screens/ContentInsightsScreen.tsx +1 -1
  80. package/src/ui/screens/ContentRoute.tsx +4 -0
  81. package/src/ui/screens/EditorScreen.tsx +21 -9
  82. package/src/ui/screens/LibraryScreen.tsx +5 -2
  83. package/src/ui/screens/SettingsScreen.tsx +1 -1
  84. package/src/ui/screens/SubscriptionsScreen.tsx +2 -2
  85. package/src/ui/screens/registry.tsx +4 -0
  86. package/src/ui/styles/broadsheet.css +131 -156
  87. package/src/ui/styles/growth-labs-tokens.css +149 -0
  88. package/src/ui/theme.ts +29 -68
  89. package/src/ui/use-tweaks.ts +2 -1
package/src/ui/theme.ts CHANGED
@@ -1,6 +1,5 @@
1
- // src/ui/theme.ts theme tokens ported from the resolved Broadsheet design
2
- // (app.jsx). The accent/serif vars are applied to documentElement at runtime by
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
- export type AccentName = 'Ink blue' | 'Press red' | 'Forest' | 'Violet'
11
+ type BrandAccentName = 'Growth Labs'
12
+ export type AccentName = BrandAccentName | 'Ink blue' | 'Press red' | 'Forest' | 'Violet'
13
13
 
14
- export const ACCENTS: Record<AccentName, AccentSet> = {
15
- 'Ink blue': {
16
- a: '#0c4a6e',
17
- s: '#075985',
18
- fg: '#ffffff',
19
- tint: 'rgba(12,74,110,0.09)',
20
- ring: 'rgba(12,74,110,0.38)',
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<AccentName, AccentSet> = {
45
- 'Ink blue': {
46
- a: '#4c9ae8',
47
- s: '#3b86d4',
48
- fg: '#06121d',
49
- tint: 'rgba(76,154,232,0.16)',
50
- ring: 'rgba(76,154,232,0.45)',
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: 'dark' as ThemeMode,
81
- accent: 'Ink blue' as AccentName,
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: true,
42
+ serifDisplay: false,
85
43
  }
86
44
 
87
- const SERIF = '"Source Serif 4", Georgia, serif'
88
- const SANS = '"DM Sans", system-ui, sans-serif'
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 serifVar(serifDisplay: boolean): string {
91
- return serifDisplay ? SERIF : SANS
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['Ink blue']
57
+ const set = table[accent as BrandAccentName] ?? table['Growth Labs']
97
58
  return {
98
59
  '--accent': set.a,
99
60
  '--accent-strong': set.s,
@@ -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
  }