@datalayer/primer-addons 1.0.8 → 1.0.9

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 (38) hide show
  1. package/lib/components/overlay/Overlay.js +15 -2
  2. package/lib/index.d.ts +1 -0
  3. package/lib/index.js +2 -0
  4. package/lib/theme/DatalayerBrandThemeProvider.d.ts +41 -0
  5. package/lib/theme/DatalayerBrandThemeProvider.js +32 -0
  6. package/lib/theme/DatalayerThemeProvider.d.ts +36 -0
  7. package/lib/theme/DatalayerThemeProvider.js +35 -0
  8. package/lib/theme/Palette.d.ts +4 -0
  9. package/lib/theme/Palette.js +10 -0
  10. package/lib/theme/colors/datalayerColors.d.ts +15 -0
  11. package/lib/theme/colors/datalayerColors.js +21 -0
  12. package/lib/theme/colors/index.d.ts +4 -0
  13. package/lib/theme/colors/index.js +8 -0
  14. package/lib/theme/colors/lovelyColors.d.ts +15 -0
  15. package/lib/theme/colors/lovelyColors.js +21 -0
  16. package/lib/theme/colors/matrixColors.d.ts +20 -0
  17. package/lib/theme/colors/matrixColors.js +26 -0
  18. package/lib/theme/colors/spatialColors.d.ts +15 -0
  19. package/lib/theme/colors/spatialColors.js +21 -0
  20. package/lib/theme/index.d.ts +11 -0
  21. package/lib/theme/index.js +15 -0
  22. package/lib/theme/themes/createThemeCSSVars.d.ts +131 -0
  23. package/lib/theme/themes/createThemeCSSVars.js +172 -0
  24. package/lib/theme/themes/datalayerTheme.d.ts +1093 -0
  25. package/lib/theme/themes/datalayerTheme.js +191 -0
  26. package/lib/theme/themes/lovelyTheme.d.ts +1093 -0
  27. package/lib/theme/themes/lovelyTheme.js +190 -0
  28. package/lib/theme/themes/matrixTheme.d.ts +1093 -0
  29. package/lib/theme/themes/matrixTheme.js +190 -0
  30. package/lib/theme/themes/spatialTheme.d.ts +1093 -0
  31. package/lib/theme/themes/spatialTheme.js +190 -0
  32. package/lib/theme/themes-brand/index.d.ts +1 -0
  33. package/lib/theme/themes-brand/index.js +5 -0
  34. package/lib/theme/themes-brand/spatialBrandTheme.d.ts +16 -0
  35. package/lib/theme/themes-brand/spatialBrandTheme.js +157 -0
  36. package/lib/theme/useSystemColorMode.d.ts +9 -0
  37. package/lib/theme/useSystemColorMode.js +26 -0
  38. package/package.json +1 -1
