@unisim/sdk 0.2.0 → 0.3.1

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.
@@ -0,0 +1,28 @@
1
+ import { type CSSProperties } from 'react';
2
+ export interface KnowledgeBaseItem {
3
+ id: string;
4
+ /** Short identifier shown as a coloured chip, e.g. "REBA" or "FW". */
5
+ name: string;
6
+ /** Full descriptive name shown alongside the chip. */
7
+ fullName?: string;
8
+ /** Where the item links to (relative to the current product's basePath). */
9
+ href: string;
10
+ /** Optional Tailwind-style colour name for the chip (blue, indigo, teal, …). */
11
+ color?: string;
12
+ }
13
+ export interface KnowledgeBaseMenuProps {
14
+ /** Items in the "Product Knowledge" section. Empty array shows an empty state. */
15
+ productItems?: KnowledgeBaseItem[];
16
+ /** "View all" link for the product KB landing page. */
17
+ productKBHref?: string;
18
+ /** Label for the product knowledge section header. Defaults to "Product Knowledge". */
19
+ productLabel?: string;
20
+ /** Items in the "Company Knowledge" section. Empty / undefined shows "Coming soon" state. */
21
+ companyItems?: KnowledgeBaseItem[];
22
+ /** Trigger className — typically Tailwind classes from the host nav. */
23
+ triggerClassName?: string;
24
+ style?: CSSProperties;
25
+ className?: string;
26
+ }
27
+ export declare function KnowledgeBaseMenu({ productItems, productKBHref, productLabel, companyItems, triggerClassName, style, className, }: KnowledgeBaseMenuProps): import("react/jsx-runtime").JSX.Element;
28
+ //# sourceMappingURL=KnowledgeBaseMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeBaseMenu.d.ts","sourceRoot":"","sources":["../src/KnowledgeBaseMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAA;AAMd,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAS,MAAM,CAAA;IACjB,sEAAsE;IACtE,IAAI,EAAO,MAAM,CAAA;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,IAAI,EAAO,MAAM,CAAA;IACjB,gFAAgF;IAChF,KAAK,CAAC,EAAK,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,kFAAkF;IAClF,YAAY,CAAC,EAAK,iBAAiB,EAAE,CAAA;IACrC,uDAAuD;IACvD,aAAa,CAAC,EAAI,MAAM,CAAA;IACxB,uFAAuF;IACvF,YAAY,CAAC,EAAK,MAAM,CAAA;IACxB,6FAA6F;IAC7F,YAAY,CAAC,EAAK,iBAAiB,EAAE,CAAA;IACrC,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAY,aAAa,CAAA;IAC/B,SAAS,CAAC,EAAQ,MAAM,CAAA;CACzB;AA2BD,wBAAgB,iBAAiB,CAAC,EAChC,YAAY,EACZ,aAAa,EACb,YAAqC,EACrC,YAAY,EACZ,gBAAgB,EAChB,KAAK,EACL,SAAS,GACV,EAAE,sBAAsB,2CAqFxB"}
@@ -0,0 +1,160 @@
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
+ // Chip colour map — mirrors the per-method colouring used in Ergo's KB.
6
+ // Resolved as flat hex so the component has no Tailwind dependency.
7
+ // ──────────────────────────────────────────────────────────────────────────────
8
+ const COLOUR_HEX = {
9
+ blue: '#2563eb',
10
+ indigo: '#4f46e5',
11
+ teal: '#0d9488',
12
+ orange: '#c2410c',
13
+ yellow: '#ca8a04',
14
+ cyan: '#0891b2',
15
+ pink: '#db2777',
16
+ violet: '#7c3aed',
17
+ red: '#dc2626',
18
+ amber: '#d97706',
19
+ green: '#16a34a',
20
+ rose: '#e11d48',
21
+ slate: '#475569',
22
+ };
23
+ // ──────────────────────────────────────────────────────────────────────────────
24
+ // Component
25
+ // ──────────────────────────────────────────────────────────────────────────────
26
+ export function KnowledgeBaseMenu({ productItems, productKBHref, productLabel = 'Product Knowledge', companyItems, triggerClassName, style, className, }) {
27
+ const [open, setOpen] = useState(false);
28
+ const wrapRef = useRef(null);
29
+ const closeTimer = useRef(null);
30
+ function openNow() {
31
+ if (closeTimer.current)
32
+ clearTimeout(closeTimer.current);
33
+ setOpen(true);
34
+ }
35
+ function closeSoon() {
36
+ if (closeTimer.current)
37
+ clearTimeout(closeTimer.current);
38
+ closeTimer.current = setTimeout(() => setOpen(false), 220);
39
+ }
40
+ useEffect(() => {
41
+ function onDown(e) {
42
+ if (wrapRef.current && !wrapRef.current.contains(e.target))
43
+ setOpen(false);
44
+ }
45
+ function onKey(e) {
46
+ if (e.key === 'Escape')
47
+ setOpen(false);
48
+ }
49
+ document.addEventListener('mousedown', onDown);
50
+ document.addEventListener('keydown', onKey);
51
+ return () => {
52
+ document.removeEventListener('mousedown', onDown);
53
+ document.removeEventListener('keydown', onKey);
54
+ };
55
+ }, []);
56
+ const hasProductItems = productItems && productItems.length > 0;
57
+ const hasCompanyItems = companyItems && companyItems.length > 0;
58
+ 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": "Knowledge Base", "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: openNow, className: triggerClassName, style: triggerClassName ? undefined : defaultTriggerStyle, children: ["Knowledge Base", _jsx(IconChevron, {})] }), _jsxs("div", { role: "menu", style: menuStyle(open), children: [_jsx(SectionHeader, { label: productLabel }), hasProductItems ? (_jsxs(_Fragment, { children: [_jsx("div", { style: listStyle, children: productItems.map((item) => (_jsx(KBLink, { item: item }, item.id))) }), productKBHref && _jsx(SeeAllRow, { href: productKBHref })] })) : (_jsx(EmptyState, { text: "No articles yet." })), _jsx(Divider, {}), _jsx(SectionHeader, { label: "Company Knowledge" }), hasCompanyItems ? (_jsx("div", { style: listStyle, children: companyItems.map((item) => (_jsx(KBLink, { item: item }, item.id))) })) : (_jsx(EmptyState, { text: "Company Knowledge \u2014 coming soon." }))] })] }));
59
+ }
60
+ // ──────────────────────────────────────────────────────────────────────────────
61
+ // Subcomponents
62
+ // ──────────────────────────────────────────────────────────────────────────────
63
+ function KBLink({ item }) {
64
+ const chipColour = item.color ? COLOUR_HEX[item.color] : COLOUR_HEX.slate;
65
+ return (_jsxs("a", { role: "menuitem", href: item.href, style: kbLinkStyle, onMouseEnter: (e) => { e.currentTarget.style.background = '#f8fafc'; }, onMouseLeave: (e) => { e.currentTarget.style.background = 'transparent'; }, children: [_jsx("span", { style: {
66
+ flexShrink: 0,
67
+ fontSize: 10,
68
+ fontWeight: 700,
69
+ color: chipColour ?? '#475569',
70
+ width: 50,
71
+ letterSpacing: '0.02em',
72
+ }, children: item.name }), _jsx("span", { style: { fontSize: 12, color: '#475569', flex: 1, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, children: item.fullName ?? item.name })] }));
73
+ }
74
+ function SectionHeader({ label }) {
75
+ return (_jsx("div", { style: sectionHeaderStyle, children: label }));
76
+ }
77
+ function EmptyState({ text }) {
78
+ return (_jsx("div", { style: emptyStateStyle, children: text }));
79
+ }
80
+ function SeeAllRow({ href }) {
81
+ return (_jsx("div", { style: seeAllRowStyle, children: _jsxs("a", { href: href, style: { fontSize: 11, color: '#c2410c', fontWeight: 600, textDecoration: 'none', display: 'inline-flex', alignItems: 'center', gap: 4 }, children: ["View all", _jsx("span", { "aria-hidden": true, children: "\u2192" })] }) }));
82
+ }
83
+ function Divider() {
84
+ return _jsx("div", { style: { height: 1, background: '#e5e7eb', margin: '4px 0' }, "aria-hidden": true });
85
+ }
86
+ function IconChevron() {
87
+ 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" }) }));
88
+ }
89
+ // ──────────────────────────────────────────────────────────────────────────────
90
+ // Styles
91
+ // ──────────────────────────────────────────────────────────────────────────────
92
+ const defaultTriggerStyle = {
93
+ display: 'inline-flex',
94
+ alignItems: 'center',
95
+ gap: 4,
96
+ fontSize: 14,
97
+ color: 'inherit',
98
+ background: 'transparent',
99
+ border: 0,
100
+ padding: 0,
101
+ cursor: 'pointer',
102
+ fontFamily: 'inherit',
103
+ };
104
+ function menuStyle(open) {
105
+ return {
106
+ position: 'absolute',
107
+ left: 0,
108
+ top: 'calc(100% + 8px)',
109
+ minWidth: 280,
110
+ background: '#ffffff',
111
+ border: '1px solid #e5e7eb',
112
+ borderRadius: 12,
113
+ boxShadow: '0 16px 32px -8px rgba(15,23,42,0.16), 0 4px 8px -2px rgba(15,23,42,0.08)',
114
+ padding: '6px 0',
115
+ opacity: open ? 1 : 0,
116
+ visibility: open ? 'visible' : 'hidden',
117
+ transform: open ? 'translateY(0)' : 'translateY(-4px)',
118
+ transition: 'opacity 150ms cubic-bezier(0.16,1,0.3,1), transform 150ms cubic-bezier(0.16,1,0.3,1), visibility 150ms',
119
+ zIndex: 50,
120
+ color: '#111827',
121
+ maxHeight: '70vh',
122
+ overflowY: 'auto',
123
+ };
124
+ }
125
+ const sectionHeaderStyle = {
126
+ padding: '8px 14px 4px',
127
+ fontSize: 10,
128
+ fontWeight: 700,
129
+ letterSpacing: '0.08em',
130
+ textTransform: 'uppercase',
131
+ color: '#64748b',
132
+ };
133
+ const listStyle = {
134
+ display: 'flex',
135
+ flexDirection: 'column',
136
+ };
137
+ const kbLinkStyle = {
138
+ display: 'flex',
139
+ alignItems: 'center',
140
+ gap: 10,
141
+ padding: '6px 14px',
142
+ fontSize: 12,
143
+ color: '#374151',
144
+ background: 'transparent',
145
+ textDecoration: 'none',
146
+ fontFamily: 'inherit',
147
+ transition: 'background 120ms',
148
+ };
149
+ const emptyStateStyle = {
150
+ padding: '6px 14px 10px',
151
+ fontSize: 12,
152
+ color: '#94a3b8',
153
+ fontStyle: 'italic',
154
+ };
155
+ const seeAllRowStyle = {
156
+ padding: '8px 14px 6px',
157
+ borderTop: '1px solid #f1f5f9',
158
+ marginTop: 4,
159
+ };
160
+ //# sourceMappingURL=KnowledgeBaseMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KnowledgeBaseMenu.js","sourceRoot":"","sources":["../src/KnowledgeBaseMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { type CSSProperties, type MouseEvent, type ReactNode } from 'react';
2
+ export interface SettingsItem {
3
+ /** Display label, e.g. "Default analysis methods". */
4
+ label: string;
5
+ /** Either provide href (renders as link) or onClick (renders as button). */
6
+ href?: string;
7
+ onClick?: (e: MouseEvent<HTMLButtonElement>) => void;
8
+ /** Optional small icon shown left of the label. */
9
+ icon?: ReactNode;
10
+ /** Render in red — for destructive actions like "Sign out". */
11
+ danger?: boolean;
12
+ }
13
+ export interface SettingsMenuProps {
14
+ /** Items in the product-specific settings section. */
15
+ productItems?: SettingsItem[];
16
+ /** Items in the global / cross-product settings section (e.g. Theme, Language). */
17
+ globalItems?: SettingsItem[];
18
+ /** Trigger className — typically Tailwind classes from the host nav. */
19
+ triggerClassName?: string;
20
+ /** aria-label for the trigger. Defaults to "Settings". */
21
+ ariaLabel?: string;
22
+ style?: CSSProperties;
23
+ className?: string;
24
+ }
25
+ export declare function SettingsMenu({ productItems, globalItems, triggerClassName, ariaLabel, style, className, }: SettingsMenuProps): import("react/jsx-runtime").JSX.Element;
26
+ //# sourceMappingURL=SettingsMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsMenu.d.ts","sourceRoot":"","sources":["../src/SettingsMenu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAMd,MAAM,WAAW,YAAY;IAC3B,sDAAsD;IACtD,KAAK,EAAK,MAAM,CAAA;IAChB,4EAA4E;IAC5E,IAAI,CAAC,EAAK,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACpD,mDAAmD;IACnD,IAAI,CAAC,EAAK,SAAS,CAAA;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAG,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,YAAY,CAAC,EAAK,YAAY,EAAE,CAAA;IAChC,mFAAmF;IACnF,WAAW,CAAC,EAAM,YAAY,EAAE,CAAA;IAChC,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,0DAA0D;IAC1D,SAAS,CAAC,EAAQ,MAAM,CAAA;IACxB,KAAK,CAAC,EAAY,aAAa,CAAA;IAC/B,SAAS,CAAC,EAAQ,MAAM,CAAA;CACzB;AAMD,wBAAgB,YAAY,CAAC,EAC3B,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,SAAsB,EACtB,KAAK,EACL,SAAS,GACV,EAAE,iBAAiB,2CAkFnB"}
@@ -0,0 +1,130 @@
1
+ 'use client';
2
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useRef, useEffect, } from 'react';
4
+ // ──────────────────────────────────────────────────────────────────────────────
5
+ // Component
6
+ // ──────────────────────────────────────────────────────────────────────────────
7
+ export function SettingsMenu({ productItems, globalItems, triggerClassName, ariaLabel = 'Settings', style, className, }) {
8
+ const [open, setOpen] = useState(false);
9
+ const wrapRef = useRef(null);
10
+ const closeTimer = useRef(null);
11
+ function openNow() {
12
+ if (closeTimer.current)
13
+ clearTimeout(closeTimer.current);
14
+ setOpen(true);
15
+ }
16
+ function closeSoon() {
17
+ if (closeTimer.current)
18
+ clearTimeout(closeTimer.current);
19
+ closeTimer.current = setTimeout(() => setOpen(false), 220);
20
+ }
21
+ useEffect(() => {
22
+ function onDown(e) {
23
+ if (wrapRef.current && !wrapRef.current.contains(e.target))
24
+ setOpen(false);
25
+ }
26
+ function onKey(e) {
27
+ if (e.key === 'Escape')
28
+ setOpen(false);
29
+ }
30
+ document.addEventListener('mousedown', onDown);
31
+ document.addEventListener('keydown', onKey);
32
+ return () => {
33
+ document.removeEventListener('mousedown', onDown);
34
+ document.removeEventListener('keydown', onKey);
35
+ };
36
+ }, []);
37
+ const hasProduct = productItems && productItems.length > 0;
38
+ const hasGlobal = globalItems && globalItems.length > 0;
39
+ 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": ariaLabel, "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: openNow, className: triggerClassName, style: triggerClassName ? undefined : defaultTriggerStyle, children: _jsx(IconGear, {}) }), _jsxs("div", { role: "menu", style: menuStyle(open), children: [hasProduct && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { label: "Product Settings" }), productItems.map((item, i) => (_jsx(Item, { item: item }, `p${i}`)))] })), hasProduct && hasGlobal && _jsx(Divider, {}), hasGlobal && (_jsxs(_Fragment, { children: [_jsx(SectionHeader, { label: "Global Settings" }), globalItems.map((item, i) => (_jsx(Item, { item: item }, `g${i}`)))] })), !hasProduct && !hasGlobal && (_jsx("div", { style: { padding: '12px 14px', fontSize: 12, color: '#94a3b8', fontStyle: 'italic' }, children: "No settings yet." }))] })] }));
40
+ }
41
+ // ──────────────────────────────────────────────────────────────────────────────
42
+ // Subcomponents
43
+ // ──────────────────────────────────────────────────────────────────────────────
44
+ function Item({ item }) {
45
+ const restingColor = item.danger ? '#dc2626' : '#374151';
46
+ const hoverColor = item.danger ? '#b91c1c' : '#111827';
47
+ const hoverBg = item.danger ? '#fef2f2' : '#f3f4f6';
48
+ const baseStyle = {
49
+ display: 'flex',
50
+ alignItems: 'center',
51
+ gap: 10,
52
+ padding: '8px 14px',
53
+ fontSize: 13,
54
+ color: restingColor,
55
+ background: 'transparent',
56
+ border: 0,
57
+ cursor: 'pointer',
58
+ width: '100%',
59
+ textAlign: 'left',
60
+ textDecoration: 'none',
61
+ fontFamily: 'inherit',
62
+ transition: 'background 120ms, color 120ms',
63
+ };
64
+ const onEnter = (e) => {
65
+ e.currentTarget.style.background = hoverBg;
66
+ e.currentTarget.style.color = hoverColor;
67
+ };
68
+ const onLeave = (e) => {
69
+ e.currentTarget.style.background = 'transparent';
70
+ e.currentTarget.style.color = restingColor;
71
+ };
72
+ if (item.onClick) {
73
+ return (_jsxs("button", { type: "button", role: "menuitem", onClick: item.onClick, onMouseEnter: onEnter, onMouseLeave: onLeave, style: baseStyle, children: [item.icon, item.label] }));
74
+ }
75
+ return (_jsxs("a", { role: "menuitem", href: item.href, onMouseEnter: onEnter, onMouseLeave: onLeave, style: baseStyle, children: [item.icon, item.label] }));
76
+ }
77
+ function SectionHeader({ label }) {
78
+ return _jsx("div", { style: sectionHeaderStyle, children: label });
79
+ }
80
+ function Divider() {
81
+ return _jsx("div", { style: { height: 1, background: '#e5e7eb', margin: '4px 0' }, "aria-hidden": true });
82
+ }
83
+ function IconGear() {
84
+ return (_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [_jsx("circle", { cx: "12", cy: "12", r: "3" }), _jsx("path", { d: "M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z" })] }));
85
+ }
86
+ // ──────────────────────────────────────────────────────────────────────────────
87
+ // Styles
88
+ // ──────────────────────────────────────────────────────────────────────────────
89
+ const defaultTriggerStyle = {
90
+ display: 'inline-flex',
91
+ alignItems: 'center',
92
+ justifyContent: 'center',
93
+ width: 32,
94
+ height: 32,
95
+ borderRadius: 8,
96
+ border: 0,
97
+ background: 'transparent',
98
+ color: '#64748b',
99
+ cursor: 'pointer',
100
+ padding: 0,
101
+ transition: 'background 120ms, color 120ms',
102
+ };
103
+ function menuStyle(open) {
104
+ return {
105
+ position: 'absolute',
106
+ right: 0,
107
+ top: 'calc(100% + 8px)',
108
+ minWidth: 220,
109
+ background: '#ffffff',
110
+ border: '1px solid #e5e7eb',
111
+ borderRadius: 12,
112
+ boxShadow: '0 16px 32px -8px rgba(15,23,42,0.16), 0 4px 8px -2px rgba(15,23,42,0.08)',
113
+ padding: '6px 0',
114
+ opacity: open ? 1 : 0,
115
+ visibility: open ? 'visible' : 'hidden',
116
+ transform: open ? 'translateY(0)' : 'translateY(-4px)',
117
+ transition: 'opacity 150ms cubic-bezier(0.16,1,0.3,1), transform 150ms cubic-bezier(0.16,1,0.3,1), visibility 150ms',
118
+ zIndex: 50,
119
+ color: '#111827',
120
+ };
121
+ }
122
+ const sectionHeaderStyle = {
123
+ padding: '8px 14px 4px',
124
+ fontSize: 10,
125
+ fontWeight: 700,
126
+ letterSpacing: '0.08em',
127
+ textTransform: 'uppercase',
128
+ color: '#64748b',
129
+ };
130
+ //# sourceMappingURL=SettingsMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsMenu.js","sourceRoot":"","sources":["../src/SettingsMenu.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { type CSSProperties, type ReactNode } from 'react';
2
+ import { type SuiteProductId } from './SuiteSwitcher.js';
3
+ import { type KnowledgeBaseItem } from './KnowledgeBaseMenu.js';
4
+ import { type SettingsItem } from './SettingsMenu.js';
5
+ import { type UserProfileProps } from './UserProfile.js';
6
+ export interface UniversalNavBarProps {
7
+ /** Which product is currently mounting this nav. Used by SuiteSwitcher. */
8
+ product: SuiteProductId;
9
+ /** Element shown on the far left — typically the product wordmark/logo. */
10
+ productLogo: ReactNode;
11
+ /** Override the dynamic org-name label. When unset, reads from useOrg(). */
12
+ companyLabel?: string;
13
+ /** Override the org icon. When unset, reads from useOrgBranding().icon_url. */
14
+ companyIconUrl?: string | null;
15
+ /**
16
+ * Href for "New Assessment". Standardised to "/new" across the suite.
17
+ * Pass null to hide the link on a product that doesn't support it yet.
18
+ */
19
+ newAssessmentHref?: string | null;
20
+ /** Knowledge base content (per-product items + future company-knowledge slot). */
21
+ knowledgeBase?: {
22
+ productItems?: KnowledgeBaseItem[];
23
+ productKBHref?: string;
24
+ productLabel?: string;
25
+ companyItems?: KnowledgeBaseItem[];
26
+ };
27
+ /** Product-specific items for the gear-icon dropdown. */
28
+ productSettings?: SettingsItem[];
29
+ /** Global / cross-product items (Theme, Language, etc.). */
30
+ globalSettings?: SettingsItem[];
31
+ /**
32
+ * Override the auto-derived user profile. Pass when the host product has
33
+ * richer profile data (display name, profile photo from its own store).
34
+ * If omitted, the navbar renders a profile button derived from useUser():
35
+ * - anonymous Supabase session → generic icon + "Sign in" item
36
+ * - signed in → email-derived initials + email + Sign out
37
+ */
38
+ user?: UserProfileProps | null;
39
+ /** A small chip rendered inside the SuiteSwitcher — typically <VersionChip />. */
40
+ versionChip?: ReactNode;
41
+ /** Trigger icon for the SuiteSwitcher. Defaults to the inline UNISIM monogram. */
42
+ suiteSwitcherIconSrc?: string;
43
+ /** Top brand strip — pass false to hide. Default: shown. */
44
+ showBrandStrip?: boolean;
45
+ /** Where the central hub lives. Used for the "Sign in" link on anonymous sessions. */
46
+ hubLoginHref?: string;
47
+ className?: string;
48
+ style?: CSSProperties;
49
+ }
50
+ /**
51
+ * The Universal Suite navigation bar — single source of truth for the header
52
+ * layout across every Assess product. Each product mounts this once and the
53
+ * suite-wide visual identity (gradient strip, company badge, suite switcher,
54
+ * my-company menu, settings, profile) propagates automatically on the next
55
+ * SDK bump.
56
+ *
57
+ * Layout (left → right):
58
+ * [Brand strip]
59
+ * ┌──────────────────────────────────────────────────────────────────────┐
60
+ * │ [Logo] [Icon] for [Org] New Assessment · KB · My Company │
61
+ * │ · ⚙ · 👤 · ⊞ │
62
+ * └──────────────────────────────────────────────────────────────────────┘
63
+ */
64
+ export declare function UniversalNavBar({ product, productLogo, companyLabel, companyIconUrl, newAssessmentHref, knowledgeBase, productSettings, globalSettings, user, versionChip, suiteSwitcherIconSrc, showBrandStrip, hubLoginHref, className, style, }: UniversalNavBarProps): import("react/jsx-runtime").JSX.Element;
65
+ //# sourceMappingURL=UniversalNavBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniversalNavBar.d.ts","sourceRoot":"","sources":["../src/UniversalNavBar.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEvE,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClF,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AASrE,MAAM,WAAW,oBAAoB;IAEnC,2EAA2E;IAC3E,OAAO,EAAE,cAAc,CAAA;IACvB,2EAA2E;IAC3E,WAAW,EAAE,SAAS,CAAA;IAGtB,4EAA4E;IAC5E,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAG9B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAEjC,kFAAkF;IAClF,aAAa,CAAC,EAAE;QACd,YAAY,CAAC,EAAG,iBAAiB,EAAE,CAAA;QACnC,aAAa,CAAC,EAAE,MAAM,CAAA;QACtB,YAAY,CAAC,EAAG,MAAM,CAAA;QACtB,YAAY,CAAC,EAAG,iBAAiB,EAAE,CAAA;KACpC,CAAA;IAGD,yDAAyD;IACzD,eAAe,CAAC,EAAE,YAAY,EAAE,CAAA;IAChC,4DAA4D;IAC5D,cAAc,CAAC,EAAG,YAAY,EAAE,CAAA;IAEhC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAE9B,kFAAkF;IAClF,WAAW,CAAC,EAAE,SAAS,CAAA;IAEvB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B,4DAA4D;IAC5D,cAAc,CAAC,EAAE,OAAO,CAAA;IAExB,sFAAsF;IACtF,YAAY,CAAC,EAAE,MAAM,CAAA;IAGrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAM,aAAa,CAAA;CAC1B;AAMD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,WAAW,EACX,YAAY,EACZ,cAAc,EACd,iBAA0B,EAC1B,aAAa,EACb,eAAe,EACf,cAAc,EACd,IAAI,EACJ,WAAW,EACX,oBAAoB,EACpB,cAAqB,EACrB,YAA+C,EAC/C,SAAS,EACT,KAAK,GACN,EAAE,oBAAoB,2CAyDtB"}
@@ -0,0 +1,197 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { CompanyMenu } from './CompanyMenu.js';
4
+ import { SuiteSwitcher } from './SuiteSwitcher.js';
5
+ import { UniversalBar } from './UniversalBar.js';
6
+ import { KnowledgeBaseMenu } from './KnowledgeBaseMenu.js';
7
+ import { SettingsMenu } from './SettingsMenu.js';
8
+ import { UserProfile } from './UserProfile.js';
9
+ import { useOrg, useUser } from './auth.js';
10
+ import { useOrgBranding } from './branding.js';
11
+ import { useUniversal } from './provider.js';
12
+ // ──────────────────────────────────────────────────────────────────────────────
13
+ // Component
14
+ // ──────────────────────────────────────────────────────────────────────────────
15
+ /**
16
+ * The Universal Suite navigation bar — single source of truth for the header
17
+ * layout across every Assess product. Each product mounts this once and the
18
+ * suite-wide visual identity (gradient strip, company badge, suite switcher,
19
+ * my-company menu, settings, profile) propagates automatically on the next
20
+ * SDK bump.
21
+ *
22
+ * Layout (left → right):
23
+ * [Brand strip]
24
+ * ┌──────────────────────────────────────────────────────────────────────┐
25
+ * │ [Logo] [Icon] for [Org] New Assessment · KB · My Company │
26
+ * │ · ⚙ · 👤 · ⊞ │
27
+ * └──────────────────────────────────────────────────────────────────────┘
28
+ */
29
+ export function UniversalNavBar({ product, productLogo, companyLabel, companyIconUrl, newAssessmentHref = '/new', knowledgeBase, productSettings, globalSettings, user, versionChip, suiteSwitcherIconSrc, showBrandStrip = true, hubLoginHref = 'https://app.unisim.co.uk/login', className, style, }) {
30
+ // ── Company label + icon ────────────────────────────────────────────────
31
+ const { org } = useOrg();
32
+ const branding = useOrgBranding();
33
+ const resolvedCompany = companyLabel ?? org?.name ?? 'Your Company';
34
+ const resolvedIconUrl = companyIconUrl ?? branding.icon_url;
35
+ const initial = (org?.name?.[0] ?? '?').toUpperCase();
36
+ const iconBg = branding.brand_color ?? '#e2e8f0';
37
+ // ── User profile auto-wiring ───────────────────────────────────────────
38
+ const resolvedUser = useResolvedUser(user, hubLoginHref);
39
+ return (_jsxs("div", { className: className, style: style, children: [showBrandStrip && _jsx(UniversalBar, {}), _jsxs("header", { style: headerStyle, children: [_jsxs("div", { style: leftStyle, children: [_jsx("div", { style: { display: 'inline-flex', alignItems: 'center' }, children: productLogo }), _jsx("span", { style: separatorStyle, "aria-hidden": true, children: "\u00B7" }), _jsx(CompanyBadge, { iconUrl: resolvedIconUrl, initial: initial, iconBg: iconBg, hasOrg: !!org }), _jsxs("span", { style: companyLabelStyle, children: [_jsx("span", { style: { color: '#94a3b8', marginRight: 4 }, children: "for" }), _jsx("span", { style: { color: org?.name ? '#0f172a' : '#94a3b8' }, children: resolvedCompany })] })] }), _jsxs("nav", { style: centreStyle, "aria-label": "Primary", children: [newAssessmentHref && (_jsx("a", { href: newAssessmentHref, style: linkStyle, children: "New Assessment" })), knowledgeBase && (_jsx(KnowledgeBaseMenu, { productItems: knowledgeBase.productItems, productKBHref: knowledgeBase.productKBHref, productLabel: knowledgeBase.productLabel, companyItems: knowledgeBase.companyItems })), _jsx(CompanyMenu, {})] }), _jsxs("div", { style: rightStyle, children: [_jsx(SettingsMenu, { productItems: productSettings, globalItems: globalSettings }), _jsx(UserProfile, { ...resolvedUser }), _jsx(SuiteSwitcher, { current: product, iconSrc: suiteSwitcherIconSrc, chip: versionChip })] })] })] }));
40
+ }
41
+ // ──────────────────────────────────────────────────────────────────────────────
42
+ // useResolvedUser — combines an explicit `user` prop with auto-derived data
43
+ // from useUser(). Host products that pass `user` get full control; everyone
44
+ // else gets a sensible default with a "Sign in" item for anonymous sessions.
45
+ // ──────────────────────────────────────────────────────────────────────────────
46
+ function useResolvedUser(override, hubLoginHref) {
47
+ const { user, loading } = useUser();
48
+ const { supabase, session } = useUniversal();
49
+ // Honour an explicit override fully.
50
+ if (override)
51
+ return override;
52
+ // Loading: show a neutral placeholder.
53
+ if (loading) {
54
+ return { name: undefined, email: undefined, initials: '·' };
55
+ }
56
+ // Supabase exposes is_anonymous on the user object; the SDK doesn't surface
57
+ // it directly so we read it off the session.
58
+ const isAnonymous = session?.user?.is_anonymous === true;
59
+ if (!user || isAnonymous) {
60
+ return {
61
+ // Show "Sign in" as the profile item link rather than a sign-out flow.
62
+ name: undefined,
63
+ email: undefined,
64
+ profileHref: hubLoginHref,
65
+ // The avatar fallback shows "?" for anonymous — clean read.
66
+ initials: '?',
67
+ };
68
+ }
69
+ // Signed-in real user. Use email-derived initials when no display name yet.
70
+ return {
71
+ name: undefined,
72
+ email: user.email ?? undefined,
73
+ initials: emailInitials(user.email),
74
+ onSignOut: () => { void supabase.auth.signOut(); },
75
+ };
76
+ }
77
+ function emailInitials(email) {
78
+ if (!email)
79
+ return '?';
80
+ const local = email.split('@')[0] ?? '';
81
+ if (local.length === 0)
82
+ return '?';
83
+ if (local.length === 1)
84
+ return local[0].toUpperCase();
85
+ return (local[0] + local[1]).toUpperCase();
86
+ }
87
+ // ──────────────────────────────────────────────────────────────────────────────
88
+ // Subcomponents
89
+ // ──────────────────────────────────────────────────────────────────────────────
90
+ function CompanyBadge({ iconUrl, initial, iconBg, hasOrg, }) {
91
+ if (iconUrl) {
92
+ return (_jsx("span", { style: iconImgWrapperStyle, children: _jsx("img", { src: iconUrl, alt: "", "aria-hidden": true, style: iconImgStyle }) }));
93
+ }
94
+ return (_jsx("span", { style: {
95
+ ...iconFallbackStyle,
96
+ background: hasOrg ? iconBg : '#e2e8f0',
97
+ color: hasOrg ? readableTextOn(iconBg) : '#94a3b8',
98
+ }, "aria-hidden": true, children: hasOrg ? initial : '·' }));
99
+ }
100
+ function readableTextOn(bgHex) {
101
+ // Naive luminance check — picks white text for dark backgrounds, dark for
102
+ // light. Good enough for the small initials badge; not WCAG-rigorous.
103
+ const m = /^#?([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i.exec(bgHex);
104
+ if (!m)
105
+ return '#0f172a';
106
+ const r = parseInt(m[1], 16), g = parseInt(m[2], 16), b = parseInt(m[3], 16);
107
+ const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
108
+ return luminance > 0.6 ? '#0f172a' : '#ffffff';
109
+ }
110
+ // ──────────────────────────────────────────────────────────────────────────────
111
+ // Styles
112
+ // ──────────────────────────────────────────────────────────────────────────────
113
+ const headerStyle = {
114
+ display: 'flex',
115
+ alignItems: 'center',
116
+ justifyContent: 'space-between',
117
+ gap: 16,
118
+ padding: '10px 20px',
119
+ background: '#ffffff',
120
+ borderBottom: '1px solid #e2e8f0',
121
+ fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif",
122
+ color: '#0f172a',
123
+ minHeight: 56,
124
+ boxSizing: 'border-box',
125
+ };
126
+ const leftStyle = {
127
+ display: 'inline-flex',
128
+ alignItems: 'center',
129
+ gap: 8,
130
+ minWidth: 0,
131
+ flexShrink: 0,
132
+ };
133
+ const separatorStyle = {
134
+ color: '#cbd5e1',
135
+ fontSize: 12,
136
+ margin: '0 2px',
137
+ };
138
+ const companyLabelStyle = {
139
+ fontSize: 13,
140
+ fontWeight: 500,
141
+ whiteSpace: 'nowrap',
142
+ overflow: 'hidden',
143
+ textOverflow: 'ellipsis',
144
+ maxWidth: 240,
145
+ };
146
+ const iconImgWrapperStyle = {
147
+ width: 22,
148
+ height: 22,
149
+ borderRadius: 5,
150
+ overflow: 'hidden',
151
+ display: 'inline-flex',
152
+ alignItems: 'center',
153
+ justifyContent: 'center',
154
+ background: '#ffffff',
155
+ border: '1px solid #e2e8f0',
156
+ flexShrink: 0,
157
+ };
158
+ const iconImgStyle = {
159
+ width: '100%',
160
+ height: '100%',
161
+ objectFit: 'cover',
162
+ display: 'block',
163
+ };
164
+ const iconFallbackStyle = {
165
+ width: 22,
166
+ height: 22,
167
+ borderRadius: 5,
168
+ fontSize: 11,
169
+ fontWeight: 700,
170
+ display: 'inline-flex',
171
+ alignItems: 'center',
172
+ justifyContent: 'center',
173
+ flexShrink: 0,
174
+ letterSpacing: '0.02em',
175
+ };
176
+ const centreStyle = {
177
+ display: 'inline-flex',
178
+ alignItems: 'center',
179
+ gap: 20,
180
+ flex: 1,
181
+ marginLeft: 24,
182
+ minWidth: 0,
183
+ };
184
+ const linkStyle = {
185
+ fontSize: 14,
186
+ color: '#374151',
187
+ textDecoration: 'none',
188
+ fontWeight: 500,
189
+ transition: 'color 120ms',
190
+ };
191
+ const rightStyle = {
192
+ display: 'inline-flex',
193
+ alignItems: 'center',
194
+ gap: 8,
195
+ flexShrink: 0,
196
+ };
197
+ //# sourceMappingURL=UniversalNavBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniversalNavBar.js","sourceRoot":"","sources":["../src/UniversalNavBar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type CSSProperties, type MouseEvent } from 'react';
2
+ export interface UserProfileProps {
3
+ /** Display name. Used to derive initials if none provided. */
4
+ name?: string;
5
+ /** Email address, shown beneath the name in the dropdown. */
6
+ email?: string;
7
+ /** Profile photo URL. When present, renders as an <img>. */
8
+ photoUrl?: string | null;
9
+ /** Override the initials shown in the avatar fallback. */
10
+ initials?: string;
11
+ /** Link to the profile page. Defaults to "/profile". */
12
+ profileHref?: string;
13
+ /** Click handler for sign-out. If omitted, the sign-out item is hidden. */
14
+ onSignOut?: (e: MouseEvent<HTMLButtonElement>) => void;
15
+ /** aria-label for the trigger. Defaults to "Profile". */
16
+ ariaLabel?: string;
17
+ style?: CSSProperties;
18
+ className?: string;
19
+ }
20
+ export declare function UserProfile({ name, email, photoUrl, initials, profileHref, onSignOut, ariaLabel, style, className, }: UserProfileProps): import("react/jsx-runtime").JSX.Element;
21
+ //# sourceMappingURL=UserProfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserProfile.d.ts","sourceRoot":"","sources":["../src/UserProfile.tsx"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,UAAU,EAEhB,MAAM,OAAO,CAAA;AAMd,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,IAAI,CAAC,EAAM,MAAM,CAAA;IACjB,6DAA6D;IAC7D,KAAK,CAAC,EAAK,MAAM,CAAA;IACjB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2EAA2E;IAC3E,SAAS,CAAC,EAAI,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;IACxD,yDAAyD;IACzD,SAAS,CAAC,EAAI,MAAM,CAAA;IACpB,KAAK,CAAC,EAAQ,aAAa,CAAA;IAC3B,SAAS,CAAC,EAAI,MAAM,CAAA;CACrB;AAMD,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,WAAwB,EACxB,SAAS,EACT,SAAqB,EACrB,KAAK,EACL,SAAS,GACV,EAAE,gBAAgB,2CAsFlB"}
@@ -0,0 +1,165 @@
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
+ // Component
6
+ // ──────────────────────────────────────────────────────────────────────────────
7
+ export function UserProfile({ name, email, photoUrl, initials, profileHref = '/profile', onSignOut, ariaLabel = 'Profile', style, className, }) {
8
+ const [open, setOpen] = useState(false);
9
+ const wrapRef = useRef(null);
10
+ const closeTimer = useRef(null);
11
+ function openNow() {
12
+ if (closeTimer.current)
13
+ clearTimeout(closeTimer.current);
14
+ setOpen(true);
15
+ }
16
+ function closeSoon() {
17
+ if (closeTimer.current)
18
+ clearTimeout(closeTimer.current);
19
+ closeTimer.current = setTimeout(() => setOpen(false), 220);
20
+ }
21
+ useEffect(() => {
22
+ function onDown(e) {
23
+ if (wrapRef.current && !wrapRef.current.contains(e.target))
24
+ setOpen(false);
25
+ }
26
+ function onKey(e) {
27
+ if (e.key === 'Escape')
28
+ setOpen(false);
29
+ }
30
+ document.addEventListener('mousedown', onDown);
31
+ document.addEventListener('keydown', onKey);
32
+ return () => {
33
+ document.removeEventListener('mousedown', onDown);
34
+ document.removeEventListener('keydown', onKey);
35
+ };
36
+ }, []);
37
+ // Derive initials when not explicitly passed in.
38
+ const derivedInitials = initials ?? deriveInitials(name) ?? '?';
39
+ 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": ariaLabel, "aria-expanded": open, "aria-haspopup": "true", onClick: () => setOpen((v) => !v), onFocus: openNow, style: triggerStyle, children: photoUrl ? (_jsx("img", { src: photoUrl, alt: "", "aria-hidden": true, style: avatarImgStyle })) : (_jsx("span", { style: avatarFallbackStyle, children: derivedInitials })) }), _jsxs("div", { role: "menu", style: menuStyle(open), children: [(name || email) && (_jsxs("div", { style: headerStyle, children: [name && _jsx("div", { style: nameStyle, children: name }), email && _jsx("div", { style: emailStyle, children: email })] })), _jsxs("a", { role: "menuitem", href: profileHref, style: itemStyle, onMouseEnter: hoverIn, onMouseLeave: hoverOut, children: [_jsx(IconUser, {}), " View profile"] }), onSignOut && (_jsxs(_Fragment, { children: [_jsx(Divider, {}), _jsxs("button", { type: "button", role: "menuitem", onClick: onSignOut, style: dangerItemStyle, onMouseEnter: dangerHoverIn, onMouseLeave: dangerHoverOut, children: [_jsx(IconLogout, {}), " Sign out"] })] }))] })] }));
40
+ }
41
+ // ──────────────────────────────────────────────────────────────────────────────
42
+ // Helpers
43
+ // ──────────────────────────────────────────────────────────────────────────────
44
+ function deriveInitials(name) {
45
+ if (!name)
46
+ return undefined;
47
+ const parts = name.trim().split(/\s+/);
48
+ if (parts.length === 0)
49
+ return undefined;
50
+ if (parts.length === 1)
51
+ return parts[0].slice(0, 2).toUpperCase();
52
+ return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
53
+ }
54
+ function hoverIn(e) { e.currentTarget.style.background = '#f3f4f6'; e.currentTarget.style.color = '#111827'; }
55
+ function hoverOut(e) { e.currentTarget.style.background = 'transparent'; e.currentTarget.style.color = '#374151'; }
56
+ function dangerHoverIn(e) { e.currentTarget.style.background = '#fef2f2'; e.currentTarget.style.color = '#b91c1c'; }
57
+ function dangerHoverOut(e) { e.currentTarget.style.background = 'transparent'; e.currentTarget.style.color = '#dc2626'; }
58
+ function Divider() {
59
+ return _jsx("div", { style: { height: 1, background: '#e5e7eb', margin: '4px 0' }, "aria-hidden": true });
60
+ }
61
+ function IconUser() {
62
+ 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" })] }));
63
+ }
64
+ function IconLogout() {
65
+ 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" })] }));
66
+ }
67
+ // ──────────────────────────────────────────────────────────────────────────────
68
+ // Styles
69
+ // ──────────────────────────────────────────────────────────────────────────────
70
+ const triggerStyle = {
71
+ display: 'inline-flex',
72
+ alignItems: 'center',
73
+ justifyContent: 'center',
74
+ width: 32,
75
+ height: 32,
76
+ borderRadius: '50%',
77
+ border: 0,
78
+ background: 'transparent',
79
+ cursor: 'pointer',
80
+ padding: 0,
81
+ overflow: 'hidden',
82
+ };
83
+ const avatarImgStyle = {
84
+ width: 32,
85
+ height: 32,
86
+ objectFit: 'cover',
87
+ borderRadius: '50%',
88
+ display: 'block',
89
+ };
90
+ const avatarFallbackStyle = {
91
+ width: 32,
92
+ height: 32,
93
+ borderRadius: '50%',
94
+ background: '#fff7ed',
95
+ border: '1px solid #fed7aa',
96
+ color: '#c2410c',
97
+ fontSize: 11,
98
+ fontWeight: 700,
99
+ display: 'inline-flex',
100
+ alignItems: 'center',
101
+ justifyContent: 'center',
102
+ letterSpacing: '0.04em',
103
+ };
104
+ function menuStyle(open) {
105
+ return {
106
+ position: 'absolute',
107
+ right: 0,
108
+ top: 'calc(100% + 8px)',
109
+ minWidth: 220,
110
+ background: '#ffffff',
111
+ border: '1px solid #e5e7eb',
112
+ borderRadius: 12,
113
+ boxShadow: '0 16px 32px -8px rgba(15,23,42,0.16), 0 4px 8px -2px rgba(15,23,42,0.08)',
114
+ padding: '6px 0',
115
+ opacity: open ? 1 : 0,
116
+ visibility: open ? 'visible' : 'hidden',
117
+ transform: open ? 'translateY(0)' : 'translateY(-4px)',
118
+ transition: 'opacity 150ms cubic-bezier(0.16,1,0.3,1), transform 150ms cubic-bezier(0.16,1,0.3,1), visibility 150ms',
119
+ zIndex: 50,
120
+ color: '#111827',
121
+ };
122
+ }
123
+ const headerStyle = {
124
+ padding: '8px 14px 10px',
125
+ borderBottom: '1px solid #e5e7eb',
126
+ marginBottom: 4,
127
+ minWidth: 0,
128
+ };
129
+ const nameStyle = {
130
+ fontSize: 13,
131
+ fontWeight: 600,
132
+ color: '#0f172a',
133
+ overflow: 'hidden',
134
+ textOverflow: 'ellipsis',
135
+ whiteSpace: 'nowrap',
136
+ };
137
+ const emailStyle = {
138
+ fontSize: 11,
139
+ color: '#64748b',
140
+ marginTop: 2,
141
+ overflow: 'hidden',
142
+ textOverflow: 'ellipsis',
143
+ whiteSpace: 'nowrap',
144
+ };
145
+ const itemStyle = {
146
+ display: 'flex',
147
+ alignItems: 'center',
148
+ gap: 10,
149
+ padding: '8px 14px',
150
+ fontSize: 13,
151
+ color: '#374151',
152
+ background: 'transparent',
153
+ border: 0,
154
+ cursor: 'pointer',
155
+ width: '100%',
156
+ textAlign: 'left',
157
+ textDecoration: 'none',
158
+ fontFamily: 'inherit',
159
+ transition: 'background 120ms, color 120ms',
160
+ };
161
+ const dangerItemStyle = {
162
+ ...itemStyle,
163
+ color: '#dc2626',
164
+ };
165
+ //# sourceMappingURL=UserProfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserProfile.js","sourceRoot":"","sources":["../src/UserProfile.tsx"],"names":[],"mappings":"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"}
package/dist/auth.js CHANGED
@@ -22,7 +22,7 @@ export function useOrg() {
22
22
  setLoading(true);
23
23
  supabase
24
24
  .from('organisations')
25
- .select('id, slug, name, logo_url, brand_color, billing_email')
25
+ .select('id, slug, name, logo_url, icon_url, brand_color, billing_email')
26
26
  .then(({ data, error }) => {
27
27
  if (cancelled)
28
28
  return;
package/dist/auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAQ5C,MAAM,UAAU,OAAO;IACrB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAA;IAC3C,OAAO;QACL,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QACvF,OAAO;KACR,CAAA;AACH,CAAC;AASD,MAAM,UAAU,MAAM;IACpB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAAA;IACzE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC,CAAA;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,EAAE,CAAC,CAAA;YACX,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,QAAQ;aACL,IAAI,CAAC,eAAe,CAAC;aACrB,MAAM,CAAC,sDAAsD,CAAC;aAC9D,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YACxB,IAAI,SAAS;gBAAE,OAAM;YACrB,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAA;gBACjE,OAAO,CAAC,EAAE,CAAC,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;gBACnB,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC;YACD,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;QAEJ,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;IAEpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,IAAI,CAAA;IAE1D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAqD,EACrD,KAAa,EACb,QAAgB;IAEhB,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAqD;IACjF,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;AAChC,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAQ5C,MAAM,UAAU,OAAO;IACrB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,EAAE,CAAA;IAC3C,OAAO;QACL,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QACvF,OAAO;KACR,CAAA;AACH,CAAC;AASD,MAAM,UAAU,MAAM;IACpB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,YAAY,EAAE,CAAA;IACzE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAiB,EAAE,CAAC,CAAA;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,EAAE,CAAC,CAAA;YACX,UAAU,CAAC,KAAK,CAAC,CAAA;YACjB,OAAM;QACR,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAA;QACrB,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhB,QAAQ;aACL,IAAI,CAAC,eAAe,CAAC;aACrB,MAAM,CAAC,gEAAgE,CAAC;aACxE,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;YACxB,IAAI,SAAS;gBAAE,OAAM;YACrB,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC,CAAA;gBACjE,OAAO,CAAC,EAAE,CAAC,CAAA;YACb,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;gBACnB,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5C,cAAc,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,CAAA;gBAC7B,CAAC;YACH,CAAC;YACD,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;QAEJ,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,CAAC,CAAC,CAAA;IAEpD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,IAAI,IAAI,CAAA;IAE1D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,CAAA;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAqD,EACrD,KAAa,EACb,QAAgB;IAEhB,OAAO,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAqD;IACjF,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAA;AAChC,CAAC"}
@@ -2,6 +2,10 @@ import type { OrgBranding } from './types.js';
2
2
  /**
3
3
  * Returns the active org's branding for product UI chrome.
4
4
  * Falls back to suite defaults if no org is active or no branding is set.
5
+ *
6
+ * `logo_url` is the full wordmark / horizontal lockup (used in PDFs, hero
7
+ * areas, etc.); `icon_url` is the 1:1 square mark used in compact surfaces
8
+ * like the navbar company badge and suite-switcher tiles.
5
9
  */
6
10
  export declare function useOrgBranding(): OrgBranding;
7
11
  //# sourceMappingURL=branding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../src/branding.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAO7C;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAO5C"}
1
+ {"version":3,"file":"branding.d.ts","sourceRoot":"","sources":["../src/branding.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAQ7C;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAQ5C"}
package/dist/branding.js CHANGED
@@ -2,11 +2,16 @@
2
2
  import { useOrg } from './auth.js';
3
3
  const DEFAULT_BRANDING = {
4
4
  logo_url: null,
5
+ icon_url: null,
5
6
  brand_color: null,
6
7
  };
7
8
  /**
8
9
  * Returns the active org's branding for product UI chrome.
9
10
  * Falls back to suite defaults if no org is active or no branding is set.
11
+ *
12
+ * `logo_url` is the full wordmark / horizontal lockup (used in PDFs, hero
13
+ * areas, etc.); `icon_url` is the 1:1 square mark used in compact surfaces
14
+ * like the navbar company badge and suite-switcher tiles.
10
15
  */
11
16
  export function useOrgBranding() {
12
17
  const { org } = useOrg();
@@ -14,6 +19,7 @@ export function useOrgBranding() {
14
19
  return DEFAULT_BRANDING;
15
20
  return {
16
21
  logo_url: org.logo_url,
22
+ icon_url: org.icon_url,
17
23
  brand_color: org.brand_color,
18
24
  };
19
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"branding.js","sourceRoot":"","sources":["../src/branding.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGlC,MAAM,gBAAgB,GAAgB;IACpC,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,IAAI;CAClB,CAAA;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;IACxB,IAAI,CAAC,GAAG;QAAE,OAAO,gBAAgB,CAAA;IACjC,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"branding.js","sourceRoot":"","sources":["../src/branding.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAGlC,MAAM,gBAAgB,GAAgB;IACpC,QAAQ,EAAK,IAAI;IACjB,QAAQ,EAAK,IAAI;IACjB,WAAW,EAAE,IAAI;CAClB,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;IACxB,IAAI,CAAC,GAAG;QAAE,OAAO,gBAAgB,CAAA;IACjC,OAAO;QACL,QAAQ,EAAK,GAAG,CAAC,QAAQ;QACzB,QAAQ,EAAK,GAAG,CAAC,QAAQ;QACzB,WAAW,EAAE,GAAG,CAAC,WAAW;KAC7B,CAAA;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -26,6 +26,14 @@ export { SuiteSwitcher, DEFAULT_SUITE_PRODUCTS, UKFlag } from './SuiteSwitcher.j
26
26
  export type { SuiteSwitcherProps, SuiteProduct, SuiteProductId } from './SuiteSwitcher.js';
27
27
  export { CompanyMenu, DEFAULT_COMPANY_URLS } from './CompanyMenu.js';
28
28
  export type { CompanyMenuProps } from './CompanyMenu.js';
29
+ export { KnowledgeBaseMenu } from './KnowledgeBaseMenu.js';
30
+ export type { KnowledgeBaseMenuProps, KnowledgeBaseItem } from './KnowledgeBaseMenu.js';
31
+ export { SettingsMenu } from './SettingsMenu.js';
32
+ export type { SettingsMenuProps, SettingsItem } from './SettingsMenu.js';
33
+ export { UserProfile } from './UserProfile.js';
34
+ export type { UserProfileProps } from './UserProfile.js';
35
+ export { UniversalNavBar } from './UniversalNavBar.js';
36
+ export type { UniversalNavBarProps } from './UniversalNavBar.js';
29
37
  export { useOrgMembers, useOrgSeats, useAuditLog, assignSeat, revokeSeat, reassignSeat, } from './admin.js';
30
38
  export type { UseOrgMembersResult, UseOrgSeatsResult, UseAuditLogOptions, } from './admin.js';
31
39
  export type { ProductCode, SubTier, OrgRole, SeatStatus, AccessSource, Profile, Organisation, OrgBranding, OrgMember, Subscription, Seat, SeatPool, ChangelogEntry, ChangelogRelease, ChangelogFeed, AuditLogEntry, Person, PersonRole, Team, TeamMembership, Place, PlaceType, Project, ProjectStatus, } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAC/D,YAAY,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAE5D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAClE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAE7E,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAA;AACpB,YAAY,EACV,eAAe,EACf,cAAc,EACd,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEpE,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC/D,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEhF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AACtD,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAE1D,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAClF,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAE1F,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACpE,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,WAAW,EACX,OAAO,EACP,OAAO,EACP,UAAU,EACV,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,MAAM,EACN,UAAU,EACV,IAAI,EACJ,cAAc,EACd,KAAK,EACL,SAAS,EACT,OAAO,EACP,aAAa,GACd,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,12 @@
1
+ 'use client';
1
2
  // @unisim/sdk — public API.
2
3
  // Every product depends on this; no product should import @supabase/supabase-js directly.
4
+ //
5
+ // The 'use client' directive above is essential: Next 14 App Router needs the
6
+ // entry point of a re-exporting module to be client-marked so the consumer
7
+ // and provider end up in the *same* React context instance. Without it
8
+ // useUniversal() throws "must be called inside <UniversalProvider>" even
9
+ // when the provider is in the tree.
3
10
  export { UniversalProvider, useUniversal } from './provider.js';
4
11
  export { useUser, useOrg, signInWithPassword, signOut } from './auth.js';
5
12
  export { useHasAccess, useHasFeature, useSeat } from './access.js';
@@ -15,5 +22,9 @@ export { TrialBadge, UpgradeWall } from './TrialUi.js';
15
22
  export { UniversalBar } from './UniversalBar.js';
16
23
  export { SuiteSwitcher, DEFAULT_SUITE_PRODUCTS, UKFlag } from './SuiteSwitcher.js';
17
24
  export { CompanyMenu, DEFAULT_COMPANY_URLS } from './CompanyMenu.js';
25
+ export { KnowledgeBaseMenu } from './KnowledgeBaseMenu.js';
26
+ export { SettingsMenu } from './SettingsMenu.js';
27
+ export { UserProfile } from './UserProfile.js';
28
+ export { UniversalNavBar } from './UniversalNavBar.js';
18
29
  export { useOrgMembers, useOrgSeats, useAuditLog, assignSeat, revokeSeat, reassignSeat, } from './admin.js';
19
30
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAC5B,0FAA0F;AAE1F,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG/D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAA;AAQpB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGjE,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAA;AAOtB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG/D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGlF,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAGpE,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AACZ,4BAA4B;AAC5B,0FAA0F;AAC1F,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,uEAAuE;AACvE,yEAAyE;AACzE,oCAAoC;AAEpC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG/D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAGxE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG7C,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,EACL,SAAS,EACT,QAAQ,EACR,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,aAAa,CAAA;AAQpB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGjE,OAAO,EACL,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAA;AAOtB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG/D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAGlF,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAGpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGtD,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,GACb,MAAM,YAAY,CAAA"}
package/dist/types.d.ts CHANGED
@@ -14,11 +14,19 @@ export interface Organisation {
14
14
  slug: string;
15
15
  name: string;
16
16
  logo_url: string | null;
17
+ /**
18
+ * Square 1:1 image used in compact surfaces (navbar company badge, suite
19
+ * switcher tiles). Falls back to a coloured initials tile when null.
20
+ * Separate from logo_url so wide/horizontal marks can stay un-cropped where
21
+ * they have room, and the navbar still gets something square to render.
22
+ */
23
+ icon_url: string | null;
17
24
  brand_color: string | null;
18
25
  billing_email: string | null;
19
26
  }
20
27
  export interface OrgBranding {
21
28
  logo_url: string | null;
29
+ icon_url: string | null;
22
30
  brand_color: string | null;
23
31
  }
24
32
  export interface OrgMember {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,61 +1,61 @@
1
- {
2
- "name": "@unisim/sdk",
3
- "version": "0.2.0",
4
- "description": "Shared React SDK for the Universal Suite — auth, entitlements, usage telemetry, changelog, org admin.",
5
- "license": "MIT",
6
- "author": "Universal Simulation Ltd",
7
- "keywords": [
8
- "supabase",
9
- "react",
10
- "hooks",
11
- "saas",
12
- "multi-tenant",
13
- "auth",
14
- "rbac",
15
- "universal-simulation"
16
- ],
17
- "homepage": "https://github.com/universal-simulation-ltd/universal-platform/tree/main/packages/sdk#readme",
18
- "repository": {
19
- "type": "git",
20
- "url": "git+https://github.com/universal-simulation-ltd/universal-platform.git",
21
- "directory": "packages/sdk"
22
- },
23
- "bugs": {
24
- "url": "https://github.com/universal-simulation-ltd/universal-platform/issues"
25
- },
26
- "type": "module",
27
- "main": "./dist/index.js",
28
- "module": "./dist/index.js",
29
- "types": "./dist/index.d.ts",
30
- "sideEffects": false,
31
- "exports": {
32
- ".": {
33
- "types": "./dist/index.d.ts",
34
- "import": "./dist/index.js"
35
- }
36
- },
37
- "files": [
38
- "dist",
39
- "README.md"
40
- ],
41
- "scripts": {
42
- "build": "tsc -p tsconfig.build.json",
43
- "dev": "tsc -p tsconfig.build.json --watch",
44
- "typecheck": "tsc --noEmit",
45
- "prepublishOnly": "npm run typecheck && npm run build"
46
- },
47
- "peerDependencies": {
48
- "react": "^18.0.0 || ^19.0.0"
49
- },
50
- "dependencies": {
51
- "@supabase/supabase-js": "^2.45.0"
52
- },
53
- "devDependencies": {
54
- "@types/react": "^18.3.0",
55
- "react": "^18.3.0",
56
- "typescript": "^5.7.2"
57
- },
58
- "publishConfig": {
59
- "access": "public"
60
- }
61
- }
1
+ {
2
+ "name": "@unisim/sdk",
3
+ "version": "0.3.1",
4
+ "description": "Shared React SDK for the Universal Suite — auth, entitlements, usage telemetry, changelog, org admin.",
5
+ "license": "MIT",
6
+ "author": "Universal Simulation Ltd",
7
+ "keywords": [
8
+ "supabase",
9
+ "react",
10
+ "hooks",
11
+ "saas",
12
+ "multi-tenant",
13
+ "auth",
14
+ "rbac",
15
+ "universal-simulation"
16
+ ],
17
+ "homepage": "https://github.com/universal-simulation-ltd/universal-platform/tree/main/packages/sdk#readme",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/universal-simulation-ltd/universal-platform.git",
21
+ "directory": "packages/sdk"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/universal-simulation-ltd/universal-platform/issues"
25
+ },
26
+ "type": "module",
27
+ "main": "./dist/index.js",
28
+ "module": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "sideEffects": false,
31
+ "exports": {
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "import": "./dist/index.js"
35
+ }
36
+ },
37
+ "files": [
38
+ "dist",
39
+ "README.md"
40
+ ],
41
+ "scripts": {
42
+ "build": "tsc -p tsconfig.build.json",
43
+ "dev": "tsc -p tsconfig.build.json --watch",
44
+ "typecheck": "tsc --noEmit",
45
+ "prepublishOnly": "npm run typecheck && npm run build"
46
+ },
47
+ "peerDependencies": {
48
+ "react": "^18.0.0 || ^19.0.0"
49
+ },
50
+ "dependencies": {
51
+ "@supabase/supabase-js": "^2.45.0"
52
+ },
53
+ "devDependencies": {
54
+ "@types/react": "^18.3.0",
55
+ "react": "^18.3.0",
56
+ "typescript": "^5.7.2"
57
+ },
58
+ "publishConfig": {
59
+ "access": "public"
60
+ }
61
+ }