@hanzo/ui 8.30.4 → 8.31.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.
@@ -1,6 +1,7 @@
1
1
  'use client';"use strict";
2
2
  'use client';
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.endSessionUrl = endSessionUrl;
4
5
  exports.signOut = signOut;
5
6
  exports.useSignOut = useSignOut;
6
7
  const react_1 = require("react");
@@ -45,13 +46,30 @@ async function end(origin, idToken, clientId, everywhere) {
45
46
  // The tokens are already revoked and cleared; this machine is signed out.
46
47
  }
47
48
  }
49
+ /**
50
+ * The issuer's end-session page a sign-out everywhere leaves through: the client,
51
+ * `everywhere`, and `to` as the post-logout address, which IAM follows only when
52
+ * the client registered it exactly and otherwise replaces with its own sign-in.
53
+ * No id_token_hint: a token does not belong in an address bar or a log line, and
54
+ * IAM names the application from client_id.
55
+ */
56
+ function endSessionUrl(issuer, to, clientId) {
57
+ const q = new URLSearchParams({
58
+ ...(clientId ? { client_id: clientId } : {}),
59
+ everywhere: 'true',
60
+ post_logout_redirect_uri: new URL(to, window.location.origin).href,
61
+ });
62
+ return `${issuer.replace(/\/+$/, '')}/v1/iam/oauth/logout?${q}`;
63
+ }
48
64
  /**
49
65
  * Sign out: hand both tokens back to IAM through its /v1/iam revocation route
50
66
  * (a same-site call, refresh token first, since it is the one that mints more),
51
67
  * end IAM's session cookie, clear the local session, and land on the site's own
52
- * `/login?from=logout`. IAM's own logout page is never visited.
68
+ * `/login?from=logout`. A sign-out `everywhere` with an `issuer` lands through the
69
+ * issuer's end-session page instead (`endSessionUrl`), so the sessions on the
70
+ * issuer's other sign-in origins end too.
53
71
  */
