@hanzo/build 0.2.22 → 0.2.23
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/lib/builder.js +4 -4
- package/lib/foot.d.ts +14 -0
- package/lib/foot.js +29 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/lib/builder.js
CHANGED
|
@@ -47,7 +47,7 @@ import { Run } from './run.js';
|
|
|
47
47
|
import { DOTS } from './section.js';
|
|
48
48
|
import { Artifacts, Templates } from './shelf.js';
|
|
49
49
|
import { Find } from './find.js';
|
|
50
|
-
import { DOCS, Slack, Who } from './foot.js';
|
|
50
|
+
import { DOCS, Slack, useWho, Who } from './foot.js';
|
|
51
51
|
import { Settings } from './settings/index.js';
|
|
52
52
|
function Shell() {
|
|
53
53
|
const host = useHost();
|
|
@@ -58,7 +58,7 @@ function Shell() {
|
|
|
58
58
|
const [drawer, setDrawer] = useState(false);
|
|
59
59
|
const [order, setOrder] = useState('newest');
|
|
60
60
|
const [finding, setFinding] = useState(false);
|
|
61
|
-
const
|
|
61
|
+
const who = useWho();
|
|
62
62
|
const [slack, setSlack] = useKept('hanzo.build.slack', false);
|
|
63
63
|
const go = (p) => {
|
|
64
64
|
setDrawer(false);
|
|
@@ -82,10 +82,10 @@ function Shell() {
|
|
|
82
82
|
name: [host.person.name || host.person.email, host.org].filter(Boolean).join(' · '),
|
|
83
83
|
onPress: () => {
|
|
84
84
|
setDrawer(false);
|
|
85
|
-
|
|
85
|
+
who.toggle();
|
|
86
86
|
},
|
|
87
87
|
}
|
|
88
|
-
: { name: 'Sign in', onPress: () => host.signIn?.() }, collapsed: collapsed, onCollapse: setCollapsed, mark: _jsx(Brand, { org: host.org }), pt: collapsed ? undefined : 92, open: drawer, onOpenChange: setDrawer, label: "Runs" }), collapsed ? null : (_jsxs(YStack, { position: "absolute", t: 10, l: 8, r: 8, z: 2, gap: "$2.5", "$max-md": { display: 'none' }, children: [_jsx(XStack, { px: "$2.5", children: name }), _jsxs(XStack, { render: "button", "aria-label": "Search runs", onPress: () => setFinding(true), items: "center", gap: "$2", px: "$2.5", height: 34, rounded: "$3", borderWidth: 1, borderColor: "$borderColor", bg: "$panel", hoverStyle: { bg: '$hover' }, children: [_jsx(Search, { size: 15, color: "$soft" }), _jsx(SizableText, { size: "$2", color: "$soft", children: "Search" })] })] })), host.person ? _jsx(Who, { open:
|
|
88
|
+
: { name: 'Sign in', onPress: () => host.signIn?.() }, collapsed: collapsed, onCollapse: setCollapsed, mark: _jsx(Brand, { org: host.org }), pt: collapsed ? undefined : 92, open: drawer, onOpenChange: setDrawer, label: "Runs" }), collapsed ? null : (_jsxs(YStack, { position: "absolute", t: 10, l: 8, r: 8, z: 2, gap: "$2.5", "$max-md": { display: 'none' }, children: [_jsx(XStack, { px: "$2.5", children: name }), _jsxs(XStack, { render: "button", "aria-label": "Search runs", onPress: () => setFinding(true), items: "center", gap: "$2", px: "$2.5", height: 34, rounded: "$3", borderWidth: 1, borderColor: "$borderColor", bg: "$panel", hoverStyle: { bg: '$hover' }, children: [_jsx(Search, { size: 15, color: "$soft" }), _jsx(SizableText, { size: "$2", color: "$soft", children: "Search" })] })] })), host.person ? _jsx(Who, { open: who.open, onOpenChange: who.onOpenChange, narrow: collapsed }) : null] }), _jsxs(YStack, { flex: 1, minW: 0, minH: 0, position: "relative", children: [_jsxs(XStack, { height: 44, px: "$2", gap: "$2", items: "center", shrink: 0, $md: { display: 'none' }, children: [_jsx(Button, { variant: "ghost", size: "icon-sm", onPress: () => setDrawer(true), "aria-label": "Open runs", children: _jsx(Menu, { size: 18 }) }), name, _jsx(XStack, { flex: 1 }), _jsx(Button, { variant: "ghost", size: "icon-sm", onPress: () => setFinding(true), "aria-label": "Search runs", children: _jsx(Search, { size: 18 }) })] }), _jsx(Pane, { onStarted: () => recents.reload() })] }), _jsx(Find, { open: finding, onOpenChange: setFinding, recents: rows, onOpen: (id) => { setFinding(false); go(id); } })] }));
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
91
|
* The builder's places, as a rail draws them: four in view and the rest under
|
package/lib/foot.d.ts
CHANGED
|
@@ -4,6 +4,20 @@ export declare function Slack({ onOpen, onDismiss }: {
|
|
|
4
4
|
onOpen: () => void;
|
|
5
5
|
onDismiss: () => void;
|
|
6
6
|
}): import("react").JSX.Element;
|
|
7
|
+
/**
|
|
8
|
+
* The account menu's open state, for whatever row opens it.
|
|
9
|
+
*
|
|
10
|
+
* The row that opens the menu lies outside it, so a press on the row while the
|
|
11
|
+
* menu is open reaches the popover first as a press outside, which closes it —
|
|
12
|
+
* and a row that then simply opened it put it straight back, a flicker instead
|
|
13
|
+
* of a close. So the open state is noted as each press BEGINS, before the popover
|
|
14
|
+
* acts on it, and `toggle` (the row's press) closes a menu that was open then.
|
|
15
|
+
*/
|
|
16
|
+
export declare function useWho(): {
|
|
17
|
+
open: boolean;
|
|
18
|
+
onOpenChange: (o: boolean) => void;
|
|
19
|
+
toggle: () => void;
|
|
20
|
+
};
|
|
7
21
|
/**
|
|
8
22
|
* The account menu. The rail draws the account row and says when it was pressed,
|
|
9
23
|
* so the menu hangs off an anchor laid over the rail's foot: above it on the
|
package/lib/foot.js
CHANGED
|
@@ -6,6 +6,7 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
6
6
|
* Everything it opens is an address of this page, but help, which is the
|
|
7
7
|
* documentation.
|
|
8
8
|
*/
|
|
9
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
9
10
|
import { Popover, SizableText, XStack, YStack } from '@hanzo/gui';
|
|
10
11
|
import { Gauge, LifeBuoy, LogOut, Settings, Slack as Mark, Sparkles, X } from '@hanzogui/lucide-icons-2';
|
|
11
12
|
import { MenuLabel, MenuRow, MenuRule } from '@hanzo/ui/product';
|
|
@@ -16,6 +17,34 @@ export const DOCS = 'https://docs.hanzo.ai/docs/dev';
|
|
|
16
17
|
export function Slack({ onOpen, onDismiss }) {
|
|
17
18
|
return (_jsxs(XStack, { items: "center", gap: "$2.5", px: "$3", py: "$2.5", rounded: "$3", borderWidth: 1, borderColor: "$borderColor", bg: "$panel", children: [_jsx(Mark, { size: 16 }), _jsxs(YStack, { flex: 1, minW: 0, gap: "$0.5", children: [_jsx(SizableText, { size: "$2", color: "$ink", numberOfLines: 1, children: "Try Hanzo in Slack" }), _jsx(XStack, { render: "button", "aria-label": "Set up Hanzo in Slack", onPress: onOpen, cursor: "pointer", children: _jsx(SizableText, { size: "$1", color: "$soft", textDecorationLine: "underline", children: "Set up" }) })] }), _jsx(XStack, { render: "button", "aria-label": "Dismiss", onPress: onDismiss, p: "$1", rounded: "$2", hoverStyle: { bg: '$hover' }, children: _jsx(X, { size: 14 }) })] }));
|
|
18
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* The account menu's open state, for whatever row opens it.
|
|
22
|
+
*
|
|
23
|
+
* The row that opens the menu lies outside it, so a press on the row while the
|
|
24
|
+
* menu is open reaches the popover first as a press outside, which closes it —
|
|
25
|
+
* and a row that then simply opened it put it straight back, a flicker instead
|
|
26
|
+
* of a close. So the open state is noted as each press BEGINS, before the popover
|
|
27
|
+
* acts on it, and `toggle` (the row's press) closes a menu that was open then.
|
|
28
|
+
*/
|
|
29
|
+
export function useWho() {
|
|
30
|
+
const [open, setOpen] = useState(false);
|
|
31
|
+
const shown = useRef(open);
|
|
32
|
+
shown.current = open;
|
|
33
|
+
const began = useRef(false);
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const down = () => {
|
|
36
|
+
began.current = shown.current;
|
|
37
|
+
};
|
|
38
|
+
document.addEventListener('pointerdown', down, true);
|
|
39
|
+
return () => document.removeEventListener('pointerdown', down, true);
|
|
40
|
+
}, []);
|
|
41
|
+
const toggle = useCallback(() => {
|
|
42
|
+
const was = began.current || shown.current;
|
|
43
|
+
began.current = false;
|
|
44
|
+
setOpen(!was);
|
|
45
|
+
}, []);
|
|
46
|
+
return { open, onOpenChange: setOpen, toggle };
|
|
47
|
+
}
|
|
19
48
|
/**
|
|
20
49
|
* The account menu. The rail draws the account row and says when it was pressed,
|
|
21
50
|
* so the menu hangs off an anchor laid over the rail's foot: above it on the
|
package/lib/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
export { Builder, nav } from './builder.tsx';
|
|
13
13
|
export { DevSection, DOTS, useSessions } from './section.tsx';
|
|
14
14
|
export { HostProvider } from './host.tsx';
|
|
15
|
-
export { Slack, Who } from './foot.tsx';
|
|
15
|
+
export { Slack, useWho, Who } from './foot.tsx';
|
|
16
16
|
export { administers } from './claims.ts';
|
|
17
17
|
export type { Host, Person } from './host.tsx';
|
|
18
18
|
export type { Session, Status } from './api/sessions.ts';
|
package/lib/index.js
CHANGED
|
@@ -12,6 +12,6 @@
|
|
|
12
12
|
export { Builder, nav } from './builder.js';
|
|
13
13
|
export { DevSection, DOTS, useSessions } from './section.js';
|
|
14
14
|
export { HostProvider } from './host.js';
|
|
15
|
-
export { Slack, Who } from './foot.js';
|
|
15
|
+
export { Slack, useWho, Who } from './foot.js';
|
|
16
16
|
export { administers } from './claims.js';
|
|
17
17
|
export { path, route, SESSION, SLUG } from './route.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hanzo/build",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.23",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"description": "Hanzo Build — say what you want, watch it built, deployed and running. The builder as a component, mounted by the Hanzo app at hanzo.ai.",
|