@@ -0,0 +1,172 @@
1
+ /*
2
+ * Copyright (c) 2023-2025 Datalayer, Inc.
3
+ * Distributed under the terms of the Modified BSD License.
4
+ */
5
+ /* ─── Helper ──────────────────────────────────────────────────────────── */
6
+ /**
7
+ * Convert a structured `ThemeColorDefs` object into a flat
8
+ * `CSSProperties` bag of Primer React CSS custom-property overrides.
9
+ *
10
+ * These variables are the *functional tokens* consumed by Primer
11
+ * React components (sourced from `@primer/primitives`). Setting
12
+ * them on a parent element is enough to retheme every Primer
13
+ * component in the sub-tree.
14
+ *
15
+ * ### Variable families covered
16
+ *
17
+ * | Family | Example variable |
18
+ * |------------------|----------------------------------------|
19
+ * | Background | `--bgColor-default` |
20
+ * | Foreground | `--fgColor-default` |
21
+ * | Border | `--borderColor-default` |
22
+ * | Link | `--fgColor-link` |
23
+ * | Accent / Success | `--bgColor-accent-emphasis` |
24
+ * | Default button | `--button-default-bgColor-rest` |
25
+ * | Primary button | `--button-primary-bgColor-rest` |
26
+ * | Outline button | `--button-outline-fgColor-rest` |
27
+ * | Danger button | `--button-danger-bgColor-hover` |
28
+ * | Button counters | `--buttonCounter-primary-bgColor-rest` |
29
+ * | Legacy aliases | `--color-btn-primary-bg` |
30
+ * | Brand (custom) | `--brand-color-canvas-default` |
31
+ */
32
+ export function colorDefsToCSS(defs) {
33
+ const optional = {};
34
+ if (defs.canvas.subtle) {
35
+ optional['--bgColor-muted'] = defs.canvas.subtle;
36
+ }
37
+ if (defs.accent.subtle) {
38
+ optional['--bgColor-accent-subtle'] = defs.accent.subtle;
39
+ }
40
+ if (defs.success.subtle) {
41
+ optional['--bgColor-success-subtle'] = defs.success.subtle;
42
+ }
43
+ return {
44
+ /* ── Canvas / Background ─────────────────────────────────────── */
45
+ '--bgColor-default': defs.canvas.default,
46
+ '--bgColor-inset': defs.canvas.default,
47
+ ...optional,
48
+ /* ── Foreground / Text ───────────────────────────────────────── */
49
+ '--fgColor-default': defs.fg.default,
50
+ '--fgColor-muted': defs.fg.muted,
51
+ '--fgColor-onEmphasis': defs.fg.onEmphasis,
52
+ /* ── Links ───────────────────────────────────────────────────── */
53
+ '--fgColor-link': defs.accent.fg,
54
+ /* ── Accent ──────────────────────────────────────────────────── */
55
+ '--fgColor-accent': defs.accent.fg,
56
+ '--bgColor-accent-emphasis': defs.accent.emphasis,
57
+ '--bgColor-accent-muted': defs.accent.muted,
58
+ '--borderColor-accent-emphasis': defs.accent.emphasis,
59
+ '--borderColor-accent-muted': defs.accent.muted,
60
+ /* ── Success ─────────────────────────────────────────────────── */
61
+ '--fgColor-success': defs.success.fg,
62
+ '--bgColor-success-emphasis': defs.success.emphasis,
63
+ '--bgColor-success-muted': defs.success.muted,
64
+ '--borderColor-success-emphasis': defs.success.emphasis,
65
+ '--borderColor-success-muted': defs.success.muted,
66
+ /* ── Border (generic) ────────────────────────────────────────── */
67
+ '--borderColor-default': defs.btn.border,
68
+ '--borderColor-muted': defs.btn.border,
69
+ /* ── Default button ──────────────────────────────────────────── */
70
+ '--button-default-fgColor-rest': defs.btn.text,
71
+ '--button-default-bgColor-rest': defs.btn.bg,
72
+ '--button-default-borderColor-rest': defs.btn.border,
73
+ '--button-default-bgColor-hover': defs.btn.hoverBg,
74
+ '--button-default-borderColor-hover': defs.btn.hoverBorder,
75
+ '--button-default-bgColor-active': defs.btn.activeBg,
76
+ '--button-default-borderColor-active': defs.btn.activeBorder,
77
+ '--button-default-bgColor-selected': defs.btn.selectedBg,
78
+ '--button-default-bgColor-disabled': defs.btn.bg,
79
+ '--button-default-borderColor-disabled': defs.btn.border,
80
+ '--buttonCounter-default-bgColor-rest': defs.btn.counterBg,
81
+ '--buttonCounter-default-fgColor-rest': defs.btn.text,
82
+ /* ── Primary button ──────────────────────────────────────────── */
83
+ '--button-primary-fgColor-rest': defs.btn.primary.text,
84
+ '--button-primary-bgColor-rest': defs.btn.primary.bg,
85
+ '--button-primary-borderColor-rest': defs.btn.primary.border,
86
+ '--button-primary-bgColor-hover': defs.btn.primary.hoverBg,
87
+ '--button-primary-borderColor-hover': defs.btn.primary.hoverBorder,
88
+ '--button-primary-bgColor-active': defs.btn.primary.selectedBg,
89
+ '--button-primary-borderColor-active': defs.btn.primary.hoverBorder,
90
+ '--button-primary-fgColor-disabled': defs.btn.primary.disabledText,
91
+ '--button-primary-bgColor-disabled': defs.btn.primary.disabledBg,
92
+ '--button-primary-borderColor-disabled': defs.btn.primary.disabledBorder,
93
+ '--button-primary-iconColor-rest': defs.btn.primary.icon,
94
+ '--buttonCounter-primary-bgColor-rest': defs.btn.primary.counterBg,
95
+ '--buttonCounter-primary-fgColor-rest': defs.btn.primary.text,
96
+ /* ── Outline button ──────────────────────────────────────────── */
97
+ '--button-outline-fgColor-rest': defs.btn.outline.text,
98
+ '--button-outline-bgColor-rest': 'transparent',
99
+ '--button-outline-borderColor-rest': defs.btn.outline.text,
100
+ '--button-outline-fgColor-hover': defs.btn.outline.hoverText,
101
+ '--button-outline-bgColor-hover': defs.btn.outline.hoverBg,
102
+ '--button-outline-borderColor-hover': defs.btn.outline.hoverBorder,
103
+ '--button-outline-fgColor-active': defs.btn.outline.selectedText,
104
+ '--button-outline-bgColor-active': defs.btn.outline.selectedBg,
105
+ '--button-outline-borderColor-active': defs.btn.outline.selectedBorder,
106
+ '--button-outline-fgColor-disabled': defs.btn.outline.disabledText,
107
+ '--button-outline-bgColor-disabled': defs.btn.outline.disabledBg,
108
+ '--buttonCounter-outline-bgColor-rest': defs.btn.outline.counterBg,
109
+ '--buttonCounter-outline-fgColor-rest': defs.btn.outline.counterFg,
110
+ '--buttonCounter-outline-bgColor-hover': defs.btn.outline.hoverCounterBg,
111
+ '--buttonCounter-outline-fgColor-hover': defs.btn.outline.hoverCounterFg,
112
+ '--buttonCounter-outline-fgColor-disabled': defs.btn.outline.disabledCounterFg,
113
+ '--buttonCounter-outline-bgColor-disabled': defs.btn.outline.disabledCounterBg,
114
+ /* ── Danger button ───────────────────────────────────────────── */
115
+ '--button-danger-fgColor-rest': defs.btn.danger.text,
116
+ '--button-danger-bgColor-rest': 'transparent',
117
+ '--button-danger-borderColor-rest': defs.btn.danger.text,
118
+ '--button-danger-fgColor-hover': defs.btn.danger.hoverText,
119
+ '--button-danger-bgColor-hover': defs.btn.danger.hoverBg,
120
+ '--button-danger-borderColor-hover': defs.btn.danger.hoverBorder,
121
+ '--button-danger-fgColor-active': defs.btn.danger.selectedText,
122
+ '--button-danger-bgColor-active': defs.btn.danger.selectedBg,
123
+ '--button-danger-borderColor-active': defs.btn.danger.selectedBorder,
124
+ '--button-danger-fgColor-disabled': defs.btn.danger.disabledText,
125
+ '--button-danger-bgColor-disabled': defs.btn.danger.disabledBg,
126
+ '--button-danger-iconColor-rest': defs.btn.danger.icon,
127
+ '--button-danger-iconColor-hover': defs.btn.danger.hoverText,
128
+ '--buttonCounter-danger-bgColor-rest': defs.btn.danger.counterBg,
129
+ '--buttonCounter-danger-fgColor-rest': defs.btn.danger.counterFg,
130
+ '--buttonCounter-danger-bgColor-hover': defs.btn.danger.hoverCounterBg,
131
+ '--buttonCounter-danger-fgColor-hover': defs.btn.danger.hoverCounterFg,
132
+ '--buttonCounter-danger-fgColor-disabled': defs.btn.danger.disabledCounterFg,
133
+ '--buttonCounter-danger-bgColor-disabled': defs.btn.danger.disabledCounterBg,
134
+ /* ── Invisible button (inherit from defaults) ────────────────── */
135
+ '--button-invisible-fgColor-rest': defs.fg.default,
136
+ '--button-invisible-bgColor-hover': defs.btn.hoverBg,
137
+ '--button-invisible-fgColor-hover': defs.fg.default,
138
+ '--button-invisible-bgColor-active': defs.btn.activeBg,
139
+ '--button-invisible-fgColor-active': defs.fg.default,
140
+ '--button-invisible-fgColor-disabled': defs.fg.muted,
141
+ '--button-invisible-iconColor-rest': defs.fg.muted,
142
+ '--button-invisible-iconColor-hover': defs.fg.default,
143
+ '--button-invisible-iconColor-disabled': defs.fg.muted,
144
+ /* ── Legacy / compat aliases ─────────────────────────────────── */
145
+ '--color-btn-primary-bg': defs.btn.primary.bg,
146
+ '--color-btn-primary-hover-bg': defs.btn.primary.hoverBg,
147
+ /* ── Datalayer brand tokens (consumed by custom components) ─── */
148
+ '--brand-color-canvas-default': defs.canvas.default,
149
+ '--brand-color-text-default': defs.fg.default,
150
+ };
151
+ }
152
+ /**
153
+ * Build a complete `ThemeStyles` object from light / dark
154
+ * `ThemeColorDefs`. The result is ready to pass straight to
155
+ * `<DatalayerThemeProvider themeStyles={…}>`.
156
+ */
157
+ export function buildThemeStyles(light, dark) {
158
+ return {
159
+ light: {
160
+ backgroundColor: light.canvas.default,
161
+ color: light.fg.default,
162
+ fontSize: 'var(--text-body-size-medium)',
163
+ ...colorDefsToCSS(light),
164
+ },
165
+ dark: {
166
+ backgroundColor: dark.canvas.default,
167
+ color: dark.fg.default,
168
+ fontSize: 'var(--text-body-size-medium)',
169
+ ...colorDefsToCSS(dark),
170
+ },
171
+ };
172
+ }