@unisim/sdk 0.105.1 → 0.107.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.
Files changed (50) hide show
  1. package/README.md +8 -0
  2. package/dist/AccountLimits.d.ts +7 -0
  3. package/dist/AccountLimits.d.ts.map +1 -0
  4. package/dist/AccountLimits.js +145 -0
  5. package/dist/AccountLimits.js.map +1 -0
  6. package/dist/ChangelogMenu.d.ts +11 -1
  7. package/dist/ChangelogMenu.d.ts.map +1 -1
  8. package/dist/ChangelogMenu.js +94 -72
  9. package/dist/ChangelogMenu.js.map +1 -1
  10. package/dist/DropdownSurface.d.ts +24 -1
  11. package/dist/DropdownSurface.d.ts.map +1 -1
  12. package/dist/DropdownSurface.js +33 -3
  13. package/dist/DropdownSurface.js.map +1 -1
  14. package/dist/SuiteSwitcher.d.ts +19 -5
  15. package/dist/SuiteSwitcher.d.ts.map +1 -1
  16. package/dist/SuiteSwitcher.js +111 -112
  17. package/dist/SuiteSwitcher.js.map +1 -1
  18. package/dist/UniversalAppsNavBar.d.ts +60 -1
  19. package/dist/UniversalAppsNavBar.d.ts.map +1 -1
  20. package/dist/UniversalAppsNavBar.js +75 -33
  21. package/dist/UniversalAppsNavBar.js.map +1 -1
  22. package/dist/UserProfile.d.ts +49 -3
  23. package/dist/UserProfile.d.ts.map +1 -1
  24. package/dist/UserProfile.js +215 -63
  25. package/dist/UserProfile.js.map +1 -1
  26. package/dist/appMarks.d.ts +1 -1
  27. package/dist/appMarks.d.ts.map +1 -1
  28. package/dist/appMarks.js +19 -0
  29. package/dist/appMarks.js.map +1 -1
  30. package/dist/entitlements.d.ts +55 -0
  31. package/dist/entitlements.d.ts.map +1 -0
  32. package/dist/entitlements.js +116 -0
  33. package/dist/entitlements.js.map +1 -0
  34. package/dist/i18n.d.ts.map +1 -1
  35. package/dist/i18n.js +119 -0
  36. package/dist/i18n.js.map +1 -1
  37. package/dist/index.d.ts +7 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +9 -0
  40. package/dist/index.js.map +1 -1
  41. package/dist/menuTheme.d.ts +85 -0
  42. package/dist/menuTheme.d.ts.map +1 -0
  43. package/dist/menuTheme.js +195 -0
  44. package/dist/menuTheme.js.map +1 -0
  45. package/dist/mockAuth.d.ts.map +1 -1
  46. package/dist/mockAuth.js +19 -2
  47. package/dist/mockAuth.js.map +1 -1
  48. package/dist/types.d.ts +7 -3
  49. package/dist/types.d.ts.map +1 -1
  50. package/package.json +1 -1
