@vibes.diy/base 14.3.105 → 14.3.106
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/components/HandlePickerMenu.d.ts +1 -2
- package/components/HandlePickerMenu.js +1 -2
- package/components/HandlePickerMenu.js.map +1 -1
- package/components/OnboardingOverlay.d.ts +2 -13
- package/components/OnboardingOverlay.js +51 -33
- package/components/OnboardingOverlay.js.map +1 -1
- package/components/ViewerTagView.d.ts +1 -3
- package/components/ViewerTagView.js +1 -17
- package/components/ViewerTagView.js.map +1 -1
- package/components/index.d.ts +0 -1
- package/components/index.js +0 -1
- package/components/index.js.map +1 -1
- package/components/vibe-menu/VibeMenu.js +18 -4
- package/components/vibe-menu/VibeMenu.js.map +1 -1
- package/components/vibe-menu/cards/AccountCard.d.ts +1 -9
- package/components/vibe-menu/cards/AccountCard.js +5 -60
- package/components/vibe-menu/cards/AccountCard.js.map +1 -1
- package/components/vibe-menu/cards/CodeCard.js +73 -19
- package/components/vibe-menu/cards/CodeCard.js.map +1 -1
- package/components/vibe-menu/cards/CodeModeWorkspace.d.ts +1 -0
- package/components/vibe-menu/cards/CodeModeWorkspace.js +2 -1
- package/components/vibe-menu/cards/CodeModeWorkspace.js.map +1 -1
- package/components/vibe-menu/cards/CodeTabRow.d.ts +29 -3
- package/components/vibe-menu/cards/CodeTabRow.js +73 -12
- package/components/vibe-menu/cards/CodeTabRow.js.map +1 -1
- package/components/vibe-menu/fixtures.js +0 -2
- package/components/vibe-menu/fixtures.js.map +1 -1
- package/components/vibe-menu/index.d.ts +1 -0
- package/components/vibe-menu/index.js +1 -0
- package/components/vibe-menu/index.js.map +1 -1
- package/components/vibe-menu/menu-state.d.ts +1 -1
- package/components/vibe-menu/open-resolver.d.ts +0 -2
- package/components/vibe-menu/open-resolver.js +0 -2
- package/components/vibe-menu/open-resolver.js.map +1 -1
- package/components/vibe-menu/parts/ScrollTabRow.d.ts +29 -0
- package/components/vibe-menu/parts/ScrollTabRow.js +172 -0
- package/components/vibe-menu/parts/ScrollTabRow.js.map +1 -0
- package/components/vibe-menu/sketches/AccountTabAudition.js +16 -36
- package/components/vibe-menu/sketches/AccountTabAudition.js.map +1 -1
- package/components/vibe-menu/sketches/CardTabRow.d.ts +1 -1
- package/components/vibe-menu/sketches/CodeTierAudition.d.ts +42 -0
- package/components/vibe-menu/sketches/CodeTierAudition.js +141 -0
- package/components/vibe-menu/sketches/CodeTierAudition.js.map +1 -0
- package/components/vibe-menu/slices.d.ts +0 -2
- package/components/vibe-menu/slices.js.map +1 -1
- package/package.json +5 -5
- package/components/HandleChooser.d.ts +0 -44
- package/components/HandleChooser.js +0 -112
- package/components/HandleChooser.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"open-resolver.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/open-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAqB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"open-resolver.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/open-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type GlyphName } from "./Glyph.js";
|
|
3
|
+
export interface ScrollTabItem {
|
|
4
|
+
readonly key: string;
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly glyph?: GlyphName;
|
|
7
|
+
readonly kind?: "tab" | "toggle";
|
|
8
|
+
readonly pressed?: boolean;
|
|
9
|
+
readonly disabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface ScrollTabRowProps {
|
|
12
|
+
readonly label: string;
|
|
13
|
+
readonly items: readonly ScrollTabItem[];
|
|
14
|
+
readonly active: string | null;
|
|
15
|
+
readonly onPick: (key: string) => void;
|
|
16
|
+
readonly panelId?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const SCROLL_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-srow {\n position: relative; flex: none;\n margin: var(--space-14) calc(-1 * var(--space-16)) 0;\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-srow-track {\n display: flex; overflow-x: auto; scrollbar-width: none; overscroll-behavior-x: contain;\n}\n[data-vibe-menu] .vm-srow-track::-webkit-scrollbar { display: none; }\n[data-vibe-menu] .vm-srow-tabs { display: flex; flex: none; }\n[data-vibe-menu] .vm-srow-item {\n position: relative; flex: none;\n display: flex; align-items: center; justify-content: center; gap: var(--space-6);\n height: 40px; padding: 0 var(--space-10);\n color: var(--ink); white-space: nowrap;\n font: 700 10px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase;\n}\n/* Everything fits: the items share the band, as the row under it does. */\n[data-vibe-menu] .vm-srow[data-overflow=\"none\"] .vm-srow-tabs,\n[data-vibe-menu] .vm-srow[data-overflow=\"none\"] .vm-srow-item { flex: 1 1 auto; }\n[data-vibe-menu] .vm-srow-item:not(:first-child) { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-srow-item .vm-glyph { width: 12px; height: 12px; flex: none; }\n[data-vibe-menu] .vm-srow-item:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-srow-item[aria-selected=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-srow-item[aria-disabled=\"true\"] { opacity: 0.4; }\n[data-vibe-menu] .vm-srow-switch {\n position: relative; flex: none; width: 18px; height: 10px; border-radius: var(--radius-full);\n border: 1.5px solid currentColor; box-sizing: border-box;\n}\n[data-vibe-menu] .vm-srow-switch::after {\n content: \"\"; position: absolute; top: 1px; left: 1px; width: 5px; height: 5px; border-radius: 50%; background: currentColor;\n}\n[data-vibe-menu] .vm-srow-item[aria-pressed=\"true\"] > .vm-srow-switch { background: currentColor; }\n[data-vibe-menu] .vm-srow-item[aria-pressed=\"true\"] > .vm-srow-switch::after { left: auto; right: 1px; background: var(--card-bg); }\n[data-vibe-menu] .vm-srow::before,\n[data-vibe-menu] .vm-srow::after {\n content: \"\"; position: absolute; top: 0; bottom: 0; width: 48px; pointer-events: none; z-index: 1; display: none;\n}\n[data-vibe-menu] .vm-srow::before { left: 0; background: linear-gradient(to right, var(--card-bg) 55%, transparent); }\n[data-vibe-menu] .vm-srow::after { right: 0; background: linear-gradient(to left, var(--card-bg) 55%, transparent); }\n[data-vibe-menu] .vm-srow[data-more-prev]::before,\n[data-vibe-menu] .vm-srow[data-more-next]::after { display: block; }\n[data-vibe-menu] .vm-srow-hint {\n position: absolute; top: 0; bottom: 0; z-index: 2; width: 32px;\n display: flex; align-items: center; justify-content: center; color: var(--ink);\n}\n[data-vibe-menu] .vm-srow-hint[data-dir=\"next\"] { right: 0; }\n[data-vibe-menu] .vm-srow-hint[data-dir=\"prev\"] { left: 0; }\n[data-vibe-menu] .vm-srow-hint[data-dir=\"prev\"] .vm-glyph { transform: scaleX(-1); }\n[data-vibe-menu] .vm-srow-hint .vm-glyph { width: 14px; height: 14px; }\n";
|
|
19
|
+
interface Ends {
|
|
20
|
+
readonly prev: boolean;
|
|
21
|
+
readonly next: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare function scrollEnds(el: {
|
|
24
|
+
readonly scrollLeft: number;
|
|
25
|
+
readonly clientWidth: number;
|
|
26
|
+
readonly scrollWidth: number;
|
|
27
|
+
}): Ends;
|
|
28
|
+
export declare function ScrollTabRow(props: ScrollTabRowProps): React.ReactElement;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { Glyph } from "./Glyph.js";
|
|
3
|
+
import { nextRadioIndex } from "./radio-keys.js";
|
|
4
|
+
const CHEVRON_WIDTH = 32;
|
|
5
|
+
const EDGE_INSET = 48;
|
|
6
|
+
export const SCROLL_TAB_ROW_CSS = `
|
|
7
|
+
[data-vibe-menu] .vm-srow {
|
|
8
|
+
position: relative; flex: none;
|
|
9
|
+
margin: var(--space-14) calc(-1 * var(--space-16)) 0;
|
|
10
|
+
border-top: var(--stroke-hairline) solid var(--line-hairline);
|
|
11
|
+
}
|
|
12
|
+
[data-vibe-menu] .vm-srow-track {
|
|
13
|
+
display: flex; overflow-x: auto; scrollbar-width: none; overscroll-behavior-x: contain;
|
|
14
|
+
}
|
|
15
|
+
[data-vibe-menu] .vm-srow-track::-webkit-scrollbar { display: none; }
|
|
16
|
+
[data-vibe-menu] .vm-srow-tabs { display: flex; flex: none; }
|
|
17
|
+
[data-vibe-menu] .vm-srow-item {
|
|
18
|
+
position: relative; flex: none;
|
|
19
|
+
display: flex; align-items: center; justify-content: center; gap: var(--space-6);
|
|
20
|
+
height: 40px; padding: 0 var(--space-10);
|
|
21
|
+
color: var(--ink); white-space: nowrap;
|
|
22
|
+
font: 700 10px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase;
|
|
23
|
+
}
|
|
24
|
+
/* Everything fits: the items share the band, as the row under it does. */
|
|
25
|
+
[data-vibe-menu] .vm-srow[data-overflow="none"] .vm-srow-tabs,
|
|
26
|
+
[data-vibe-menu] .vm-srow[data-overflow="none"] .vm-srow-item { flex: 1 1 auto; }
|
|
27
|
+
[data-vibe-menu] .vm-srow-item:not(:first-child) { border-left: var(--stroke-hairline) solid var(--line-hairline); }
|
|
28
|
+
[data-vibe-menu] .vm-srow-item .vm-glyph { width: 12px; height: 12px; flex: none; }
|
|
29
|
+
[data-vibe-menu] .vm-srow-item:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }
|
|
30
|
+
[data-vibe-menu] .vm-srow-item[aria-selected="true"] { background: var(--accent); color: var(--on-accent); }
|
|
31
|
+
[data-vibe-menu] .vm-srow-item[aria-disabled="true"] { opacity: 0.4; }
|
|
32
|
+
[data-vibe-menu] .vm-srow-switch {
|
|
33
|
+
position: relative; flex: none; width: 18px; height: 10px; border-radius: var(--radius-full);
|
|
34
|
+
border: 1.5px solid currentColor; box-sizing: border-box;
|
|
35
|
+
}
|
|
36
|
+
[data-vibe-menu] .vm-srow-switch::after {
|
|
37
|
+
content: ""; position: absolute; top: 1px; left: 1px; width: 5px; height: 5px; border-radius: 50%; background: currentColor;
|
|
38
|
+
}
|
|
39
|
+
[data-vibe-menu] .vm-srow-item[aria-pressed="true"] > .vm-srow-switch { background: currentColor; }
|
|
40
|
+
[data-vibe-menu] .vm-srow-item[aria-pressed="true"] > .vm-srow-switch::after { left: auto; right: 1px; background: var(--card-bg); }
|
|
41
|
+
[data-vibe-menu] .vm-srow::before,
|
|
42
|
+
[data-vibe-menu] .vm-srow::after {
|
|
43
|
+
content: ""; position: absolute; top: 0; bottom: 0; width: ${EDGE_INSET}px; pointer-events: none; z-index: 1; display: none;
|
|
44
|
+
}
|
|
45
|
+
[data-vibe-menu] .vm-srow::before { left: 0; background: linear-gradient(to right, var(--card-bg) 55%, transparent); }
|
|
46
|
+
[data-vibe-menu] .vm-srow::after { right: 0; background: linear-gradient(to left, var(--card-bg) 55%, transparent); }
|
|
47
|
+
[data-vibe-menu] .vm-srow[data-more-prev]::before,
|
|
48
|
+
[data-vibe-menu] .vm-srow[data-more-next]::after { display: block; }
|
|
49
|
+
[data-vibe-menu] .vm-srow-hint {
|
|
50
|
+
position: absolute; top: 0; bottom: 0; z-index: 2; width: ${CHEVRON_WIDTH}px;
|
|
51
|
+
display: flex; align-items: center; justify-content: center; color: var(--ink);
|
|
52
|
+
}
|
|
53
|
+
[data-vibe-menu] .vm-srow-hint[data-dir="next"] { right: 0; }
|
|
54
|
+
[data-vibe-menu] .vm-srow-hint[data-dir="prev"] { left: 0; }
|
|
55
|
+
[data-vibe-menu] .vm-srow-hint[data-dir="prev"] .vm-glyph { transform: scaleX(-1); }
|
|
56
|
+
[data-vibe-menu] .vm-srow-hint .vm-glyph { width: 14px; height: 14px; }
|
|
57
|
+
`;
|
|
58
|
+
export function scrollEnds(el) {
|
|
59
|
+
return {
|
|
60
|
+
prev: el.scrollLeft > 1,
|
|
61
|
+
next: el.scrollLeft + el.clientWidth < el.scrollWidth - 1,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function revealItem(track, item) {
|
|
65
|
+
const trackBox = track.getBoundingClientRect();
|
|
66
|
+
const box = item.getBoundingClientRect();
|
|
67
|
+
const left = box.left - trackBox.left + track.scrollLeft;
|
|
68
|
+
const right = left + box.width;
|
|
69
|
+
if (left - EDGE_INSET < track.scrollLeft) {
|
|
70
|
+
track.scrollLeft = Math.max(0, left - EDGE_INSET);
|
|
71
|
+
}
|
|
72
|
+
else if (right + EDGE_INSET > track.scrollLeft + track.clientWidth) {
|
|
73
|
+
track.scrollLeft = right + EDGE_INSET - track.clientWidth;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function prefersReducedMotion() {
|
|
77
|
+
return typeof globalThis.matchMedia === "function" && globalThis.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
78
|
+
}
|
|
79
|
+
export function ScrollTabRow(props) {
|
|
80
|
+
const track = React.useRef(null);
|
|
81
|
+
const [ends, setEnds] = React.useState({ prev: false, next: false });
|
|
82
|
+
const tabs = props.items.filter((item) => item.kind !== "toggle");
|
|
83
|
+
const toggles = props.items.filter((item) => item.kind === "toggle");
|
|
84
|
+
const itemKeys = props.items.map((item) => item.key).join("\u0000");
|
|
85
|
+
const measure = React.useCallback(() => {
|
|
86
|
+
const el = track.current;
|
|
87
|
+
if (el === null)
|
|
88
|
+
return;
|
|
89
|
+
const next = scrollEnds(el);
|
|
90
|
+
setEnds((was) => (was.prev === next.prev && was.next === next.next ? was : next));
|
|
91
|
+
}, []);
|
|
92
|
+
const revealedAt = React.useRef("");
|
|
93
|
+
const revealActive = React.useCallback(() => {
|
|
94
|
+
const el = track.current;
|
|
95
|
+
if (el === null)
|
|
96
|
+
return;
|
|
97
|
+
revealedAt.current = `${el.clientWidth}|${el.scrollWidth}`;
|
|
98
|
+
if (props.active === null)
|
|
99
|
+
return;
|
|
100
|
+
const item = el.querySelector(`[data-item="${CSS.escape(props.active)}"]`);
|
|
101
|
+
if (item !== null)
|
|
102
|
+
revealItem(el, item);
|
|
103
|
+
}, [props.active]);
|
|
104
|
+
React.useLayoutEffect(() => {
|
|
105
|
+
revealActive();
|
|
106
|
+
measure();
|
|
107
|
+
const el = track.current;
|
|
108
|
+
if (el === null || typeof ResizeObserver === "undefined")
|
|
109
|
+
return;
|
|
110
|
+
const observer = new ResizeObserver(() => {
|
|
111
|
+
if (`${el.clientWidth}|${el.scrollWidth}` !== revealedAt.current)
|
|
112
|
+
revealActive();
|
|
113
|
+
measure();
|
|
114
|
+
});
|
|
115
|
+
observer.observe(el);
|
|
116
|
+
for (const child of el.querySelectorAll(".vm-srow-item"))
|
|
117
|
+
observer.observe(child);
|
|
118
|
+
return () => observer.disconnect();
|
|
119
|
+
}, [revealActive, measure, itemKeys]);
|
|
120
|
+
const step = (dir) => {
|
|
121
|
+
const el = track.current;
|
|
122
|
+
if (el === null)
|
|
123
|
+
return;
|
|
124
|
+
el.scrollBy({ left: dir * Math.round(el.clientWidth * 0.7), behavior: prefersReducedMotion() ? "auto" : "smooth" });
|
|
125
|
+
};
|
|
126
|
+
const focusKey = tabs.some((tab) => tab.key === props.active) ? props.active : (tabs[0]?.key ?? null);
|
|
127
|
+
const onKeyDown = (event, index) => {
|
|
128
|
+
let target;
|
|
129
|
+
if (event.key === "Home")
|
|
130
|
+
target = 0;
|
|
131
|
+
else if (event.key === "End")
|
|
132
|
+
target = tabs.length - 1;
|
|
133
|
+
else
|
|
134
|
+
target = nextRadioIndex({ key: event.key, index, count: tabs.length });
|
|
135
|
+
if (target === undefined)
|
|
136
|
+
return;
|
|
137
|
+
event.preventDefault();
|
|
138
|
+
const key = tabs[target]?.key;
|
|
139
|
+
const el = track.current;
|
|
140
|
+
if (key === undefined || el === null)
|
|
141
|
+
return;
|
|
142
|
+
const button = el.querySelector(`[data-item="${CSS.escape(key)}"]`);
|
|
143
|
+
if (button === null)
|
|
144
|
+
return;
|
|
145
|
+
button.focus({ preventScroll: true });
|
|
146
|
+
revealItem(el, button);
|
|
147
|
+
};
|
|
148
|
+
const overflow = ends.prev || ends.next ? "scroll" : "none";
|
|
149
|
+
return (React.createElement("div", { className: "vm-srow", "data-overflow": overflow, "data-more-prev": ends.prev ? "" : undefined, "data-more-next": ends.next ? "" : undefined },
|
|
150
|
+
React.createElement("style", null, SCROLL_TAB_ROW_CSS),
|
|
151
|
+
React.createElement("div", { className: "vm-srow-track", ref: track, onScroll: measure },
|
|
152
|
+
tabs.length > 0 ? (React.createElement("div", { className: "vm-srow-tabs", role: "tablist", "aria-label": props.label }, tabs.map((tab, index) => {
|
|
153
|
+
const selected = tab.key === props.active && tab.disabled !== true;
|
|
154
|
+
return (React.createElement("button", { key: tab.key, className: "vm-srow-item", type: "button", role: "tab", "data-item": tab.key, "aria-selected": selected, "aria-disabled": tab.disabled === true ? true : undefined, "aria-controls": props.panelId, tabIndex: tab.key === focusKey ? 0 : -1, onKeyDown: (event) => onKeyDown(event, index), onClick: () => {
|
|
155
|
+
if (tab.disabled !== true)
|
|
156
|
+
props.onPick(tab.key);
|
|
157
|
+
} },
|
|
158
|
+
tab.glyph !== undefined ? React.createElement(Glyph, { name: tab.glyph }) : null,
|
|
159
|
+
React.createElement("span", null, tab.label)));
|
|
160
|
+
}))) : null,
|
|
161
|
+
toggles.map((toggle) => (React.createElement("button", { key: toggle.key, className: "vm-srow-item", type: "button", "data-item": toggle.key, "data-kind": "toggle", "aria-pressed": toggle.pressed === true, "aria-disabled": toggle.disabled === true ? true : undefined, onClick: () => {
|
|
162
|
+
if (toggle.disabled !== true)
|
|
163
|
+
props.onPick(toggle.key);
|
|
164
|
+
} },
|
|
165
|
+
React.createElement("span", null, toggle.label),
|
|
166
|
+
React.createElement("i", { className: "vm-srow-switch", "aria-hidden": "true" }))))),
|
|
167
|
+
ends.prev ? (React.createElement("button", { className: "vm-srow-hint", type: "button", "data-dir": "prev", tabIndex: -1, "aria-label": `Earlier ${props.label}`, onClick: () => step(-1) },
|
|
168
|
+
React.createElement(Glyph, { name: "chevron-right" }))) : null,
|
|
169
|
+
ends.next ? (React.createElement("button", { className: "vm-srow-hint", type: "button", "data-dir": "next", tabIndex: -1, "aria-label": `More ${props.label}`, onClick: () => step(1) },
|
|
170
|
+
React.createElement(Glyph, { name: "chevron-right" }))) : null));
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=ScrollTabRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollTabRow.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/parts/ScrollTabRow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { ACCOUNT_CARD_CSS, ACCOUNT_COPY,
|
|
2
|
+
import { ACCOUNT_CARD_CSS, ACCOUNT_COPY, HandlesDrill } from "../cards/AccountCard.js";
|
|
3
3
|
import { JOIN_OR_SIGN_IN } from "../copy.js";
|
|
4
4
|
import { ActionPill } from "../parts/ActionPill.js";
|
|
5
5
|
import { CARD_TAB_ROW_CSS, CardTabRow, MainAction, Stretch, toggleDrill } from "./CardTabRow.js";
|
|
@@ -13,20 +13,9 @@ function initialOf(name) {
|
|
|
13
13
|
}
|
|
14
14
|
export function accountTabItems(account) {
|
|
15
15
|
const items = [];
|
|
16
|
-
if (account.
|
|
16
|
+
if (account.activeHandle !== null) {
|
|
17
17
|
items.push({ key: "handles", label: ACCOUNT_COPY.handles, glyph: "at-sign", kind: "drill" });
|
|
18
18
|
}
|
|
19
|
-
else {
|
|
20
|
-
const action = account.creditsAction;
|
|
21
|
-
items.push({
|
|
22
|
-
key: "credits",
|
|
23
|
-
label: "Credits",
|
|
24
|
-
glyph: "plus",
|
|
25
|
-
kind: "link",
|
|
26
|
-
href: action.href,
|
|
27
|
-
onClick: () => action.onClick?.(),
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
19
|
items.push({ key: "memberships", label: ACCOUNT_COPY.memberships, glyph: "star", kind: "link", href: account.membershipsHref });
|
|
31
20
|
items.push({ key: "settings", label: ACCOUNT_COPY.settings, glyph: "sliders", kind: "link", href: account.settingsHref });
|
|
32
21
|
return items;
|
|
@@ -54,7 +43,7 @@ export function AccountTabAudition(props) {
|
|
|
54
43
|
const pending = viewer.identityPending === true;
|
|
55
44
|
const signedIn = viewer.role !== "signedOut";
|
|
56
45
|
const css = React.createElement("style", null, ACCOUNT_CARD_CSS + CARD_TAB_ROW_CSS + ACCOUNT_TAB_CSS);
|
|
57
|
-
const resolving = pending || (signedIn && account.
|
|
46
|
+
const resolving = pending || (signedIn && account.activeHandle === null);
|
|
58
47
|
if (resolving) {
|
|
59
48
|
return (React.createElement("div", { className: "vm-account vm-ctab vm-xtab", "data-card": "settings" },
|
|
60
49
|
css,
|
|
@@ -70,41 +59,32 @@ export function AccountTabAudition(props) {
|
|
|
70
59
|
React.createElement("p", { className: "vm-sub" }, ACCOUNT_COPY.signedOutSub)));
|
|
71
60
|
}
|
|
72
61
|
const nav = {
|
|
73
|
-
view: active === null ? null : { drill:
|
|
62
|
+
view: active === null ? null : { drill: "handles" },
|
|
74
63
|
banner: null,
|
|
75
64
|
onDrill: (view) => setActive(view.drill),
|
|
76
65
|
onLeaveDrill: () => setActive(null),
|
|
77
66
|
};
|
|
78
67
|
const row = (React.createElement(CardTabRow, { label: ACCOUNT_COPY.settings, items: accountTabItems(account), active: active, onDrill: (key) => setActive((open) => toggleDrill(open, key)) }));
|
|
79
|
-
if (active === "handles"
|
|
68
|
+
if (active === "handles") {
|
|
80
69
|
return (React.createElement("div", { className: "vm-account vm-ctab vm-xtab", "data-card": "settings" },
|
|
81
70
|
css,
|
|
82
|
-
|
|
71
|
+
React.createElement(HandlesDrill, { viewer: viewer, account: account, nav: nav }),
|
|
83
72
|
row));
|
|
84
73
|
}
|
|
85
74
|
const logOut = account.onLogout !== null ? (React.createElement("button", { className: "vm-textbtn", type: "button", "data-item": "logOut", onClick: account.onLogout }, ACCOUNT_COPY.logOut)) : null;
|
|
86
75
|
const handle = account.activeHandle ?? "";
|
|
87
76
|
return (React.createElement("div", { className: "vm-account vm-ctab vm-xtab", "data-card": "settings" },
|
|
88
77
|
css,
|
|
89
|
-
|
|
90
|
-
React.createElement(
|
|
91
|
-
React.createElement("
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
React.createElement(
|
|
97
|
-
|
|
98
|
-
React.createElement(
|
|
99
|
-
React.createElement("div", { className: "vm-who" },
|
|
100
|
-
React.createElement("span", { className: "vm-avatar", "aria-hidden": "true" }, initialOf(handle)),
|
|
101
|
-
React.createElement("span", { className: "vm-handle" },
|
|
102
|
-
"@",
|
|
103
|
-
handle),
|
|
104
|
-
logOut),
|
|
105
|
-
React.createElement(Credits, { account: account })),
|
|
106
|
-
React.createElement(MainAction, null,
|
|
107
|
-
React.createElement(ActionPill, { label: account.creditsAction.label, href: account.creditsAction.href, onClick: account.creditsAction.onClick, solo: true })))),
|
|
78
|
+
React.createElement(Stretch, null,
|
|
79
|
+
React.createElement("div", { className: "vm-who" },
|
|
80
|
+
React.createElement("span", { className: "vm-avatar", "aria-hidden": "true" }, initialOf(handle)),
|
|
81
|
+
React.createElement("span", { className: "vm-handle" },
|
|
82
|
+
"@",
|
|
83
|
+
handle),
|
|
84
|
+
logOut),
|
|
85
|
+
React.createElement(Credits, { account: account })),
|
|
86
|
+
React.createElement(MainAction, null,
|
|
87
|
+
React.createElement(ActionPill, { label: account.creditsAction.label, href: account.creditsAction.href, onClick: account.creditsAction.onClick, solo: true })),
|
|
108
88
|
row));
|
|
109
89
|
}
|
|
110
90
|
//# sourceMappingURL=AccountTabAudition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountTabAudition.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/sketches/AccountTabAudition.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"AccountTabAudition.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/sketches/AccountTabAudition.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ export interface CardTabItem {
|
|
|
9
9
|
readonly href?: string;
|
|
10
10
|
readonly onClick?: (event: React.MouseEvent<HTMLElement>) => void;
|
|
11
11
|
}
|
|
12
|
-
export declare const CARD_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-ctab { display: flex; flex-direction: column; }\n[data-vibe-menu] .vm-ctab .vm-composer { margin-bottom: 0; }\n[data-vibe-menu] .vm-ctab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The opened chat ends with the suggestions: the clip holds the log's own\n 160px cap plus them, and the log alone scrolls. */\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"] { max-height: none; }\n[data-vibe-menu] .vm-ctab .vm-log-clip .vm-suggestions { margin: var(--space-12) 0 0; }\n[data-vibe-menu] .vm-cnav {\n display: flex; flex: none; height: var(--size-bar);\n margin: var(--space-14) calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-cnav button {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink);\n}\n[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-cnav-circle {\n display: flex; align-items: center; justify-content: center; flex: none;\n width: var(--size-icon-circle-phone); height: var(--size-icon-circle-phone);\n border-radius: 50%; background: var(--ink);\n}\n[data-vibe-menu] .vm-cnav-circle svg {\n width: 12px; height: 12px; fill: none; stroke: var(--card-bg); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;\n}\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle { background: var(--menu-ink); }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle svg { stroke: var(--vibes-cream); }\n[data-vibe-menu] .vm-cnav-label {\n max-width: 100%; overflow: hidden; text-overflow: ellipsis;\n font: 700 9.6px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase; white-space: nowrap;\n}\n\n[data-vibe-menu] .vm-cnav > a {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink); text-decoration: none;\n}\n[data-vibe-menu] .vm-cnav > * + a,\n[data-vibe-menu] .vm-cnav > a + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav > a:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-xtab .vm-back { display: none; }\n[data-vibe-menu] .vm-xtab .vm-drill > .vm-subhead:first-child { margin-top: 0; }\n/* A drill taller than the card (Handles, Share settings) scrolls the card; the\n row sticks on the band so it stays in view, pressed. Code's row never needed\n this: its drills are short. In flow (no overflow) this changes nothing. */\n[data-vibe-menu] .vm-xtab .vm-cnav { position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg); }\n[data-vibe-menu] .vm-xtab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The hierarchy (owner 2026-10-13), bottom up: the strip, this row, the card's\n ONE main action, then the stretch. The two zones are layout-free wrappers, so\n each card keeps its own spacing; the main action sits on the row's own top\n margin, as Code's composer does. */\n[data-vibe-menu] .vm-xtab .vm-stretch,\n[data-vibe-menu] .vm-xtab .vm-main { display: contents; }\n[data-vibe-menu] .vm-xtab .vm-main > :last-child { margin-bottom: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-subhead:first-child { margin-top: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group.is-flush { border-bottom: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group:last-child { margin-bottom: var(--space-14); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group + * { margin-top: var(--space-14); }\n";
|
|
12
|
+
export declare const CARD_TAB_ROW_CSS = "\n[data-vibe-menu] .vm-ctab { display: flex; flex-direction: column; }\n[data-vibe-menu] .vm-ctab .vm-composer { margin-bottom: 0; }\n[data-vibe-menu] .vm-ctab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The opened chat ends with the suggestions: the clip holds the log's own\n 160px cap plus them, and the log alone scrolls. */\n[data-vibe-menu] .vm-ctab .vm-log-clip[data-open=\"true\"] { max-height: none; }\n[data-vibe-menu] .vm-ctab .vm-log-clip .vm-suggestions { margin: var(--space-12) 0 0; }\n[data-vibe-menu] .vm-cnav {\n display: flex; flex: none; height: var(--size-bar);\n margin: var(--space-14) calc(-1 * var(--space-16)) calc(-1 * var(--space-16));\n border-top: var(--stroke-hairline) solid var(--line-hairline);\n}\n[data-vibe-menu] .vm-cnav button {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink);\n}\n[data-vibe-menu] .vm-cnav button + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav button:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] { background: var(--accent); color: var(--on-accent); }\n[data-vibe-menu] .vm-cnav-circle {\n display: flex; align-items: center; justify-content: center; flex: none;\n width: var(--size-icon-circle-phone); height: var(--size-icon-circle-phone);\n border-radius: 50%; background: var(--ink);\n}\n[data-vibe-menu] .vm-cnav-circle svg {\n width: 12px; height: 12px; fill: none; stroke: var(--card-bg); stroke-width: 2.5; stroke-linecap: round; stroke-linejoin: round;\n}\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle { background: var(--menu-ink); }\n[data-vibe-menu] .vm-cnav button[aria-pressed=\"true\"] .vm-cnav-circle svg { stroke: var(--vibes-cream); }\n/* Code mode with the row: the retained workspace sits above this card's\n content, then the composer, the scroll tier and the row, flush. */\n[data-vibe-menu] .vm-ctab[data-tier-mode]:not([data-fill]) { padding-top: var(--space-14); }\n[data-vibe-menu] .vm-ctab[data-tier-mode] .vm-tier-body {\n flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain; margin-bottom: var(--space-14);\n}\n[data-vibe-menu] .vm-ctab .vm-srow + .vm-cnav { margin-top: 0; }\n[data-vibe-menu] .vm-cnav-label {\n max-width: 100%; overflow: hidden; text-overflow: ellipsis;\n font: 700 9.6px/1 var(--font-tab); letter-spacing: 0.5px; text-transform: uppercase; white-space: nowrap;\n}\n\n[data-vibe-menu] .vm-cnav > a {\n position: relative; flex: 1 1 auto; min-width: 0;\n display: flex; flex-direction: column; align-items: center; justify-content: center; gap: var(--space-4);\n padding: var(--space-4) var(--space-2);\n color: var(--ink); text-decoration: none;\n}\n[data-vibe-menu] .vm-cnav > * + a,\n[data-vibe-menu] .vm-cnav > a + button { border-left: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-cnav > a:focus-visible { outline: var(--stroke-focus) solid var(--line-card); outline-offset: -3px; }\n[data-vibe-menu] .vm-xtab .vm-back { display: none; }\n[data-vibe-menu] .vm-xtab .vm-drill > .vm-subhead:first-child { margin-top: 0; }\n/* A drill taller than the card (Handles, Share settings) scrolls the card; the\n row sticks on the band so it stays in view, pressed. Code's row never needed\n this: its drills are short. In flow (no overflow) this changes nothing. */\n[data-vibe-menu] .vm-xtab .vm-cnav { position: sticky; bottom: var(--vm-band, 0px); z-index: 1; background: var(--card-bg); }\n[data-vibe-menu] .vm-xtab .vm-drill + .vm-done { margin-top: var(--space-14); }\n/* The hierarchy (owner 2026-10-13), bottom up: the strip, this row, the card's\n ONE main action, then the stretch. The two zones are layout-free wrappers, so\n each card keeps its own spacing; the main action sits on the row's own top\n margin, as Code's composer does. */\n[data-vibe-menu] .vm-xtab .vm-stretch,\n[data-vibe-menu] .vm-xtab .vm-main { display: contents; }\n[data-vibe-menu] .vm-xtab .vm-main > :last-child { margin-bottom: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-subhead:first-child { margin-top: 0; }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group.is-flush { border-bottom: var(--stroke-hairline) solid var(--line-hairline); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group:last-child { margin-bottom: var(--space-14); }\n[data-vibe-menu] .vm-xtab .vm-stretch > .vm-group + * { margin-top: var(--space-14); }\n";
|
|
13
13
|
export interface CardTabRowProps {
|
|
14
14
|
readonly label: string;
|
|
15
15
|
readonly items: readonly CardTabItem[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type ScrollTabItem } from "../parts/ScrollTabRow.js";
|
|
3
|
+
import type { CodeSlice, ViewerSlice } from "../slices.js";
|
|
4
|
+
export type CodeRowItem = "agentLog" | "look" | "code" | "help";
|
|
5
|
+
export declare function codeRowItems(gates: {
|
|
6
|
+
readonly owner: boolean;
|
|
7
|
+
readonly editor: boolean;
|
|
8
|
+
readonly codeModeAllowed: boolean;
|
|
9
|
+
}): readonly CodeRowItem[];
|
|
10
|
+
export type CodeTierKey = "code" | "files" | "data" | "app-settings" | "details" | "ai-requests" | "help" | "editText";
|
|
11
|
+
export declare function codeTierItems(gates: {
|
|
12
|
+
readonly owner: boolean;
|
|
13
|
+
readonly editText: boolean;
|
|
14
|
+
}): readonly CodeTierKey[];
|
|
15
|
+
export declare const CODE_TIER_CSS = "\n[data-vibe-menu] .vm-tier[data-tier-mode] { flex: 1 1 auto; min-height: 0; }\n[data-vibe-menu] .vm-tier .vm-tier-ws {\n flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain;\n}\n[data-vibe-menu] .vm-tier .vm-tier-ws > .vm-drill-sec:first-child,\n[data-vibe-menu] .vm-tier .vm-tier-ws > .vm-kicker:first-child { margin-top: 0; }\n[data-vibe-menu] .vm-tier[data-tier-mode] .vm-main > * { margin-top: var(--space-14); }\n[data-vibe-menu] .vm-tier .vm-srow + .vm-cnav { margin-top: 0; }\n";
|
|
16
|
+
export type CodeTierOpen = CodeRowItem | null;
|
|
17
|
+
export interface CodeTierState {
|
|
18
|
+
readonly open: CodeTierOpen;
|
|
19
|
+
readonly tab: CodeTierKey;
|
|
20
|
+
readonly editTextOn: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface CodeTierActions {
|
|
23
|
+
pick(item: CodeRowItem): void;
|
|
24
|
+
toggleLog(): void;
|
|
25
|
+
tierTab(key: CodeTierKey): void;
|
|
26
|
+
close(): void;
|
|
27
|
+
}
|
|
28
|
+
export declare function useCodeTierState(initial?: Partial<CodeTierState>): [CodeTierState, CodeTierActions];
|
|
29
|
+
export declare function codeTierRowItems(items: readonly CodeTierKey[], editTextOn: boolean): readonly ScrollTabItem[];
|
|
30
|
+
export interface CodeTierCardProps {
|
|
31
|
+
readonly viewer: ViewerSlice;
|
|
32
|
+
readonly code: CodeSlice;
|
|
33
|
+
readonly state: CodeTierState;
|
|
34
|
+
readonly actions: CodeTierActions;
|
|
35
|
+
readonly renderWorkspace?: (tab: CodeTierKey) => React.ReactNode;
|
|
36
|
+
}
|
|
37
|
+
export declare function CodeTierCard(props: CodeTierCardProps): React.ReactElement;
|
|
38
|
+
export declare function codeTierShell(state: CodeTierState): {
|
|
39
|
+
readonly codeMode: boolean;
|
|
40
|
+
readonly logOpen: boolean;
|
|
41
|
+
readonly key: string;
|
|
42
|
+
};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { CODE_CARD_CSS } from "../cards/CodeCard.js";
|
|
3
|
+
import { EDIT_TEXT_LABEL } from "../copy.js";
|
|
4
|
+
import { currentMoment, withOpenLog } from "../moments.js";
|
|
5
|
+
import { Suggestions } from "../parts/Chip.js";
|
|
6
|
+
import { Composer } from "../parts/Composer.js";
|
|
7
|
+
import { DoneButton } from "../parts/DoneButton.js";
|
|
8
|
+
import { MomentLine } from "../parts/MomentLine.js";
|
|
9
|
+
import { ScrollTabRow } from "../parts/ScrollTabRow.js";
|
|
10
|
+
import { useComposerDraft } from "../parts/use-composer-draft.js";
|
|
11
|
+
import { CARD_TAB_ROW_CSS, CardTabRow, MainAction, Stretch } from "./CardTabRow.js";
|
|
12
|
+
const ROW_FACE = Object.freeze({
|
|
13
|
+
agentLog: { label: "Agent log", glyph: "line-chart" },
|
|
14
|
+
look: { label: "Look", glyph: "palette" },
|
|
15
|
+
code: { label: "Code", glyph: "braces" },
|
|
16
|
+
help: { label: "Help", glyph: "help-circle" },
|
|
17
|
+
});
|
|
18
|
+
export function codeRowItems(gates) {
|
|
19
|
+
const items = [];
|
|
20
|
+
if (gates.editor)
|
|
21
|
+
items.push("agentLog");
|
|
22
|
+
if (gates.owner)
|
|
23
|
+
items.push("look");
|
|
24
|
+
if (gates.codeModeAllowed)
|
|
25
|
+
items.push("code");
|
|
26
|
+
else
|
|
27
|
+
items.push("help");
|
|
28
|
+
return items;
|
|
29
|
+
}
|
|
30
|
+
const TIER_FACE = Object.freeze({
|
|
31
|
+
code: { label: "Code", glyph: "braces" },
|
|
32
|
+
files: { label: "Files", glyph: "file" },
|
|
33
|
+
data: { label: "Data", glyph: "database" },
|
|
34
|
+
"app-settings": { label: "App settings", glyph: "sliders" },
|
|
35
|
+
details: { label: "App details", glyph: "app" },
|
|
36
|
+
"ai-requests": { label: "AI requests", glyph: "at-sign" },
|
|
37
|
+
help: { label: "Help", glyph: "help-circle" },
|
|
38
|
+
editText: { label: EDIT_TEXT_LABEL, glyph: "lines" },
|
|
39
|
+
});
|
|
40
|
+
export function codeTierItems(gates) {
|
|
41
|
+
const items = ["code", "files", "data", "app-settings"];
|
|
42
|
+
if (gates.owner)
|
|
43
|
+
items.push("details");
|
|
44
|
+
items.push("ai-requests", "help");
|
|
45
|
+
if (gates.editText)
|
|
46
|
+
items.push("editText");
|
|
47
|
+
return items;
|
|
48
|
+
}
|
|
49
|
+
export const CODE_TIER_CSS = `
|
|
50
|
+
[data-vibe-menu] .vm-tier[data-tier-mode] { flex: 1 1 auto; min-height: 0; }
|
|
51
|
+
[data-vibe-menu] .vm-tier .vm-tier-ws {
|
|
52
|
+
flex: 1 1 auto; min-height: 0; overflow: auto; overscroll-behavior: contain;
|
|
53
|
+
}
|
|
54
|
+
[data-vibe-menu] .vm-tier .vm-tier-ws > .vm-drill-sec:first-child,
|
|
55
|
+
[data-vibe-menu] .vm-tier .vm-tier-ws > .vm-kicker:first-child { margin-top: 0; }
|
|
56
|
+
[data-vibe-menu] .vm-tier[data-tier-mode] .vm-main > * { margin-top: var(--space-14); }
|
|
57
|
+
[data-vibe-menu] .vm-tier .vm-srow + .vm-cnav { margin-top: 0; }
|
|
58
|
+
`;
|
|
59
|
+
export function useCodeTierState(initial) {
|
|
60
|
+
const [state, setState] = React.useState({
|
|
61
|
+
open: initial?.open ?? null,
|
|
62
|
+
tab: initial?.tab ?? "code",
|
|
63
|
+
editTextOn: initial?.editTextOn ?? false,
|
|
64
|
+
});
|
|
65
|
+
const actions = React.useMemo(() => ({
|
|
66
|
+
pick: (item) => setState((s) => ({ ...s, open: s.open === item ? null : item })),
|
|
67
|
+
toggleLog: () => setState((s) => ({ ...s, open: s.open === "agentLog" ? null : "agentLog" })),
|
|
68
|
+
tierTab: (key) => setState((s) => (key === "editText" ? { ...s, editTextOn: !s.editTextOn } : { ...s, tab: key })),
|
|
69
|
+
close: () => setState((s) => ({ ...s, open: null })),
|
|
70
|
+
}), []);
|
|
71
|
+
return [state, actions];
|
|
72
|
+
}
|
|
73
|
+
export function codeTierRowItems(items, editTextOn) {
|
|
74
|
+
return items.map((key) => {
|
|
75
|
+
const face = TIER_FACE[key];
|
|
76
|
+
if (key === "editText")
|
|
77
|
+
return { key, label: face.label, kind: "toggle", pressed: editTextOn };
|
|
78
|
+
return { key, label: face.label, glyph: face.glyph };
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
export function CodeTierCard(props) {
|
|
82
|
+
const { viewer, code, state, actions } = props;
|
|
83
|
+
const pending = viewer.identityPending === true;
|
|
84
|
+
const owner = viewer.role === "owner" && pending === false;
|
|
85
|
+
const editor = viewer.canEditSource === true && pending === false;
|
|
86
|
+
const codeModeAllowed = code.codeModeAvailable === true && pending === false;
|
|
87
|
+
const editTextOffered = editor && code.editText !== undefined && code.editText !== null;
|
|
88
|
+
const draft = useComposerDraft({ composer: code.composer, resetKey: viewer.appSlug });
|
|
89
|
+
const rowItems = codeRowItems({ owner, editor, codeModeAllowed });
|
|
90
|
+
const open = state.open !== null && rowItems.includes(state.open) ? state.open : null;
|
|
91
|
+
const css = React.createElement("style", null, CODE_CARD_CSS + CARD_TAB_ROW_CSS + CODE_TIER_CSS);
|
|
92
|
+
const row = (React.createElement(CardTabRow, { label: "Code tools", items: rowItems.map((key) => ({ key, label: ROW_FACE[key].label, glyph: ROW_FACE[key].glyph, kind: "drill" })), active: open, onDrill: (key) => actions.pick(key) }));
|
|
93
|
+
const placeholder = code.composer.cap === "Remix this" ? (code.remixHints[0] ?? "") : code.composer.placeholder;
|
|
94
|
+
const composer = React.createElement(Composer, { composer: code.composer, draft: draft, placeholder: placeholder });
|
|
95
|
+
if (open === "code") {
|
|
96
|
+
const tierItems = codeTierItems({ owner, editText: editTextOffered });
|
|
97
|
+
const tab = tierItems.includes(state.tab) && state.tab !== "editText" ? state.tab : "code";
|
|
98
|
+
let body;
|
|
99
|
+
if (tab === "details")
|
|
100
|
+
body = code.slots.details;
|
|
101
|
+
else if (tab === "help")
|
|
102
|
+
body = code.slots.help;
|
|
103
|
+
else
|
|
104
|
+
body = props.renderWorkspace?.(tab) ?? code.slots.workspace;
|
|
105
|
+
return (React.createElement("div", { className: "vm-code vm-ctab vm-xtab vm-tier", "data-card": "vibe", "data-tier-mode": "" },
|
|
106
|
+
css,
|
|
107
|
+
React.createElement("div", { className: "vm-tier-ws", "data-zone": "workspace", "data-tool": tab, role: "tabpanel", "aria-label": TIER_FACE[tab].label }, body),
|
|
108
|
+
React.createElement(MainAction, null, composer),
|
|
109
|
+
React.createElement(ScrollTabRow, { label: "Code mode tools", items: codeTierRowItems(tierItems, state.editTextOn), active: tab, onPick: (key) => actions.tierTab(key) }),
|
|
110
|
+
row));
|
|
111
|
+
}
|
|
112
|
+
if (open === "look" || open === "help") {
|
|
113
|
+
return (React.createElement("div", { className: "vm-code vm-ctab vm-xtab vm-tier", "data-card": "vibe" },
|
|
114
|
+
css,
|
|
115
|
+
React.createElement("div", { className: "vm-drill", "data-drill": open }, code.slots[open]),
|
|
116
|
+
React.createElement(DoneButton, { onDone: actions.close }),
|
|
117
|
+
row));
|
|
118
|
+
}
|
|
119
|
+
const queued = draft.queued.map((text) => ({ who: "you", text }));
|
|
120
|
+
const lines = [...code.log, ...queued];
|
|
121
|
+
const logOpen = open === "agentLog";
|
|
122
|
+
const moment = editor
|
|
123
|
+
? withOpenLog(currentMoment(code.moments), { logOpen, hasLog: lines.length > 0, codeMode: false })
|
|
124
|
+
: { pinned: null, live: null };
|
|
125
|
+
const suggestions = moment.pinned === null ? (React.createElement(Suggestions, { items: code.suggestions.slice(0, 3), gold: code.goldSuggestion, onPick: code.onSuggestion, fastPaths: code.suggestionFastPaths, onToggleFastPath: owner ? code.onToggleFastPath : null })) : undefined;
|
|
126
|
+
const log = moment.live !== null ? { open: logOpen, onToggle: actions.toggleLog, lines, tail: suggestions } : null;
|
|
127
|
+
const hasMoment = moment.pinned !== null || moment.live !== null;
|
|
128
|
+
return (React.createElement("div", { className: "vm-code vm-ctab vm-xtab vm-tier", "data-card": "vibe" },
|
|
129
|
+
css,
|
|
130
|
+
React.createElement(Stretch, null, hasMoment ? React.createElement(MomentLine, { moment: moment, log: log, onAction: code.onMomentAction }) : null),
|
|
131
|
+
React.createElement(MainAction, null, composer),
|
|
132
|
+
row));
|
|
133
|
+
}
|
|
134
|
+
export function codeTierShell(state) {
|
|
135
|
+
return {
|
|
136
|
+
codeMode: state.open === "code",
|
|
137
|
+
logOpen: state.open === "agentLog",
|
|
138
|
+
key: `${state.open ?? ""}|${state.tab}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=CodeTierAudition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeTierAudition.js","sourceRoot":"","sources":["../../../../jsr/components/vibe-menu/sketches/CodeTierAudition.tsx"],"names":[],"mappings":"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"}
|
|
@@ -30,11 +30,9 @@ export interface AccountSlice {
|
|
|
30
30
|
avatarUrl?: string;
|
|
31
31
|
}[];
|
|
32
32
|
activeHandle: string | null;
|
|
33
|
-
needsHandle: boolean;
|
|
34
33
|
handleBusy: boolean;
|
|
35
34
|
onSelectHandle(slug: string): void;
|
|
36
35
|
onAddHandle(slug: string): Promise<Result<void>>;
|
|
37
|
-
onClaimHandle(slug: string): Promise<Result<void>>;
|
|
38
36
|
handleIdeas: {
|
|
39
37
|
fromName: readonly string[];
|
|
40
38
|
words: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/slices.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../jsr/components/vibe-menu/slices.ts"],"names":[],"mappings":"AAqTA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,UAAU,EAAE,qDAAqD;IACjE,eAAe,EAAE,sDAAsD;CAC/D,CAAC,CAAC"}
|