@unisim/sdk 0.139.1 → 0.140.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 +32 -0
- package/dist/UsageTracker.d.ts +38 -0
- package/dist/UsageTracker.d.ts.map +1 -0
- package/dist/UsageTracker.js +56 -0
- package/dist/UsageTracker.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/themeStore.d.ts +43 -0
- package/dist/themeStore.d.ts.map +1 -0
- package/dist/themeStore.js +90 -0
- package/dist/themeStore.js.map +1 -0
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +10 -2
- package/dist/usage.js.map +1 -1
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -121,6 +121,38 @@ function Header() {
|
|
|
121
121
|
### Changelog
|
|
122
122
|
- `useChangelog()` — fetches the suite-wide changelog feed (defaults to `https://changelog.unisim.co.uk/changelog.json`)
|
|
123
123
|
|
|
124
|
+
### Usage telemetry
|
|
125
|
+
- `<UsageTracker />` (since 0.140.0) — mount it once inside `<UniversalProvider>`. It starts
|
|
126
|
+
the batcher and sends exactly one `session.opened` row per page life for a signed-in
|
|
127
|
+
visitor with an org, which is what fills god-mode's "last product used". Signed-out
|
|
128
|
+
visitors send nothing. **Import it; do not copy it** — it replaced a 20-line
|
|
129
|
+
`UsageTracker.tsx` that had been pasted into nineteen apps.
|
|
130
|
+
- It takes **no `product` prop**: the row's product is `config.product`, already typed
|
|
131
|
+
`ProductCode`, and a second place naming it could only disagree with the first. What the
|
|
132
|
+
compiler cannot check is the *Postgres* `product_code` enum — if the code is missing
|
|
133
|
+
there, every signed-in insert fails with `22P02`, and the batcher's one error now names
|
|
134
|
+
the code so you know which migration to write (`Docs_UNI_SIM/new-universal-app.md` §1).
|
|
135
|
+
- `useUsageTracker()` / `track(name, props)` — the parts, for a product that needs its own
|
|
136
|
+
events. ⚠️ Track that the app was opened, never what was in it: several Universal Apps
|
|
137
|
+
promise we never see the file, and an event carrying a byte count breaks that promise.
|
|
138
|
+
- `npm run test:usage-tracker` — one row signed in (plain and StrictMode), none signed out,
|
|
139
|
+
a negative control with no tracker mounted, and the `22P02` message.
|
|
140
|
+
|
|
141
|
+
### Theme (light / dark / system)
|
|
142
|
+
- `createThemeStore(storageKey)` (since 0.140.0) — an app's theme preference, as a hook.
|
|
143
|
+
Call it once at module level: `export const useThemeStore = createThemeStore('unisim-<app>-theme')`,
|
|
144
|
+
then `useThemeStore((s) => s.pref)`, `s.effective` (`'light' | 'dark'`, with `'system'`
|
|
145
|
+
resolved), `s.setPref(p)`, and `useThemeStore.getState()` outside React — the same shape
|
|
146
|
+
the zustand copies had, without zustand.
|
|
147
|
+
- It toggles the `dark` class on `<html>` (Tailwind's `dark:` variant) and sets
|
|
148
|
+
`color-scheme`, **at import time**, so a dark-mode user never sees a light frame.
|
|
149
|
+
- ⚠️ **Opens LIGHT and stays light until the user chooses otherwise** — the suite rule, and
|
|
150
|
+
deliberately stronger than "respect the OS". `'system'` follows the OS live, but only
|
|
151
|
+
once chosen.
|
|
152
|
+
- ⚠️ **The key is the user's saved choice.** Changing it on a shipped app silently resets
|
|
153
|
+
everyone to light. Existing apps keep the key their old copy used.
|
|
154
|
+
- `npm run test:theme-store`.
|
|
155
|
+
|
|
124
156
|
### Collapsibles that show what is inside them
|
|
125
157
|
Opening a fold low on the page used to leave its contents below the bottom of the screen:
|
|
126
158
|
the row you clicked stayed put and you had to scroll to find out whether anything had
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The usage pipeline, mounted. Starts the batcher and sends exactly one
|
|
3
|
+
* `session.opened` event per page life, the first time a signed-in visitor
|
|
4
|
+
* with an active organisation is present. That one row is what fills
|
|
5
|
+
* god-mode's "last product used" column (migration 0052).
|
|
6
|
+
*
|
|
7
|
+
* ```tsx
|
|
8
|
+
* <UniversalProvider config={{ product: 'qr', ... }}>
|
|
9
|
+
* <UsageTracker />
|
|
10
|
+
* <App />
|
|
11
|
+
* </UniversalProvider>
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* Mount it ONCE, anywhere inside `<UniversalProvider>`. Signed-out visitors
|
|
15
|
+
* send nothing: the batcher drops events with no session or org, which is the
|
|
16
|
+
* state most visitors to a no-signup Universal App are in.
|
|
17
|
+
*
|
|
18
|
+
* **Why there is no `product` prop.** The row's `product` comes from the
|
|
19
|
+
* provider's `config.product`, which is already typed `ProductCode` — so
|
|
20
|
+
* the compiler already refuses a code missing from the union. A second prop
|
|
21
|
+
* naming it again would be a second source of truth that could disagree with
|
|
22
|
+
* the first, and the insert can only use one of them. What the compiler cannot
|
|
23
|
+
* see is the POSTGRES enum: a code added to `ProductCode` but not to
|
|
24
|
+
* `product_code` fails every insert. The batcher now names the code in the one
|
|
25
|
+
* error it prints when that happens (see `usage.ts`), which is the part of
|
|
26
|
+
* "impossible to forget" that is actually reachable from here.
|
|
27
|
+
*
|
|
28
|
+
* ⚠️ **Track that the app was opened, never what was opened in it.** Several
|
|
29
|
+
* Universal Apps promise, in their own words, that we never see the file, the
|
|
30
|
+
* book, the ledger or the collection. A well-meaning
|
|
31
|
+
* `track('x.exported', { bytes })` beside this component starts quietly
|
|
32
|
+
* building the usage graph that promise says does not exist.
|
|
33
|
+
*
|
|
34
|
+
* Replaces a 20-line `UsageTracker.tsx` that had been copied into nineteen
|
|
35
|
+
* apps (`Docs_UNI_SIM/new-universal-app.md` §3). Since 0.140.0.
|
|
36
|
+
*/
|
|
37
|
+
export declare function UsageTracker(): null;
|
|
38
|
+
//# sourceMappingURL=UsageTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageTracker.d.ts","sourceRoot":"","sources":["../src/UsageTracker.tsx"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAanC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
import { useUniversal } from './provider.js';
|
|
4
|
+
import { track, useUsageTracker } from './usage.js';
|
|
5
|
+
/**
|
|
6
|
+
* The usage pipeline, mounted. Starts the batcher and sends exactly one
|
|
7
|
+
* `session.opened` event per page life, the first time a signed-in visitor
|
|
8
|
+
* with an active organisation is present. That one row is what fills
|
|
9
|
+
* god-mode's "last product used" column (migration 0052).
|
|
10
|
+
*
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <UniversalProvider config={{ product: 'qr', ... }}>
|
|
13
|
+
* <UsageTracker />
|
|
14
|
+
* <App />
|
|
15
|
+
* </UniversalProvider>
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Mount it ONCE, anywhere inside `<UniversalProvider>`. Signed-out visitors
|
|
19
|
+
* send nothing: the batcher drops events with no session or org, which is the
|
|
20
|
+
* state most visitors to a no-signup Universal App are in.
|
|
21
|
+
*
|
|
22
|
+
* **Why there is no `product` prop.** The row's `product` comes from the
|
|
23
|
+
* provider's `config.product`, which is already typed `ProductCode` — so
|
|
24
|
+
* the compiler already refuses a code missing from the union. A second prop
|
|
25
|
+
* naming it again would be a second source of truth that could disagree with
|
|
26
|
+
* the first, and the insert can only use one of them. What the compiler cannot
|
|
27
|
+
* see is the POSTGRES enum: a code added to `ProductCode` but not to
|
|
28
|
+
* `product_code` fails every insert. The batcher now names the code in the one
|
|
29
|
+
* error it prints when that happens (see `usage.ts`), which is the part of
|
|
30
|
+
* "impossible to forget" that is actually reachable from here.
|
|
31
|
+
*
|
|
32
|
+
* ⚠️ **Track that the app was opened, never what was opened in it.** Several
|
|
33
|
+
* Universal Apps promise, in their own words, that we never see the file, the
|
|
34
|
+
* book, the ledger or the collection. A well-meaning
|
|
35
|
+
* `track('x.exported', { bytes })` beside this component starts quietly
|
|
36
|
+
* building the usage graph that promise says does not exist.
|
|
37
|
+
*
|
|
38
|
+
* Replaces a 20-line `UsageTracker.tsx` that had been copied into nineteen
|
|
39
|
+
* apps (`Docs_UNI_SIM/new-universal-app.md` §3). Since 0.140.0.
|
|
40
|
+
*/
|
|
41
|
+
export function UsageTracker() {
|
|
42
|
+
useUsageTracker();
|
|
43
|
+
const { session, activeOrgId } = useUniversal();
|
|
44
|
+
// A ref, not state: the event is a side effect of the first qualifying
|
|
45
|
+
// render, and StrictMode's simulated remount keeps refs, so it cannot fire
|
|
46
|
+
// twice there either.
|
|
47
|
+
const fired = useRef(false);
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (fired.current || !session || !activeOrgId)
|
|
50
|
+
return;
|
|
51
|
+
fired.current = true;
|
|
52
|
+
track('session.opened');
|
|
53
|
+
}, [session, activeOrgId]);
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=UsageTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UsageTracker.js","sourceRoot":"","sources":["../src/UsageTracker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,YAAY;IAC1B,eAAe,EAAE,CAAA;IACjB,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,YAAY,EAAE,CAAA;IAC/C,uEAAuE;IACvE,2EAA2E;IAC3E,sBAAsB;IACtB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,WAAW;YAAE,OAAM;QACrD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAA;QACpB,KAAK,CAAC,gBAAgB,CAAC,CAAA;IACzB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAA;IAC1B,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -18,6 +18,9 @@ export type { UseChangelogOptions, UseChangelogResult } from './changelog.js';
|
|
|
18
18
|
export { useChangelogScope, readChangelogScope, writeChangelogScope, changelogScopeStorageKey, DEFAULT_CHANGELOG_SCOPE, } from './changelogScope.js';
|
|
19
19
|
export type { ChangelogScope, UseChangelogScopeResult } from './changelogScope.js';
|
|
20
20
|
export { track, useUsageTracker } from './usage.js';
|
|
21
|
+
export { UsageTracker } from './UsageTracker.js';
|
|
22
|
+
export { createThemeStore } from './themeStore.js';
|
|
23
|
+
export type { ThemePref, ThemeState, ThemeStore } from './themeStore.js';
|
|
21
24
|
export { useUserPrefs, type UserPrefs, type UseUserPrefs } from './userPrefs.js';
|
|
22
25
|
export { useOrgBranding } from './branding.js';
|
|
23
26
|
export { BRAND, NEUTRAL, SEMANTIC, LIGHT_THEME, DARK_THEME, brandCssVars, } from './brand.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACtG,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAE5E,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAM7E,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAA;AAK5B,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,CAAC,IAAI,YAAY,GAClB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACpF,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAE9E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,qBAAqB,CAAA;AAC5B,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAElF,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -25,6 +25,12 @@ export { useSeatSession } from './seatSession.js';
|
|
|
25
25
|
export { useChangelog } from './changelog.js';
|
|
26
26
|
export { useChangelogScope, readChangelogScope, writeChangelogScope, changelogScopeStorageKey, DEFAULT_CHANGELOG_SCOPE, } from './changelogScope.js';
|
|
27
27
|
export { track, useUsageTracker } from './usage.js';
|
|
28
|
+
// The mounted form of the two above — what every product actually wants.
|
|
29
|
+
// Replaced a copied UsageTracker.tsx in nineteen apps (0.140.0).
|
|
30
|
+
export { UsageTracker } from './UsageTracker.js';
|
|
31
|
+
// The light/dark/system preference, persisted per app. Replaced a copied
|
|
32
|
+
// zustand themeStore.ts in four apps (0.140.0). Opens LIGHT — the suite rule.
|
|
33
|
+
export { createThemeStore } from './themeStore.js';
|
|
28
34
|
export { useUserPrefs } from './userPrefs.js';
|
|
29
35
|
export { useOrgBranding } from './branding.js';
|
|
30
36
|
export { BRAND, NEUTRAL, SEMANTIC, LIGHT_THEME, DARK_THEME, brandCssVars, } from './brand.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export type ThemePref = 'light' | 'dark' | 'system';
|
|
2
|
+
export interface ThemeState {
|
|
3
|
+
/** What the user chose. `'light'` until they choose otherwise. */
|
|
4
|
+
pref: ThemePref;
|
|
5
|
+
/** What is actually on screen — `pref` with `'system'` resolved. */
|
|
6
|
+
effective: 'light' | 'dark';
|
|
7
|
+
/** Persist and apply a new preference. Stable across renders. */
|
|
8
|
+
setPref(pref: ThemePref): void;
|
|
9
|
+
}
|
|
10
|
+
export interface ThemeStore {
|
|
11
|
+
/** Subscribe a component to the whole state. */
|
|
12
|
+
(): ThemeState;
|
|
13
|
+
/** Subscribe a component to a slice — `useThemeStore((s) => s.pref)`. */
|
|
14
|
+
<T>(selector: (state: ThemeState) => T): T;
|
|
15
|
+
/** Read outside React (event handlers, other stores). */
|
|
16
|
+
getState(): ThemeState;
|
|
17
|
+
/** Low-level change listener; returns the unsubscribe. */
|
|
18
|
+
subscribe(listener: () => void): () => void;
|
|
19
|
+
/** The localStorage key this store persists under. */
|
|
20
|
+
readonly storageKey: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create an app's theme store. Call it ONCE, at module level, and export the
|
|
24
|
+
* result:
|
|
25
|
+
*
|
|
26
|
+
* ```ts
|
|
27
|
+
* // src/stores/themeStore.ts
|
|
28
|
+
* import { createThemeStore } from '@unisim/sdk'
|
|
29
|
+
* export const useThemeStore = createThemeStore('unisim-video-theme')
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* The stored preference is read and applied to `<html>` immediately — at
|
|
33
|
+
* import time, before React renders — so a dark-mode user does not see a light
|
|
34
|
+
* frame first.
|
|
35
|
+
*
|
|
36
|
+
* ⚠️ **The key is the user's saved choice.** Changing it on an existing app
|
|
37
|
+
* resets everyone's theme to light without a word. Existing apps keep the key
|
|
38
|
+
* their copy used (`unisim-<app>-theme`); a new app should follow that pattern.
|
|
39
|
+
*
|
|
40
|
+
* Only follows the OS live while the user has actually chosen `'system'`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function createThemeStore(storageKey: string): ThemeStore;
|
|
43
|
+
//# sourceMappingURL=themeStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeStore.d.ts","sourceRoot":"","sources":["../src/themeStore.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;AAEnD,MAAM,WAAW,UAAU;IACzB,kEAAkE;IAClE,IAAI,EAAE,SAAS,CAAA;IACf,oEAAoE;IACpE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAA;IAC3B,iEAAiE;IACjE,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,IAAI,UAAU,CAAA;IACd,yEAAyE;IACzE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1C,yDAAyD;IACzD,QAAQ,IAAI,UAAU,CAAA;IACtB,0DAA0D;IAC1D,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;IAC3C,sDAAsD;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAgCD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAuC/D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useSyncExternalStore } from 'react';
|
|
3
|
+
const DARK_QUERY = '(prefers-color-scheme: dark)';
|
|
4
|
+
function hasDom() {
|
|
5
|
+
return typeof window !== 'undefined' && typeof document !== 'undefined';
|
|
6
|
+
}
|
|
7
|
+
function readStored(storageKey) {
|
|
8
|
+
try {
|
|
9
|
+
const v = window.localStorage.getItem(storageKey);
|
|
10
|
+
if (v === 'light' || v === 'dark' || v === 'system')
|
|
11
|
+
return v;
|
|
12
|
+
}
|
|
13
|
+
catch { /* private mode / storage disabled */ }
|
|
14
|
+
return 'light';
|
|
15
|
+
}
|
|
16
|
+
function osPrefersDark() {
|
|
17
|
+
try {
|
|
18
|
+
return window.matchMedia?.(DARK_QUERY).matches === true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function apply(pref) {
|
|
25
|
+
if (!hasDom())
|
|
26
|
+
return pref === 'dark' ? 'dark' : 'light';
|
|
27
|
+
const effective = pref === 'system' ? (osPrefersDark() ? 'dark' : 'light') : pref;
|
|
28
|
+
document.documentElement.classList.toggle('dark', effective === 'dark');
|
|
29
|
+
document.documentElement.style.colorScheme = effective;
|
|
30
|
+
return effective;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Create an app's theme store. Call it ONCE, at module level, and export the
|
|
34
|
+
* result:
|
|
35
|
+
*
|
|
36
|
+
* ```ts
|
|
37
|
+
* // src/stores/themeStore.ts
|
|
38
|
+
* import { createThemeStore } from '@unisim/sdk'
|
|
39
|
+
* export const useThemeStore = createThemeStore('unisim-video-theme')
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* The stored preference is read and applied to `<html>` immediately — at
|
|
43
|
+
* import time, before React renders — so a dark-mode user does not see a light
|
|
44
|
+
* frame first.
|
|
45
|
+
*
|
|
46
|
+
* ⚠️ **The key is the user's saved choice.** Changing it on an existing app
|
|
47
|
+
* resets everyone's theme to light without a word. Existing apps keep the key
|
|
48
|
+
* their copy used (`unisim-<app>-theme`); a new app should follow that pattern.
|
|
49
|
+
*
|
|
50
|
+
* Only follows the OS live while the user has actually chosen `'system'`.
|
|
51
|
+
*/
|
|
52
|
+
export function createThemeStore(storageKey) {
|
|
53
|
+
const listeners = new Set();
|
|
54
|
+
const emit = () => { for (const l of listeners)
|
|
55
|
+
l(); };
|
|
56
|
+
const setPref = (next) => {
|
|
57
|
+
try {
|
|
58
|
+
window.localStorage.setItem(storageKey, next);
|
|
59
|
+
}
|
|
60
|
+
catch { /* ignore */ }
|
|
61
|
+
state = { pref: next, effective: apply(next), setPref };
|
|
62
|
+
emit();
|
|
63
|
+
};
|
|
64
|
+
const initial = hasDom() ? readStored(storageKey) : 'light';
|
|
65
|
+
let state = { pref: initial, effective: apply(initial), setPref };
|
|
66
|
+
if (hasDom()) {
|
|
67
|
+
try {
|
|
68
|
+
window.matchMedia?.(DARK_QUERY).addEventListener?.('change', () => {
|
|
69
|
+
if (state.pref !== 'system')
|
|
70
|
+
return;
|
|
71
|
+
state = { ...state, effective: apply('system') };
|
|
72
|
+
emit();
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
catch { /* no matchMedia: 'system' resolves once and stays */ }
|
|
76
|
+
}
|
|
77
|
+
const getState = () => state;
|
|
78
|
+
const subscribe = (listener) => {
|
|
79
|
+
listeners.add(listener);
|
|
80
|
+
return () => { listeners.delete(listener); };
|
|
81
|
+
};
|
|
82
|
+
function useThemeStore(selector) {
|
|
83
|
+
// getState doubles as the server snapshot: on the server it is always the
|
|
84
|
+
// light default, which is also what the client renders for a new visitor.
|
|
85
|
+
const snapshot = useSyncExternalStore(subscribe, getState, getState);
|
|
86
|
+
return selector ? selector(snapshot) : snapshot;
|
|
87
|
+
}
|
|
88
|
+
return Object.assign(useThemeStore, { getState, subscribe, storageKey });
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=themeStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"themeStore.js","sourceRoot":"","sources":["../src/themeStore.ts"],"names":[],"mappings":"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"}
|
package/dist/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"AAwIA;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CA+BtC;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI,CAavF"}
|
package/dist/usage.js
CHANGED
|
@@ -83,10 +83,14 @@ class UsageQueue {
|
|
|
83
83
|
// Dropped, NOT re-queued. See isPermanentFailure.
|
|
84
84
|
if (!this.warned) {
|
|
85
85
|
this.warned = true;
|
|
86
|
+
// Name the code. "a product code is probably missing" sends the reader
|
|
87
|
+
// to go and find out which one; the code this app sends is the answer.
|
|
88
|
+
const product = trackedProduct ? `'${trackedProduct}'` : 'its product code';
|
|
86
89
|
console.error('[unisim/sdk] usage events rejected and will not be retried — this is ' +
|
|
87
90
|
'a schema or permission problem, not a network one. If this is a new ' +
|
|
88
|
-
|
|
89
|
-
'`product_code` enum
|
|
91
|
+
`app, ${product} is probably missing from the Postgres ` +
|
|
92
|
+
'`product_code` enum (add it in its own migration — see ProductCode ' +
|
|
93
|
+
'in @unisim/sdk types.ts).', err);
|
|
90
94
|
}
|
|
91
95
|
return;
|
|
92
96
|
}
|
|
@@ -108,6 +112,9 @@ class UsageQueue {
|
|
|
108
112
|
}
|
|
109
113
|
}
|
|
110
114
|
let queue = null;
|
|
115
|
+
/** The product code rows are being sent as — kept only so the permanent-failure
|
|
116
|
+
* message above can name it. */
|
|
117
|
+
let trackedProduct = null;
|
|
111
118
|
/**
|
|
112
119
|
* Hook variant: registers the queue with the current Supabase client and ensures
|
|
113
120
|
* pending events are flushed before unmount.
|
|
@@ -119,6 +126,7 @@ export function useUsageTracker() {
|
|
|
119
126
|
sessionRef.current = session;
|
|
120
127
|
orgRef.current = activeOrgId;
|
|
121
128
|
useEffect(() => {
|
|
129
|
+
trackedProduct = config.product;
|
|
122
130
|
queue ??= new UsageQueue(async (events) => {
|
|
123
131
|
const sess = sessionRef.current;
|
|
124
132
|
const org = orgRef.current;
|
package/dist/usage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../src/usage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unisim/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.140.0",
|
|
4
4
|
"description": "Shared React SDK for the Universal Suite — auth, entitlements, usage telemetry, changelog, org admin.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Universal Simulation Ltd",
|
|
@@ -69,6 +69,8 @@
|
|
|
69
69
|
"test:about-authorship": "npm run build && node tests/about-authorship.browser.mjs",
|
|
70
70
|
"test:changelog-scope": "npm run build && node tests/changelog-scope.browser.mjs",
|
|
71
71
|
"test:mock-auth": "npm run build && node tests/mock-auth-trial.browser.mjs",
|
|
72
|
+
"test:usage-tracker": "npm run build && node tests/usage-tracker.browser.mjs",
|
|
73
|
+
"test:theme-store": "npm run build && node tests/theme-store.browser.mjs",
|
|
72
74
|
"prepublishOnly": "npm run typecheck && npm run build"
|
|
73
75
|
},
|
|
74
76
|
"dependencies": {
|