54
- async function signOut(iam, { via, to = '/login?from=logout', clientId, track, everywhere } = {}) {
72
+ async function signOut(iam, { via, to = '/login?from=logout', clientId, track, everywhere, issuer } = {}) {
55
73
  const origin = via ?? window.location.origin;
56
74
  const access = (0, session_1.bearer)();
57
75
  const refresh = (0, session_1.refresher)();
@@ -64,12 +82,12 @@ async function signOut(iam, { via, to = '/login?from=logout', clientId, track, e
64
82
  }
65
83
  finally {
66
84
  track?.('logout_completed', {});
67
- window.location.assign(to);
85
+ window.location.assign(everywhere && issuer ? endSessionUrl(issuer, to, clientId) : to);
68
86
  }
69
87
  }
70
88
  /** `signOut` bound to the page's IAM client. */
71
89
  function useSignOut(options = {}) {
72
90
  const { sdk, config } = (0, react_2.useIam)();
73
- const { via, to, track, clientId = config.clientId, everywhere } = options;
74
- return (0, react_1.useCallback)(() => signOut(sdk, { via, to, track, clientId, everywhere }), [sdk, via, to, track, clientId, everywhere]);
91
+ const { via, to, track, clientId = config.clientId, everywhere, issuer = config.serverUrl } = options;
92
+ return (0, react_1.useCallback)(() => signOut(sdk, { via, to, track, clientId, everywhere, issuer }), [sdk, via, to, track, clientId, everywhere, issuer]);
75
93
  }
@@ -15,14 +15,35 @@ export interface SignOutOptions {
15
15
  * too. An application of another organization keeps its grant.
16
16
  */
17
17
  everywhere?: boolean;
18
+ /**
19
+ * The issuer (the IAM config's `serverUrl`, https://hanzo.id). With
20
+ * `everywhere`, the sign-out ENDS on the issuer's end-session page as a
21
+ * top-level navigation, because a session lives on each of the issuer's
22
+ * sign-in origins (hanzo.id, hanzo.ai, hanzo.market) behind a host-only cookie
23
+ * this page cannot reach: IAM ends the one on each origin in turn (hanzoai/iam
24
+ * logout `nextSignout`) and the browser lands on the issuer's sign-in, which is
25
+ * hanzo.ai/login, or on `to` when the client registered it. Without an issuer
26
+ * the sign-out ends here, as before.
27
+ */
28
+ issuer?: string;
18
29
  }
30
+ /**
31
+ * The issuer's end-session page a sign-out everywhere leaves through: the client,
32
+ * `everywhere`, and `to` as the post-logout address, which IAM follows only when
33
+ * the client registered it exactly and otherwise replaces with its own sign-in.
34
+ * No id_token_hint: a token does not belong in an address bar or a log line, and
35
+ * IAM names the application from client_id.
36
+ */
37
+ export declare function endSessionUrl(issuer: string, to: string, clientId?: string): string;
19
38
  /**
20
39
  * Sign out: hand both tokens back to IAM through its /v1/iam revocation route
21
40
  * (a same-site call, refresh token first, since it is the one that mints more),
22
41
  * end IAM's session cookie, clear the local session, and land on the site's own
23
- * `/login?from=logout`. IAM's own logout page is never visited.
42
+ * `/login?from=logout`. A sign-out `everywhere` with an `issuer` lands through the
43
+ * issuer's end-session page instead (`endSessionUrl`), so the sessions on the
44
+ * issuer's other sign-in origins end too.
24
45
  */
25
- export declare function signOut(iam: IAM, { via, to, clientId, track, everywhere }?: SignOutOptions): Promise<void>;
46
+ export declare function signOut(iam: IAM, { via, to, clientId, track, everywhere, issuer }?: SignOutOptions): Promise<void>;
26
47
  /** `signOut` bound to the page's IAM client. */
27
48
  export declare function useSignOut(options?: SignOutOptions): () => Promise<void>;
28
49
  //# sourceMappingURL=signout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signout.d.ts","sourceRoot":"","sources":["../../src/auth/signout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,yFAAyF;IACzF,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC/D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAwCD;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAc3I;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAI5E"}
1
+ {"version":3,"file":"signout.d.ts","sourceRoot":"","sources":["../../src/auth/signout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAIrC,MAAM,WAAW,cAAc;IAC7B,iFAAiF;IACjF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,yFAAyF;IACzF,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kDAAkD;IAClD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAC/D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAwCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOnF;AAED;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAcnJ;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAI5E"}
@@ -41,13 +41,30 @@ async function end(origin, idToken, clientId, everywhere) {
41
41
  // The tokens are already revoked and cleared; this machine is signed out.
42
42
  }
43
43
  }
44
+ /**
45
+ * The issuer's end-session page a sign-out everywhere leaves through: the client,
46
+ * `everywhere`, and `to` as the post-logout address, which IAM follows only when
47
+ * the client registered it exactly and otherwise replaces with its own sign-in.
48
+ * No id_token_hint: a token does not belong in an address bar or a log line, and
49
+ * IAM names the application from client_id.
50
+ */
51
+ export function endSessionUrl(issuer, to, clientId) {
52
+ const q = new URLSearchParams({
53
+ ...(clientId ? { client_id: clientId } : {}),
54
+ everywhere: 'true',
55
+ post_logout_redirect_uri: new URL(to, window.location.origin).href,
56
+ });
57
+ return `${issuer.replace(/\/+$/, '')}/v1/iam/oauth/logout?${q}`;
58
+ }
44
59
  /**
45
60
  * Sign out: hand both tokens back to IAM through its /v1/iam revocation route
46
61
  * (a same-site call, refresh token first, since it is the one that mints more),
47
62
  * end IAM's session cookie, clear the local session, and land on the site's own
48
- * `/login?from=logout`. IAM's own logout page is never visited.
63
+ * `/login?from=logout`. A sign-out `everywhere` with an `issuer` lands through the
64
+ * issuer's end-session page instead (`endSessionUrl`), so the sessions on the
65
+ * issuer's other sign-in origins end too.
49
66
  */
50
- export async function signOut(iam, { via, to = '/login?from=logout', clientId, track, everywhere } = {}) {
67
+ export async function signOut(iam, { via, to = '/login?from=logout', clientId, track, everywhere, issuer } = {}) {
51
68
  const origin = via ?? window.location.origin;
52
69
  const access = bearer();
53
70
  const refresh = refresher();
@@ -60,13 +77,13 @@ export async function signOut(iam, { via, to = '/login?from=logout', clientId, t
60
77
  }
61
78
  finally {
62
79
  track?.('logout_completed', {});
63
- window.location.assign(to);
80
+ window.location.assign(everywhere && issuer ? endSessionUrl(issuer, to, clientId) : to);
64
81
  }
65
82
  }
66
83
  /** `signOut` bound to the page's IAM client. */
67
84
  export function useSignOut(options = {}) {
68
85
  const { sdk, config } = useIam();
69
- const { via, to, track, clientId = config.clientId, everywhere } = options;
70
- return useCallback(() => signOut(sdk, { via, to, track, clientId, everywhere }), [sdk, via, to, track, clientId, everywhere]);
86
+ const { via, to, track, clientId = config.clientId, everywhere, issuer = config.serverUrl } = options;
87
+ return useCallback(() => signOut(sdk, { via, to, track, clientId, everywhere, issuer }), [sdk, via, to, track, clientId, everywhere, issuer]);
71
88
  }
72
89
  //# sourceMappingURL=signout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signout.js","sourceRoot":"","sources":["../../src/auth/signout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signout.js","sourceRoot":"","sources":["../../src/auth/signout.ts"],"names":[],"mappings":"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"}
@@ -48,7 +48,7 @@ const frame = (size) => ({
48
48
  style: size === 'fullscreen'
49
49
  ? undefined
50
50
  : {
51
- boxShadow: 'var(--shadow-floating, 0 24px 60px -16px rgb(0 0 0 / .75))',
51
+ boxShadow: 'none',
52
52
  },
53
53
  });
54
54
  exports.frame = frame;
@@ -45,7 +45,7 @@ export const frame = (size) => ({
45
45
  style: size === 'fullscreen'
46
46
  ? undefined
47
47
  : {
48
- boxShadow: 'var(--shadow-floating, 0 24px 60px -16px rgb(0 0 0 / .75))',
48
+ boxShadow: 'none',
49
49
  },
50
50
  });
51
51
  /** The scrim under a sized dialog: black at 72%, opaque layer. */
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/backends/gui/dialog.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../../src/backends/gui/dialog.tsx"],"names":[],"mappings":"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"}
package/dist/gallery.html CHANGED
@@ -1,4 +1,4 @@
1
- <!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.30.4</title><style>/* @hanzo/ui — generated by scripts/gen-css.mjs. Do not edit. */
1
+ <!doctype html><html lang="en" class="t_dark"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>@hanzo/ui 8.31.0</title><style>/* @hanzo/ui — generated by scripts/gen-css.mjs. Do not edit. */
2
2
  :root { --hanzo-ui-styles: 1; }
3
3
  /* Hanzo Design System — the entry point. Import THIS one file.
4
4
  *
@@ -0,0 +1,347 @@
1
+ 'use client';"use strict";
2
+ 'use client';
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.BUSINESS_APPS = void 0;
5
+ exports.buildSeamlessAppUrl = buildSeamlessAppUrl;
6
+ exports.BusinessHeader = BusinessHeader;
7
+ const jsx_runtime_1 = require("react/jsx-runtime");
8
+ /**
9
+ * BusinessHeader — the universal global header for every Hanzo Business application
10
+ * (`hanzo.team`, `crm.hanzo.ai`, `cms.hanzo.ai`, `marketing.hanzo.ai`, `ads.hanzo.ai`,
11
+ * `social.hanzo.ai`, `console.hanzo.ai`, `platform.hanzo.ai`, etc.).
12
+ *
13
+ * Layout & Behavior:
14
+ * - Top Left:
15
+ * 1. Product identity + App Switcher trigger (`Hanzo CRM ▾`, `Hanzo Team ▾`, etc.)
16
+ * Opening the App Switcher lists CRM, Work (Team), CMS, Email, Ads, Cal, Bots,
17
+ * Social, Chat, Dev, Commerce, Analytics, Data Room, Sign, Billing, Console, Platform.
18
+ * 2. Current organization beneath the product identity (e.g. `Hanzo AI`), clickable
19
+ * to switch organizations.
20
+ * - Center:
21
+ * Breadcrumbs / Command Search (`children`).
22
+ * - Top Right:
23
+ * Signed-in user's avatar + display name + Account Menu:
24
+ * - Identity card showing Display Name, Email, and `Current account` indicator
25
+ * - Switch account (choose between authenticated identities on this browser,
26
+ * never confused with organizations)
27
+ * - Add another account (`prompt=login` without ending existing sessions)
28
+ * - Switch organization (choose between organizations the user belongs to)
29
+ * - Settings & Theme
30
+ * - Sign out
31
+ */
32
+ const react_1 = require("react");
33
+ const gui_1 = require("@hanzo/gui");
34
+ const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
35
+ const BrandMark_1 = require("./BrandMark.cjs");
36
+ const name_1 = require("./name.cjs");
37
+ const OrgMark_1 = require("./OrgMark.cjs");
38
+ exports.BUSINESS_APPS = [
39
+ {
40
+ id: 'crm',
41
+ label: 'CRM',
42
+ productTitle: 'Hanzo CRM',
43
+ description: 'Pipeline, contacts, investors & deals',
44
+ href: 'https://crm.hanzo.ai',
45
+ supportsFreshAuth: true,
46
+ },
47
+ {
48
+ id: 'team',
49
+ label: 'Work',
50
+ productTitle: 'Hanzo Team',
51
+ description: 'Shared workspace, docs, tasks & drive',
52
+ href: 'https://hanzo.team',
53
+ supportsFreshAuth: false,
54
+ },
55
+ {
56
+ id: 'cms',
57
+ label: 'CMS',
58
+ productTitle: 'Hanzo CMS',
59
+ description: 'Content, pages, collections & media',
60
+ href: 'https://cms.hanzo.ai/admin',
61
+ supportsFreshAuth: false,
62
+ },
63
+ {
64
+ id: 'email',
65
+ label: 'Email',
66
+ productTitle: 'Hanzo Email',
67
+ description: 'Campaigns, journeys & broadcasts',
68
+ href: 'https://marketing.hanzo.ai',
69
+ supportsFreshAuth: true,
70
+ },
71
+ {
72
+ id: 'ads',
73
+ label: 'Ads',
74
+ productTitle: 'Hanzo Ads',
75
+ description: 'Ad spend, ROAS & attribution',
76
+ href: 'https://ads.hanzo.ai',
77
+ supportsFreshAuth: true,
78
+ },
79
+ {
80
+ id: 'cal',
81
+ label: 'Cal',
82
+ productTitle: 'Hanzo Cal',
83
+ description: 'Scheduling, bookings & availability',
84
+ href: 'https://hanzo.team/cal',
85
+ supportsFreshAuth: false,
86
+ },
87
+ {
88
+ id: 'bots',
89
+ label: 'Bots',
90
+ productTitle: 'Hanzo Bots',
91
+ description: 'Autonomous AI agents & workflows',
92
+ href: 'https://hanzo.bot',
93
+ supportsFreshAuth: false,
94
+ },
95
+ {
96
+ id: 'social',
97
+ label: 'Social',
98
+ productTitle: 'Hanzo Publish',
99
+ description: 'Social scheduling, inbox & listening',
100
+ href: 'https://social.hanzo.ai',
101
+ supportsFreshAuth: true,
102
+ },
103
+ {
104
+ id: 'chat',
105
+ label: 'Chat',
106
+ productTitle: 'Hanzo Chat',
107
+ description: 'AI assistant, models & playground',
108
+ href: 'https://hanzo.ai/chat',
109
+ supportsFreshAuth: false,
110
+ },
111
+ {
112
+ id: 'dev',
113
+ label: 'Dev',
114
+ productTitle: 'Hanzo Dev',
115
+ description: 'Coding agents & cloud workspaces',
116
+ href: 'https://hanzo.ai/dev',
117
+ supportsFreshAuth: false,
118
+ },
119
+ {
120
+ id: 'commerce',
121
+ label: 'Commerce',
122
+ productTitle: 'Hanzo Commerce',
123
+ description: 'Store, products, orders & subscriptions',
124
+ href: 'https://commerce-admin.hanzo.ai/admin/',
125
+ supportsFreshAuth: false,
126
+ },
127
+ {
128
+ id: 'analytics',
129
+ label: 'Analytics',
130
+ productTitle: 'Hanzo Analytics',
131
+ description: 'Web traffic, funnels & retention',
132
+ href: 'https://analytics.hanzo.ai',
133
+ supportsFreshAuth: false,
134
+ },
135
+ {
136
+ id: 'dataroom',
137
+ label: 'Data Room',
138
+ productTitle: 'Hanzo Data Room',
139
+ description: 'Secure investor & deal data rooms',
140
+ href: 'https://dataroom.hanzo.ai',
141
+ supportsFreshAuth: false,
142
+ },
143
+ {
144
+ id: 'sign',
145
+ label: 'Sign',
146
+ productTitle: 'Hanzo Sign',
147
+ description: 'Document e-signatures & agreements',
148
+ href: 'https://esign.hanzo.ai',
149
+ supportsFreshAuth: false,
150
+ },
151
+ {
152
+ id: 'billing',
153
+ label: 'Billing',
154
+ productTitle: 'Hanzo Billing',
155
+ description: 'Usage, balance, invoices & payment methods',
156
+ href: 'https://billing.hanzo.ai',
157
+ supportsFreshAuth: false,
158
+ },
159
+ {
160
+ id: 'console',
161
+ label: 'Console',
162
+ productTitle: 'Hanzo Console',
163
+ description: 'Cloud, AI infrastructure & IAM',
164
+ href: 'https://console.hanzo.ai',
165
+ supportsFreshAuth: true,
166
+ },
167
+ {
168
+ id: 'platform',
169
+ label: 'Platform',
170
+ productTitle: 'Hanzo Platform',
171
+ description: 'PaaS deployments, clusters & containers',
172
+ href: 'https://platform.hanzo.ai',
173
+ supportsFreshAuth: true,
174
+ },
175
+ ];
176
+ function AppIcon({ id, size = 16 }) {
177
+ switch (id) {
178
+ case 'crm':
179
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Briefcase, { size: size });
180
+ case 'team':
181
+ case 'work':
182
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Users, { size: size });
183
+ case 'cms':
184
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Globe, { size: size });
185
+ case 'email':
186
+ case 'marketing':
187
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Mail, { size: size });
188
+ case 'ads':
189
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Megaphone, { size: size });
190
+ case 'cal':
191
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Calendar, { size: size });
192
+ case 'bots':
193
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Bot, { size: size });
194
+ case 'social':
195
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Share2, { size: size });
196
+ case 'chat':
197
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.MessageCircle, { size: size });
198
+ case 'dev':
199
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Terminal, { size: size });
200
+ case 'commerce':
201
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ShoppingBag, { size: size });
202
+ case 'analytics':
203
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.BarChart3, { size: size });
204
+ case 'dataroom':
205
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.FolderLock, { size: size });
206
+ case 'sign':
207
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.FileSignature, { size: size });
208
+ case 'billing':
209
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.CreditCard, { size: size });
210
+ case 'console':
211
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Sparkles, { size: size });
212
+ case 'platform':
213
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.LayoutGrid, { size: size });
214
+ default:
215
+ return (0, jsx_runtime_1.jsx)(lucide_icons_2_1.AppWindow, { size: size });
216
+ }
217
+ }
218
+ /** Build a session-preserving destination URL when switching between Hanzo Business apps. */
219
+ function buildSeamlessAppUrl(app, opts) {
220
+ try {
221
+ const u = new URL(app.href);
222
+ if (app.supportsFreshAuth && opts?.who) {
223
+ const nextPath = opts?.org ? `/?org=${encodeURIComponent(opts.org)}` : '/';
224
+ return `${u.origin}/auth/fresh?next=${encodeURIComponent(nextPath)}&who=${encodeURIComponent(opts.who)}`;
225
+ }
226
+ if (opts?.org && !u.searchParams.has('org')) {
227
+ u.searchParams.set('org', opts.org);
228
+ }
229
+ return u.toString();
230
+ }
231
+ catch {
232
+ return app.href;
233
+ }
234
+ }
235
+ function BusinessHeader({ appId = 'crm', appTitle, showAppTitle = false, apps = exports.BUSINESS_APPS, onSelectApp, brandMark, currentOrg, orgs = [], onSelectOrg, onAllOrgs, onCreateOrg, leftSlot, children, rightSlot, user, accounts = [], onSwitchAccount, onAddAccount, onSettings, onOrgSettings, onBilling, theme, onSignOut, }) {
236
+ const [appMenuOpen, setAppMenuOpen] = (0, react_1.useState)(false);
237
+ const [orgMenuOpen, setOrgMenuOpen] = (0, react_1.useState)(false);
238
+ const [accountMenuOpen, setAccountMenuOpen] = (0, react_1.useState)(false);
239
+ const activeApp = apps.find((a) => a.id === appId) ?? apps[0];
240
+ const resolvedAppTitle = appTitle || activeApp?.productTitle || 'Hanzo CRM';
241
+ const orgDisplay = currentOrg?.displayName?.trim() || currentOrg?.name || 'Hanzo AI';
242
+ const userName = (0, name_1.displayName)(user?.name, user?.email) || 'Account';
243
+ const userEmail = user?.email || '';
244
+ const userSub = user?.sub || '';
245
+ // Deduplicate accounts list while keeping current user identifiable
246
+ const knownAccounts = (() => {
247
+ const list = [];
248
+ const seen = new Set();
249
+ if (userSub) {
250
+ seen.add(userSub);
251
+ list.push({
252
+ sub: userSub,
253
+ owner: user?.owner || currentOrg?.name || 'hanzo',
254
+ name: userName,
255
+ email: userEmail || undefined,
256
+ avatar: user?.avatar,
257
+ });
258
+ }
259
+ for (const acc of accounts) {
260
+ if (acc.sub && !seen.has(acc.sub)) {
261
+ seen.add(acc.sub);
262
+ list.push(acc);
263
+ }
264
+ }
265
+ return list;
266
+ })();
267
+ const handleLaunchApp = (app) => {
268
+ setAppMenuOpen(false);
269
+ if (onSelectApp) {
270
+ onSelectApp(app);
271
+ return;
272
+ }
273
+ if (typeof window !== 'undefined') {
274
+ const targetUrl = buildSeamlessAppUrl(app, {
275
+ who: userSub || undefined,
276
+ org: currentOrg?.name || undefined,
277
+ });
278
+ window.location.assign(targetUrl);
279
+ }
280
+ };
281
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { render: "header", height: 52, px: "$3", gap: "$3", items: "center", justify: "space-between", borderBottomWidth: 1, borderColor: "$borderColor", bg: "$background", shrink: 0, "data-slot": "bar", "data-testid": "hanzo-business-header", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$2", minW: 0, shrink: 0, children: [leftSlot, (0, jsx_runtime_1.jsxs)(gui_1.Popover, { open: appMenuOpen, onOpenChange: setAppMenuOpen, placement: "bottom-start", allowFlip: true, stayInFrame: true, children: [(0, jsx_runtime_1.jsx)(gui_1.Popover.Trigger, { asChild: true, children: (0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "button", tabIndex: 0, cursor: "pointer", items: "center", gap: "$1.5", height: 34, px: "$2", rounded: "$3", borderWidth: 0, outlineWidth: 0, hoverStyle: { bg: '$color3' }, "aria-label": `${resolvedAppTitle} — Switch application`, "aria-haspopup": "menu", "aria-expanded": appMenuOpen, "data-testid": "business-app-switcher-trigger", onKeyDown: (e) => {
282
+ if (e?.key === 'Enter' || e?.key === ' ') {
283
+ e.preventDefault?.();
284
+ setAppMenuOpen(!appMenuOpen);
285
+ }
286
+ }, children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { items: "center", justify: "center", width: 24, height: 24, shrink: 0, children: brandMark ?? (0, jsx_runtime_1.jsx)(BrandMark_1.BrandMark, { size: 20, wordmark: "" }) }), showAppTitle ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$3", fontWeight: "700", color: "$color12", numberOfLines: 1, children: resolvedAppTitle })) : null, (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronDown, { size: 13, color: "$color10" })] }) }), (0, jsx_runtime_1.jsx)(gui_1.Popover.Content, { role: "menu", "aria-label": "Hanzo Business Applications", borderWidth: 1, elevation: "$4", p: "$2.5", width: 360, bg: "$background", borderColor: "$borderColor", rounded: "$4", style: { zIndex: 100000 }, children: (0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$2", width: "100%", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", justify: "space-between", px: "$2", pt: "$1", children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", fontWeight: "700", color: "$color10", textTransform: "uppercase", letterSpacing: 0.6, children: "Hanzo Business Suite" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$color10", children: orgDisplay })] }), (0, jsx_runtime_1.jsx)(gui_1.YStack, { gap: "$0.5", maxH: 420, style: { overflowY: 'auto' }, children: apps.map((app) => {
287
+ const isCurrent = app.id === appId;
288
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2.5", py: "$2", rounded: "$3", bg: isCurrent ? '$color3' : 'transparent', hoverStyle: { bg: '$color3' }, onPress: () => handleLaunchApp(app), "data-testid": `app-switcher-item-${app.id}`, children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { width: 32, height: 32, rounded: "$3", bg: isCurrent ? '$color4' : '$color2', items: "center", justify: "center", shrink: 0, children: (0, jsx_runtime_1.jsx)(AppIcon, { id: app.id, size: 16 }) }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, minW: 0, gap: 1, children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$1.5", children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: "600", color: "$color12", numberOfLines: 1, children: app.label }), isCurrent ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: 10, fontWeight: "600", color: "$color10", px: "$1.5", py: 1, rounded: "$2", bg: "$color4", children: "Current" })) : null] }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$color10", numberOfLines: 1, children: app.description })] }), isCurrent ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 14, color: "$color12" }) : null] }, app.id));
289
+ }) })] }) })] }), (0, jsx_runtime_1.jsxs)(gui_1.Popover, { open: orgMenuOpen, onOpenChange: setOrgMenuOpen, placement: "bottom-start", allowFlip: true, stayInFrame: true, children: [(0, jsx_runtime_1.jsx)(gui_1.Popover.Trigger, { asChild: true, children: (0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "button", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2", height: 34, px: "$2.5", rounded: "$3", borderWidth: 0, outlineWidth: 0, hoverStyle: { bg: '$color3' }, "aria-label": `Current organization: ${orgDisplay}. Click to switch organization.`, "data-testid": "business-org-subtitle-trigger", onKeyDown: (e) => {
290
+ if (e?.key === 'Enter' || e?.key === ' ') {
291
+ e.preventDefault?.();
292
+ setOrgMenuOpen(!orgMenuOpen);
293
+ }
294
+ }, children: [(0, jsx_runtime_1.jsx)(OrgMark_1.OrgMark, { org: { name: orgDisplay, logo: currentOrg?.logo }, size: 22 }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: "600", color: "$color12", numberOfLines: 1, maxW: 220, children: orgDisplay }), (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronDown, { size: 13, color: "$color10" })] }) }), (0, jsx_runtime_1.jsx)(gui_1.Popover.Content, { role: "menu", "aria-label": "Switch organization", borderWidth: 1, elevation: "$4", p: "$2", width: 280, bg: "$background", borderColor: "$borderColor", rounded: "$4", style: { zIndex: 100000 }, children: (0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$1", width: "100%", children: [(0, jsx_runtime_1.jsx)(gui_1.XStack, { px: "$2", py: "$1", items: "center", justify: "space-between", children: (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", fontWeight: "700", color: "$color10", textTransform: "uppercase", letterSpacing: 0.5, children: "Switch organization" }) }), orgs.map((o) => {
295
+ const active = o.name === currentOrg?.name;
296
+ const label = o.displayName?.trim() || o.name;
297
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", "aria-checked": active, tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", bg: active ? '$color3' : 'transparent', hoverStyle: { bg: '$color3' }, onPress: () => {
298
+ setOrgMenuOpen(false);
299
+ onSelectOrg?.(o.name);
300
+ }, children: [(0, jsx_runtime_1.jsx)(OrgMark_1.OrgMark, { org: { name: label, logo: o.logo }, size: 22 }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, minW: 0, children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: active ? '600' : '500', color: "$color12", numberOfLines: 1, children: label }), o.displayName && o.displayName !== o.name ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$color10", numberOfLines: 1, children: o.name })) : null] }), active ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 14, color: "$color12" }) : null] }, o.name));
301
+ }), (onAllOrgs || onCreateOrg) ? (0, jsx_runtime_1.jsx)(gui_1.Separator, { borderColor: "$borderColor", my: "$1" }) : null, onAllOrgs ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
302
+ setOrgMenuOpen(false);
303
+ onAllOrgs();
304
+ }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Building2, { size: 14, color: "$color10" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$color12", children: "All organizations\u2026" })] })) : null, onCreateOrg ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
305
+ setOrgMenuOpen(false);
306
+ onCreateOrg();
307
+ }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Plus, { size: 14, color: "$color10" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$color12", children: "Create organization" })] })) : null] }) })] })] }), (0, jsx_runtime_1.jsx)(gui_1.XStack, { flex: 1, items: "center", justify: "center", minW: 0, px: "$2", children: children }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$2", shrink: 0, children: [rightSlot, (0, jsx_runtime_1.jsxs)(gui_1.Popover, { open: accountMenuOpen, onOpenChange: setAccountMenuOpen, placement: "bottom-end", allowFlip: true, stayInFrame: true, children: [(0, jsx_runtime_1.jsx)(gui_1.Popover.Trigger, { asChild: true, children: (0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "button", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2", height: 40, px: "$2.5", rounded: "$3", hoverStyle: { bg: '$color3' }, "aria-label": `${userName} · Account menu`, "aria-haspopup": "menu", "aria-expanded": accountMenuOpen, "data-testid": "business-account-menu-trigger", onKeyDown: (e) => {
308
+ if (e?.key === 'Enter' || e?.key === ' ') {
309
+ e.preventDefault?.();
310
+ setAccountMenuOpen(!accountMenuOpen);
311
+ }
312
+ }, children: [user?.avatar || userName ? ((0, jsx_runtime_1.jsx)(OrgMark_1.OrgMark, { org: { name: userName, logo: user?.avatar }, size: 28 })) : ((0, jsx_runtime_1.jsx)(lucide_icons_2_1.UserRound, { size: 18 })), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { minW: 0, justify: "center", display: "none", $sm: { display: 'flex' }, children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: "600", color: "$color12", numberOfLines: 1, maxW: 160, style: { lineHeight: '16px' }, children: userName }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: 11, color: "$color10", numberOfLines: 1, maxW: 160, style: { lineHeight: '13px' }, children: "Current account" })] }), (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronDown, { size: 14, color: "$color10" })] }) }), (0, jsx_runtime_1.jsx)(gui_1.Popover.Content, { role: "menu", "aria-label": "Account menu", borderWidth: 1, elevation: "$4", p: "$2", width: 310, bg: "$background", borderColor: "$borderColor", rounded: "$4", style: { zIndex: 100000 }, children: (0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$1", width: "100%", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$2.5", px: "$2", py: "$2", rounded: "$3", bg: "$color2", children: [(0, jsx_runtime_1.jsx)(OrgMark_1.OrgMark, { org: { name: userName, logo: user?.avatar }, size: 36 }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, minW: 0, gap: 1, children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$3", fontWeight: "700", color: "$color12", numberOfLines: 1, children: userName }), userEmail && userEmail !== userName ? ((0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$color10", numberOfLines: 1, children: userEmail })) : null, (0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", gap: "$1.5", mt: 2, children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { width: 6, height: 6, rounded: 999, bg: "#10b981" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: 11, fontWeight: "600", color: "$color10", children: "Current account" })] })] })] }), (0, jsx_runtime_1.jsx)(gui_1.Separator, { borderColor: "$borderColor", my: "$1" }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$0.5", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { px: "$2", py: "$1", items: "center", justify: "space-between", children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", fontWeight: "700", color: "$color10", textTransform: "uppercase", letterSpacing: 0.5, children: "Switch account" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: 11, color: "$color9", children: "Identities" })] }), knownAccounts.map((acc) => {
313
+ const isCurrent = Boolean(userSub && acc.sub === userSub);
314
+ const accName = acc.name || acc.email || acc.sub;
315
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", "aria-checked": isCurrent, tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", bg: isCurrent ? '$color3' : 'transparent', hoverStyle: { bg: '$color3' }, onPress: () => {
316
+ setAccountMenuOpen(false);
317
+ if (!isCurrent)
318
+ onSwitchAccount?.(acc);
319
+ }, "data-testid": `switch-account-${acc.sub}`, children: [(0, jsx_runtime_1.jsx)(OrgMark_1.OrgMark, { org: { name: accName, logo: acc.avatar }, size: 24 }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { flex: 1, minW: 0, children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: isCurrent ? '600' : '500', color: "$color12", numberOfLines: 1, children: accName }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", color: "$color10", numberOfLines: 1, children: acc.email && acc.email !== accName ? acc.email : isCurrent ? 'Current account' : `Identity · ${acc.owner}` })] }), isCurrent ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 14, color: "$color12" }) : null] }, acc.sub));
320
+ }), onAddAccount ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
321
+ setAccountMenuOpen(false);
322
+ onAddAccount();
323
+ }, "data-testid": "add-another-account", children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { width: 24, height: 24, rounded: 999, bg: "$color3", items: "center", justify: "center", children: (0, jsx_runtime_1.jsx)(lucide_icons_2_1.UserPlus, { size: 13, color: "$color11" }) }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: "500", color: "$color12", children: "Add another account" })] })) : null] }), (0, jsx_runtime_1.jsx)(gui_1.Separator, { borderColor: "$borderColor", my: "$1" }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$0.5", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { px: "$2", py: "$1", items: "center", justify: "space-between", children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$1", fontWeight: "700", color: "$color10", textTransform: "uppercase", letterSpacing: 0.5, children: "Switch organization" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: 11, color: "$color9", children: orgDisplay })] }), orgs.slice(0, 5).map((o) => {
324
+ const active = o.name === currentOrg?.name;
325
+ const label = o.displayName?.trim() || o.name;
326
+ return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", "aria-checked": active, tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", bg: active ? '$color3' : 'transparent', hoverStyle: { bg: '$color3' }, onPress: () => {
327
+ setAccountMenuOpen(false);
328
+ if (!active)
329
+ onSelectOrg?.(o.name);
330
+ }, "data-testid": `switch-org-${o.name}`, children: [(0, jsx_runtime_1.jsx)(OrgMark_1.OrgMark, { org: { name: label, logo: o.logo }, size: 22 }), (0, jsx_runtime_1.jsx)(gui_1.Text, { flex: 1, fontSize: "$2", fontWeight: active ? '600' : '500', color: "$color12", numberOfLines: 1, children: label }), active ? (0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 14, color: "$color12" }) : null] }, o.name));
331
+ }), onAllOrgs ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
332
+ setAccountMenuOpen(false);
333
+ onAllOrgs();
334
+ }, "data-testid": "switch-org-all", children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Building2, { size: 14, color: "$color10" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$color12", children: "Switch organization\u2026" })] })) : null] }), (0, jsx_runtime_1.jsx)(gui_1.Separator, { borderColor: "$borderColor", my: "$1" }), (0, jsx_runtime_1.jsxs)(gui_1.YStack, { gap: "$0.5", children: [onSettings ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
335
+ setAccountMenuOpen(false);
336
+ onSettings();
337
+ }, "data-testid": "account-menu-settings", children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Settings, { size: 14, color: "$color10" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$color12", children: "Settings" })] })) : null, onOrgSettings && onOrgSettings !== onSettings ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
338
+ setAccountMenuOpen(false);
339
+ onOrgSettings();
340
+ }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Building2, { size: 14, color: "$color10" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$color12", children: "Organization settings" })] })) : null, onBilling ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
341
+ setAccountMenuOpen(false);
342
+ onBilling();
343
+ }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.CreditCard, { size: 14, color: "$color10" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$color12", children: "Billing" })] })) : null, theme != null ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { items: "center", justify: "space-between", px: "$2", py: "$1.5", rounded: "$3", children: [(0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", color: "$color12", children: "Theme" }), theme] })) : null] }), onSignOut ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(gui_1.Separator, { borderColor: "$borderColor", my: "$1" }), (0, jsx_runtime_1.jsxs)(gui_1.XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
344
+ setAccountMenuOpen(false);
345
+ onSignOut();
346
+ }, "data-testid": "account-menu-signout", children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.LogOut, { size: 14, color: "#ef4444" }), (0, jsx_runtime_1.jsx)(gui_1.Text, { fontSize: "$2", fontWeight: "500", color: "#ef4444", children: "Sign out" })] })] })) : null] }) })] })] })] }));
347
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * BusinessHeader — the universal global header for every Hanzo Business application
3
+ * (`hanzo.team`, `crm.hanzo.ai`, `cms.hanzo.ai`, `marketing.hanzo.ai`, `ads.hanzo.ai`,
4
+ * `social.hanzo.ai`, `console.hanzo.ai`, `platform.hanzo.ai`, etc.).
5
+ *
6
+ * Layout & Behavior:
7
+ * - Top Left:
8
+ * 1. Product identity + App Switcher trigger (`Hanzo CRM ▾`, `Hanzo Team ▾`, etc.)
9
+ * Opening the App Switcher lists CRM, Work (Team), CMS, Email, Ads, Cal, Bots,
10
+ * Social, Chat, Dev, Commerce, Analytics, Data Room, Sign, Billing, Console, Platform.
11
+ * 2. Current organization beneath the product identity (e.g. `Hanzo AI`), clickable
12
+ * to switch organizations.
13
+ * - Center:
14
+ * Breadcrumbs / Command Search (`children`).
15
+ * - Top Right:
16
+ * Signed-in user's avatar + display name + Account Menu:
17
+ * - Identity card showing Display Name, Email, and `Current account` indicator
18
+ * - Switch account (choose between authenticated identities on this browser,
19
+ * never confused with organizations)
20
+ * - Add another account (`prompt=login` without ending existing sessions)
21
+ * - Switch organization (choose between organizations the user belongs to)
22
+ * - Settings & Theme
23
+ * - Sign out
24
+ */
25
+ import { type ReactNode } from 'react';
26
+ export type BusinessAppId = 'crm' | 'team' | 'work' | 'cms' | 'email' | 'marketing' | 'ads' | 'cal' | 'bots' | 'social' | 'chat' | 'dev' | 'commerce' | 'analytics' | 'dataroom' | 'sign' | 'billing' | 'console' | 'platform';
27
+ export type BusinessAppItem = {
28
+ id: BusinessAppId;
29
+ /** Short name in the app switcher grid/list, e.g. 'CRM', 'CMS', 'Email', 'Work'. */
30
+ label: string;
31
+ /** Full product title when active at top-left, e.g. 'Hanzo CRM', 'Hanzo Team'. */
32
+ productTitle: string;
33
+ /** Subtitle explaining what the app does. */
34
+ description: string;
35
+ /** Canonical destination URL. */
36
+ href: string;
37
+ /** Whether the surface supports `/auth/fresh?next=/&who=<sub>` session handoff. */
38
+ supportsFreshAuth?: boolean;
39
+ };
40
+ export declare const BUSINESS_APPS: readonly BusinessAppItem[];
41
+ export type BusinessHeaderAccount = {
42
+ sub: string;
43
+ owner: string;
44
+ name: string;
45
+ email?: string;
46
+ avatar?: string;
47
+ };
48
+ export type BusinessHeaderOrg = {
49
+ name: string;
50
+ displayName?: string;
51
+ logo?: string;
52
+ };
53
+ export type BusinessHeaderProps = {
54
+ /** Current application ID (`'crm'`, `'team'`, `'cms'`, `'email'`, `'ads'`, `'console'`, etc.). */
55
+ appId?: BusinessAppId;
56
+ /** Explicit product title override, e.g. `'Hanzo CRM'`. */
57
+ appTitle?: string;
58
+ /** Whether to show the product title text next to the brand mark when in the app (default: `false`). */
59
+ showAppTitle?: boolean;
60
+ /** Available business apps in the app switcher. Defaults to `BUSINESS_APPS`. */
61
+ apps?: readonly BusinessAppItem[];
62
+ /** Custom handler when an app is selected from the switcher. */
63
+ onSelectApp?: (app: BusinessAppItem) => void;
64
+ /** Custom brand mark icon at the far left. */
65
+ brandMark?: ReactNode;
66
+ /** Current organization shown beneath the product title and in Switch organization. */
67
+ currentOrg?: BusinessHeaderOrg;
68
+ /** All organizations the user can switch between. */
69
+ orgs?: readonly BusinessHeaderOrg[];
70
+ /** Called when the user selects an organization. */
71
+ onSelectOrg?: (orgName: string) => void;
72
+ /** Called when the user clicks "All organizations" / "Switch organization" modal. */
73
+ onAllOrgs?: () => void;
74
+ /** Called when the user clicks "Create organization". */
75
+ onCreateOrg?: () => void;
76
+ /** Optional left-side slot before the app identity (e.g. mobile drawer hamburger). */
77
+ leftSlot?: ReactNode;
78
+ /** Center slot (e.g. breadcrumbs, global search `⌘K`). */
79
+ children?: ReactNode;
80
+ /** Optional right-side slot before the user account menu. */
81
+ rightSlot?: ReactNode;
82
+ /** Currently signed-in user identity. */
83
+ user?: {
84
+ sub?: string;
85
+ name?: string;
86
+ email?: string;
87
+ avatar?: string;
88
+ owner?: string;
89
+ } | null;
90
+ /** Authenticated identities available in this browser session (`Switch account`). */
91
+ accounts?: readonly BusinessHeaderAccount[];
92
+ /** Switch to another authenticated identity (`login_hint: account.sub`). */
93
+ onSwitchAccount?: (account: BusinessHeaderAccount) => void;
94
+ /** Authenticate an additional identity (`prompt=login`). */
95
+ onAddAccount?: () => void;
96
+ /** Open user/account settings. */
97
+ onSettings?: () => void;
98
+ /** Open organization settings. */
99
+ onOrgSettings?: () => void;
100
+ /** Open billing. */
101
+ onBilling?: () => void;
102
+ /** Theme toggle control rendered inside the account menu. */
103
+ theme?: ReactNode;
104
+ /** Sign out of the session. */
105
+ onSignOut?: () => void;
106
+ };
107
+ /** Build a session-preserving destination URL when switching between Hanzo Business apps. */
108
+ export declare function buildSeamlessAppUrl(app: BusinessAppItem, opts?: {
109
+ who?: string;
110
+ org?: string;
111
+ }): string;
112
+ export declare function BusinessHeader({ appId, appTitle, showAppTitle, apps, onSelectApp, brandMark, currentOrg, orgs, onSelectOrg, onAllOrgs, onCreateOrg, leftSlot, children, rightSlot, user, accounts, onSwitchAccount, onAddAccount, onSettings, onOrgSettings, onBilling, theme, onSignOut, }: BusinessHeaderProps): import("react").JSX.Element;
113
+ //# sourceMappingURL=BusinessHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BusinessHeader.d.ts","sourceRoot":"","sources":["../../src/product/BusinessHeader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,343 @@
1
+ 'use client';
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /**
4
+ * BusinessHeader — the universal global header for every Hanzo Business application
5
+ * (`hanzo.team`, `crm.hanzo.ai`, `cms.hanzo.ai`, `marketing.hanzo.ai`, `ads.hanzo.ai`,
6
+ * `social.hanzo.ai`, `console.hanzo.ai`, `platform.hanzo.ai`, etc.).
7
+ *
8
+ * Layout & Behavior:
9
+ * - Top Left:
10
+ * 1. Product identity + App Switcher trigger (`Hanzo CRM ▾`, `Hanzo Team ▾`, etc.)
11
+ * Opening the App Switcher lists CRM, Work (Team), CMS, Email, Ads, Cal, Bots,
12
+ * Social, Chat, Dev, Commerce, Analytics, Data Room, Sign, Billing, Console, Platform.
13
+ * 2. Current organization beneath the product identity (e.g. `Hanzo AI`), clickable
14
+ * to switch organizations.
15
+ * - Center:
16
+ * Breadcrumbs / Command Search (`children`).
17
+ * - Top Right:
18
+ * Signed-in user's avatar + display name + Account Menu:
19
+ * - Identity card showing Display Name, Email, and `Current account` indicator
20
+ * - Switch account (choose between authenticated identities on this browser,
21
+ * never confused with organizations)
22
+ * - Add another account (`prompt=login` without ending existing sessions)
23
+ * - Switch organization (choose between organizations the user belongs to)
24
+ * - Settings & Theme
25
+ * - Sign out
26
+ */
27
+ import { useState } from 'react';
28
+ import { Popover, Separator, Text, XStack, YStack } from '@hanzo/gui';
29
+ import { AppWindow, BarChart3, Bot, Briefcase, Building2, Calendar, Check, ChevronDown, CreditCard, FileSignature, FolderLock, Globe, LayoutGrid, LogOut, Mail, Megaphone, MessageCircle, Plus, Settings, Share2, ShoppingBag, Sparkles, Terminal, UserPlus, UserRound, Users, } from '@hanzogui/lucide-icons-2';
30
+ import { BrandMark } from './BrandMark.js';
31
+ import { displayName } from './name.js';
32
+ import { OrgMark } from './OrgMark.js';
33
+ export const BUSINESS_APPS = [
34
+ {
35
+ id: 'crm',
36
+ label: 'CRM',
37
+ productTitle: 'Hanzo CRM',
38
+ description: 'Pipeline, contacts, investors & deals',
39
+ href: 'https://crm.hanzo.ai',
40
+ supportsFreshAuth: true,
41
+ },
42
+ {
43
+ id: 'team',
44
+ label: 'Work',
45
+ productTitle: 'Hanzo Team',
46
+ description: 'Shared workspace, docs, tasks & drive',
47
+ href: 'https://hanzo.team',
48
+ supportsFreshAuth: false,
49
+ },
50
+ {
51
+ id: 'cms',
52
+ label: 'CMS',
53
+ productTitle: 'Hanzo CMS',
54
+ description: 'Content, pages, collections & media',
55
+ href: 'https://cms.hanzo.ai/admin',
56
+ supportsFreshAuth: false,
57
+ },
58
+ {
59
+ id: 'email',
60
+ label: 'Email',
61
+ productTitle: 'Hanzo Email',
62
+ description: 'Campaigns, journeys & broadcasts',
63
+ href: 'https://marketing.hanzo.ai',
64
+ supportsFreshAuth: true,
65
+ },
66
+ {
67
+ id: 'ads',
68
+ label: 'Ads',
69
+ productTitle: 'Hanzo Ads',
70
+ description: 'Ad spend, ROAS & attribution',
71
+ href: 'https://ads.hanzo.ai',
72
+ supportsFreshAuth: true,
73
+ },
74
+ {
75
+ id: 'cal',
76
+ label: 'Cal',
77
+ productTitle: 'Hanzo Cal',
78
+ description: 'Scheduling, bookings & availability',
79
+ href: 'https://hanzo.team/cal',
80
+ supportsFreshAuth: false,
81
+ },
82
+ {
83
+ id: 'bots',
84
+ label: 'Bots',
85
+ productTitle: 'Hanzo Bots',
86
+ description: 'Autonomous AI agents & workflows',
87
+ href: 'https://hanzo.bot',
88
+ supportsFreshAuth: false,
89
+ },
90
+ {
91
+ id: 'social',
92
+ label: 'Social',
93
+ productTitle: 'Hanzo Publish',
94
+ description: 'Social scheduling, inbox & listening',
95
+ href: 'https://social.hanzo.ai',
96
+ supportsFreshAuth: true,
97
+ },
98
+ {
99
+ id: 'chat',
100
+ label: 'Chat',
101
+ productTitle: 'Hanzo Chat',
102
+ description: 'AI assistant, models & playground',
103
+ href: 'https://hanzo.ai/chat',
104
+ supportsFreshAuth: false,
105
+ },
106
+ {
107
+ id: 'dev',
108
+ label: 'Dev',
109
+ productTitle: 'Hanzo Dev',
110
+ description: 'Coding agents & cloud workspaces',
111
+ href: 'https://hanzo.ai/dev',
112
+ supportsFreshAuth: false,
113
+ },
114
+ {
115
+ id: 'commerce',
116
+ label: 'Commerce',
117
+ productTitle: 'Hanzo Commerce',
118
+ description: 'Store, products, orders & subscriptions',
119
+ href: 'https://commerce-admin.hanzo.ai/admin/',
120
+ supportsFreshAuth: false,
121
+ },
122
+ {
123
+ id: 'analytics',
124
+ label: 'Analytics',
125
+ productTitle: 'Hanzo Analytics',
126
+ description: 'Web traffic, funnels & retention',
127
+ href: 'https://analytics.hanzo.ai',
128
+ supportsFreshAuth: false,
129
+ },
130
+ {
131
+ id: 'dataroom',
132
+ label: 'Data Room',
133
+ productTitle: 'Hanzo Data Room',
134
+ description: 'Secure investor & deal data rooms',
135
+ href: 'https://dataroom.hanzo.ai',
136
+ supportsFreshAuth: false,
137
+ },
138
+ {
139
+ id: 'sign',
140
+ label: 'Sign',
141
+ productTitle: 'Hanzo Sign',
142
+ description: 'Document e-signatures & agreements',
143
+ href: 'https://esign.hanzo.ai',
144
+ supportsFreshAuth: false,
145
+ },
146
+ {
147
+ id: 'billing',
148
+ label: 'Billing',
149
+ productTitle: 'Hanzo Billing',
150
+ description: 'Usage, balance, invoices & payment methods',
151
+ href: 'https://billing.hanzo.ai',
152
+ supportsFreshAuth: false,
153
+ },
154
+ {
155
+ id: 'console',
156
+ label: 'Console',
157
+ productTitle: 'Hanzo Console',
158
+ description: 'Cloud, AI infrastructure & IAM',
159
+ href: 'https://console.hanzo.ai',
160
+ supportsFreshAuth: true,
161
+ },
162
+ {
163
+ id: 'platform',
164
+ label: 'Platform',
165
+ productTitle: 'Hanzo Platform',
166
+ description: 'PaaS deployments, clusters & containers',
167
+ href: 'https://platform.hanzo.ai',
168
+ supportsFreshAuth: true,
169
+ },
170
+ ];
171
+ function AppIcon({ id, size = 16 }) {
172
+ switch (id) {
173
+ case 'crm':
174
+ return _jsx(Briefcase, { size: size });
175
+ case 'team':
176
+ case 'work':
177
+ return _jsx(Users, { size: size });
178
+ case 'cms':
179
+ return _jsx(Globe, { size: size });
180
+ case 'email':
181
+ case 'marketing':
182
+ return _jsx(Mail, { size: size });
183
+ case 'ads':
184
+ return _jsx(Megaphone, { size: size });
185
+ case 'cal':
186
+ return _jsx(Calendar, { size: size });
187
+ case 'bots':
188
+ return _jsx(Bot, { size: size });
189
+ case 'social':
190
+ return _jsx(Share2, { size: size });
191
+ case 'chat':
192
+ return _jsx(MessageCircle, { size: size });
193
+ case 'dev':
194
+ return _jsx(Terminal, { size: size });
195
+ case 'commerce':
196
+ return _jsx(ShoppingBag, { size: size });
197
+ case 'analytics':
198
+ return _jsx(BarChart3, { size: size });
199
+ case 'dataroom':
200
+ return _jsx(FolderLock, { size: size });
201
+ case 'sign':
202
+ return _jsx(FileSignature, { size: size });
203
+ case 'billing':
204
+ return _jsx(CreditCard, { size: size });
205
+ case 'console':
206
+ return _jsx(Sparkles, { size: size });
207
+ case 'platform':
208
+ return _jsx(LayoutGrid, { size: size });
209
+ default:
210
+ return _jsx(AppWindow, { size: size });
211
+ }
212
+ }
213
+ /** Build a session-preserving destination URL when switching between Hanzo Business apps. */
214
+ export function buildSeamlessAppUrl(app, opts) {
215
+ try {
216
+ const u = new URL(app.href);
217
+ if (app.supportsFreshAuth && opts?.who) {
218
+ const nextPath = opts?.org ? `/?org=${encodeURIComponent(opts.org)}` : '/';
219
+ return `${u.origin}/auth/fresh?next=${encodeURIComponent(nextPath)}&who=${encodeURIComponent(opts.who)}`;
220
+ }
221
+ if (opts?.org && !u.searchParams.has('org')) {
222
+ u.searchParams.set('org', opts.org);
223
+ }
224
+ return u.toString();
225
+ }
226
+ catch {
227
+ return app.href;
228
+ }
229
+ }
230
+ export function BusinessHeader({ appId = 'crm', appTitle, showAppTitle = false, apps = BUSINESS_APPS, onSelectApp, brandMark, currentOrg, orgs = [], onSelectOrg, onAllOrgs, onCreateOrg, leftSlot, children, rightSlot, user, accounts = [], onSwitchAccount, onAddAccount, onSettings, onOrgSettings, onBilling, theme, onSignOut, }) {
231
+ const [appMenuOpen, setAppMenuOpen] = useState(false);
232
+ const [orgMenuOpen, setOrgMenuOpen] = useState(false);
233
+ const [accountMenuOpen, setAccountMenuOpen] = useState(false);
234
+ const activeApp = apps.find((a) => a.id === appId) ?? apps[0];
235
+ const resolvedAppTitle = appTitle || activeApp?.productTitle || 'Hanzo CRM';
236
+ const orgDisplay = currentOrg?.displayName?.trim() || currentOrg?.name || 'Hanzo AI';
237
+ const userName = displayName(user?.name, user?.email) || 'Account';
238
+ const userEmail = user?.email || '';
239
+ const userSub = user?.sub || '';
240
+ // Deduplicate accounts list while keeping current user identifiable
241
+ const knownAccounts = (() => {
242
+ const list = [];
243
+ const seen = new Set();
244
+ if (userSub) {
245
+ seen.add(userSub);
246
+ list.push({
247
+ sub: userSub,
248
+ owner: user?.owner || currentOrg?.name || 'hanzo',
249
+ name: userName,
250
+ email: userEmail || undefined,
251
+ avatar: user?.avatar,
252
+ });
253
+ }
254
+ for (const acc of accounts) {
255
+ if (acc.sub && !seen.has(acc.sub)) {
256
+ seen.add(acc.sub);
257
+ list.push(acc);
258
+ }
259
+ }
260
+ return list;
261
+ })();
262
+ const handleLaunchApp = (app) => {
263
+ setAppMenuOpen(false);
264
+ if (onSelectApp) {
265
+ onSelectApp(app);
266
+ return;
267
+ }
268
+ if (typeof window !== 'undefined') {
269
+ const targetUrl = buildSeamlessAppUrl(app, {
270
+ who: userSub || undefined,
271
+ org: currentOrg?.name || undefined,
272
+ });
273
+ window.location.assign(targetUrl);
274
+ }
275
+ };
276
+ return (_jsxs(XStack, { render: "header", height: 52, px: "$3", gap: "$3", items: "center", justify: "space-between", borderBottomWidth: 1, borderColor: "$borderColor", bg: "$background", shrink: 0, "data-slot": "bar", "data-testid": "hanzo-business-header", children: [_jsxs(XStack, { items: "center", gap: "$2", minW: 0, shrink: 0, children: [leftSlot, _jsxs(Popover, { open: appMenuOpen, onOpenChange: setAppMenuOpen, placement: "bottom-start", allowFlip: true, stayInFrame: true, children: [_jsx(Popover.Trigger, { asChild: true, children: _jsxs(XStack, { role: "button", tabIndex: 0, cursor: "pointer", items: "center", gap: "$1.5", height: 34, px: "$2", rounded: "$3", borderWidth: 0, outlineWidth: 0, hoverStyle: { bg: '$color3' }, "aria-label": `${resolvedAppTitle} — Switch application`, "aria-haspopup": "menu", "aria-expanded": appMenuOpen, "data-testid": "business-app-switcher-trigger", onKeyDown: (e) => {
277
+ if (e?.key === 'Enter' || e?.key === ' ') {
278
+ e.preventDefault?.();
279
+ setAppMenuOpen(!appMenuOpen);
280
+ }
281
+ }, children: [_jsx(YStack, { items: "center", justify: "center", width: 24, height: 24, shrink: 0, children: brandMark ?? _jsx(BrandMark, { size: 20, wordmark: "" }) }), showAppTitle ? (_jsx(Text, { fontSize: "$3", fontWeight: "700", color: "$color12", numberOfLines: 1, children: resolvedAppTitle })) : null, _jsx(ChevronDown, { size: 13, color: "$color10" })] }) }), _jsx(Popover.Content, { role: "menu", "aria-label": "Hanzo Business Applications", borderWidth: 1, elevation: "$4", p: "$2.5", width: 360, bg: "$background", borderColor: "$borderColor", rounded: "$4", style: { zIndex: 100000 }, children: _jsxs(YStack, { gap: "$2", width: "100%", children: [_jsxs(XStack, { items: "center", justify: "space-between", px: "$2", pt: "$1", children: [_jsx(Text, { fontSize: "$1", fontWeight: "700", color: "$color10", textTransform: "uppercase", letterSpacing: 0.6, children: "Hanzo Business Suite" }), _jsx(Text, { fontSize: "$1", color: "$color10", children: orgDisplay })] }), _jsx(YStack, { gap: "$0.5", maxH: 420, style: { overflowY: 'auto' }, children: apps.map((app) => {
282
+ const isCurrent = app.id === appId;
283
+ return (_jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2.5", py: "$2", rounded: "$3", bg: isCurrent ? '$color3' : 'transparent', hoverStyle: { bg: '$color3' }, onPress: () => handleLaunchApp(app), "data-testid": `app-switcher-item-${app.id}`, children: [_jsx(YStack, { width: 32, height: 32, rounded: "$3", bg: isCurrent ? '$color4' : '$color2', items: "center", justify: "center", shrink: 0, children: _jsx(AppIcon, { id: app.id, size: 16 }) }), _jsxs(YStack, { flex: 1, minW: 0, gap: 1, children: [_jsxs(XStack, { items: "center", gap: "$1.5", children: [_jsx(Text, { fontSize: "$2", fontWeight: "600", color: "$color12", numberOfLines: 1, children: app.label }), isCurrent ? (_jsx(Text, { fontSize: 10, fontWeight: "600", color: "$color10", px: "$1.5", py: 1, rounded: "$2", bg: "$color4", children: "Current" })) : null] }), _jsx(Text, { fontSize: "$1", color: "$color10", numberOfLines: 1, children: app.description })] }), isCurrent ? _jsx(Check, { size: 14, color: "$color12" }) : null] }, app.id));
284
+ }) })] }) })] }), _jsxs(Popover, { open: orgMenuOpen, onOpenChange: setOrgMenuOpen, placement: "bottom-start", allowFlip: true, stayInFrame: true, children: [_jsx(Popover.Trigger, { asChild: true, children: _jsxs(XStack, { role: "button", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2", height: 34, px: "$2.5", rounded: "$3", borderWidth: 0, outlineWidth: 0, hoverStyle: { bg: '$color3' }, "aria-label": `Current organization: ${orgDisplay}. Click to switch organization.`, "data-testid": "business-org-subtitle-trigger", onKeyDown: (e) => {
285
+ if (e?.key === 'Enter' || e?.key === ' ') {
286
+ e.preventDefault?.();
287
+ setOrgMenuOpen(!orgMenuOpen);
288
+ }
289
+ }, children: [_jsx(OrgMark, { org: { name: orgDisplay, logo: currentOrg?.logo }, size: 22 }), _jsx(Text, { fontSize: "$2", fontWeight: "600", color: "$color12", numberOfLines: 1, maxW: 220, children: orgDisplay }), _jsx(ChevronDown, { size: 13, color: "$color10" })] }) }), _jsx(Popover.Content, { role: "menu", "aria-label": "Switch organization", borderWidth: 1, elevation: "$4", p: "$2", width: 280, bg: "$background", borderColor: "$borderColor", rounded: "$4", style: { zIndex: 100000 }, children: _jsxs(YStack, { gap: "$1", width: "100%", children: [_jsx(XStack, { px: "$2", py: "$1", items: "center", justify: "space-between", children: _jsx(Text, { fontSize: "$1", fontWeight: "700", color: "$color10", textTransform: "uppercase", letterSpacing: 0.5, children: "Switch organization" }) }), orgs.map((o) => {
290
+ const active = o.name === currentOrg?.name;
291
+ const label = o.displayName?.trim() || o.name;
292
+ return (_jsxs(XStack, { role: "menuitem", "aria-checked": active, tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", bg: active ? '$color3' : 'transparent', hoverStyle: { bg: '$color3' }, onPress: () => {
293
+ setOrgMenuOpen(false);
294
+ onSelectOrg?.(o.name);
295
+ }, children: [_jsx(OrgMark, { org: { name: label, logo: o.logo }, size: 22 }), _jsxs(YStack, { flex: 1, minW: 0, children: [_jsx(Text, { fontSize: "$2", fontWeight: active ? '600' : '500', color: "$color12", numberOfLines: 1, children: label }), o.displayName && o.displayName !== o.name ? (_jsx(Text, { fontSize: "$1", color: "$color10", numberOfLines: 1, children: o.name })) : null] }), active ? _jsx(Check, { size: 14, color: "$color12" }) : null] }, o.name));
296
+ }), (onAllOrgs || onCreateOrg) ? _jsx(Separator, { borderColor: "$borderColor", my: "$1" }) : null, onAllOrgs ? (_jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
297
+ setOrgMenuOpen(false);
298
+ onAllOrgs();
299
+ }, children: [_jsx(Building2, { size: 14, color: "$color10" }), _jsx(Text, { fontSize: "$2", color: "$color12", children: "All organizations\u2026" })] })) : null, onCreateOrg ? (_jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
300
+ setOrgMenuOpen(false);
301
+ onCreateOrg();
302
+ }, children: [_jsx(Plus, { size: 14, color: "$color10" }), _jsx(Text, { fontSize: "$2", color: "$color12", children: "Create organization" })] })) : null] }) })] })] }), _jsx(XStack, { flex: 1, items: "center", justify: "center", minW: 0, px: "$2", children: children }), _jsxs(XStack, { items: "center", gap: "$2", shrink: 0, children: [rightSlot, _jsxs(Popover, { open: accountMenuOpen, onOpenChange: setAccountMenuOpen, placement: "bottom-end", allowFlip: true, stayInFrame: true, children: [_jsx(Popover.Trigger, { asChild: true, children: _jsxs(XStack, { role: "button", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2", height: 40, px: "$2.5", rounded: "$3", hoverStyle: { bg: '$color3' }, "aria-label": `${userName} · Account menu`, "aria-haspopup": "menu", "aria-expanded": accountMenuOpen, "data-testid": "business-account-menu-trigger", onKeyDown: (e) => {
303
+ if (e?.key === 'Enter' || e?.key === ' ') {
304
+ e.preventDefault?.();
305
+ setAccountMenuOpen(!accountMenuOpen);
306
+ }
307
+ }, children: [user?.avatar || userName ? (_jsx(OrgMark, { org: { name: userName, logo: user?.avatar }, size: 28 })) : (_jsx(UserRound, { size: 18 })), _jsxs(YStack, { minW: 0, justify: "center", display: "none", $sm: { display: 'flex' }, children: [_jsx(Text, { fontSize: "$2", fontWeight: "600", color: "$color12", numberOfLines: 1, maxW: 160, style: { lineHeight: '16px' }, children: userName }), _jsx(Text, { fontSize: 11, color: "$color10", numberOfLines: 1, maxW: 160, style: { lineHeight: '13px' }, children: "Current account" })] }), _jsx(ChevronDown, { size: 14, color: "$color10" })] }) }), _jsx(Popover.Content, { role: "menu", "aria-label": "Account menu", borderWidth: 1, elevation: "$4", p: "$2", width: 310, bg: "$background", borderColor: "$borderColor", rounded: "$4", style: { zIndex: 100000 }, children: _jsxs(YStack, { gap: "$1", width: "100%", children: [_jsxs(XStack, { items: "center", gap: "$2.5", px: "$2", py: "$2", rounded: "$3", bg: "$color2", children: [_jsx(OrgMark, { org: { name: userName, logo: user?.avatar }, size: 36 }), _jsxs(YStack, { flex: 1, minW: 0, gap: 1, children: [_jsx(Text, { fontSize: "$3", fontWeight: "700", color: "$color12", numberOfLines: 1, children: userName }), userEmail && userEmail !== userName ? (_jsx(Text, { fontSize: "$1", color: "$color10", numberOfLines: 1, children: userEmail })) : null, _jsxs(XStack, { items: "center", gap: "$1.5", mt: 2, children: [_jsx(YStack, { width: 6, height: 6, rounded: 999, bg: "#10b981" }), _jsx(Text, { fontSize: 11, fontWeight: "600", color: "$color10", children: "Current account" })] })] })] }), _jsx(Separator, { borderColor: "$borderColor", my: "$1" }), _jsxs(YStack, { gap: "$0.5", children: [_jsxs(XStack, { px: "$2", py: "$1", items: "center", justify: "space-between", children: [_jsx(Text, { fontSize: "$1", fontWeight: "700", color: "$color10", textTransform: "uppercase", letterSpacing: 0.5, children: "Switch account" }), _jsx(Text, { fontSize: 11, color: "$color9", children: "Identities" })] }), knownAccounts.map((acc) => {
308
+ const isCurrent = Boolean(userSub && acc.sub === userSub);
309
+ const accName = acc.name || acc.email || acc.sub;
310
+ return (_jsxs(XStack, { role: "menuitem", "aria-checked": isCurrent, tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", bg: isCurrent ? '$color3' : 'transparent', hoverStyle: { bg: '$color3' }, onPress: () => {
311
+ setAccountMenuOpen(false);
312
+ if (!isCurrent)
313
+ onSwitchAccount?.(acc);
314
+ }, "data-testid": `switch-account-${acc.sub}`, children: [_jsx(OrgMark, { org: { name: accName, logo: acc.avatar }, size: 24 }), _jsxs(YStack, { flex: 1, minW: 0, children: [_jsx(Text, { fontSize: "$2", fontWeight: isCurrent ? '600' : '500', color: "$color12", numberOfLines: 1, children: accName }), _jsx(Text, { fontSize: "$1", color: "$color10", numberOfLines: 1, children: acc.email && acc.email !== accName ? acc.email : isCurrent ? 'Current account' : `Identity · ${acc.owner}` })] }), isCurrent ? _jsx(Check, { size: 14, color: "$color12" }) : null] }, acc.sub));
315
+ }), onAddAccount ? (_jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
316
+ setAccountMenuOpen(false);
317
+ onAddAccount();
318
+ }, "data-testid": "add-another-account", children: [_jsx(YStack, { width: 24, height: 24, rounded: 999, bg: "$color3", items: "center", justify: "center", children: _jsx(UserPlus, { size: 13, color: "$color11" }) }), _jsx(Text, { fontSize: "$2", fontWeight: "500", color: "$color12", children: "Add another account" })] })) : null] }), _jsx(Separator, { borderColor: "$borderColor", my: "$1" }), _jsxs(YStack, { gap: "$0.5", children: [_jsxs(XStack, { px: "$2", py: "$1", items: "center", justify: "space-between", children: [_jsx(Text, { fontSize: "$1", fontWeight: "700", color: "$color10", textTransform: "uppercase", letterSpacing: 0.5, children: "Switch organization" }), _jsx(Text, { fontSize: 11, color: "$color9", children: orgDisplay })] }), orgs.slice(0, 5).map((o) => {
319
+ const active = o.name === currentOrg?.name;
320
+ const label = o.displayName?.trim() || o.name;
321
+ return (_jsxs(XStack, { role: "menuitem", "aria-checked": active, tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", bg: active ? '$color3' : 'transparent', hoverStyle: { bg: '$color3' }, onPress: () => {
322
+ setAccountMenuOpen(false);
323
+ if (!active)
324
+ onSelectOrg?.(o.name);
325
+ }, "data-testid": `switch-org-${o.name}`, children: [_jsx(OrgMark, { org: { name: label, logo: o.logo }, size: 22 }), _jsx(Text, { flex: 1, fontSize: "$2", fontWeight: active ? '600' : '500', color: "$color12", numberOfLines: 1, children: label }), active ? _jsx(Check, { size: 14, color: "$color12" }) : null] }, o.name));
326
+ }), onAllOrgs ? (_jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
327
+ setAccountMenuOpen(false);
328
+ onAllOrgs();
329
+ }, "data-testid": "switch-org-all", children: [_jsx(Building2, { size: 14, color: "$color10" }), _jsx(Text, { fontSize: "$2", color: "$color12", children: "Switch organization\u2026" })] })) : null] }), _jsx(Separator, { borderColor: "$borderColor", my: "$1" }), _jsxs(YStack, { gap: "$0.5", children: [onSettings ? (_jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
330
+ setAccountMenuOpen(false);
331
+ onSettings();
332
+ }, "data-testid": "account-menu-settings", children: [_jsx(Settings, { size: 14, color: "$color10" }), _jsx(Text, { fontSize: "$2", color: "$color12", children: "Settings" })] })) : null, onOrgSettings && onOrgSettings !== onSettings ? (_jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
333
+ setAccountMenuOpen(false);
334
+ onOrgSettings();
335
+ }, children: [_jsx(Building2, { size: 14, color: "$color10" }), _jsx(Text, { fontSize: "$2", color: "$color12", children: "Organization settings" })] })) : null, onBilling ? (_jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
336
+ setAccountMenuOpen(false);
337
+ onBilling();
338
+ }, children: [_jsx(CreditCard, { size: 14, color: "$color10" }), _jsx(Text, { fontSize: "$2", color: "$color12", children: "Billing" })] })) : null, theme != null ? (_jsxs(XStack, { items: "center", justify: "space-between", px: "$2", py: "$1.5", rounded: "$3", children: [_jsx(Text, { fontSize: "$2", color: "$color12", children: "Theme" }), theme] })) : null] }), onSignOut ? (_jsxs(_Fragment, { children: [_jsx(Separator, { borderColor: "$borderColor", my: "$1" }), _jsxs(XStack, { role: "menuitem", tabIndex: 0, cursor: "pointer", items: "center", gap: "$2.5", px: "$2", py: "$1.5", rounded: "$3", hoverStyle: { bg: '$color3' }, onPress: () => {
339
+ setAccountMenuOpen(false);
340
+ onSignOut();
341
+ }, "data-testid": "account-menu-signout", children: [_jsx(LogOut, { size: 14, color: "#ef4444" }), _jsx(Text, { fontSize: "$2", fontWeight: "500", color: "#ef4444", children: "Sign out" })] })] })) : null] }) })] })] })] }));
342
+ }
343
+ //# sourceMappingURL=BusinessHeader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BusinessHeader.js","sourceRoot":"","sources":["../../src/product/BusinessHeader.tsx"],"names":[],"mappings":"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"}
@@ -82,6 +82,7 @@ Object.defineProperty(exports, "branchName", { enumerable: true, get: function (
82
82
  // surfaces wrote their own; `AppHeader` now renders this one.
83
83
  __exportStar(require("./surfaces.data.cjs"), exports);
84
84
  __exportStar(require("./AppHeader.cjs"), exports);
85
+ __exportStar(require("./BusinessHeader.cjs"), exports);
85
86
  __exportStar(require("./BrandMark.cjs"), exports);
86
87
  __exportStar(require("./OrgMark.cjs"), exports);
87
88
  __exportStar(require("./MenuRow.cjs"), exports);
@@ -9,6 +9,7 @@ export { RepoSelect, FooterLink, address, followable, type Repo, type RepoItem,
9
9
  export { BranchSelect, branchName, type Branch, type BranchLoad, type BranchSelectProps } from './BranchSelect.js';
10
10
  export * from './surfaces.data.js';
11
11
  export * from './AppHeader.js';
12
+ export * from './BusinessHeader.js';
12
13
  export * from './BrandMark.js';
13
14
  export * from './OrgMark.js';
14
15
  export * from './MenuRow.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/product/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/product/index.ts"],"names":[],"mappings":"AAaA,cAAc,UAAU,CAAA;AAKxB,OAAO,EACL,MAAM,EACN,aAAa,EACb,SAAS,EACT,SAAS,IAAI,eAAe,EAC5B,QAAQ,EACR,OAAO,EACP,SAAS,EACT,UAAU,EACV,UAAU,EACV,KAAK,GACN,MAAM,UAAU,CAAA;AAGjB,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAA;AAK/D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,cAAc,mBAAmB,CAAA;AAKjC,OAAO,EACL,UAAU,EACV,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,OAAO,GACb,MAAM,cAAc,CAAA;AACrB,OAAO,EACL,KAAK,EACL,KAAK,EACL,GAAG,EACH,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,IAAI,GACV,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,UAAU,EACV,UAAU,EACV,OAAO,EACP,UAAU,EACV,KAAK,IAAI,EACT,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,eAAe,GACrB,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAS/G,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AAKvB,cAAc,QAAQ,CAAA;AAKtB,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAK5B,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAA;AAOzB,cAAc,cAAc,CAAA;AAK5B,cAAc,YAAY,CAAA;AAO1B,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAI7B,cAAc,cAAc,CAAA;AAG5B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AAGvB,cAAc,QAAQ,CAAA;AACtB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAM5B,cAAc,WAAW,CAAA;AACzB,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAG3B,cAAc,cAAc,CAAA;AAE5B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,eAAe,CAAA;AAM7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA;AAK/B,cAAc,cAAc,CAAA;AAc5B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AASvB,cAAc,UAAU,CAAA;AAKxB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAA;AAKtE,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA"}
@@ -38,6 +38,7 @@ export { BranchSelect, branchName } from './BranchSelect.js';
38
38
  // surfaces wrote their own; `AppHeader` now renders this one.
39
39
  export * from './surfaces.data.js';
40
40
  export * from './AppHeader.js';
41
+ export * from './BusinessHeader.js';
41
42
  export * from './BrandMark.js';
42
43
  export * from './OrgMark.js';
43
44
  export * from './MenuRow.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/product/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/product/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanzo/ui",
3
- "version": "8.30.4",
3
+ "version": "8.31.0",
4
4
  "type": "module",
5
5
  "description": "Hanzo UI — the one canonical Hanzo component library, on @hanzo/gui + @hanzo/design. ONE substrate: every component renders through @hanzo/gui primitives, so the same import works on web, native (expo) and desktop (Tauri). Self-contained (theme.css), presentational, host-agnostic, clean-room.",
6
6
  "exports": {