@unisim/sdk 0.20.0 → 0.23.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 +107 -107
- package/dist/ChangelogMenu.d.ts.map +1 -1
- package/dist/ChangelogMenu.js +18 -52
- package/dist/ChangelogMenu.js.map +1 -1
- package/dist/CompanyMenu.d.ts.map +1 -1
- package/dist/CompanyMenu.js +14 -37
- package/dist/CompanyMenu.js.map +1 -1
- package/dist/DropdownSurface.d.ts +49 -0
- package/dist/DropdownSurface.d.ts.map +1 -0
- package/dist/DropdownSurface.js +180 -0
- package/dist/DropdownSurface.js.map +1 -0
- package/dist/KnowledgeBaseMenu.d.ts.map +1 -1
- package/dist/KnowledgeBaseMenu.js +16 -39
- package/dist/KnowledgeBaseMenu.js.map +1 -1
- package/dist/SuiteSwitcher.d.ts +12 -0
- package/dist/SuiteSwitcher.d.ts.map +1 -1
- package/dist/SuiteSwitcher.js +32 -55
- package/dist/SuiteSwitcher.js.map +1 -1
- package/dist/UniversalAppsNavBar.d.ts +20 -2
- package/dist/UniversalAppsNavBar.d.ts.map +1 -1
- package/dist/UniversalAppsNavBar.js +18 -2
- package/dist/UniversalAppsNavBar.js.map +1 -1
- package/dist/UserProfile.d.ts.map +1 -1
- package/dist/UserProfile.js +14 -37
- package/dist/UserProfile.js.map +1 -1
- package/dist/admin.d.ts +6 -1
- package/dist/admin.d.ts.map +1 -1
- package/dist/admin.js +7 -3
- package/dist/admin.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +63 -61
package/README.md
CHANGED
|
@@ -1,107 +1,107 @@
|
|
|
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
|
|
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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangelogMenu.d.ts","sourceRoot":"","sources":["../src/ChangelogMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"ChangelogMenu.d.ts","sourceRoot":"","sources":["../src/ChangelogMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,OAAO,CAAA;AAWd,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,2CAkFpB"}
|
package/dist/ChangelogMenu.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useRef,
|
|
3
|
+
import { useState, useRef, } from 'react';
|
|
4
4
|
import { useChangelog } from './changelog.js';
|
|
5
5
|
import { t } from './i18n.js';
|
|
6
6
|
import { useLanguage } from './provider.js';
|
|
7
|
+
import { DropdownSurface } from './DropdownSurface.js';
|
|
7
8
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
8
9
|
// Component
|
|
9
10
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
10
11
|
const DEFAULT_TRIGGER_ICON = 'data:image/svg+xml;utf8,' +
|
|
11
|
-
encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'>
|
|
12
|
-
<rect width='32' height='32' rx='8' fill='#e05504'/>
|
|
13
|
-
<text x='16' y='21' text-anchor='middle' font-family='-apple-system,Segoe UI,Helvetica,Arial,sans-serif' font-weight='800' font-size='13' fill='white' letter-spacing='-0.5'>US</text>
|
|
12
|
+
encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'>
|
|
13
|
+
<rect width='32' height='32' rx='8' fill='#e05504'/>
|
|
14
|
+
<text x='16' y='21' text-anchor='middle' font-family='-apple-system,Segoe UI,Helvetica,Arial,sans-serif' font-weight='800' font-size='13' fill='white' letter-spacing='-0.5'>US</text>
|
|
14
15
|
</svg>`);
|
|
15
16
|
/**
|
|
16
17
|
* Dropdown on the UNI·SIM icon that surfaces the suite-wide changelog
|
|
@@ -39,23 +40,7 @@ export function ChangelogMenu({ iconSrc = DEFAULT_TRIGGER_ICON, limit = 5, produ
|
|
|
39
40
|
clearTimeout(closeTimer.current);
|
|
40
41
|
closeTimer.current = setTimeout(() => setOpen(false), 220);
|
|
41
42
|
}
|
|
42
|
-
|
|
43
|
-
function onDown(e) {
|
|
44
|
-
if (wrapRef.current && !wrapRef.current.contains(e.target))
|
|
45
|
-
setOpen(false);
|
|
46
|
-
}
|
|
47
|
-
function onKey(e) {
|
|
48
|
-
if (e.key === 'Escape')
|
|
49
|
-
setOpen(false);
|
|
50
|
-
}
|
|
51
|
-
document.addEventListener('mousedown', onDown);
|
|
52
|
-
document.addEventListener('keydown', onKey);
|
|
53
|
-
return () => {
|
|
54
|
-
document.removeEventListener('mousedown', onDown);
|
|
55
|
-
document.removeEventListener('keydown', onKey);
|
|
56
|
-
};
|
|
57
|
-
}, []);
|
|
58
|
-
return (_jsxs("div", { ref: wrapRef, className: className, style: { position: 'relative', display: 'inline-block', ...style }, onMouseEnter: openNow, onMouseLeave: closeSoon, children: [_jsx("button", { type: "button", "aria-label": resolvedAriaLabel, "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: openNow, style: triggerStyle(open), children: _jsx("img", { src: iconSrc, alt: "", "aria-hidden": true, style: { width: 28, height: 28, display: 'block' } }) }), _jsxs("div", { role: "menu", style: menuStyle(open), children: [_jsx("span", { style: menuArrowStyle, "aria-hidden": true }), _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"] }) })] })] }));
|
|
43
|
+
return (_jsxs("div", { ref: wrapRef, className: className, style: { position: 'relative', display: 'inline-block', ...style }, onMouseEnter: openNow, onMouseLeave: closeSoon, children: [_jsx("button", { type: "button", "aria-label": resolvedAriaLabel, "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: openNow, style: triggerStyle(open), 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: openNow, onMouseLeave: closeSoon, 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"] }) })] })] }));
|
|
59
44
|
}
|
|
60
45
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
61
46
|
// Subcomponents
|
|
@@ -132,38 +117,19 @@ function triggerStyle(open) {
|
|
|
132
117
|
boxShadow: open ? '0 0 0 4px rgba(224,85,4,0.08)' : 'none',
|
|
133
118
|
};
|
|
134
119
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
width: 380,
|
|
141
|
-
maxHeight: 'min(70vh, 560px)',
|
|
142
|
-
background: '#ffffff',
|
|
143
|
-
border: '1px solid #e2e8f0',
|
|
144
|
-
borderRadius: 16,
|
|
145
|
-
boxShadow: '0 16px 32px -8px rgba(15,23,42,0.16), 0 4px 8px -2px rgba(15,23,42,0.08)',
|
|
146
|
-
padding: 12,
|
|
147
|
-
opacity: open ? 1 : 0,
|
|
148
|
-
visibility: open ? 'visible' : 'hidden',
|
|
149
|
-
transform: open ? 'translateY(0)' : 'translateY(-4px)',
|
|
150
|
-
transition: 'opacity 150ms cubic-bezier(0.16,1,0.3,1), transform 150ms cubic-bezier(0.16,1,0.3,1), visibility 150ms',
|
|
151
|
-
zIndex: 1000,
|
|
152
|
-
color: '#0f172a',
|
|
153
|
-
display: 'flex',
|
|
154
|
-
flexDirection: 'column',
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
const menuArrowStyle = {
|
|
158
|
-
position: 'absolute',
|
|
159
|
-
top: -6,
|
|
160
|
-
right: 14,
|
|
161
|
-
width: 12,
|
|
162
|
-
height: 12,
|
|
120
|
+
// Visual styling only — positioning, stacking, the caret and the open/close
|
|
121
|
+
// transition are owned by <DropdownSurface />.
|
|
122
|
+
const menuSurfaceStyle = {
|
|
123
|
+
width: 380,
|
|
124
|
+
maxHeight: 'min(70vh, 560px)',
|
|
163
125
|
background: '#ffffff',
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
126
|
+
border: '1px solid #e2e8f0',
|
|
127
|
+
borderRadius: 16,
|
|
128
|
+
boxShadow: '0 16px 32px -8px rgba(15,23,42,0.16), 0 4px 8px -2px rgba(15,23,42,0.08)',
|
|
129
|
+
padding: 12,
|
|
130
|
+
color: '#0f172a',
|
|
131
|
+
display: 'flex',
|
|
132
|
+
flexDirection: 'column',
|
|
167
133
|
};
|
|
168
134
|
const headerStyle = {
|
|
169
135
|
display: 'flex',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangelogMenu.js","sourceRoot":"","sources":["../src/ChangelogMenu.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACL,QAAQ,EACR,MAAM,
|
|
1
|
+
{"version":3,"file":"ChangelogMenu.js","sourceRoot":"","sources":["../src/ChangelogMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanyMenu.d.ts","sourceRoot":"","sources":["../src/CompanyMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"CompanyMenu.d.ts","sourceRoot":"","sources":["../src/CompanyMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,OAAO,CAAA;AASd,MAAM,WAAW,gBAAgB;IAC/B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0EAA0E;IAC1E,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,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,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,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;;;;;;;CAOvB,CAAA;AAiFV,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,YAA4C,EAC5C,UAAwC,EACxC,UAAwC,EACxC,YAA4C,EAC5C,WAA0C,EAC1C,SAAsC,EACtC,OAAO,EACP,QAAQ,EACR,SAAiB,EACjB,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,2CAiFlB"}
|
package/dist/CompanyMenu.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
-
import { useState, useRef,
|
|
3
|
+
import { useState, useRef, } from 'react';
|
|
4
4
|
import { t } from './i18n.js';
|
|
5
5
|
import { useLanguage } from './provider.js';
|
|
6
|
+
import { DropdownSurface } from './DropdownSurface.js';
|
|
6
7
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
7
8
|
// Defaults — single source of truth for the suite's "My Company" hub URLs.
|
|
8
9
|
// Updating these here propagates to every product on the next SDK release.
|
|
@@ -65,22 +66,6 @@ export function CompanyMenu({ label, projectsHref = DEFAULT_COMPANY_URLS.project
|
|
|
65
66
|
clearTimeout(closeTimer.current);
|
|
66
67
|
closeTimer.current = setTimeout(() => setOpen(false), 220);
|
|
67
68
|
}
|
|
68
|
-
useEffect(() => {
|
|
69
|
-
function onDown(e) {
|
|
70
|
-
if (wrapRef.current && !wrapRef.current.contains(e.target))
|
|
71
|
-
setOpen(false);
|
|
72
|
-
}
|
|
73
|
-
function onKey(e) {
|
|
74
|
-
if (e.key === 'Escape')
|
|
75
|
-
setOpen(false);
|
|
76
|
-
}
|
|
77
|
-
document.addEventListener('mousedown', onDown);
|
|
78
|
-
document.addEventListener('keydown', onKey);
|
|
79
|
-
return () => {
|
|
80
|
-
document.removeEventListener('mousedown', onDown);
|
|
81
|
-
document.removeEventListener('keydown', onKey);
|
|
82
|
-
};
|
|
83
|
-
}, []);
|
|
84
69
|
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": resolvedLabel, "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: openNow, className: triggerClassName, style: triggerClassName
|
|
85
70
|
? undefined
|
|
86
71
|
: {
|
|
@@ -95,7 +80,7 @@ export function CompanyMenu({ label, projectsHref = DEFAULT_COMPANY_URLS.project
|
|
|
95
80
|
cursor: 'pointer',
|
|
96
81
|
fontFamily: 'inherit',
|
|
97
82
|
...triggerStyle,
|
|
98
|
-
}, children: [resolvedLabel, _jsx(IconChevron, {})] }), _jsxs("
|
|
83
|
+
}, children: [resolvedLabel, _jsx(IconChevron, {})] }), _jsxs(DropdownSurface, { open: open, anchorRef: wrapRef, align: "left", role: "menu", surfaceStyle: menuSurfaceStyle, onMouseEnter: openNow, onMouseLeave: closeSoon, onRequestClose: () => setOpen(false), children: [_jsx(Item, { href: projectsHref, icon: _jsx(IconProjects, {}), label: t(language, 'company.projects') }), _jsx(Item, { href: peopleHref, icon: _jsx(IconPeople, {}), label: t(language, 'company.people') }), _jsx(Item, { href: placesHref, icon: _jsx(IconPlaces, {}), label: t(language, 'company.places') }), _jsx(Item, { href: brandingHref, icon: _jsx(IconBranding, {}), label: t(language, 'company.branding') }), _jsx(Item, { href: billingHref, icon: _jsx(IconBilling, {}), label: t(language, 'company.billing') }), !hideLogin && onLogout && (_jsxs(_Fragment, { children: [_jsx(Divider, {}), _jsx(Item, { onClick: onLogout, icon: _jsx(IconLogout, {}), label: t(language, 'company.sign_out'), danger: true })] }))] })] }));
|
|
99
84
|
}
|
|
100
85
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
101
86
|
// Subcomponents + styles
|
|
@@ -136,23 +121,15 @@ function Item({ href, onClick, icon, label, danger, }) {
|
|
|
136
121
|
function Divider() {
|
|
137
122
|
return _jsx("div", { style: { height: 1, background: '#e5e7eb', margin: '4px 0' }, "aria-hidden": true });
|
|
138
123
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
opacity: open ? 1 : 0,
|
|
151
|
-
visibility: open ? 'visible' : 'hidden',
|
|
152
|
-
transform: open ? 'translateY(0)' : 'translateY(-4px)',
|
|
153
|
-
transition: 'opacity 150ms cubic-bezier(0.16,1,0.3,1), transform 150ms cubic-bezier(0.16,1,0.3,1), visibility 150ms',
|
|
154
|
-
zIndex: 1000,
|
|
155
|
-
color: '#111827',
|
|
156
|
-
};
|
|
157
|
-
}
|
|
124
|
+
// Visual styling only — positioning, stacking and the open/close transition
|
|
125
|
+
// are owned by <DropdownSurface />.
|
|
126
|
+
const menuSurfaceStyle = {
|
|
127
|
+
minWidth: 200,
|
|
128
|
+
background: '#ffffff',
|
|
129
|
+
border: '1px solid #e5e7eb',
|
|
130
|
+
borderRadius: 12,
|
|
131
|
+
boxShadow: '0 16px 32px -8px rgba(15,23,42,0.16), 0 4px 8px -2px rgba(15,23,42,0.08)',
|
|
132
|
+
padding: '6px 0',
|
|
133
|
+
color: '#111827',
|
|
134
|
+
};
|
|
158
135
|
//# sourceMappingURL=CompanyMenu.js.map
|
package/dist/CompanyMenu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CompanyMenu.js","sourceRoot":"","sources":["../src/CompanyMenu.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EACL,QAAQ,EACR,MAAM,
|
|
1
|
+
{"version":3,"file":"CompanyMenu.js","sourceRoot":"","sources":["../src/CompanyMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type CSSProperties, type ReactNode, type RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Stacking layer for portaled nav overlays. Deliberately near the top of the
|
|
4
|
+
* 32-bit range so dropdowns beat host content (including most modal/toast
|
|
5
|
+
* layers) while leaving a little headroom for a host that genuinely must
|
|
6
|
+
* layer something above the navigation.
|
|
7
|
+
*/
|
|
8
|
+
export declare const NAV_OVERLAY_Z_INDEX = 2147483000;
|
|
9
|
+
export interface DropdownSurfaceProps {
|
|
10
|
+
/** Whether the panel is open — drives the enter/exit transition + listeners. */
|
|
11
|
+
open: boolean;
|
|
12
|
+
/** Trigger wrapper the panel is anchored to and measured against. */
|
|
13
|
+
anchorRef: RefObject<HTMLElement | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Preferred horizontal edge alignment: `left` lines the panel's left edge up
|
|
16
|
+
* with the trigger's left, `right` lines the right edges up. The panel is
|
|
17
|
+
* shifted back on-screen when that would overflow, so this is a preference,
|
|
18
|
+
* not a hard guarantee.
|
|
19
|
+
*/
|
|
20
|
+
align?: 'left' | 'right';
|
|
21
|
+
/** Gap between trigger and panel, px. Default 8. */
|
|
22
|
+
gap?: number;
|
|
23
|
+
/** Minimum clearance kept from every viewport edge, px. Default 8. */
|
|
24
|
+
margin?: number;
|
|
25
|
+
/** Render a small caret pointing back at the trigger (matches the old look). */
|
|
26
|
+
arrow?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Visual styles for the surface — background, border, width, padding,
|
|
29
|
+
* maxHeight, etc. Positioning, stacking and the open/close transition are
|
|
30
|
+
* owned by this component and override any of those keys passed here.
|
|
31
|
+
*/
|
|
32
|
+
surfaceStyle?: CSSProperties;
|
|
33
|
+
/** Forwarded to the panel element (`menu`, `listbox`, …). */
|
|
34
|
+
role?: string;
|
|
35
|
+
className?: string;
|
|
36
|
+
/** Hover bridge: re-opens when the pointer enters the portaled panel. */
|
|
37
|
+
onMouseEnter?: () => void;
|
|
38
|
+
/** Hover bridge: schedules a close when the pointer leaves the panel. */
|
|
39
|
+
onMouseLeave?: () => void;
|
|
40
|
+
/**
|
|
41
|
+
* Called on an outside click (anywhere but the trigger or the panel) or when
|
|
42
|
+
* Escape is pressed. Centralised here so each menu no longer wires its own
|
|
43
|
+
* document listeners.
|
|
44
|
+
*/
|
|
45
|
+
onRequestClose?: () => void;
|
|
46
|
+
children: ReactNode;
|
|
47
|
+
}
|
|
48
|
+
export declare function DropdownSurface({ open, anchorRef, align, gap, margin, arrow, surfaceStyle, role, className, onMouseEnter, onMouseLeave, onRequestClose, children, }: DropdownSurfaceProps): import("react").ReactPortal | null;
|
|
49
|
+
//# sourceMappingURL=DropdownSurface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownSurface.d.ts","sourceRoot":"","sources":["../src/DropdownSurface.tsx"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AA2Bd;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,aAAgB,CAAA;AAEhD,MAAM,WAAW,oBAAoB;IACnC,gFAAgF;IAChF,IAAI,EAAE,OAAO,CAAA;IACb,qEAAqE;IACrE,SAAS,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;IACxC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACxB,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,aAAa,CAAA;IAC5B,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAwBD,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,SAAS,EACT,KAAc,EACd,GAAO,EACP,MAAU,EACV,KAAa,EACb,YAAY,EACZ,IAAa,EACb,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,QAAQ,GACT,EAAE,oBAAoB,sCAsItB"}
|