@unisim/sdk 0.1.4 → 0.2.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 (64) hide show
  1. package/README.md +107 -101
  2. package/dist/CompanyMenu.d.ts +42 -0
  3. package/dist/CompanyMenu.d.ts.map +1 -0
  4. package/dist/CompanyMenu.js +148 -0
  5. package/dist/CompanyMenu.js.map +1 -0
  6. package/dist/SuiteSwitcher.d.ts +49 -0
  7. package/dist/SuiteSwitcher.d.ts.map +1 -0
  8. package/dist/SuiteSwitcher.js +232 -0
  9. package/dist/SuiteSwitcher.js.map +1 -0
  10. package/dist/TrialUi.d.ts +16 -0
  11. package/dist/TrialUi.d.ts.map +1 -0
  12. package/dist/TrialUi.js +66 -0
  13. package/dist/TrialUi.js.map +1 -0
  14. package/dist/UniversalBar.d.ts.map +1 -1
  15. package/dist/UniversalBar.js +1 -0
  16. package/dist/UniversalBar.js.map +1 -1
  17. package/dist/access.d.ts.map +1 -1
  18. package/dist/access.js +1 -0
  19. package/dist/access.js.map +1 -1
  20. package/dist/admin.d.ts.map +1 -1
  21. package/dist/admin.js +1 -0
  22. package/dist/admin.js.map +1 -1
  23. package/dist/auth.d.ts.map +1 -1
  24. package/dist/auth.js +1 -0
  25. package/dist/auth.js.map +1 -1
  26. package/dist/branding.d.ts.map +1 -1
  27. package/dist/branding.js +1 -0
  28. package/dist/branding.js.map +1 -1
  29. package/dist/changelog.d.ts.map +1 -1
  30. package/dist/changelog.js +1 -0
  31. package/dist/changelog.js.map +1 -1
  32. package/dist/index.d.ts +17 -1
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +8 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/people.d.ts +45 -0
  37. package/dist/people.d.ts.map +1 -0
  38. package/dist/people.js +190 -0
  39. package/dist/people.js.map +1 -0
  40. package/dist/places.d.ts +23 -0
  41. package/dist/places.d.ts.map +1 -0
  42. package/dist/places.js +66 -0
  43. package/dist/places.js.map +1 -0
  44. package/dist/projects.d.ts +32 -0
  45. package/dist/projects.d.ts.map +1 -0
  46. package/dist/projects.js +71 -0
  47. package/dist/projects.js.map +1 -0
  48. package/dist/provider.d.ts.map +1 -1
  49. package/dist/provider.js +1 -0
  50. package/dist/provider.js.map +1 -1
  51. package/dist/subscription.d.ts +25 -0
  52. package/dist/subscription.d.ts.map +1 -0
  53. package/dist/subscription.js +62 -0
  54. package/dist/subscription.js.map +1 -0
  55. package/dist/trial.d.ts +29 -0
  56. package/dist/trial.d.ts.map +1 -0
  57. package/dist/trial.js +29 -0
  58. package/dist/trial.js.map +1 -0
  59. package/dist/types.d.ts +54 -1
  60. package/dist/types.d.ts.map +1 -1
  61. package/dist/usage.d.ts.map +1 -1
  62. package/dist/usage.js +1 -0
  63. package/dist/usage.js.map +1 -1
  64. package/package.json +61 -48
