@unisim/sdk 0.157.0 → 0.159.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
@@ -314,12 +314,26 @@ the last line of the navbar's profile menu. **Nothing to wire up:** the provider
314
314
  reports the app as in use (guests included) and the menu reads the figure.
315
315
 
316
316
  - **Counting** (migration 0175): the provider calls `app_presence_beat(product,
317
- install_id)` on load, on sign-in/out and every 45 s while the page is visible.
317
+ install_id, platform)` on sign-in/out and every 45 s while the page is visible.
318
318
  The install id is a random UUID in localStorage (`unisim:install-id`). An
319
319
  account is one person across all its devices and platforms; a guest install is
320
320
  one person unless somebody signed in on it. "Live" = a beat in the last 2 min.
321
- - **Reading**: `app_user_counts(product)` → `{ total, live }`, only while the menu
322
- is open. The line hides until a real number arrives.
321
+ ⚠️ **The FIRST beat waits for an interaction on the web** (since 0.158.0) —
322
+ a pointer, key, touch, wheel or scroll event. A page load on its own is not
323
+ somebody using the app, and until this it counted as one. An **installed** app
324
+ (Capacitor, Electron) beats the moment it opens: choosing the icon and waiting
325
+ for it to launch is a good deal more deliberate than arriving at a URL. For a
326
+ surface that is watched rather than touched — a wall display, a kiosk — pass
327
+ `presence: { requireInteraction: false }`.
328
+ ⚠️ **PostgREST resolves an RPC by its argument NAMES**, so sending
329
+ `p_platform` to a database without migration 0187 is "function not found",
330
+ not an ignored argument. A beat refused for that reason retries without it and
331
+ drops the argument for the rest of the page — publishing this SDK ahead of the
332
+ migration costs the platform column, not the count.
333
+ - **Reading**: `app_user_counts(product)` → `{ total, live, web, native }`, only
334
+ while the menu is open. The line hides until a real number arrives. A database
335
+ without 0187 answers two columns; `web`/`native` come back `null` and no split
336
+ is drawn.
323
337
  - **It opens on the WHOLE SUITE** since 0.150.0 — `suite_user_counts()`, "There
324
338
  are a total of 1,234 users across all UNI·SIM apps (12 live)" (migration
325
339
  0177) — and a tap switches to this app's own figure and back. An account is
@@ -342,13 +356,35 @@ reports the app as in use (guests included) and the menu reads the figure.
342
356
  dropped, because the database enum gains values without the SDK being
343
357
  rebuilt. A database without 0184 shows "not available" and nothing else
344
358
  breaks. Turn it off with `<UserCountLine breakdown={false} />`.
359
+ - **web / native on every figure** (since 0.158.0, migration 0187): each row
360
+ reads "1,234 users · 900 web · 334 native · 5 live", and the suite figure
361
+ carries the split under it. The four phrases wrap onto a second line where a
362
+ row is too narrow for them, so nothing is ever cut off.
363
+ ⚠️ **`web + native` can be LESS than `total`.** Each *person* is put in one
364
+ bucket — the platform of their most recent beat, so a phone-and-laptop person
365
+ is counted once — and anyone whose last beat predates 0187 is in neither. It
366
+ heals one visitor at a time; `live` is complete within two minutes. `web` and
367
+ `native` are `null`, and the split is drawn nowhere, for an app whose total is
368
+ its own account counter (0185, the Bipolar apps): a Firestore counter has no
369
+ platform in it.
370
+ ⚠️ **The native figure lags by an app RELEASE, not a deploy** — `cap sync`,
371
+ a rebuild and a store review each. A low native figure is far more likely to
372
+ be an unshipped build than a bug.
373
+ - **"How we count a user"** — a collapsed fold at the bottom of the popup
374
+ stating, in the reader's language, all of the above that a user can see: who
375
+ counts as one person, that the web counts from an interaction, that opening an
376
+ installed app is that interaction, what "live" means, and why web + native can
377
+ come to less than the total.
345
378
  - **Off switches**: `presence: false` in `UniversalConfig`; `showUserCount={false}`
346
379
  on `<UserProfile>`. The hubs (`product: 'central'`) never beat or show it.
347
380
  - **Elsewhere**: `<UserCountLine />` / `useUserCounts()` for a home screen, and
348
381
  `<UserCountBreakdown />` / `useUserCountsByProduct()` for the per-app list.
349
- Apps without `<UniversalProvider>` use `startPresence(supabase, product)`,
350
- `fetchUserCounts`, `fetchUserCountsByProduct` and
351
- `formatUserCounts(language, counts)` directly.
382
+ Apps without `<UniversalProvider>` use `startPresence(supabase, product, opts)`,
383
+ `fetchUserCounts`, `fetchUserCountsByProduct`,
384
+ `formatUserCounts(language, counts)` and — for the four wrapping phrases of a
385
+ row — `userCountParts(language, counts)` directly. `devicePlatform()`,
386
+ `isInstalledApp()`, `onFirstInteraction()` and `hasInteracted()` are exported
387
+ for an app that wants to hold something else of its own back on the same rule.
352
388
 
353
389
  ### Languages
354
390
  - `SUPPORTED_LANGUAGES`: `en`, `en-gb`, `fr`, `es`, `it`, `de`, **`pt-BR`**, **`pt-PT`**, `tr`.
@@ -1,5 +1,5 @@
1
1
  import { type MenuTheme } from './menuTheme.js';
2
- import { type ProductCounts, type UserCounts } from './presence.js';
2
+ import { type ProductCounts, type UniversalIdCounts, type UserCounts } from './presence.js';
3
3
  /**
4
4
  * `{ product, total, live }` per app, refreshed on the presence beat while
5
5
  * `active`. Starts from the last breakdown this origin read so the popup has
@@ -11,6 +11,9 @@ import { type ProductCounts, type UserCounts } from './presence.js';
11
11
  * numbers does not need to.
12
12
  */
13
13
  export declare function useUserCountsByProduct(active?: boolean): ProductCounts[] | null;
14
+ /** `{ created, live }` for Universal IDs, refreshed on the presence beat while
15
+ * `active`, starting from the last read this origin made. */
16
+ export declare function useUniversalIdCounts(active?: boolean): UniversalIdCounts | null;
14
17
  export interface UserCountBreakdownProps {
15
18
  open: boolean;
16
19
  onClose: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"UserCountBreakdown.d.ts","sourceRoot":"","sources":["../src/UserCountBreakdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAGrD,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAA;AAqCtB;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,UAAO,GAAG,aAAa,EAAE,GAAG,IAAI,CAmB5E;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,EAAE,uBAAuB,sCA4GpG"}
1
+ {"version":3,"file":"UserCountBreakdown.d.ts","sourceRoot":"","sources":["../src/UserCountBreakdown.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAQ,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAGrD,OAAO,EASL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAChB,MAAM,eAAe,CAAA;AA8DtB;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,UAAO,GAAG,aAAa,EAAE,GAAG,IAAI,CAmB5E;AAED;8DAC8D;AAC9D,wBAAgB,oBAAoB,CAAC,MAAM,UAAO,GAAG,iBAAiB,GAAG,IAAI,CAmB5E;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,EAAE,uBAAuB,sCA8HpG"}
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
3
  import { useEffect, useRef, useState } from 'react';
4
4
  import { createPortal } from 'react-dom';
5
5
  import { NAV_OVERLAY_Z_INDEX } from './DropdownSurface.js';
@@ -7,7 +7,7 @@ import { t } from './i18n.js';
7
7
  import { MENU } from './menuTheme.js';
8
8
  import { productDisplayName } from './productNames.js';
9
9
  import { useLanguage, useUniversal } from './provider.js';
10
- import { PRESENCE_BEAT_MS, cachedUserCountsByProduct, fetchUserCountsByProduct, formatUserCounts, } from './presence.js';
10
+ import { PRESENCE_BEAT_MS, cachedUniversalIdCounts, cachedUserCountsByProduct, fetchUniversalIdCounts, fetchUserCountsByProduct, formatUserCounts, universalIdParts, userCountParts, } from './presence.js';
11
11
  // ──────────────────────────────────────────────────────────────────────────────
12
12
  // <UserCountBreakdown /> — "…and which apps are those people in?"
13
13
  //
@@ -17,7 +17,17 @@ import { PRESENCE_BEAT_MS, cachedUserCountsByProduct, fetchUserCountsByProduct,
17
17
  // it opens on, this app's figure on a tap (2026-09-17), and this list on a press
18
18
  // and hold.
19
19
  //
20
- // Three things worth knowing before changing it:
20
+ // James, 2026-09-21 added two more things to it: the web / native split on
21
+ // every figure ("perhaps on the long press of unisim users it can show
22
+ // web | native | live if there's enough space"), and the collapsed "How we
23
+ // count a user" fold at the bottom.
24
+ //
25
+ // James, 2026-09-27: "Add a line at top of apps list for 'Universal IDs' to
26
+ // show how many have been created - just X created, X live". It is the first
27
+ // row of the list, styled like an app row, and left out when the database has
28
+ // no migration 0188. Guests are not IDs; see the migration.
29
+ //
30
+ // Five things worth knowing before changing it:
21
31
  //
22
32
  // 1. **The rows do not add up to the suite total, and the note says so.** An
23
33
  // account that uses four apps is four rows here and one person in the suite
@@ -39,6 +49,21 @@ import { PRESENCE_BEAT_MS, cachedUserCountsByProduct, fetchUserCountsByProduct,
39
49
  // portal is not, so without the capture-phase guard below the first click in
40
50
  // here would close the menu and take this popup down with it.
41
51
  //
52
+ // 4. **"If there's enough space" is CSS, not a measurement.** The figures are
53
+ // four separate phrases in a wrapping flex row, so "1,234 users · 900 web ·
54
+ // 334 native · 5 live" sits beside the app name where it fits and drops to
55
+ // its own line where it does not — at any width, in any language, with no
56
+ // ResizeObserver and nothing to get wrong at 320px. Never join them into one
57
+ // string: a string can only wrap where its language puts spaces, and German
58
+ // ("gerade aktiv") and Turkish do not put them where English does.
59
+ //
60
+ // 5. **A row can have no split, and that is not an empty one.** `web`/`native`
61
+ // come back null for an app whose total is its own account counter
62
+ // (migration 0185 — the Bipolar apps, counted in Firestore). The split is
63
+ // left OUT of such a row rather than drawn as "0 web · 0 native", which
64
+ // would be a claim, and a false one. `userCountParts` does that filtering;
65
+ // this file just renders what it gets.
66
+ //
42
67
  // ⚠️ Inline styles, not Tailwind — this ships inside node_modules and the apps'
43
68
  // Tailwind builds do not scan it. Same as AboutAppDialog and PrivacyNote.
44
69
  // ──────────────────────────────────────────────────────────────────────────────
@@ -73,10 +98,34 @@ export function useUserCountsByProduct(active = true) {
73
98
  }, [active, supabase]);
74
99
  return rows;
75
100
  }
101
+ /** `{ created, live }` for Universal IDs, refreshed on the presence beat while
102
+ * `active`, starting from the last read this origin made. */
103
+ export function useUniversalIdCounts(active = true) {
104
+ const { supabase } = useUniversal();
105
+ const [counts, setCounts] = useState(() => cachedUniversalIdCounts());
106
+ useEffect(() => {
107
+ if (!active)
108
+ return;
109
+ let cancelled = false;
110
+ const load = () => {
111
+ if (typeof document !== 'undefined' && document.visibilityState === 'hidden')
112
+ return;
113
+ void fetchUniversalIdCounts(supabase).then((r) => {
114
+ if (!cancelled && r)
115
+ setCounts(r);
116
+ });
117
+ };
118
+ load();
119
+ const timer = setInterval(load, PRESENCE_BEAT_MS);
120
+ return () => { cancelled = true; clearInterval(timer); };
121
+ }, [active, supabase]);
122
+ return counts;
123
+ }
76
124
  export function UserCountBreakdown({ open, onClose, suite, theme = 'light' }) {
77
125
  const { language } = useLanguage();
78
126
  const p = MENU[theme];
79
127
  const rows = useUserCountsByProduct(open);
128
+ const ids = useUniversalIdCounts(open);
80
129
  const cardRef = useRef(null);
81
130
  // Only ever true on a FIRST open on this origin — every later open paints the
82
131
  // cached rows immediately and swaps them when the fresh read lands.
@@ -130,21 +179,48 @@ export function UserCountBreakdown({ open, onClose, suite, theme = 'light' }) {
130
179
  // backdrop. An onClick here would close the popup in the same gesture
131
180
  // that opened it. A fresh press on the backdrop sends its own
132
181
  // pointerdown, which is the dismissal we actually want.
133
- onPointerDown: onClose, children: _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": t(language, 'users.breakdown_title'), ref: cardRef, style: cardStyle(p), onPointerDown: (e) => e.stopPropagation(), children: [_jsxs("div", { style: headerRowStyle, children: [_jsx("h2", { style: titleStyle(p), children: t(language, 'users.breakdown_title') }), _jsx("button", { type: "button", onClick: onClose, "aria-label": t(language, 'nav.menu_close'), style: closeButtonStyle(p), children: _jsx(IconClose, {}) })] }), suite && _jsx("p", { style: suiteLineStyle(p), children: formatUserCounts(language, suite, 'suite') }), loading && _jsx("p", { style: quietStyle(p), children: t(language, 'users.breakdown_loading') }), !loading && !rows && _jsx("p", { style: quietStyle(p), children: t(language, 'users.breakdown_empty') }), rows && (_jsx("ul", { style: listStyle, children: rows.map((row) => (_jsxs("li", { style: rowStyle(p), children: [_jsx("span", { style: nameStyle(p), children: productDisplayName(row.product) }), _jsxs("span", { style: figureStyle(p), children: [row.live > 0 && _jsx("span", { style: liveDotStyle, "aria-hidden": true }), formatRow(language, row)] })] }, row.product))) })), rows && _jsx("p", { style: noteStyle(p), children: t(language, 'users.breakdown_note') })] }) }), document.body);
182
+ onPointerDown: onClose, children: _jsxs("div", { role: "dialog", "aria-modal": "true", "aria-label": t(language, 'users.breakdown_title'), ref: cardRef, style: cardStyle(p), onPointerDown: (e) => e.stopPropagation(), children: [_jsxs("div", { style: headerRowStyle, children: [_jsx("h2", { style: titleStyle(p), children: t(language, 'users.breakdown_title') }), _jsx("button", { type: "button", onClick: onClose, "aria-label": t(language, 'nav.menu_close'), style: closeButtonStyle(p), children: _jsx(IconClose, {}) })] }), suite && (_jsxs(_Fragment, { children: [_jsx("p", { style: suiteLineStyle(p), children: formatUserCounts(language, suite, 'suite') }), _jsx(SuiteSplit, { counts: suite, language: language, palette: p })] })), loading && _jsx("p", { style: quietStyle(p), children: t(language, 'users.breakdown_loading') }), !loading && !rows && _jsx("p", { style: quietStyle(p), children: t(language, 'users.breakdown_empty') }), (rows || ids) && (_jsxs("ul", { style: listStyle, children: [ids && (_jsxs("li", { style: rowStyle(p), children: [_jsx("span", { style: idsNameStyle(p), children: "Universal IDs" }), _jsxs("span", { style: figureStyle(p), children: [ids.live > 0 && _jsx("span", { style: liveDotStyle, "aria-hidden": true }), _jsx(Phrases, { parts: universalIdParts(language, ids), palette: p })] })] })), rows?.map((row) => (_jsxs("li", { style: rowStyle(p), children: [_jsx("span", { style: nameStyle(p), children: productDisplayName(row.product) }), _jsxs("span", { style: figureStyle(p), children: [row.live > 0 && _jsx("span", { style: liveDotStyle, "aria-hidden": true }), _jsx(Figures, { counts: row, language: language, palette: p })] })] }, row.product)))] })), rows && _jsx("p", { style: noteStyle(p), children: t(language, 'users.breakdown_note') }), _jsx(HowWeCount, { language: language, palette: p })] }) }), document.body);
183
+ }
184
+ /**
185
+ * "1,234 users · 900 web · 334 native · 5 live" — as four spans that can wrap
186
+ * between one another, never mid-phrase, with the separators marked
187
+ * `aria-hidden` so a screen reader reads four facts rather than a row of dots.
188
+ *
189
+ * ⚠️ The whole point is that this is NOT one string. See note 4 in the header.
190
+ */
191
+ function Figures({ counts, language, palette }) {
192
+ return _jsx(Phrases, { parts: userCountParts(language, counts), palette: palette });
134
193
  }
135
- /** "1,234 users · 5 live", grouped the way the reader's language groups. */
136
- function formatRow(language, row) {
137
- let nf;
138
- try {
139
- nf = new Intl.NumberFormat(language ?? undefined);
140
- }
141
- catch {
142
- nf = new Intl.NumberFormat('en');
143
- }
144
- const key = row.total === 1 ? 'users.breakdown_row_one' : 'users.breakdown_row';
145
- return t(language, key)
146
- .replace('{total}', nf.format(row.total))
147
- .replace('{live}', nf.format(row.live));
194
+ function Phrases({ parts, palette }) {
195
+ return (_jsx(_Fragment, { children: parts.map((part, i) => (_jsxs("span", { style: figurePartStyle, children: [i > 0 && _jsx("span", { "aria-hidden": true, style: separatorStyle(palette), children: "\u00B7" }), part] }, part))) }));
196
+ }
197
+ /**
198
+ * The suite figure's own split, on the line under it. Drawn only when there is
199
+ * one: a database without migration 0187 answers null, and "0 web · 0 native"
200
+ * beneath a four-figure total would read as a broken count rather than a
201
+ * missing one.
202
+ */
203
+ function SuiteSplit({ counts, language, palette }) {
204
+ if (typeof counts.web !== 'number' || typeof counts.native !== 'number')
205
+ return null;
206
+ const parts = userCountParts(language, counts).slice(1, 3);
207
+ return (_jsx("p", { style: suiteSplitStyle(palette), children: parts.map((part, i) => (_jsxs("span", { style: figurePartStyle, children: [i > 0 && _jsx("span", { "aria-hidden": true, style: separatorStyle(palette), children: "\u00B7" }), part] }, part))) }));
208
+ }
209
+ /**
210
+ * "How we count a user", collapsed (James, 2026-09-21). Every figure in this
211
+ * popup is a judgement call about who a person is, and the popup is the only
212
+ * place anybody meets those calls — so the answer belongs in it rather than in
213
+ * a migration header nobody outside this repo can read.
214
+ *
215
+ * ⚠️ A real `<details>`, not a state-driven fold: it is the suite's house
216
+ * pattern, it opens with no JavaScript, and `installRevealOnExpand` (on by
217
+ * default in every app) already scrolls an opened fold into view — here that
218
+ * means the card scrolls, because the card is the nearest thing with
219
+ * `overflow-y: auto` and `scrollChain` finds the innermost scroller first.
220
+ */
221
+ function HowWeCount({ language, palette }) {
222
+ const lines = ['users.how_ids', 'users.how_person', 'users.how_web', 'users.how_native', 'users.how_live', 'users.how_split'];
223
+ return (_jsxs("details", { style: detailsStyle(palette), children: [_jsx("summary", { style: summaryStyle(palette), children: t(language, 'users.how_title') }), _jsx("ul", { style: howListStyle, children: lines.map((key) => (_jsx("li", { style: howItemStyle(palette), children: t(language, key) }, key))) })] }));
148
224
  }
149
225
  function IconClose() {
150
226
  return (_jsx("svg", { viewBox: "0 0 24 24", width: "15", height: "15", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", "aria-hidden": "true", children: _jsx("path", { d: "M6 6 18 18M18 6 6 18" }) }));
@@ -215,6 +291,15 @@ const suiteLineStyle = (p) => ({
215
291
  lineHeight: 1.4,
216
292
  color: p.muted,
217
293
  });
294
+ const suiteSplitStyle = (p) => ({
295
+ margin: '2px 0 0',
296
+ display: 'flex',
297
+ flexWrap: 'wrap',
298
+ gap: '0 5px',
299
+ fontSize: 11,
300
+ lineHeight: 1.4,
301
+ color: p.faint,
302
+ });
218
303
  const quietStyle = (p) => ({
219
304
  margin: '14px 0 0',
220
305
  fontSize: 12,
@@ -231,7 +316,13 @@ const rowStyle = (p) => ({
231
316
  display: 'flex',
232
317
  alignItems: 'baseline',
233
318
  justifyContent: 'space-between',
234
- gap: 12,
319
+ // ⚠️ The row WRAPS now that a figure can be four phrases long (0.158.0).
320
+ // `gap: '2px 12px'` keeps the old 12px between the name and the figures and
321
+ // adds a hair of leading when they end up stacked — which is what "if
322
+ // there's enough space" amounts to: a row too narrow for both puts the
323
+ // figures under the app name instead of squeezing or clipping them.
324
+ flexWrap: 'wrap',
325
+ gap: '2px 12px',
235
326
  padding: '5px 0',
236
327
  borderBottom: `1px solid ${p.divider}`,
237
328
  });
@@ -240,15 +331,32 @@ const nameStyle = (p) => ({
240
331
  color: p.body,
241
332
  minWidth: 0,
242
333
  });
334
+ // "Universal IDs" is a product name, never translated, and heads the list, so
335
+ // it is set a little heavier than the app names under it.
336
+ const idsNameStyle = (p) => ({
337
+ ...nameStyle(p),
338
+ fontWeight: 600,
339
+ color: p.text,
340
+ });
243
341
  const figureStyle = (p) => ({
244
342
  display: 'inline-flex',
245
343
  alignItems: 'baseline',
246
- gap: 5,
247
- flexShrink: 0,
344
+ // The phrases wrap between themselves; each one is nowrap on its own, so a
345
+ // grouped figure is never broken away from the word it belongs to.
346
+ flexWrap: 'wrap',
347
+ justifyContent: 'flex-end',
348
+ gap: '0 5px',
248
349
  fontSize: 12,
249
350
  color: p.muted,
250
- // A grouped figure must not be broken across two lines by the flex row.
351
+ });
352
+ const figurePartStyle = {
251
353
  whiteSpace: 'nowrap',
354
+ };
355
+ const separatorStyle = (p) => ({
356
+ // The dot belongs to the phrase after it, so a wrap never leaves one
357
+ // stranded at the end of a line.
358
+ marginRight: 5,
359
+ color: p.faint,
252
360
  });
253
361
  const liveDotStyle = {
254
362
  display: 'inline-block',
@@ -265,4 +373,40 @@ const noteStyle = (p) => ({
265
373
  lineHeight: 1.45,
266
374
  color: p.faint,
267
375
  });
376
+ // ── "How we count a user" ────────────────────────────────────────────────────
377
+ const detailsStyle = (p) => ({
378
+ marginTop: 12,
379
+ paddingTop: 10,
380
+ borderTop: `1px solid ${p.divider}`,
381
+ });
382
+ const summaryStyle = (p) => ({
383
+ // A summary is a button to everyone who can see it; these two make it one to
384
+ // a pointer and to a reader who presses and holds on a phone, where the
385
+ // browser would otherwise offer to select the words instead of opening it.
386
+ cursor: 'pointer',
387
+ WebkitUserSelect: 'none',
388
+ userSelect: 'none',
389
+ fontSize: 12,
390
+ fontWeight: 600,
391
+ color: p.muted,
392
+ // The disclosure triangle is left in place on purpose: it is the one thing on
393
+ // screen that says the fold opens, and it is drawn by the browser in the
394
+ // reader's own conventions.
395
+ listStyle: 'revert',
396
+ });
397
+ const howListStyle = {
398
+ listStyle: 'none',
399
+ margin: '8px 0 0',
400
+ padding: 0,
401
+ display: 'grid',
402
+ gap: 6,
403
+ };
404
+ const howItemStyle = (p) => ({
405
+ fontSize: 11,
406
+ lineHeight: 1.45,
407
+ color: p.faint,
408
+ // No marker and no indent: the card is 380px at its widest and a <ul>'s
409
+ // default 40px of padding costs one of these sentences a whole line on a
410
+ // phone. The gap between items is what separates them.
411
+ });
268
412
  //# sourceMappingURL=UserCountBreakdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UserCountBreakdown.js","sourceRoot":"","sources":["../src/UserCountBreakdown.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"UserCountBreakdown.js","sourceRoot":"","sources":["../src/UserCountBreakdown.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,mBAAmB,0EAA2E,CAAA;AAE3G,MAAM,MAAM,QAAQ,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AAEzD,eAAO,MAAM,gBAAgB,EAAE,QAAe,CAAA;AAorD9C,wBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAGrF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAUhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAS3E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAC9C,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,CAAC,GAAG,SAAS,CAUf"}
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AA6BA,eAAO,MAAM,mBAAmB,0EAA2E,CAAA;AAE3G,MAAM,MAAM,QAAQ,GAAG,OAAO,mBAAmB,CAAC,MAAM,CAAC,CAAA;AAEzD,eAAO,MAAM,gBAAgB,EAAE,QAAe,CAAA;AAwxD9C,wBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGtE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,IAAI,QAAQ,CAGrF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,QAAQ,GAAG,IAAI,CAUhF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,EAAE,CAS3E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAC9C,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC9B,CAAC,GAAG,SAAS,CAUf"}