@calliopelabs/ui 0.3.1 → 0.4.0

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 CHANGED
@@ -75,9 +75,9 @@ const NAV: NavModel = [
75
75
  export const astrolift = defineProduct({ ...astroliftBrand, nav: NAV });
76
76
  ```
77
77
 
78
- Astrolift AI: leaf green on the deep planet green sidebar (`#04231a`), all six grounds, graphite by default (mist when the system runs light), and its eight named themes.
78
+ Astrolift AI: leaf green on the deep planet green sidebar (`#04231a`), six grounds (every one but navy), graphite by default (mist when the system runs light), and its eight named themes.
79
79
 
80
- Zentinelle AI: teal (`#37efed`, `#0d7470` on light grounds) on the navy sidebar (`#0b0b19`), a true black ground by default, the family accents beside teal, and no emerald ground. Its seven areas gate rows by role:
80
+ Zentinelle AI: teal (`#37efed`, `#0d7470` on light grounds) on the navy sidebar (`#0b0b19`), a true black ground by default, the family accents beside teal, and no emerald or navy ground. Its seven areas gate rows by role:
81
81
 
82
82
  ```ts
83
83
  import { defineProduct, zentinelleBrand, type NavModel } from "@calliopelabs/ui";
@@ -116,6 +116,8 @@ const NAV: NavModel = [
116
116
  export const zentinelle = defineProduct({ ...zentinelleBrand, nav: NAV });
117
117
  ```
118
118
 
119
+ Calliope AI Workbench (`workbenchBrand`): Workbench blue (`#8fb8e8`, `#2f5d94` on light grounds) on a navy sidebar (`#0e1730`), its own navy ground by default (mist when the system runs light), the family accents beside its blue, and no emerald ground.
120
+
119
121
  `defineProduct` validates the config and throws on anything that would paint wrong: a colour that is not lowercase `#rrggbb`, a default ground the product does not offer, a brand accent key the family already uses.
120
122
 
121
123
  ## Wire the shell
@@ -265,7 +267,7 @@ The package fetches nothing. `DataTable` reads a `TableController`: rows, state,
265
267
 
266
268
  ## Appearance
267
269
 
268
- The person sets four axes, per product: the **ground** (black, charcoal, graphite, emerald, paper, mist; it decides light or dark), the **accent** (the product's own, a family accent, or any colour that stands 3:1 off the ground), the **density** (`compact` hairline rows or boxed `cards`) and the **corners** (0, 2, 4 or 10 px). `AppearancePicker` is the settings UI for all four.
270
+ The person sets four axes, per product: the **ground** (black, charcoal, graphite, emerald, navy, paper, mist; it decides light or dark), the **accent** (the product's own, a family accent, or any colour that stands 3:1 off the ground), the **density** (`compact` hairline rows or boxed `cards`) and the **corners** (0, 2, 4 or 10 px). `AppearancePicker` is the settings UI for all four.
269
271
 
270
272
  - Precedence: a locked org theme, then the person's choice, then the org default, then the product default. Until someone picks a ground, light or dark follows the system.
271
273
  - An org policy that arrives after sign-in goes in through `useAppearance().setPolicy`. An app that keeps the preference on its server passes `onChange` and hands the server's copy back through `applyServerAppearance`.
@@ -94,24 +94,25 @@ export declare const zentinelleBrand: {
94
94
  };
95
95
  /**
96
96
  * Calliope AI Workbench (JunoHub, the installer's default theme, the desktop
97
- * splash): teal on navy. From junohub `custom.css` (--calliope-primary,
98
- * --calliope-dark) and the installer's workbench theme. Dark only today.
97
+ * splash): a sober light blue on navy. The navy comes from junohub `custom.css`
98
+ * (--calliope-dark); the hub's teal and violet are retired. Dark only today, so
99
+ * it defaults to its own navy ground, which no other product offers.
99
100
  */
100
101
  export declare const workbenchBrand: {
101
102
  readonly id: "workbench";
102
103
  readonly name: "Calliope AI Workbench";
103
104
  readonly accent: {
104
- readonly key: "workbench-teal";
105
- readonly label: "Workbench teal";
106
- readonly dark: "#0af0ce";
105
+ readonly key: "workbench-blue";
106
+ readonly label: "Workbench blue";
107
+ readonly dark: "#8fb8e8";
107
108
  readonly onDark: "#0b1120";
108
- readonly light: "#0b7a69";
109
+ readonly light: "#2f5d94";
109
110
  readonly onLight: "#f3fbf7";
110
111
  };
111
- readonly sidebar: "#0b1120";
112
- readonly grounds: readonly ["black", "charcoal", "graphite", "paper", "mist"];
112
+ readonly sidebar: "#0e1730";
113
+ readonly grounds: readonly ["navy", "black", "charcoal", "graphite", "paper", "mist"];
113
114
  readonly defaultGround: {
114
- readonly dark: "charcoal";
115
+ readonly dark: "navy";
115
116
  readonly light: "mist";
116
117
  };
117
118
  };
@@ -67,24 +67,25 @@ export const zentinelleBrand = {
67
67
  */
68
68
  /**
69
69
  * Calliope AI Workbench (JunoHub, the installer's default theme, the desktop
70
- * splash): teal on navy. From junohub `custom.css` (--calliope-primary,
71
- * --calliope-dark) and the installer's workbench theme. Dark only today.
70
+ * splash): a sober light blue on navy. The navy comes from junohub `custom.css`
71
+ * (--calliope-dark); the hub's teal and violet are retired. Dark only today, so
72
+ * it defaults to its own navy ground, which no other product offers.
72
73
  */
73
74
  export const workbenchBrand = {
74
75
  id: "workbench",
75
76
  name: "Calliope AI Workbench",
76
77
  accent: {
77
- key: "workbench-teal",
78
- label: "Workbench teal",
79
- dark: "#0af0ce",
78
+ key: "workbench-blue",
79
+ label: "Workbench blue",
80
+ dark: "#8fb8e8",
80
81
  onDark: "#0b1120",
81
82
  // derived: the hub has no light ground
82
- light: "#0b7a69",
83
+ light: "#2f5d94",
83
84
  onLight: "#f3fbf7",
84
85
  },
85
- sidebar: "#0b1120",
86
- grounds: ["black", "charcoal", "graphite", "paper", "mist"],
87
- defaultGround: { dark: "charcoal", light: "mist" },
86
+ sidebar: "#0e1730",
87
+ grounds: ["navy", "black", "charcoal", "graphite", "paper", "mist"],
88
+ defaultGround: { dark: "navy", light: "mist" },
88
89
  };
89
90
  /**
90
91
  * Calliope AI Chat Studio: blue, from `sql-agent-ui/src/index.css` (--brand
@@ -36,7 +36,7 @@ export interface ProductConfig {
36
36
  accent: FamilyAccent | BrandAccent;
37
37
  /** The brand surface: the sidebar on dark grounds (graphite and light grounds stay neutral). */
38
38
  sidebar: string;
39
- /** The grounds offered, in picker order. All six when absent. */
39
+ /** The grounds offered, in picker order. All seven when absent. */
40
40
  grounds?: readonly Ground[];
41
41
  /** The ground until someone chooses: one per mode, following the operating system. */
42
42
  defaultGround?: {
@@ -200,6 +200,22 @@
200
200
  --sidebar-border: rgba(255, 255, 255, 0.08);
201
201
  }
202
202
 
203
+ /* Ground: Navy (dark) */
204
+ [data-mode="dark"][data-ground="navy"] {
205
+ --background: #0b1120;
206
+ --card: #152141;
207
+ --popover: #1a284a;
208
+ --secondary: #1d2b50;
209
+ --muted: #182545;
210
+ --accent: #213157;
211
+ --muted-foreground: #97a6c2;
212
+ --border: rgba(255, 255, 255, 0.1);
213
+ --input: rgba(255, 255, 255, 0.1);
214
+ --sidebar: var(--brand-sidebar, #152141);
215
+ --sidebar-accent: color-mix(in oklab, var(--primary) 16%, transparent);
216
+ --sidebar-border: rgba(255, 255, 255, 0.08);
217
+ }
218
+
203
219
  /* Ground: Paper (light) */
204
220
  [data-mode="light"][data-ground="paper"] {
205
221
  --background: #faf6ee;
@@ -32,6 +32,10 @@ export declare const GROUNDS: {
32
32
  readonly label: "Emerald";
33
33
  readonly mode: "dark";
34
34
  };
35
+ readonly navy: {
36
+ readonly label: "Navy";
37
+ readonly mode: "dark";
38
+ };
35
39
  readonly paper: {
36
40
  readonly label: "Paper";
37
41
  readonly mode: "light";
@@ -19,6 +19,7 @@ export const GROUNDS = {
19
19
  charcoal: { label: "Charcoal", mode: "dark" },
20
20
  graphite: { label: "Graphite", mode: "dark" },
21
21
  emerald: { label: "Emerald", mode: "dark" },
22
+ navy: { label: "Navy", mode: "dark" },
22
23
  paper: { label: "Paper", mode: "light" },
23
24
  mist: { label: "Mist", mode: "light" },
24
25
  };
@@ -82,6 +83,27 @@ export const SURFACES = {
82
83
  sidebarAccent: PRIMARY_TINT_16,
83
84
  sidebarBorder: "rgba(255, 255, 255, 0.08)",
84
85
  },
86
+ /*
87
+ * Workbench's navy, from JunoHub's palette: page #0b1120 and card
88
+ * rgba(22, 35, 69, 0.9) composited on the page, with the neutral hairlines
89
+ * every other dark ground uses. Its text colours are not carried over: foreground is per mode,
90
+ * and the hub's muted text (#e6e9ee) is not muted, so muted text is a
91
+ * navy-tinted grey that reads on every panel.
92
+ */
93
+ navy: {
94
+ background: "#0b1120",
95
+ card: "#152141",
96
+ popover: "#1a284a",
97
+ secondary: "#1d2b50",
98
+ muted: "#182545",
99
+ accent: "#213157",
100
+ mutedForeground: "#97a6c2",
101
+ border: "rgba(255, 255, 255, 0.1)",
102
+ input: "rgba(255, 255, 255, 0.1)",
103
+ sidebar: "brand",
104
+ sidebarAccent: PRIMARY_TINT_16,
105
+ sidebarBorder: "rgba(255, 255, 255, 0.08)",
106
+ },
85
107
  paper: {
86
108
  background: "#faf6ee",
87
109
  card: "#fffdf9",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@calliopelabs/ui",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Calliope AI shared operator UI: app shell, navigation, page frame, data table and list patterns, status colours, design tokens and appearance for Astrolift AI and Zentinelle AI.",
5
5
  "keywords": [
6
6
  "calliope-ai",