package/README.md CHANGED
@@ -1,101 +1,107 @@
1
- # @unisim/sdk
2
-
3
- The shared React SDK for the Universal Suite. Every product (Universal PDF, Webinar, Exports, Cyber Assess, Ergo Assess) imports this package.
4
-
5
- **No product should import `@supabase/supabase-js` directly** — go through the SDK so the underlying backend stays swappable.
6
-
7
- ## Install
8
-
9
- ```bash
10
- npm install @unisim/sdk
11
- ```
12
-
13
- ## Setup
14
-
15
- Wrap your app in `<UniversalProvider>`:
16
-
17
- ```tsx
18
- import { UniversalProvider } from '@unisim/sdk'
19
-
20
- const config = {
21
- supabaseUrl: import.meta.env.VITE_SUPABASE_URL!,
22
- supabaseAnonKey: import.meta.env.VITE_SUPABASE_ANON_KEY!,
23
- product: 'pdf', // or 'webinar' | 'exports' | 'cyber_assess' | 'ergo_assess'
24
- cookieDomain: import.meta.env.PROD ? '.unisim.co.uk' : undefined,
25
- }
26
-
27
- createRoot(document.getElementById('root')!).render(
28
- <UniversalProvider config={config}>
29
- <App />
30
- </UniversalProvider>,
31
- )
32
- ```
33
-
34
- In production, the `cookieDomain` of `.unisim.co.uk` makes the auth session shared across every product subdomain (no SSO/OAuth dance needed).
35
-
36
- ## Hooks
37
-
38
- ### Identity
39
-
40
- ```ts
41
- import { useUser, useOrg } from '@unisim/sdk'
42
-
43
- const { user, loading } = useUser()
44
- const { org, orgs, setActiveOrg } = useOrg()
45
- ```
46
-
47
- ### Entitlements
48
-
49
- ```ts
50
- import { useHasAccess, useHasFeature, useSeat } from '@unisim/sdk'
51
-
52
- if (!useHasAccess('webinar')) return <UpsellPaywall />
53
- if (useHasFeature('webinar.anonymous_attendees')) showAnonToggle()
54
-
55
- const { active: hasSeat } = useSeat() // Enterprise seat check
56
- if (!hasSeat) return <NoSeatAssigned />
57
- ```
58
-
59
- ### Changelog
60
-
61
- ```ts
62
- import { useChangelog } from '@unisim/sdk'
63
-
64
- const { releases, currentVersion } = useChangelog({ limit: 5 })
65
- ```
66
-
67
- ### Branding
68
-
69
- ```ts
70
- import { useOrgBranding } from '@unisim/sdk'
71
-
72
- const { logo_url, brand_color } = useOrgBranding()
73
- ```
74
-
75
- ### Usage telemetry
76
-
77
- ```ts
78
- import { track, useUsageTracker } from '@unisim/sdk'
79
-
80
- // Mount the tracker once near the app root:
81
- useUsageTracker()
82
-
83
- // Then call track() from anywhere:
84
- track('pdf.document.opened', { pages: 12 })
85
- ```
86
-
87
- ### Org admin
88
-
89
- ```ts
90
- import {
91
- useOrgMembers, useOrgSeats, useAuditLog,
92
- assignSeat, revokeSeat, reassignSeat,
93
- } from '@unisim/sdk'
94
-
95
- const { pool, seats } = useOrgSeats() // { total, assigned, available }
96
- const result = await assignSeat(supabase, { orgId, userId, assignedByUserId })
97
- ```
98
-
99
- ## Versioning
100
-
101
- The SDK follows the suite's CalVer (`YYYY.MM.N`). Every product upgrades together when there's a coordinated release, so keep deps pinned per product but update them in a single sweep.
1
+ # @unisim/sdk
2
+
3
+ Shared React SDK for the **Universal Suite** — Ergo Assess UK, Cyber Assess UK, Workplace Assess, plus the central hub at `app.unisim.co.uk`. One package for auth, multi-tenant org data, branding, entitlements, changelog, and trial gating, so every product reads the same source of truth.
4
+
5
+ **No product should import `@supabase/supabase-js` directly** — go through the SDK so the underlying backend stays swappable.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install @unisim/sdk @supabase/supabase-js react
11
+ ```
12
+
13
+ React 18+ is a peer dependency.
14
+
15
+ ## Quick start
16
+
17
+ Wrap your app in `<UniversalProvider>` once, then call hooks anywhere.
18
+
19
+ ```tsx
20
+ import { UniversalProvider, useUser, useOrgBranding } from '@unisim/sdk'
21
+
22
+ const config = {
23
+ supabaseUrl: process.env.NEXT_PUBLIC_PLATFORM_SUPABASE_URL!,
24
+ supabaseAnonKey: process.env.NEXT_PUBLIC_PLATFORM_SUPABASE_ANON_KEY!,
25
+ product: 'ergo_assess',
26
+ cookieDomain: process.env.NODE_ENV === 'production' ? '.unisim.co.uk' : undefined,
27
+ }
28
+
29
+ function App() {
30
+ return (
31
+ <UniversalProvider config={config}>
32
+ <Header />
33
+ {/* … */}
34
+ </UniversalProvider>
35
+ )
36
+ }
37
+
38
+ function Header() {
39
+ const { user } = useUser()
40
+ const branding = useOrgBranding()
41
+ return (
42
+ <header>
43
+ {branding.logo_url && <img src={branding.logo_url} alt="" />}
44
+ <span>{user?.email ?? 'Guest'}</span>
45
+ </header>
46
+ )
47
+ }
48
+ ```
49
+
50
+ ## What you get
51
+
52
+ ### Auth + session
53
+ - `useUniversal()` — raw `{ supabase, session, activeOrgId, … }`
54
+ - `useUser()` — `{ user, loading }`
55
+ - `useOrg()` active org + list of orgs the user belongs to
56
+ - `signInWithPassword(supabase, email, password)`
57
+ - `signOut(supabase)`
58
+
59
+ ### Trial mode (anonymous-auth users)
60
+ - `useTrialMode()` — `{ isTrial, hasSession, email }` for gating exports / multi-user
61
+ - `<TrialBadge />` — small "PRO" chip you append to gated buttons
62
+ - `<UpgradeWall feature="export PDFs" />` — full feature-replacement card
63
+
64
+ ### Suite-wide entities (all org-scoped, RLS-gated)
65
+ - `usePeople()` + `createPerson` / `deletePerson`
66
+ - `useTeams()` + `useTeamMemberships()` + `createTeam` / `assignPersonToTeam` / …
67
+ - `usePlaces()` + `createPlace` / `deletePlace`
68
+ - `useProjects()` + `createProject` / `updateProjectStatus` / `deleteProject`
69
+ - `useOrgBranding()` — logo URL + brand colour
70
+ - `useOrgMembers()` org membership list with profile data
71
+
72
+ ### Subscriptions + entitlements
73
+ - `useSubscription()` — `{ tier, status, seat_count, current_period_end, credits }`
74
+ - `useCredits()` — convenience wrapper for the metered balance
75
+ - `useHasAccess(productCode)` — feature/product entitlement check
76
+ - `useHasFeature(productCode, feature)`
77
+ - `useSeat(productCode)`
78
+
79
+ ### Org admin
80
+ - `useOrgMembers()` / `useOrgSeats()` / `useAuditLog()`
81
+ - `assignSeat` / `revokeSeat` / `reassignSeat`
82
+
83
+ ### Suite navigation
84
+ - `<SuiteSwitcher current="ergo_assess" />` — top-right product switcher with the canonical product list
85
+ - `<CompanyMenu />` — "My Company" dropdown linking to the central hub
86
+ - `<UniversalBar />` — the 4 px gradient brand strip across every product header
87
+ - `<UKFlag />` — region indicator for UK products
88
+
89
+ ### Changelog
90
+ - `useChangelog()` — fetches the suite-wide changelog feed (defaults to `https://changelog.unisim.co.uk/changelog.json`)
91
+
92
+ ## Multi-tenant model
93
+
94
+ This SDK is the client side of a Supabase-backed multi-tenant schema (see `universal-platform/supabase/migrations`). Every read/write is scoped to the user's active org via the `is_org_member()` helper in RLS policies. Anonymous-auth users get the same hooks; trial caps (3 people / 1 team / 2 places / 1 project) are enforced server-side by the `enforce_anonymous_trial_caps()` trigger.
95
+
96
+ ## Publishing
97
+
98
+ ```bash
99
+ cd packages/sdk
100
+ ./publish.sh patch # or minor / major
101
+ ```
102
+
103
+ This runs `npm version`, builds, publishes, commits the version bump, and pushes — see `publish.sh` for the exact sequence. `prepublishOnly` runs `typecheck && build` as a safety net, and the `dist/` folder is the only thing shipped (per `files`).
104
+
105
+ ## License
106
+
107
+ MIT © Universal Simulation Ltd
@@ -0,0 +1,42 @@
1
+ import { type CSSProperties, type MouseEvent } from 'react';
2
+ export interface CompanyMenuProps {
3
+ /** Trigger label. Defaults to "My Company". */
4
+ label?: string;
5
+ /** URL for the "Projects" item. */
6
+ projectsHref?: string;
7
+ /** URL for the "People" item. */
8
+ peopleHref?: string;
9
+ /** URL for the "Places" item. */
10
+ placesHref?: string;
11
+ /** URL for the "Branding" item. */
12
+ brandingHref?: string;
13
+ /** URL for the "Log in" item — defaults to the Universal ID hub. */
14
+ loginHref?: string;
15
+ /**
16
+ * If provided, the Log in item becomes a button calling this instead of
17
+ * navigating. Useful when a product wants to handle auth inline (e.g.
18
+ * modal-based login) while still defaulting to the hub URL otherwise.
19
+ */
20
+ onLogin?: (e: MouseEvent<HTMLButtonElement>) => void;
21
+ /**
22
+ * When set, the Log in item is replaced by a "Sign out" item that calls
23
+ * this handler. Use this for authenticated users so the same menu does
24
+ * double duty across guest and signed-in states.
25
+ */
26
+ onLogout?: (e: MouseEvent<HTMLButtonElement>) => void;
27
+ /** Hide the Log in / Sign out item entirely. */
28
+ hideLogin?: boolean;
29
+ /** Trigger className — typically Tailwind classes from the host nav. */
30
+ triggerClassName?: string;
31
+ style?: CSSProperties;
32
+ className?: string;
33
+ }
34
+ export declare const DEFAULT_COMPANY_URLS: {
35
+ readonly projects: "https://app.unisim.co.uk/projects";
36
+ readonly people: "https://app.unisim.co.uk/people";
37
+ readonly places: "https://app.unisim.co.uk/places";
38
+ readonly branding: "https://app.unisim.co.uk/branding";
39
+ readonly login: "https://app.unisim.co.uk/login";
40
+ };
41
+ export declare function CompanyMenu({ label, projectsHref, peopleHref, placesHref, brandingHref, loginHref, onLogin, onLogout, hideLogin, triggerClassName, style, className, }: CompanyMenuProps): import("react/jsx-runtime").JSX.Element;
42
+ //# sourceMappingURL=CompanyMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompanyMenu.d.ts","sourceRoot":"","sources":["../src/CompanyMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,OAAO,CAAA;AAMd,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,oEAAoE;IACpE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACpD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACrD,gDAAgD;IAChD,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AASD,eAAO,MAAM,oBAAoB;;;;;;CAMvB,CAAA;AAwEV,wBAAgB,WAAW,CAAC,EAC1B,KAAoB,EACpB,YAA4C,EAC5C,UAAwC,EACxC,UAAwC,EACxC,YAA4C,EAC5C,SAAsC,EACtC,OAAO,EACP,QAAQ,EACR,SAAiB,EACjB,gBAAgB,EAChB,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,2CAyFlB"}
@@ -0,0 +1,148 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useState, useRef, useEffect, } from 'react';
4
+ // ──────────────────────────────────────────────────────────────────────────────
5
+ // Defaults — single source of truth for the suite's "My Company" hub URLs.
6
+ // Updating these here propagates to every product on the next SDK release.
7
+ // ──────────────────────────────────────────────────────────────────────────────
8
+ const UNIVERSAL_ID_BASE = 'https://app.unisim.co.uk';
9
+ export const DEFAULT_COMPANY_URLS = {
10
+ projects: `${UNIVERSAL_ID_BASE}/projects`,
11
+ people: `${UNIVERSAL_ID_BASE}/people`,
12
+ places: `${UNIVERSAL_ID_BASE}/places`,
13
+ branding: `${UNIVERSAL_ID_BASE}/branding`,
14
+ login: `${UNIVERSAL_ID_BASE}/login`,
15
+ };
16
+ // ──────────────────────────────────────────────────────────────────────────────
17
+ // Icons (small, inline, no asset deps)
18
+ // ──────────────────────────────────────────────────────────────────────────────
19
+ function IconProjects() {
20
+ return (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: _jsx("path", { d: "M22 19a2 2 0 01-2 2H4a2 2 0 01-2-2V5a2 2 0 012-2h5l2 3h9a2 2 0 012 2z" }) }));
21
+ }
22
+ function IconPeople() {
23
+ return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [_jsx("path", { d: "M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2" }), _jsx("circle", { cx: "12", cy: "7", r: "4" })] }));
24
+ }
25
+ function IconPlaces() {
26
+ return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [_jsx("path", { d: "M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z" }), _jsx("circle", { cx: "12", cy: "10", r: "3" })] }));
27
+ }
28
+ function IconBranding() {
29
+ // Palette — three paint swatches arc around a base shape. Reads as
30
+ // "colour/visual identity" without needing text.
31
+ return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [_jsx("circle", { cx: "13.5", cy: "6.5", r: "0.5", fill: "currentColor" }), _jsx("circle", { cx: "17.5", cy: "10.5", r: "0.5", fill: "currentColor" }), _jsx("circle", { cx: "8.5", cy: "7.5", r: "0.5", fill: "currentColor" }), _jsx("circle", { cx: "6.5", cy: "12.5", r: "0.5", fill: "currentColor" }), _jsx("path", { d: "M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.554C21.965 6.012 17.461 2 12 2z" })] }));
32
+ }
33
+ function IconLogin() {
34
+ return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [_jsx("path", { d: "M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4" }), _jsx("polyline", { points: "10 17 15 12 10 7" }), _jsx("line", { x1: "15", y1: "12", x2: "3", y2: "12" })] }));
35
+ }
36
+ function IconLogout() {
37
+ return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [_jsx("path", { d: "M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4" }), _jsx("polyline", { points: "16 17 21 12 16 7" }), _jsx("line", { x1: "21", y1: "12", x2: "9", y2: "12" })] }));
38
+ }
39
+ function IconChevron() {
40
+ return (_jsx("svg", { width: "10", height: "10", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.5", strokeLinecap: "round", style: { marginTop: 1 }, "aria-hidden": true, children: _jsx("path", { d: "M6 9l6 6 6-6" }) }));
41
+ }
42
+ // ──────────────────────────────────────────────────────────────────────────────
43
+ // Component
44
+ // ──────────────────────────────────────────────────────────────────────────────
45
+ export function CompanyMenu({ label = 'My Company', projectsHref = DEFAULT_COMPANY_URLS.projects, peopleHref = DEFAULT_COMPANY_URLS.people, placesHref = DEFAULT_COMPANY_URLS.places, brandingHref = DEFAULT_COMPANY_URLS.branding, loginHref = DEFAULT_COMPANY_URLS.login, onLogin, onLogout, hideLogin = false, triggerClassName, style, className, }) {
46
+ const [open, setOpen] = useState(false);
47
+ const wrapRef = useRef(null);
48
+ const closeTimer = useRef(null);
49
+ function openNow() {
50
+ if (closeTimer.current)
51
+ clearTimeout(closeTimer.current);
52
+ setOpen(true);
53
+ }
54
+ function closeSoon() {
55
+ if (closeTimer.current)
56
+ clearTimeout(closeTimer.current);
57
+ closeTimer.current = setTimeout(() => setOpen(false), 220);
58
+ }
59
+ useEffect(() => {
60
+ function onDown(e) {
61
+ if (wrapRef.current && !wrapRef.current.contains(e.target))
62
+ setOpen(false);
63
+ }
64
+ function onKey(e) {
65
+ if (e.key === 'Escape')
66
+ setOpen(false);
67
+ }
68
+ document.addEventListener('mousedown', onDown);
69
+ document.addEventListener('keydown', onKey);
70
+ return () => {
71
+ document.removeEventListener('mousedown', onDown);
72
+ document.removeEventListener('keydown', onKey);
73
+ };
74
+ }, []);
75
+ return (_jsxs("div", { ref: wrapRef, className: className, style: { position: 'relative', display: 'inline-block', ...style }, onMouseEnter: openNow, onMouseLeave: closeSoon, children: [_jsxs("button", { type: "button", "aria-label": label, "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: openNow, className: triggerClassName, style: triggerClassName
76
+ ? undefined
77
+ : {
78
+ display: 'inline-flex',
79
+ alignItems: 'center',
80
+ gap: 4,
81
+ fontSize: 14,
82
+ color: 'inherit',
83
+ background: 'transparent',
84
+ border: 0,
85
+ padding: 0,
86
+ cursor: 'pointer',
87
+ fontFamily: 'inherit',
88
+ }, children: [label, _jsx(IconChevron, {})] }), _jsxs("div", { role: "menu", style: menuStyle(open), children: [_jsx(Item, { href: projectsHref, icon: _jsx(IconProjects, {}), label: "Projects" }), _jsx(Item, { href: peopleHref, icon: _jsx(IconPeople, {}), label: "People" }), _jsx(Item, { href: placesHref, icon: _jsx(IconPlaces, {}), label: "Places" }), _jsx(Item, { href: brandingHref, icon: _jsx(IconBranding, {}), label: "Branding" }), !hideLogin && (_jsxs(_Fragment, { children: [_jsx(Divider, {}), onLogout ? (_jsx(Item, { onClick: onLogout, icon: _jsx(IconLogout, {}), label: "Sign out", danger: true })) : (_jsx(Item, { href: onLogin ? undefined : loginHref, onClick: onLogin, icon: _jsx(IconLogin, {}), label: "Log in" }))] }))] })] }));
89
+ }
90
+ // ──────────────────────────────────────────────────────────────────────────────
91
+ // Subcomponents + styles
92
+ // ──────────────────────────────────────────────────────────────────────────────
93
+ function Item({ href, onClick, icon, label, danger, }) {
94
+ const restingColor = danger ? '#dc2626' : '#374151';
95
+ const hoverColor = danger ? '#b91c1c' : '#111827';
96
+ const hoverBg = danger ? '#fef2f2' : '#f3f4f6';
97
+ const baseStyle = {
98
+ display: 'flex',
99
+ alignItems: 'center',
100
+ gap: 10,
101
+ padding: '10px 14px',
102
+ fontSize: 14,
103
+ color: restingColor,
104
+ background: 'transparent',
105
+ border: 0,
106
+ cursor: 'pointer',
107
+ width: '100%',
108
+ textAlign: 'left',
109
+ textDecoration: 'none',
110
+ fontFamily: 'inherit',
111
+ transition: 'background 120ms, color 120ms',
112
+ };
113
+ const onEnter = (e) => {
114
+ e.currentTarget.style.background = hoverBg;
115
+ e.currentTarget.style.color = hoverColor;
116
+ };
117
+ const onLeave = (e) => {
118
+ e.currentTarget.style.background = 'transparent';
119
+ e.currentTarget.style.color = restingColor;
120
+ };
121
+ if (onClick) {
122
+ return (_jsxs("button", { type: "button", role: "menuitem", onClick: onClick, onMouseEnter: onEnter, onMouseLeave: onLeave, style: baseStyle, children: [icon, label] }));
123
+ }
124
+ return (_jsxs("a", { role: "menuitem", href: href, onMouseEnter: onEnter, onMouseLeave: onLeave, style: baseStyle, children: [icon, label] }));
125
+ }
126
+ function Divider() {
127
+ return _jsx("div", { style: { height: 1, background: '#e5e7eb', margin: '4px 0' }, "aria-hidden": true });
128
+ }
129
+ function menuStyle(open) {
130
+ return {
131
+ position: 'absolute',
132
+ left: 0,
133
+ top: 'calc(100% + 8px)',
134
+ minWidth: 200,
135
+ background: '#ffffff',
136
+ border: '1px solid #e5e7eb',
137
+ borderRadius: 12,
138
+ boxShadow: '0 16px 32px -8px rgba(15,23,42,0.16), 0 4px 8px -2px rgba(15,23,42,0.08)',
139
+ padding: '6px 0',
140
+ opacity: open ? 1 : 0,
141
+ visibility: open ? 'visible' : 'hidden',
142
+ transform: open ? 'translateY(0)' : 'translateY(-4px)',
143
+ transition: 'opacity 150ms cubic-bezier(0.16,1,0.3,1), transform 150ms cubic-bezier(0.16,1,0.3,1), visibility 150ms',
144
+ zIndex: 50,
145
+ color: '#111827',
146
+ };
147
+ }
148
+ //# sourceMappingURL=CompanyMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompanyMenu.js","sourceRoot":"","sources":["../src/CompanyMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { type ReactNode, type CSSProperties } from 'react';
2
+ export type SuiteProductId = 'ergo_assess' | 'cyber_assess' | 'workplace_assess' | (string & {});
3
+ export interface SuiteProduct {
4
+ id: SuiteProductId;
5
+ name: string;
6
+ /** Short tagline shown under the name. */
7
+ desc: string;
8
+ /** Where the menu item links to. The "current" product never navigates. */
9
+ href: string;
10
+ /** 22×22 inline SVG (or similar) shown in the coloured glyph tile. */
11
+ glyph: ReactNode;
12
+ /**
13
+ * Optional small flag/icon shown next to the product name in the menu.
14
+ * Used for region indicators — e.g. UK-only products show <UKFlag />.
15
+ */
16
+ flag?: ReactNode;
17
+ }
18
+ export interface SuiteSwitcherProps {
19
+ /** Which product is currently being viewed — gets the "You're here" badge. */
20
+ current: SuiteProductId;
21
+ /**
22
+ * Override the full product list (e.g. to add a new Assess product without
23
+ * waiting for an SDK release). Defaults to the canonical Assess suite.
24
+ */
25
+ products?: SuiteProduct[];
26
+ /**
27
+ * Override the trigger icon. Pass a URL or data-URI. Defaults to an inline
28
+ * UNI·SIM monogram SVG, so the component works with zero asset wiring.
29
+ */
30
+ iconSrc?: string;
31
+ /** Trigger button aria-label. Defaults to "Switch product". */
32
+ ariaLabel?: string;
33
+ /**
34
+ * Slot for a small chip rendered in the dropdown header — typically the
35
+ * product's <VersionChip />. Lets each product surface its current suite
36
+ * version inside the switcher rather than alongside it in the navbar.
37
+ */
38
+ chip?: ReactNode;
39
+ /** Apply to the outermost wrapper if you need to nudge positioning. */
40
+ style?: CSSProperties;
41
+ className?: string;
42
+ }
43
+ export declare function UKFlag({ width, height }: {
44
+ width?: number;
45
+ height?: number;
46
+ }): import("react/jsx-runtime").JSX.Element;
47
+ export declare const DEFAULT_SUITE_PRODUCTS: SuiteProduct[];
48
+ export declare function SuiteSwitcher({ current, products, iconSrc, ariaLabel, chip, style, className, }: SuiteSwitcherProps): import("react/jsx-runtime").JSX.Element;
49
+ //# sourceMappingURL=SuiteSwitcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuiteSwitcher.d.ts","sourceRoot":"","sources":["../src/SuiteSwitcher.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,OAAO,CAAA;AAMd,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,cAAc,GACd,kBAAkB,GAClB,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAEjB,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,cAAc,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,KAAK,EAAE,SAAS,CAAA;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,OAAO,EAAE,cAAc,CAAA;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,uEAAuE;IACvE,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAeD,wBAAgB,MAAM,CAAC,EAAE,KAAU,EAAE,MAAW,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,2CAoBtF;AAiDD,eAAO,MAAM,sBAAsB,EAAE,YAAY,EAyBhD,CAAA;AAgBD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,QAAiC,EACjC,OAA8B,EAC9B,SAA4B,EAC5B,IAAI,EACJ,KAAK,EACL,SAAS,GACV,EAAE,kBAAkB,2CAwIpB"}