@odla-ai/chapter 0.18.0 → 0.19.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
@@ -64,12 +64,36 @@ npm i @odla-ai/chapter
64
64
  presentational component without the Clerk browser SDK. (A bundle-graph test
65
65
  enforces this.)
66
66
  - `@odla-ai/chapter/ui/admin` — the Clerk-gated console `ChapterAdmin` + the
67
- section catalog (`peopleSection`). This one does need auth-clerk + crm/ui.
67
+ section catalog: `collectionSection` (the generic CRM kit one per record
68
+ type a site runs: members, deals, investments) with role/approve/refund
69
+ wired, plus `dashboardSection`, `billingSection`, `emailSection`,
70
+ `meetingsSection`, `availabilitySection`. This one needs auth-clerk + crm/ui.
68
71
  - `@odla-ai/chapter/ui` — the full barrel, for back-compat.
69
72
 
70
73
  Authored against React, rendered as Preact via `preact/compat` in the reference
71
74
  sites. Brand tokens (`brandTokens`/`<BrandStyle>`) re-skin all of it from
72
- `brand`.
75
+ `brand` (now light **and** dark, via `brand.palette` + `brand.paletteDark`).
76
+
77
+ ### Theme tokens (or the console renders broken)
78
+
79
+ The UI reads its colors from `--ui-*` design tokens whose **values come from a
80
+ theme layer, not `@odla-ai/ui/index.css`.** Load `index.css` (or `odla-ui.css`)
81
+ *alone* and the tokens a theme normally supplies are undefined — panels go
82
+ transparent and the whole console renders dark-on-dark. This failure is silent,
83
+ so it burns people. Import a theme **before** the component sheet:
84
+
85
+ ```ts
86
+ import "@odla-ai/ui/themes/salt/tokens.css"; // the token values (light + dark)
87
+ import "@odla-ai/ui/themes/salt/ui.css"; // the theme's component styling
88
+ import "@odla-ai/ui/index.css"; // the odla-ui components
89
+ ```
90
+
91
+ `ChapterAdmin` guards against this at runtime: if a `.panel` has no background
92
+ (the theme layer is missing), it renders a **loud red banner** at the top of the
93
+ console instead of failing silently. To brand it, pass `brand.palette` /
94
+ `brand.paletteDark` — `brandTokens(brand)` emits both a `:root` block and a
95
+ `[data-theme="dark"]` / `prefers-color-scheme: dark` block, so your accent/colors
96
+ override the theme in both modes.
73
97
 
74
98
  ## Quick start
75
99