package/README.md CHANGED
@@ -75,6 +75,14 @@ function Header() {
75
75
  - `useHasAccess(productCode)` — feature/product entitlement check
76
76
  - `useHasFeature(productCode, feature)`
77
77
  - `useSeat(productCode)`
78
+ - `useAccountLimits()` — the whole entitlement picture in one object: tier, term,
79
+ the purchased balance, the per-app free-token wall (`app_free_tokens`) and an
80
+ admin to ask. A missing token row means **available**, not "no allowance" —
81
+ rows are created lazily, so this hook is the one place that rule lives.
82
+ - `<AccountLimits />` — the panel that renders it. Mounted for you by
83
+ `<UserProfile />` when its account header is clicked; pass
84
+ `showLimits={false}` to the navbar's profile if a product shows entitlements
85
+ its own way.
78
86
 
79
87
  ### Org admin
80
88
  - `useOrgMembers()` / `useOrgSeats()` / `useAuditLog()`
@@ -0,0 +1,7 @@
1
+ import { type MenuTheme } from './menuTheme.js';
2
+ export interface AccountLimitsProps {
3
+ language: string;
4
+ theme: MenuTheme;
5
+ }
6
+ export declare function AccountLimits({ language, theme }: AccountLimitsProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=AccountLimits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountLimits.d.ts","sourceRoot":"","sources":["../src/AccountLimits.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAA6D,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE1G,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,SAAS,CAAA;CACjB;AA8BD,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,kBAAkB,2CAsHpE"}
@@ -0,0 +1,145 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { t } from './i18n.js';
4
+ import { useAccountLimits } from './entitlements.js';
5
+ import { DEFAULT_UNIVERSAL_APPS_PRODUCTS } from './SuiteSwitcher.js';
6
+ import { MENU, MENU_TIER_BADGE, MENU_TOKEN_BADGE } from './menuTheme.js';
7
+ /**
8
+ * Product code → display name, taken from the switcher's catalogue rather than
9
+ * a second list here. An app the catalogue doesn't know falls back to its raw
10
+ * code, which is ugly and therefore gets noticed — the failure mode that
11
+ * matters is a silently blank row, not an ugly one.
12
+ */
13
+ function appName(code) {
14
+ return DEFAULT_UNIVERSAL_APPS_PRODUCTS.find((p) => p.id === code)?.name ?? code;
15
+ }
16
+ /**
17
+ * `current_period_end` and `lifetime_at` are timestamptz — real instants — so
18
+ * rendering them in the viewer's zone is correct here. (This is NOT the
19
+ * date-only case where local formatting shifts the day; there is no date-only
20
+ * value in this panel.)
21
+ */
22
+ function formatDate(iso, language) {
23
+ const d = new Date(iso);
24
+ if (Number.isNaN(d.getTime()))
25
+ return iso;
26
+ try {
27
+ return d.toLocaleDateString(language, { day: 'numeric', month: 'long', year: 'numeric' });
28
+ }
29
+ catch {
30
+ // An unsupported locale tag throws rather than falling back. Ask for the
31
+ // same format in English instead of dropping the date entirely.
32
+ return d.toLocaleDateString('en', { day: 'numeric', month: 'long', year: 'numeric' });
33
+ }
34
+ }
35
+ export function AccountLimits({ language, theme }) {
36
+ const limits = useAccountLimits();
37
+ const c = MENU[theme];
38
+ // Apps other than this one that are holding or have spent their token — the
39
+ // "…and it's currently used on PDF and QR" half of the question. Apps sitting
40
+ // at `available` are deliberately not listed: seventeen rows saying "nothing
41
+ // happening here" is not an answer, it's a wall.
42
+ const elsewhere = limits.tokens
43
+ .filter((row) => row.app !== limits.thisApp.app && row.status !== 'available')
44
+ .sort((a, b) => appName(a.app).localeCompare(appName(b.app)));
45
+ const isFree = limits.tier === 'free';
46
+ // Lifetime is tier 'enterprise' with no period end — see the note on
47
+ // Subscription.lifetime_at. Checking the tier alone would print "expires" on
48
+ // a plan that never does.
49
+ const isLifetime = !!limits.lifetimeAt && !limits.periodEnd;
50
+ // 'canceled' still has a period end, and until that date the plan works. The
51
+ // honest word for that date is "ends", not "renews".
52
+ const endsRatherThanRenews = limits.status === 'canceled' || limits.status === 'past_due';
53
+ return (_jsxs("div", { style: { padding: '12px 14px 10px' }, children: [_jsx("div", { style: eyebrowStyle(c), children: t(language, 'limits.title') }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 8, marginTop: 6 }, children: [_jsx("span", { style: planNameStyle(c), children: isFree
54
+ ? t(language, 'limits.free_tier')
55
+ : t(language, `profile.tier.${limits.tier}`) }), isLifetime && (_jsx("span", { style: tierChipStyle(limits.tier, theme), children: t(language, 'limits.lifetime') }))] }), _jsx("p", { style: blurbStyle(c), children: t(language, 'limits.one_token_per_app') }), limits.loading ? (_jsx("div", { style: { ...blurbStyle(c), marginBottom: 0 }, children: t(language, 'limits.loading') })) : (_jsxs(_Fragment, { children: [_jsxs(Section, { label: t(language, 'limits.tokens'), theme: theme, children: [_jsx(TokenRow, { name: appName(limits.thisApp.app), note: t(language, 'limits.this_app'), status: limits.thisApp.status, language: language, theme: theme }), elsewhere.map((row) => (_jsx(TokenRow, { name: appName(row.app), status: row.status, language: language, theme: theme }, row.app)))] }), limits.credits > 0 && (_jsx(Section, { label: t(language, 'limits.purchased'), theme: theme, children: _jsxs("div", { style: rowStyle, children: [_jsx("span", { style: rowLabelStyle(c), children: t(language, 'limits.purchased_balance') }), _jsx("span", { style: { ...rowLabelStyle(c), fontWeight: 700, color: c.text }, children: limits.credits })] }) })), limits.periodEnd && (_jsx(Section, { label: t(language, 'limits.term'), theme: theme, children: _jsxs("div", { style: rowStyle, children: [_jsx("span", { style: rowLabelStyle(c), children: endsRatherThanRenews
56
+ ? t(language, 'limits.ends')
57
+ : t(language, 'limits.renews') }), _jsx("span", { style: { ...rowLabelStyle(c), color: c.text, fontWeight: 600 }, children: formatDate(limits.periodEnd, language) })] }) })), !limits.isAdmin && limits.admin && (_jsxs(Section, { label: t(language, 'limits.admin_contact'), theme: theme, children: [limits.admin.name && (_jsx("div", { style: { ...rowLabelStyle(c), color: c.text, fontWeight: 600 }, children: limits.admin.name })), limits.admin.email && (_jsx("a", { href: `mailto:${limits.admin.email}`, style: contactLinkStyle(c), children: limits.admin.email })), !limits.admin.name && !limits.admin.email && (_jsx("div", { style: rowLabelStyle(c), children: t(language, 'limits.admin_unknown') }))] }))] }))] }));
58
+ }
59
+ // ──────────────────────────────────────────────────────────────────────────────
60
+ // Pieces
61
+ // ──────────────────────────────────────────────────────────────────────────────
62
+ function Section({ label, theme, children, }) {
63
+ return (_jsxs("div", { style: { marginTop: 12, borderTop: `1px solid ${MENU[theme].divider}`, paddingTop: 9 }, children: [_jsx("div", { style: eyebrowStyle(MENU[theme]), children: label }), _jsx("div", { style: { marginTop: 6 }, children: children })] }));
64
+ }
65
+ function TokenRow({ name, note, status, language, theme, }) {
66
+ const c = MENU[theme];
67
+ return (_jsxs("div", { style: rowStyle, children: [_jsxs("span", { style: { ...rowLabelStyle(c), color: c.text, minWidth: 0 }, children: [_jsx("span", { style: ellipsis, children: name }), note && _jsxs("span", { style: { color: c.muted, fontWeight: 400 }, children: [" \u00B7 ", note] })] }), _jsx("span", { style: tokenChipStyle(status, theme), children: t(language, `limits.token.${status}`) })] }));
68
+ }
69
+ // ──────────────────────────────────────────────────────────────────────────────
70
+ // Styles
71
+ // ──────────────────────────────────────────────────────────────────────────────
72
+ const ellipsis = {
73
+ overflow: 'hidden',
74
+ textOverflow: 'ellipsis',
75
+ whiteSpace: 'nowrap',
76
+ };
77
+ const eyebrowStyle = (c) => ({
78
+ fontSize: 10,
79
+ fontWeight: 700,
80
+ letterSpacing: '0.07em',
81
+ textTransform: 'uppercase',
82
+ // `muted`, not `faint`: `faint` is the palette's weakest step and already
83
+ // fails AA in the light theme (see menuTheme.ts). Nothing new gets built on
84
+ // top of a known failure.
85
+ color: c.muted,
86
+ });
87
+ const planNameStyle = (c) => ({
88
+ fontSize: 15,
89
+ fontWeight: 700,
90
+ color: c.text,
91
+ letterSpacing: '-0.01em',
92
+ });
93
+ const blurbStyle = (c) => ({
94
+ margin: '6px 0 0',
95
+ fontSize: 11.5,
96
+ lineHeight: 1.45,
97
+ color: c.muted,
98
+ });
99
+ const rowStyle = {
100
+ display: 'flex',
101
+ alignItems: 'center',
102
+ justifyContent: 'space-between',
103
+ gap: 10,
104
+ padding: '3px 0',
105
+ };
106
+ const rowLabelStyle = (c) => ({
107
+ fontSize: 12,
108
+ fontWeight: 500,
109
+ color: c.body,
110
+ display: 'flex',
111
+ alignItems: 'baseline',
112
+ minWidth: 0,
113
+ });
114
+ const chipBase = {
115
+ flexShrink: 0,
116
+ display: 'inline-block',
117
+ padding: '2px 7px',
118
+ borderRadius: 99,
119
+ fontSize: 10,
120
+ fontWeight: 700,
121
+ letterSpacing: '0.05em',
122
+ textTransform: 'uppercase',
123
+ whiteSpace: 'nowrap',
124
+ };
125
+ function tokenChipStyle(status, theme) {
126
+ // The `?? spent` is for a status this build has never heard of — the check
127
+ // constraint has three values today, and a fourth added in Postgres would
128
+ // otherwise take the whole profile menu down with a read of `undefined.bg`.
129
+ // The label beside it falls back to the raw key, so the unknown stays visible.
130
+ const pair = MENU_TOKEN_BADGE[theme][status] ?? MENU_TOKEN_BADGE[theme].spent;
131
+ return { ...chipBase, background: pair.bg, color: pair.fg };
132
+ }
133
+ function tierChipStyle(tier, theme) {
134
+ const pair = MENU_TIER_BADGE[theme][tier] ?? MENU_TIER_BADGE[theme].free;
135
+ return { ...chipBase, background: pair.bg, color: pair.fg };
136
+ }
137
+ const contactLinkStyle = (c) => ({
138
+ display: 'inline-block',
139
+ marginTop: 2,
140
+ fontSize: 12,
141
+ color: c.accentText,
142
+ textDecoration: 'none',
143
+ wordBreak: 'break-all',
144
+ });
145
+ //# sourceMappingURL=AccountLimits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountLimits.js","sourceRoot":"","sources":["../src/AccountLimits.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type CSSProperties } from 'react';
2
+ import { type MenuTheme } from './menuTheme.js';
2
3
  export interface ChangelogMenuProps {
3
4
  /** Trigger icon URL — defaults to the inline UNI·SIM monogram. */
4
5
  iconSrc?: string;
@@ -10,6 +11,15 @@ export interface ChangelogMenuProps {
10
11
  ariaLabel?: string;
11
12
  className?: string;
12
13
  style?: CSSProperties;
14
+ /**
15
+ * Colourway for the dropdown panel. `'light'` (default) is what every
16
+ * consumer rendered before 0.107.0; `UniversalAppsNavBar` passes its own
17
+ * `theme` through.
18
+ *
19
+ * The TRIGGER is unaffected and needs no theme — it is a bare transparent
20
+ * button around the UNI·SIM mark, which carries its own orange tile.
21
+ */
22
+ theme?: MenuTheme;
13
23
  }
14
24
  /**
15
25
  * Dropdown on the UNI·SIM icon that surfaces the suite-wide changelog
@@ -21,5 +31,5 @@ export interface ChangelogMenuProps {
21
31
  * default and caches for 5 minutes). When the feed is empty or fails, the
22
32
  * trigger still works — the menu just shows "no entries yet".
23
33
  */
24
- export declare function ChangelogMenu({ iconSrc, limit, productFilter, ariaLabel, className, style, }: ChangelogMenuProps): import("react/jsx-runtime").JSX.Element;
34
+ export declare function ChangelogMenu({ iconSrc, limit, productFilter, ariaLabel, className, style, theme, }: ChangelogMenuProps): import("react/jsx-runtime").JSX.Element;
25
35
  //# sourceMappingURL=ChangelogMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChangelogMenu.d.ts","sourceRoot":"","sources":["../src/ChangelogMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,OAAO,CAAA;AAYd,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAeD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAA8B,EAC9B,KAAS,EACT,aAAa,EACb,SAAS,EACT,SAAS,EACT,KAAK,GACN,EAAE,kBAAkB,2CAyFpB"}
1
+ {"version":3,"file":"ChangelogMenu.d.ts","sourceRoot":"","sources":["../src/ChangelogMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,OAAO,CAAA;AAOd,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAMvE,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAeD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAA8B,EAC9B,KAAS,EACT,aAAa,EACb,SAAS,EACT,SAAS,EACT,KAAK,EACL,KAAe,GAChB,EAAE,kBAAkB,2CAyFpB"}
@@ -6,6 +6,7 @@ import { t } from './i18n.js';
6
6
  import { useLanguage } from './provider.js';
7
7
  import { DropdownSurface } from './DropdownSurface.js';
8
8
  import { useCanHover } from './hover.js';
9
+ import { MENU, MENU_ENTRY_BADGE } from './menuTheme.js';
9
10
  // ──────────────────────────────────────────────────────────────────────────────
10
11
  // Component
11
12
  // ──────────────────────────────────────────────────────────────────────────────
@@ -24,7 +25,7 @@ const DEFAULT_TRIGGER_ICON = 'data:image/svg+xml;utf8,' +
24
25
  * default and caches for 5 minutes). When the feed is empty or fails, the
25
26
  * trigger still works — the menu just shows "no entries yet".
26
27
  */
27
- export function ChangelogMenu({ iconSrc = DEFAULT_TRIGGER_ICON, limit = 5, productFilter, ariaLabel, className, style, }) {
28
+ export function ChangelogMenu({ iconSrc = DEFAULT_TRIGGER_ICON, limit = 5, productFilter, ariaLabel, className, style, theme = 'light', }) {
28
29
  const { language } = useLanguage();
29
30
  const resolvedAriaLabel = ariaLabel ?? t(language, 'changelog.label');
30
31
  const [open, setOpen] = useState(false);
@@ -47,13 +48,13 @@ export function ChangelogMenu({ iconSrc = DEFAULT_TRIGGER_ICON, limit = 5, produ
47
48
  const canHover = useCanHover();
48
49
  const hoverOpen = canHover ? openNow : undefined;
49
50
  const hoverClose = canHover ? closeSoon : undefined;
50
- return (_jsxs("div", { ref: wrapRef, className: className, style: { position: 'relative', display: 'inline-block', ...style }, onMouseEnter: hoverOpen, onMouseLeave: hoverClose, children: [_jsx("button", { type: "button", "aria-label": resolvedAriaLabel, "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: hoverOpen, style: triggerStyle, children: _jsx("img", { src: iconSrc, alt: "", "aria-hidden": true, style: { width: 28, height: 28, display: 'block' } }) }), _jsxs(DropdownSurface, { open: open, anchorRef: wrapRef, align: "right", arrow: true, role: "menu", surfaceStyle: menuSurfaceStyle, onMouseEnter: hoverOpen, onMouseLeave: hoverClose, onRequestClose: () => setOpen(false), children: [_jsxs("div", { style: headerStyle, children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', lineHeight: 1.1, minWidth: 0 }, children: [_jsx("span", { style: eyebrowStyle, children: t(language, 'suite.portal_eyebrow') }), _jsx("span", { style: titleStyle, children: t(language, 'changelog.title') })] }), _jsx("span", { style: versionChipStyle, children: currentVersion ?? '…' })] }), _jsx("div", { style: bodyStyle, children: loading ? (_jsx("p", { style: emptyStyle, children: t(language, 'changelog.loading') })) : releases.length === 0 ? (_jsx("p", { style: emptyStyle, children: t(language, 'changelog.no_entries') })) : (releases.map((r) => _jsx(ReleaseBlock, { release: r, language: language }, r.version))) }), _jsx("div", { style: footerStyle, children: _jsxs("a", { href: "https://changelog.unisim.co.uk/changelog.json", target: "_blank", rel: "noreferrer", style: footerLinkStyle, children: [t(language, 'changelog.full_changelog'), " \u2197"] }) })] })] }));
51
+ return (_jsxs("div", { ref: wrapRef, className: className, style: { position: 'relative', display: 'inline-block', ...style }, onMouseEnter: hoverOpen, onMouseLeave: hoverClose, children: [_jsx("button", { type: "button", "aria-label": resolvedAriaLabel, "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: hoverOpen, style: triggerStyle, children: _jsx("img", { src: iconSrc, alt: "", "aria-hidden": true, style: { width: 28, height: 28, display: 'block' } }) }), _jsxs(DropdownSurface, { open: open, anchorRef: wrapRef, align: "right", arrow: true, role: "menu", surfaceStyle: menuSurfaceStyle(theme), onMouseEnter: hoverOpen, onMouseLeave: hoverClose, onRequestClose: () => setOpen(false), children: [_jsxs("div", { style: headerStyle(theme), children: [_jsxs("div", { style: { display: 'flex', flexDirection: 'column', lineHeight: 1.1, minWidth: 0 }, children: [_jsx("span", { style: eyebrowStyle(theme), children: t(language, 'suite.portal_eyebrow') }), _jsx("span", { style: titleStyle(theme), children: t(language, 'changelog.title') })] }), _jsx("span", { style: versionChipStyle(theme), children: currentVersion ?? '…' })] }), _jsx("div", { style: bodyStyle, children: loading ? (_jsx("p", { style: emptyStyle(theme), children: t(language, 'changelog.loading') })) : releases.length === 0 ? (_jsx("p", { style: emptyStyle(theme), children: t(language, 'changelog.no_entries') })) : (releases.map((r) => _jsx(ReleaseBlock, { release: r, language: language, theme: theme }, r.version))) }), _jsx("div", { style: footerStyle(theme), children: _jsxs("a", { href: "https://changelog.unisim.co.uk/changelog.json", target: "_blank", rel: "noreferrer", style: footerLinkStyle(theme), children: [t(language, 'changelog.full_changelog'), " \u2197"] }) })] })] }));
51
52
  }
52
53
  // ──────────────────────────────────────────────────────────────────────────────
53
54
  // Subcomponents
54
55
  // ──────────────────────────────────────────────────────────────────────────────
55
- function ReleaseBlock({ release, language }) {
56
- return (_jsxs("div", { style: releaseStyle, children: [_jsxs("div", { style: releaseHeaderStyle, children: [_jsx("span", { style: releaseVersionStyle, children: release.version }), _jsx("span", { style: releaseDateStyle, children: formatDate(release.date, language) })] }), _jsx("ul", { style: entryListStyle, children: release.entries.map((e, i) => (_jsxs("li", { style: entryItemStyle, children: [_jsx(TypeBadge, { type: e.type }), _jsxs("span", { style: entryTextStyle, children: [e.summary, _jsxs("span", { style: productLabelStyle, children: [" \u2014 ", _jsx(ProductTag, { product: e.product })] })] })] }, i))) })] }));
56
+ function ReleaseBlock({ release, language, theme }) {
57
+ return (_jsxs("div", { style: releaseStyle(theme), children: [_jsxs("div", { style: releaseHeaderStyle, children: [_jsx("span", { style: releaseVersionStyle(theme), children: release.version }), _jsx("span", { style: releaseDateStyle(theme), children: formatDate(release.date, language) })] }), _jsx("ul", { style: entryListStyle, children: release.entries.map((e, i) => (_jsxs("li", { style: entryItemStyle, children: [_jsx(TypeBadge, { type: e.type, theme: theme }), _jsxs("span", { style: entryTextStyle(theme), children: [e.summary, _jsxs("span", { style: productLabelStyle(theme), children: [" \u2014 ", _jsx(ProductTag, { product: e.product, theme: theme })] })] })] }, i))) })] }));
57
58
  }
58
59
  // Maps the product code stored on each changelog entry to the short label
59
60
  // shown after the summary text — "e.g. bugfix text — Ergo". Kept short to
@@ -73,6 +74,19 @@ function productDisplayName(product) {
73
74
  case 'video': return 'Video';
74
75
  case 'palspayin': return 'PalsPayIn';
75
76
  case 'blackbook': return 'BlackBook';
77
+ // ⚠️ These nine were missing, and the `default` below hands back the raw
78
+ // enum code — so an entry tagged `risk_assess` read "risk_assess" in the
79
+ // menu, underscore and all, and `workplace_assess` was the only _assess
80
+ // code that didn't. Anything added to ChangelogProduct needs a case here.
81
+ case 'polling': return 'Polling';
82
+ case 'converter': return 'Converter';
83
+ case 'compress': return 'Compress';
84
+ case 'charts': return 'Charts';
85
+ case 'usb': return 'USB';
86
+ case 'screens': return 'Screens';
87
+ case 'ai': return 'AI';
88
+ case 'haptics': return 'Haptics';
89
+ case 'risk_assess': return 'Risk';
76
90
  case 'cyber_assess': return 'Cyber';
77
91
  case 'ergo_assess': return 'Ergo';
78
92
  case 'workplace_assess': return 'Workplace';
@@ -87,8 +101,8 @@ function productDisplayName(product) {
87
101
  // straight to it. The open-source Universal Apps sit under
88
102
  // opensource.unisim.co.uk/<slug>; the Assess products serve through the
89
103
  // assess.unisim.co.uk router. Codes with no public product page — `suite`
90
- // (suite-wide entries), `central` (the admin hub), `blackbook` (dropped)
91
- // are intentionally absent and render as plain text.
104
+ // (suite-wide entries) and `central` (the admin hub) are intentionally
105
+ // absent and render as plain text.
92
106
  const PRODUCT_URLS = {
93
107
  pdf: 'https://opensource.unisim.co.uk/pdf',
94
108
  qr: 'https://opensource.unisim.co.uk/qr',
@@ -108,33 +122,41 @@ const PRODUCT_URLS = {
108
122
  fire_assess: 'https://assess.unisim.co.uk/fire',
109
123
  coshh_assess: 'https://assess.unisim.co.uk/coshh',
110
124
  risk_assess: 'https://assess.unisim.co.uk/risk',
111
- // `charts` and `ai` are deliberately absent: neither has a public page on the
112
- // portal yet, and a tag linking to a 404 is worse than one that doesn't link.
113
- // `diy`, `beam` and `video` join this list when their Pages projects exist —
114
- // do not add them speculatively.
125
+ // Added 2026-08-24 after checking each one actually resolves `blackbook`
126
+ // was marked "(dropped)" above and has been live since earlier that day, and
127
+ // the other four were held back waiting for their Pages projects, which
128
+ // exist now.
129
+ blackbook: 'https://opensource.unisim.co.uk/blackbook',
130
+ diy: 'https://opensource.unisim.co.uk/diy',
131
+ beam: 'https://opensource.unisim.co.uk/beam',
132
+ video: 'https://opensource.unisim.co.uk/video',
133
+ compress: 'https://opensource.unisim.co.uk/compress',
134
+ // `charts` and `ai` are STILL absent, and were re-checked at the same time:
135
+ // both 404 on the portal today. A tag linking to a 404 is worse than one
136
+ // that doesn't link — curl the URL before adding a code here.
115
137
  };
116
138
  // Renders the product tag shown after each entry ("… — Images"). When the
117
139
  // product has a known public page the name becomes a link to it; suite-wide
118
140
  // and page-less codes stay plain text. stopPropagation keeps a click from
119
141
  // toggling the hover-menu; the link opens in a new tab so the current app
120
142
  // isn't navigated away from.
121
- function ProductTag({ product }) {
143
+ function ProductTag({ product, theme }) {
122
144
  const name = productDisplayName(product);
123
145
  const href = PRODUCT_URLS[product];
124
146
  if (!href)
125
147
  return _jsx(_Fragment, { children: name });
126
- return (_jsx("a", { href: href, target: "_blank", rel: "noreferrer", style: productLinkStyle, onClick: (e) => e.stopPropagation(), children: name }));
148
+ return (_jsx("a", { href: href, target: "_blank", rel: "noreferrer", style: productLinkStyle(theme), onClick: (e) => e.stopPropagation(), children: name }));
127
149
  }
128
- function TypeBadge({ type }) {
129
- const styles = {
130
- added: { bg: '#dcfce7', fg: '#166534', label: 'NEW' },
131
- changed: { bg: '#dbeafe', fg: '#1e40af', label: 'CHG' },
132
- fixed: { bg: '#fef3c7', fg: '#92400e', label: 'FIX' },
133
- removed: { bg: '#fee2e2', fg: '#991b1b', label: 'RM' },
134
- deprecated: { bg: '#e5e7eb', fg: '#4b5563', label: 'DEP' },
135
- security: { bg: '#ede9fe', fg: '#6b21a8', label: 'SEC' },
136
- };
137
- const s = styles[type] ?? styles.changed;
150
+ // The three-letter tag before each entry. Colours live in menuTheme.ts; the
151
+ // LABELS stay here because they are copy, not palette — and they are
152
+ // deliberately not translated (they are read as tags, and three letters is the
153
+ // whole design).
154
+ const TYPE_LABELS = {
155
+ added: 'NEW', changed: 'CHG', fixed: 'FIX', removed: 'RM', deprecated: 'DEP', security: 'SEC',
156
+ };
157
+ function TypeBadge({ type, theme }) {
158
+ const pair = MENU_ENTRY_BADGE[theme][type] ?? MENU_ENTRY_BADGE[theme].changed;
159
+ const label = TYPE_LABELS[type] ?? TYPE_LABELS.changed;
138
160
  return (_jsx("span", { style: {
139
161
  flexShrink: 0,
140
162
  fontSize: 9,
@@ -142,11 +164,11 @@ function TypeBadge({ type }) {
142
164
  letterSpacing: '0.05em',
143
165
  padding: '2px 5px',
144
166
  borderRadius: 4,
145
- background: s.bg,
146
- color: s.fg,
167
+ background: pair.bg,
168
+ color: pair.fg,
147
169
  fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
148
170
  textTransform: 'uppercase',
149
- }, children: s.label }));
171
+ }, children: label }));
150
172
  }
151
173
  function formatDate(iso, language) {
152
174
  // The feed uses ISO 8601; render as e.g. "15 May" / "15 mai" / "15 mag"
@@ -179,81 +201,81 @@ const triggerStyle = {
179
201
  };
180
202
  // Visual styling only — positioning, stacking, the caret and the open/close
181
203
  // transition are owned by <DropdownSurface />.
182
- const menuSurfaceStyle = {
204
+ const menuSurfaceStyle = (theme) => ({
183
205
  width: 380,
184
206
  maxHeight: 'min(70vh, 560px)',
185
- background: '#ffffff',
186
- border: '1px solid #e2e8f0',
207
+ background: MENU[theme].surface,
208
+ border: `1px solid ${MENU[theme].border}`,
187
209
  borderRadius: 16,
188
- boxShadow: '0 16px 32px -8px rgba(15,23,42,0.16), 0 4px 8px -2px rgba(15,23,42,0.08)',
210
+ boxShadow: MENU[theme].shadow,
189
211
  padding: 12,
190
- color: '#0f172a',
212
+ color: MENU[theme].text,
191
213
  display: 'flex',
192
214
  flexDirection: 'column',
193
- };
194
- const headerStyle = {
215
+ });
216
+ const headerStyle = (theme) => ({
195
217
  display: 'flex',
196
218
  alignItems: 'center',
197
219
  justifyContent: 'space-between',
198
220
  padding: '4px 8px 10px',
199
- borderBottom: '1px solid #e2e8f0',
221
+ borderBottom: `1px solid ${MENU[theme].divider}`,
200
222
  marginBottom: 8,
201
- };
202
- const eyebrowStyle = {
223
+ });
224
+ const eyebrowStyle = (theme) => ({
203
225
  fontSize: 11,
204
- color: '#64748b',
226
+ color: MENU[theme].muted,
205
227
  fontWeight: 600,
206
228
  letterSpacing: '0.06em',
207
229
  textTransform: 'uppercase',
208
- };
209
- const titleStyle = {
230
+ });
231
+ const titleStyle = (theme) => ({
210
232
  fontSize: 13,
211
- color: '#334155',
233
+ color: MENU[theme].body,
212
234
  marginTop: 2,
213
- };
214
- const versionChipStyle = {
235
+ });
236
+ const versionChipStyle = (theme) => ({
215
237
  flexShrink: 0,
216
238
  fontSize: 11,
217
239
  fontWeight: 700,
218
240
  fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
219
- background: '#fff7ed',
220
- color: '#c2410c',
221
- border: '1px solid #fed7aa',
241
+ background: MENU[theme].accentBg,
242
+ color: MENU[theme].accentText,
243
+ border: `1px solid ${MENU[theme].accentBorder}`,
222
244
  padding: '2px 7px',
223
245
  borderRadius: 999,
224
- };
246
+ });
225
247
  const bodyStyle = {
226
248
  overflowY: 'auto',
227
249
  flex: 1,
228
250
  paddingRight: 4,
229
251
  };
230
- const emptyStyle = {
252
+ const emptyStyle = (theme) => ({
231
253
  fontSize: 12,
232
- color: '#94a3b8',
254
+ color: MENU[theme].faint,
233
255
  textAlign: 'center',
234
256
  padding: '20px 8px',
235
257
  margin: 0,
236
- };
237
- const releaseStyle = {
258
+ });
259
+ const releaseStyle = (theme) => ({
238
260
  padding: '8px 6px 10px',
239
- borderBottom: '1px dashed #e2e8f0',
240
- };
261
+ borderBottom: `1px dashed ${MENU[theme].divideDashed}`,
262
+ });
241
263
  const releaseHeaderStyle = {
242
264
  display: 'flex',
243
265
  alignItems: 'baseline',
244
266
  justifyContent: 'space-between',
245
267
  marginBottom: 6,
246
268
  };
247
- const releaseVersionStyle = {
269
+ const releaseVersionStyle = (theme) => ({
248
270
  fontSize: 12,
249
271
  fontWeight: 700,
250
- color: '#0f172a',
272
+ color: MENU[theme].text,
251
273
  fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',
252
- };
253
- const releaseDateStyle = {
274
+ });
275
+ const releaseDateStyle = (theme) => ({
254
276
  fontSize: 11,
255
- color: '#94a3b8',
256
- };
277
+ color: MENU[theme].faint,
278
+ });
257
279
  const entryListStyle = {
258
280
  listStyle: 'none',
259
281
  padding: 0,
@@ -267,36 +289,36 @@ const entryItemStyle = {
267
289
  gap: 8,
268
290
  alignItems: 'flex-start',
269
291
  };
270
- const entryTextStyle = {
292
+ const entryTextStyle = (theme) => ({
271
293
  fontSize: 12,
272
- color: '#334155',
294
+ color: MENU[theme].body,
273
295
  lineHeight: 1.4,
274
296
  flex: 1,
275
- };
276
- const productLabelStyle = {
277
- color: '#94a3b8',
297
+ });
298
+ const productLabelStyle = (theme) => ({
299
+ color: MENU[theme].faint,
278
300
  fontWeight: 500,
279
301
  whiteSpace: 'nowrap',
280
- };
302
+ });
281
303
  // When the product tag resolves to a known page it renders as a link in the
282
304
  // brand orange; the muted em-dash before it stays in productLabelStyle's grey.
283
- const productLinkStyle = {
284
- color: '#c2410c',
305
+ const productLinkStyle = (theme) => ({
306
+ color: MENU[theme].accentText,
285
307
  fontWeight: 600,
286
308
  textDecoration: 'none',
287
309
  whiteSpace: 'nowrap',
288
- };
289
- const footerStyle = {
310
+ });
311
+ const footerStyle = (theme) => ({
290
312
  display: 'flex',
291
313
  justifyContent: 'flex-end',
292
314
  paddingTop: 8,
293
315
  marginTop: 6,
294
- borderTop: '1px solid #e2e8f0',
295
- };
296
- const footerLinkStyle = {
316
+ borderTop: `1px solid ${MENU[theme].divider}`,
317
+ });
318
+ const footerLinkStyle = (theme) => ({
297
319
  fontSize: 11,
298
- color: '#c2410c',
320
+ color: MENU[theme].accentText,
299
321
  fontWeight: 600,
300
322
  textDecoration: 'none',
301
- };
323
+ });
302
324
  //# sourceMappingURL=ChangelogMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChangelogMenu.js","sourceRoot":"","sources":["../src/ChangelogMenu.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChangelogMenu.js","sourceRoot":"","sources":["../src/ChangelogMenu.tsx"],"names":[],"mappings":"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"}
@@ -16,8 +16,31 @@ export interface DropdownSurfaceProps {
16
16
  * with the trigger's left, `right` lines the right edges up. The panel is
17
17
  * shifted back on-screen when that would overflow, so this is a preference,
18
18
  * not a hard guarantee.
19
+ *
20
+ * Ignored when `placement` is `'side'` — there the panel's horizontal
21
+ * position IS the placement, and `side` decides it.
19
22
  */
20
23
  align?: 'left' | 'right';
24
+ /**
25
+ * Where the panel sits relative to its anchor.
26
+ *
27
+ * `'below'` (default) is the navbar dropdown every menu in the suite used
28
+ * before 0.107.0: under the trigger, flipping above when there is no room.
29
+ *
30
+ * `'side'` is a submenu flyout — beside the anchor, top-aligned to it,
31
+ * flipping to the other side when short of room. It exists for a panel whose
32
+ * anchor is a ROW INSIDE another panel (the account header opening plan &
33
+ * limits): placing that below its row would drop it straight on top of the
34
+ * menu it came from.
35
+ */
36
+ placement?: 'below' | 'side';
37
+ /**
38
+ * For `placement="side"`: which side to try first. Defaults to `'left'`,
39
+ * because the anchors that want a flyout are rows in the right-hand nav
40
+ * cluster and the room is on their left. The other side is used when the
41
+ * preferred one cannot fit the panel.
42
+ */
43
+ side?: 'left' | 'right';
21
44
  /** Gap between trigger and panel, px. Default 8. */
22
45
  gap?: number;
23
46
  /** Minimum clearance kept from every viewport edge, px. Default 8. */
@@ -45,5 +68,5 @@ export interface DropdownSurfaceProps {
45
68
  onRequestClose?: () => void;
46
69
  children: ReactNode;
47
70
  }
48
- export declare function DropdownSurface({ open, anchorRef, align, gap, margin, arrow, surfaceStyle, role, className, onMouseEnter, onMouseLeave, onRequestClose, children, }: DropdownSurfaceProps): import("react").ReactPortal | null;
71
+ export declare function DropdownSurface({ open, anchorRef, align, placement, side, gap, margin, arrow, surfaceStyle, role, className, onMouseEnter, onMouseLeave, onRequestClose, children, }: DropdownSurfaceProps): import("react").ReactPortal | null;
49
72
  //# sourceMappingURL=DropdownSurface.d.ts.map