@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.
- package/dist/auth/signout.cjs +23 -5
- package/dist/auth/signout.d.ts +23 -2
- package/dist/auth/signout.d.ts.map +1 -1
- package/dist/auth/signout.js +22 -5
- package/dist/auth/signout.js.map +1 -1
- package/dist/backends/gui/dialog.cjs +1 -1
- package/dist/backends/gui/dialog.js +1 -1
- package/dist/backends/gui/dialog.js.map +1 -1
- package/dist/gallery.html +1 -1
- package/dist/product/BusinessHeader.cjs +347 -0
- package/dist/product/BusinessHeader.d.ts +113 -0
- package/dist/product/BusinessHeader.d.ts.map +1 -0
- package/dist/product/BusinessHeader.js +343 -0
- package/dist/product/BusinessHeader.js.map +1 -0
- package/dist/product/index.cjs +1 -0
- package/dist/product/index.d.ts +1 -0
- package/dist/product/index.d.ts.map +1 -1
- package/dist/product/index.js +1 -0
- package/dist/product/index.js.map +1 -1
- package/package.json +1 -1
package/dist/auth/signout.cjs
CHANGED
|
@@ -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`.
|
|
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
|
}
|
package/dist/auth/signout.d.ts
CHANGED
|
@@ -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`.
|
|
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;
|
|
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"}
|
package/dist/auth/signout.js
CHANGED
|
@@ -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`.
|
|
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
|
package/dist/auth/signout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signout.js","sourceRoot":"","sources":["../../src/auth/signout.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"signout.js","sourceRoot":"","sources":["../../src/auth/signout.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,7 +45,7 @@ export const frame = (size) => ({
|
|
|
45
45
|
style: size === 'fullscreen'
|
|
46
46
|
? undefined
|
|
47
47
|
: {
|
|
48
|
-
boxShadow: '
|
|
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":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,aAAa,EAAE,UAAU,EAAuC,MAAM,OAAO,CAAA;AACtF;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC3C,OAAO,EAAE,CAAC,EAAE,MAAM,0BAA0B,CAAA;AAE5C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,MAAM,GAAG,GAAG,EAAE,CAAA;AAId,MAAM,KAAK,GAAwC;IACjD,EAAE,EAAE,GAAG;IACP,OAAO,EAAE,GAAG;IACZ,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,kBAAkB;IACtB,EAAE,EAAE,IAAI;IACR,UAAU,EAAE,OAAO;CACpB,CAAA;AAED,mHAAmH;AACnH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAgB,EAAE,EAAE,CACxC,CAAC;IACC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAU;IAC3B,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;IAC5D,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,oBAAoB;IAC/G,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,OAAO,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;IACzC,WAAW,EAAE,CAAC;IACd,CAAC,EAAE,CAAC;IACJ,GAAG,EAAE,CAAC;IACN,KAAK,EACH,IAAI,KAAK,YAAY;QACnB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC;YACE,SAAS,EAAE,
|
|
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.
|
|
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":"AAAA,YAAY,CAAA;;AAEZ;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACrE,OAAO,EACL,SAAS,EACT,SAAS,EACT,GAAG,EACH,SAAS,EACT,SAAS,EACT,QAAQ,EACR,KAAK,EACL,WAAW,EACX,UAAU,EACV,aAAa,EACb,UAAU,EACV,KAAK,EACL,UAAU,EACV,MAAM,EACN,IAAI,EACJ,SAAS,EACT,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,KAAK,GACN,MAAM,0BAA0B,CAAA;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAqCnC,MAAM,CAAC,MAAM,aAAa,GAA+B;IACvD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,sBAAsB;QAC5B,iBAAiB,EAAE,IAAI;KACxB;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,uCAAuC;QACpD,IAAI,EAAE,oBAAoB;QAC1B,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,qCAAqC;QAClD,IAAI,EAAE,4BAA4B;QAClC,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,aAAa;QAC3B,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,4BAA4B;QAClC,iBAAiB,EAAE,IAAI;KACxB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,8BAA8B;QAC3C,IAAI,EAAE,sBAAsB;QAC5B,iBAAiB,EAAE,IAAI;KACxB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,qCAAqC;QAClD,IAAI,EAAE,wBAAwB;QAC9B,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,mBAAmB;QACzB,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,eAAe;QAC7B,WAAW,EAAE,sCAAsC;QACnD,IAAI,EAAE,yBAAyB;QAC/B,iBAAiB,EAAE,IAAI;KACxB;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,mCAAmC;QAChD,IAAI,EAAE,uBAAuB;QAC7B,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,KAAK;QACT,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,WAAW;QACzB,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,sBAAsB;QAC5B,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,yCAAyC;QACtD,IAAI,EAAE,wCAAwC;QAC9C,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,WAAW;QACf,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,iBAAiB;QAC/B,WAAW,EAAE,kCAAkC;QAC/C,IAAI,EAAE,4BAA4B;QAClC,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,iBAAiB;QAC/B,WAAW,EAAE,mCAAmC;QAChD,IAAI,EAAE,2BAA2B;QACjC,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,MAAM;QACV,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,YAAY;QAC1B,WAAW,EAAE,oCAAoC;QACjD,IAAI,EAAE,wBAAwB;QAC9B,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,eAAe;QAC7B,WAAW,EAAE,4CAA4C;QACzD,IAAI,EAAE,0BAA0B;QAChC,iBAAiB,EAAE,KAAK;KACzB;IACD;QACE,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,SAAS;QAChB,YAAY,EAAE,eAAe;QAC7B,WAAW,EAAE,gCAAgC;QAC7C,IAAI,EAAE,0BAA0B;QAChC,iBAAiB,EAAE,IAAI;KACxB;IACD;QACE,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,YAAY,EAAE,gBAAgB;QAC9B,WAAW,EAAE,yCAAyC;QACtD,IAAI,EAAE,2BAA2B;QACjC,iBAAiB,EAAE,IAAI;KACxB;CACO,CAAA;AAuEV,SAAS,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,GAAG,EAAE,EAAwC;IACtE,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,KAAK;YACR,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QAClC,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QAC9B,KAAK,KAAK;YACR,OAAO,KAAC,KAAK,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QAC9B,KAAK,OAAO,CAAC;QACb,KAAK,WAAW;YACd,OAAO,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QAC7B,KAAK,KAAK;YACR,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QAClC,KAAK,KAAK;YACR,OAAO,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACjC,KAAK,MAAM;YACT,OAAO,KAAC,GAAG,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QAC5B,KAAK,QAAQ;YACX,OAAO,KAAC,MAAM,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QAC/B,KAAK,MAAM;YACT,OAAO,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACtC,KAAK,KAAK;YACR,OAAO,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACjC,KAAK,UAAU;YACb,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACpC,KAAK,WAAW;YACd,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QAClC,KAAK,UAAU;YACb,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACnC,KAAK,MAAM;YACT,OAAO,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACtC,KAAK,SAAS;YACZ,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACnC,KAAK,SAAS;YACZ,OAAO,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACjC,KAAK,UAAU;YACb,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;QACnC;YACE,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,GAAI,CAAA;IACpC,CAAC;AACH,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CACjC,GAAoB,EACpB,IAAqC;IAErC,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC3B,IAAI,GAAG,CAAC,iBAAiB,IAAI,IAAI,EAAE,GAAG,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;YAC1E,OAAO,GAAG,CAAC,CAAC,MAAM,oBAAoB,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAA;QAC1G,CAAC;QACD,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QACrC,CAAC;QACD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,IAAI,CAAA;IACjB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,GAAG,KAAK,EACb,QAAQ,EACR,YAAY,GAAG,KAAK,EACpB,IAAI,GAAG,aAAa,EACpB,WAAW,EACX,SAAS,EACT,UAAU,EACV,IAAI,GAAG,EAAE,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,IAAI,EACJ,QAAQ,GAAG,EAAE,EACb,eAAe,EACf,YAAY,EACZ,UAAU,EACV,aAAa,EACb,SAAS,EACT,KAAK,EACL,SAAS,GACW;IACpB,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACrD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAE7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7D,MAAM,gBAAgB,GAAG,QAAQ,IAAI,SAAS,EAAE,YAAY,IAAI,WAAW,CAAA;IAC3E,MAAM,UAAU,GAAG,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,IAAI,IAAI,UAAU,CAAA;IAEpF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,CAAA;IAClE,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,CAAA;IAE/B,oEAAoE;IACpE,MAAM,aAAa,GAA4B,CAAC,GAAG,EAAE;QACnD,MAAM,IAAI,GAA4B,EAAE,CAAA;QACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;QAC9B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACjB,IAAI,CAAC,IAAI,CAAC;gBACR,GAAG,EAAE,OAAO;gBACZ,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,UAAU,EAAE,IAAI,IAAI,OAAO;gBACjD,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,SAAS,IAAI,SAAS;gBAC7B,MAAM,EAAE,IAAI,EAAE,MAAM;aACrB,CAAC,CAAA;QACJ,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;gBACjB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,EAAE,CAAA;IAEJ,MAAM,eAAe,GAAG,CAAC,GAAoB,EAAE,EAAE;QAC/C,cAAc,CAAC,KAAK,CAAC,CAAA;QACrB,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,GAAG,CAAC,CAAA;YAChB,OAAM;QACR,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,EAAE;gBACzC,GAAG,EAAE,OAAO,IAAI,SAAS;gBACzB,GAAG,EAAE,UAAU,EAAE,IAAI,IAAI,SAAS;aACnC,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACnC,CAAC;IACH,CAAC,CAAA;IAED,OAAO,CACL,MAAC,MAAM,IACL,MAAM,EAAC,QAAQ,EACf,MAAM,EAAE,EAAE,EACV,EAAE,EAAC,IAAI,EACP,GAAG,EAAC,IAAI,EACR,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,eAAe,EACvB,iBAAiB,EAAE,CAAC,EACpB,WAAW,EAAC,cAAc,EAC1B,EAAE,EAAC,aAAa,EAChB,MAAM,EAAE,CAAC,eACC,KAAK,iBACH,uBAAuB,aAGnC,MAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,aAC/C,QAAQ,EAGT,MAAC,OAAO,IAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAC,cAAc,EAAC,SAAS,QAAC,WAAW,mBACtG,KAAC,OAAO,CAAC,OAAO,IAAC,OAAO,kBACtB,MAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,MAAM,EAAE,EAAE,EACV,EAAE,EAAC,IAAI,EACP,OAAO,EAAC,IAAI,EACZ,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,gBACjB,GAAG,gBAAgB,uBAAuB,mBACxC,MAAM,mBACL,WAAW,iBACd,+BAA+B,EAC3C,SAAS,EAAE,CAAC,CAAgD,EAAE,EAAE;wCAC9D,IAAI,CAAC,EAAE,GAAG,KAAK,OAAO,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;4CACzC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAA;4CACpB,cAAc,CAAC,CAAC,WAAW,CAAC,CAAA;wCAC9B,CAAC;oCACH,CAAC,aAED,KAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,YACrE,SAAS,IAAI,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAC,EAAE,GAAG,GAC1C,EACR,YAAY,CAAC,CAAC,CAAC,CACd,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YACnE,gBAAgB,GACZ,CACR,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,IACnC,GACO,EAElB,KAAC,OAAO,CAAC,OAAO,IACd,IAAI,EAAC,MAAM,gBACA,6BAA6B,EACxC,WAAW,EAAE,CAAC,EACd,SAAS,EAAC,IAAI,EACd,CAAC,EAAC,MAAM,EACR,KAAK,EAAE,GAAG,EACV,EAAE,EAAC,aAAa,EAChB,WAAW,EAAC,cAAc,EAC1B,OAAO,EAAC,IAAI,EACZ,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAEzB,MAAC,MAAM,IAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,aAC3B,MAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,eAAe,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,aAC5D,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAC,WAAW,EAAC,aAAa,EAAE,GAAG,qCAE3F,EACP,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,YACjC,UAAU,GACN,IACA,EAET,KAAC,MAAM,IAAC,GAAG,EAAC,MAAM,EAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,YACvD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gDAChB,MAAM,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,KAAK,CAAA;gDAClC,OAAO,CACL,MAAC,MAAM,IAEL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,MAAM,EACT,EAAE,EAAC,IAAI,EACP,OAAO,EAAC,IAAI,EACZ,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EACzC,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,iBACtB,qBAAqB,GAAG,CAAC,EAAE,EAAE,aAE1C,KAAC,MAAM,IACL,KAAK,EAAE,EAAE,EACT,MAAM,EAAE,EAAE,EACV,OAAO,EAAC,IAAI,EACZ,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACrC,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,QAAQ,EAChB,MAAM,EAAE,CAAC,YAET,KAAC,OAAO,IAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,GAAI,GAC1B,EACT,MAAC,MAAM,IAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,aAC9B,MAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,MAAM,aAC/B,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YACnE,GAAG,CAAC,KAAK,GACL,EACN,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,IAAI,IAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,EAAE,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAC,IAAI,EAAC,EAAE,EAAC,SAAS,wBAEzF,CACR,CAAC,CAAC,CAAC,IAAI,IACD,EACT,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YAClD,GAAG,CAAC,WAAW,GACX,IACA,EACR,SAAS,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,KAxCnD,GAAG,CAAC,EAAE,CAyCJ,CACV,CAAA;4CACH,CAAC,CAAC,GACK,IACF,GACO,IACV,EAGV,MAAC,OAAO,IAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAC,cAAc,EAAC,SAAS,QAAC,WAAW,mBACtG,KAAC,OAAO,CAAC,OAAO,IAAC,OAAO,kBACtB,MAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,IAAI,EACR,MAAM,EAAE,EAAE,EACV,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,WAAW,EAAE,CAAC,EACd,YAAY,EAAE,CAAC,EACf,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,gBACjB,yBAAyB,UAAU,iCAAiC,iBACpE,+BAA+B,EAC3C,SAAS,EAAE,CAAC,CAAgD,EAAE,EAAE;wCAC9D,IAAI,CAAC,EAAE,GAAG,KAAK,OAAO,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;4CACzC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAA;4CACpB,cAAc,CAAC,CAAC,WAAW,CAAC,CAAA;wCAC9B,CAAC;oCACH,CAAC,aAED,KAAC,OAAO,IAAC,GAAG,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,GAAI,EACxE,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,YAC9E,UAAU,GACN,EACP,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,IACnC,GACO,EAEd,KAAC,OAAO,CAAC,OAAO,IACd,IAAI,EAAC,MAAM,gBACA,qBAAqB,EAChC,WAAW,EAAE,CAAC,EACd,SAAS,EAAC,IAAI,EACd,CAAC,EAAC,IAAI,EACN,KAAK,EAAE,GAAG,EACV,EAAE,EAAC,aAAa,EAChB,WAAW,EAAC,cAAc,EAC1B,OAAO,EAAC,IAAI,EACZ,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAEzB,MAAC,MAAM,IAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,aAC3B,KAAC,MAAM,IAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,eAAe,YAC5D,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAC,WAAW,EAAC,aAAa,EAAE,GAAG,oCAE3F,GACA,EAER,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;4CACd,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,IAAI,CAAA;4CAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAA;4CAC7C,OAAO,CACL,MAAC,MAAM,IAEL,IAAI,EAAC,UAAU,kBACD,MAAM,EACpB,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EACtC,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;oDACZ,cAAc,CAAC,KAAK,CAAC,CAAA;oDACrB,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gDACvB,CAAC,aAED,KAAC,OAAO,IAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,GAAI,EACzD,MAAC,MAAM,IAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,aACtB,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YACtF,KAAK,GACD,EACN,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAC3C,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YAClD,CAAC,CAAC,IAAI,GACF,CACR,CAAC,CAAC,CAAC,IAAI,IACD,EACR,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,KA5BhD,CAAC,CAAC,IAAI,CA6BJ,CACV,CAAA;wCACH,CAAC,CAAC,EAED,CAAC,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,WAAW,EAAC,cAAc,EAAC,EAAE,EAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAEpF,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,IAAI,EACR,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;gDACZ,cAAc,CAAC,KAAK,CAAC,CAAA;gDACrB,SAAS,EAAE,CAAA;4CACb,CAAC,aAED,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,EACxC,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,wCAE7B,IACA,CACV,CAAC,CAAC,CAAC,IAAI,EAEP,WAAW,CAAC,CAAC,CAAC,CACb,MAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,IAAI,EACR,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;gDACZ,cAAc,CAAC,KAAK,CAAC,CAAA;gDACrB,WAAW,EAAE,CAAA;4CACf,CAAC,aAED,KAAC,IAAI,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,EACnC,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,oCAE7B,IACA,CACV,CAAC,CAAC,CAAC,IAAI,IACD,GACO,IACV,IACP,EAGT,KAAC,MAAM,IAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,QAAQ,EAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAC,IAAI,YAC9D,QAAQ,GACF,EAGT,MAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAE,CAAC,aACtC,SAAS,EAEV,MAAC,OAAO,IAAC,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAC,YAAY,EAAC,SAAS,QAAC,WAAW,mBAC5G,KAAC,OAAO,CAAC,OAAO,IAAC,OAAO,kBACtB,MAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,IAAI,EACR,MAAM,EAAE,EAAE,EACV,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,gBACjB,GAAG,QAAQ,iBAAiB,mBAC1B,MAAM,mBACL,eAAe,iBAClB,+BAA+B,EAC3C,SAAS,EAAE,CAAC,CAAgD,EAAE,EAAE;wCAC9D,IAAI,CAAC,EAAE,GAAG,KAAK,OAAO,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,EAAE,CAAC;4CACzC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAA;4CACpB,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAA;wCACtC,CAAC;oCACH,CAAC,aAEA,IAAI,EAAE,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAC1B,KAAC,OAAO,IAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAI,CACnE,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,GAAI,CACxB,EACD,MAAC,MAAM,IAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAC,QAAQ,EAAC,OAAO,EAAC,MAAM,EAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aACvE,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,YAC7G,QAAQ,GACJ,EACP,KAAC,IAAI,IAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,gCAExF,IACA,EACT,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,IACnC,GACO,EAElB,KAAC,OAAO,CAAC,OAAO,IACd,IAAI,EAAC,MAAM,gBACA,cAAc,EACzB,WAAW,EAAE,CAAC,EACd,SAAS,EAAC,IAAI,EACd,CAAC,EAAC,IAAI,EACN,KAAK,EAAE,GAAG,EACV,EAAE,EAAC,aAAa,EAChB,WAAW,EAAC,cAAc,EAC1B,OAAO,EAAC,IAAI,EACZ,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAEzB,MAAC,MAAM,IAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,MAAM,aAE3B,MAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,MAAM,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,EAAE,EAAC,SAAS,aACzE,KAAC,OAAO,IAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAI,EAClE,MAAC,MAAM,IAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,aAC9B,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YACnE,QAAQ,GACJ,EACN,SAAS,IAAI,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CACrC,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YAClD,SAAS,GACL,CACR,CAAC,CAAC,CAAC,IAAI,EACR,MAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,GAAG,EAAC,MAAM,EAAC,EAAE,EAAE,CAAC,aACrC,KAAC,MAAM,IAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAC,SAAS,GAAG,EAC1D,KAAC,IAAI,IAAC,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,gCAE9C,IACA,IACF,IACF,EAET,KAAC,SAAS,IAAC,WAAW,EAAC,cAAc,EAAC,EAAE,EAAC,IAAI,GAAG,EAGhD,MAAC,MAAM,IAAC,GAAG,EAAC,MAAM,aAChB,MAAC,MAAM,IAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,eAAe,aAC5D,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAC,WAAW,EAAC,aAAa,EAAE,GAAG,+BAE3F,EACP,KAAC,IAAI,IAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAC,SAAS,2BAE5B,IACA,EAER,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oDACzB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,CAAC,CAAA;oDACzD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,CAAA;oDAChD,OAAO,CACL,MAAC,MAAM,IAEL,IAAI,EAAC,UAAU,kBACD,SAAS,EACvB,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EACzC,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;4DACZ,kBAAkB,CAAC,KAAK,CAAC,CAAA;4DACzB,IAAI,CAAC,SAAS;gEAAE,eAAe,EAAE,CAAC,GAAG,CAAC,CAAA;wDACxC,CAAC,iBACY,kBAAkB,GAAG,CAAC,GAAG,EAAE,aAExC,KAAC,OAAO,IAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,GAAI,EAC/D,MAAC,MAAM,IAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,aACtB,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YACzF,OAAO,GACH,EACP,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YAClD,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,KAAK,EAAE,GACtG,IACA,EACR,SAAS,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,KA3BnD,GAAG,CAAC,GAAG,CA4BL,CACV,CAAA;gDACH,CAAC,CAAC,EAED,YAAY,CAAC,CAAC,CAAC,CACd,MAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;wDACZ,kBAAkB,CAAC,KAAK,CAAC,CAAA;wDACzB,YAAY,EAAE,CAAA;oDAChB,CAAC,iBACW,qBAAqB,aAEjC,KAAC,MAAM,IAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAC,SAAS,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,QAAQ,YACvF,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,GAChC,EACT,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,oCAE9C,IACA,CACV,CAAC,CAAC,CAAC,IAAI,IACD,EAET,KAAC,SAAS,IAAC,WAAW,EAAC,cAAc,EAAC,EAAE,EAAC,IAAI,GAAG,EAGhD,MAAC,MAAM,IAAC,GAAG,EAAC,MAAM,aAChB,MAAC,MAAM,IAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,eAAe,aAC5D,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,UAAU,EAAC,aAAa,EAAC,WAAW,EAAC,aAAa,EAAE,GAAG,oCAE3F,EACP,KAAC,IAAI,IAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAC,SAAS,YAChC,UAAU,GACN,IACA,EAER,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oDAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,IAAI,CAAA;oDAC1C,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,IAAI,CAAA;oDAC7C,OAAO,CACL,MAAC,MAAM,IAEL,IAAI,EAAC,UAAU,kBACD,MAAM,EACpB,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EACtC,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;4DACZ,kBAAkB,CAAC,KAAK,CAAC,CAAA;4DACzB,IAAI,CAAC,MAAM;gEAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;wDACpC,CAAC,iBACY,cAAc,CAAC,CAAC,IAAI,EAAE,aAEnC,KAAC,OAAO,IAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,GAAI,EACzD,KAAC,IAAI,IAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAC,UAAU,EAAC,aAAa,EAAE,CAAC,YAC/F,KAAK,GACD,EACN,MAAM,CAAC,CAAC,CAAC,KAAC,KAAK,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,KAtBhD,CAAC,CAAC,IAAI,CAuBJ,CACV,CAAA;gDACH,CAAC,CAAC,EAED,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;wDACZ,kBAAkB,CAAC,KAAK,CAAC,CAAA;wDACzB,SAAS,EAAE,CAAA;oDACb,CAAC,iBACW,gBAAgB,aAE5B,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,EACxC,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,0CAE7B,IACA,CACV,CAAC,CAAC,CAAC,IAAI,IACD,EAET,KAAC,SAAS,IAAC,WAAW,EAAC,cAAc,EAAC,EAAE,EAAC,IAAI,GAAG,EAGhD,MAAC,MAAM,IAAC,GAAG,EAAC,MAAM,aACf,UAAU,CAAC,CAAC,CAAC,CACZ,MAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;wDACZ,kBAAkB,CAAC,KAAK,CAAC,CAAA;wDACzB,UAAU,EAAE,CAAA;oDACd,CAAC,iBACW,uBAAuB,aAEnC,KAAC,QAAQ,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,EACvC,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,yBAE7B,IACA,CACV,CAAC,CAAC,CAAC,IAAI,EAEP,aAAa,IAAI,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,CAC/C,MAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;wDACZ,kBAAkB,CAAC,KAAK,CAAC,CAAA;wDACzB,aAAa,EAAE,CAAA;oDACjB,CAAC,aAED,KAAC,SAAS,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,EACxC,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,sCAE7B,IACA,CACV,CAAC,CAAC,CAAC,IAAI,EAEP,SAAS,CAAC,CAAC,CAAC,CACX,MAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;wDACZ,kBAAkB,CAAC,KAAK,CAAC,CAAA;wDACzB,SAAS,EAAE,CAAA;oDACb,CAAC,aAED,KAAC,UAAU,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,UAAU,GAAG,EACzC,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,wBAE7B,IACA,CACV,CAAC,CAAC,CAAC,IAAI,EAEP,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CACf,MAAC,MAAM,IAAC,KAAK,EAAC,QAAQ,EAAC,OAAO,EAAC,eAAe,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,MAAM,EAAC,OAAO,EAAC,IAAI,aAC3E,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,KAAK,EAAC,UAAU,sBAE7B,EACN,KAAK,IACC,CACV,CAAC,CAAC,CAAC,IAAI,IACD,EAGR,SAAS,CAAC,CAAC,CAAC,CACX,8BACE,KAAC,SAAS,IAAC,WAAW,EAAC,cAAc,EAAC,EAAE,EAAC,IAAI,GAAG,EAChD,MAAC,MAAM,IACL,IAAI,EAAC,UAAU,EACf,QAAQ,EAAE,CAAC,EACX,MAAM,EAAC,SAAS,EAChB,KAAK,EAAC,QAAQ,EACd,GAAG,EAAC,MAAM,EACV,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,MAAM,EACT,OAAO,EAAC,IAAI,EACZ,UAAU,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,EAC7B,OAAO,EAAE,GAAG,EAAE;wDACZ,kBAAkB,CAAC,KAAK,CAAC,CAAA;wDACzB,SAAS,EAAE,CAAA;oDACb,CAAC,iBACW,sBAAsB,aAElC,KAAC,MAAM,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAC,SAAS,GAAG,EACpC,KAAC,IAAI,IAAC,QAAQ,EAAC,IAAI,EAAC,UAAU,EAAC,KAAK,EAAC,KAAK,EAAC,SAAS,yBAE7C,IACA,IACR,CACJ,CAAC,CAAC,CAAC,IAAI,IACD,GACO,IACV,IACH,IACF,CACV,CAAA;AACH,CAAC"}
|
package/dist/product/index.cjs
CHANGED
|
@@ -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);
|
package/dist/product/index.d.ts
CHANGED
|
@@ -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":"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"}
|
package/dist/product/index.js
CHANGED
|
@@ -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.
|
|
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": {
|