@hanzo/ui 8.27.79 → 8.27.82
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/backends/gui/video-player.cjs +2 -0
- package/dist/backends/gui/video-player.d.ts.map +1 -1
- package/dist/backends/gui/video-player.js +2 -0
- package/dist/backends/gui/video-player.js.map +1 -1
- package/dist/gallery.html +14 -14
- package/dist/gui-config.cjs +1 -1
- package/dist/gui-config.js +1 -1
- package/dist/models/ModelPicker.cjs +73 -146
- package/dist/models/ModelPicker.d.ts.map +1 -1
- package/dist/models/ModelPicker.js +45 -151
- package/dist/models/ModelPicker.js.map +1 -1
- package/dist/models/ModelPickerMenu.cjs +165 -0
- package/dist/models/ModelPickerMenu.d.ts +35 -0
- package/dist/models/ModelPickerMenu.d.ts.map +1 -0
- package/dist/models/ModelPickerMenu.js +163 -0
- package/dist/models/ModelPickerMenu.js.map +1 -0
- package/dist/models/catalog.cjs +6 -23
- package/dist/models/catalog.d.ts +1 -8
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/catalog.js +3 -21
- package/dist/models/catalog.js.map +1 -1
- package/dist/models/research.cjs +25 -0
- package/dist/models/research.d.ts +15 -0
- package/dist/models/research.d.ts.map +1 -0
- package/dist/models/research.js +22 -0
- package/dist/models/research.js.map +1 -0
- package/dist/styles.css +9 -9
- package/dist/theme.css +6 -6
- package/package.json +2 -2
package/dist/gui-config.cjs
CHANGED
|
@@ -81,7 +81,7 @@ const MONO = "var(--font-mono, 'Zen Mono', ui-monospace, SFMono-Regular, Menlo,
|
|
|
81
81
|
* product and a person can set it for themselves. The px literal stays as the
|
|
82
82
|
* var()'s fallback, so a host that mounts no token layer still renders. */
|
|
83
83
|
const FONT_SIZE = {
|
|
84
|
-
1: `var(--text-xs,
|
|
84
|
+
1: `var(--text-xs, 12px)`,
|
|
85
85
|
2: `var(--text-sm, 13px)`,
|
|
86
86
|
3: `var(--text-base, 14px)`,
|
|
87
87
|
4: `var(--text-lg, 15px)`,
|
package/dist/gui-config.js
CHANGED
|
@@ -77,7 +77,7 @@ const MONO = "var(--font-mono, 'Zen Mono', ui-monospace, SFMono-Regular, Menlo,
|
|
|
77
77
|
* product and a person can set it for themselves. The px literal stays as the
|
|
78
78
|
* var()'s fallback, so a host that mounts no token layer still renders. */
|
|
79
79
|
const FONT_SIZE = {
|
|
80
|
-
1: `var(--text-xs,
|
|
80
|
+
1: `var(--text-xs, 12px)`,
|
|
81
81
|
2: `var(--text-sm, 13px)`,
|
|
82
82
|
3: `var(--text-base, 14px)`,
|
|
83
83
|
4: `var(--text-lg, 15px)`,
|
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
'use client';"use strict";
|
|
2
2
|
'use client';
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
3
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
37
|
exports.ModelPicker = ModelPicker;
|
|
5
38
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
@@ -17,15 +50,9 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
17
50
|
* it with the policy's refusal or from Enso, and the host shows that. Only a
|
|
18
51
|
* research preview, which nothing can call yet, is listed and never picked.
|
|
19
52
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* scrolls itself into view, so keyboard reach is the same as a full render.
|
|
24
|
-
*
|
|
25
|
-
* ARIA: the search field is the combobox and owns the cursor through
|
|
26
|
-
* `aria-activedescendant`; the list is a listbox whose options carry
|
|
27
|
-
* `aria-setsize` / `aria-posinset`, since most of them are not in the DOM.
|
|
28
|
-
* Group headings are presentation: the option's own label names the group.
|
|
53
|
+
* LAZY. The trigger is all a page carries until the picker is pointed at,
|
|
54
|
+
* focused or opened: the popover or sheet, the search, the virtualised list and
|
|
55
|
+
* its rows (`ModelPickerMenu`) load then, in their own chunk.
|
|
29
56
|
*
|
|
30
57
|
* On a phone it is a bottom sheet with rows sized for a thumb; elsewhere a
|
|
31
58
|
* popover. Styling is gui props and tokens only.
|
|
@@ -33,20 +60,16 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
33
60
|
const gui_1 = require("@hanzo/gui");
|
|
34
61
|
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
35
62
|
const react_1 = require("react");
|
|
36
|
-
const popover_1 = require("../backends/gui/popover.cjs");
|
|
37
63
|
const press_1 = require("../backends/gui/press.cjs");
|
|
38
|
-
const sheet_1 = require("../backends/gui/sheet.cjs");
|
|
39
64
|
const slot_1 = require("../backends/gui/slot.cjs");
|
|
40
|
-
const chipSelect_logic_1 = require("../product/chipSelect.logic.cjs");
|
|
41
65
|
const catalog_1 = require("./catalog.cjs");
|
|
42
|
-
|
|
66
|
+
/** The open half, once loaded: every picker on the page shares it. */
|
|
67
|
+
let menu = null;
|
|
68
|
+
let pending = null;
|
|
69
|
+
const load = () => (pending ??= Promise.resolve().then(() => __importStar(require('./ModelPickerMenu.cjs'))).then((m) => (menu = m.ModelPickerMenu)));
|
|
43
70
|
/** Row height, px: a line of 13px type on a pointer, a thumb's reach on a phone. */
|
|
44
71
|
const ROW = 32;
|
|
45
72
|
const ROW_TOUCH = 44;
|
|
46
|
-
/** The list's ceiling in a popover, px. */
|
|
47
|
-
const LIST_H = 360;
|
|
48
|
-
const PANEL_W = 360;
|
|
49
|
-
const MOVES = new Set(['ArrowDown', 'ArrowUp', 'Home', 'End', 'PageDown', 'PageUp']);
|
|
50
73
|
function ModelPicker({ models, value, onChange, scope, limits, loading = false, error = null, disabled = false, quiet = false, size = 'md', placeholder = 'Choose a model', name = 'Model', open: openProp, onOpenChange, }) {
|
|
51
74
|
const [own, setOwn] = (0, react_1.useState)(false);
|
|
52
75
|
const open = openProp ?? own;
|
|
@@ -58,135 +81,46 @@ function ModelPicker({ models, value, onChange, scope, limits, loading = false,
|
|
|
58
81
|
const media = (0, gui_1.useMedia)();
|
|
59
82
|
const sheet = !media.sm;
|
|
60
83
|
const row = sheet ? ROW_TOUCH : ROW;
|
|
61
|
-
const [q, setQ] = (0, react_1.useState)('');
|
|
62
|
-
const [at, setAt] = (0, react_1.useState)(-1);
|
|
63
|
-
const [top, setTop] = (0, react_1.useState)(0);
|
|
64
|
-
const [viewH, setViewH] = (0, react_1.useState)(LIST_H);
|
|
65
84
|
const [triggerW, setTriggerW] = (0, react_1.useState)(0);
|
|
66
|
-
const list = (0, react_1.useRef)(null);
|
|
67
|
-
const field = (0, react_1.useRef)(null);
|
|
68
85
|
const trigger = (0, react_1.useRef)(null);
|
|
69
|
-
const id = (0, react_1.useId)();
|
|
70
|
-
const listId = `${id}-list`;
|
|
71
|
-
const optionId = (i) => `${id}-opt-${i}`;
|
|
72
|
-
const rows = (0, react_1.useMemo)(() => (0, picker_logic_1.pickerRows)(models, q, scope), [models, q, scope]);
|
|
73
|
-
const total = (0, react_1.useMemo)(() => (0, picker_logic_1.modelCount)(rows), [rows]);
|
|
74
|
-
const research = (0, react_1.useMemo)(() => catalog_1.RESEARCH.filter((r) => rows.some((x) => x.kind === 'model' && x.model.id === r.id)), [rows]);
|
|
75
|
-
// Position among the models alone, for aria-posinset.
|
|
76
|
-
const position = (0, react_1.useMemo)(() => {
|
|
77
|
-
const pos = [];
|
|
78
|
-
let n = 0;
|
|
79
|
-
for (const r of rows)
|
|
80
|
-
pos.push(r.kind === 'model' ? ++n : 0);
|
|
81
|
-
return pos;
|
|
82
|
-
}, [rows]);
|
|
83
86
|
const selected = value ? models.find((m) => m.id === value) : undefined;
|
|
84
87
|
const label = selected ? (0, catalog_1.modelName)(selected) : value || placeholder;
|
|
85
|
-
const scrollTo = (0, react_1.useCallback)((y) => {
|
|
86
|
-
list.current?.scrollTo?.({ y, animated: false });
|
|
87
|
-
setTop(y);
|
|
88
|
-
}, []);
|
|
89
|
-
// Opening starts from the top of an empty search, the cursor on the chosen
|
|
90
|
-
// model — scrolled to the middle of the list — or the first one.
|
|
91
|
-
(0, react_1.useEffect)(() => {
|
|
92
|
-
if (!open) {
|
|
93
|
-
setQ('');
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const all = (0, picker_logic_1.pickerRows)(models, '', scope);
|
|
97
|
-
const chosen = all.findIndex((r) => r.kind === 'model' && r.model.id === value);
|
|
98
|
-
const first = all.findIndex((_, i) => (0, picker_logic_1.restable)(all, i));
|
|
99
|
-
const i = chosen >= 0 ? chosen : first;
|
|
100
|
-
setAt(i);
|
|
101
|
-
const y = i >= 0 ? Math.max(0, i * row - viewH / 2 + row / 2) : 0;
|
|
102
|
-
// The list mounts with the panel; scroll once it is there.
|
|
103
|
-
requestAnimationFrame(() => scrollTo(y));
|
|
104
|
-
// Only on open: the cursor is the reader's after that.
|
|
105
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
106
|
-
}, [open]);
|
|
107
|
-
// A new search puts the cursor on its first match, at the top.
|
|
108
|
-
(0, react_1.useEffect)(() => {
|
|
109
|
-
if (!open)
|
|
110
|
-
return;
|
|
111
|
-
setAt(rows.findIndex((_, i) => (0, picker_logic_1.restable)(rows, i)));
|
|
112
|
-
scrollTo(0);
|
|
113
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
114
|
-
}, [q]);
|
|
115
|
-
const reveal = (0, react_1.useCallback)((i) => {
|
|
116
|
-
const y = (0, picker_logic_1.revealTop)(i, top, viewH, row);
|
|
117
|
-
if (y !== null)
|
|
118
|
-
scrollTo(y);
|
|
119
|
-
}, [top, viewH, row, scrollTo]);
|
|
120
88
|
const close = (0, react_1.useCallback)(() => {
|
|
121
89
|
setOpen(false);
|
|
122
90
|
queueMicrotask(() => trigger.current?.focus?.());
|
|
123
91
|
}, [setOpen]);
|
|
124
|
-
|
|
125
|
-
|
|
92
|
+
// The open half arrives on first pointing, focus or open; until then the
|
|
93
|
+
// trigger stands alone, drawn the same.
|
|
94
|
+
const [Live, setLive] = (0, react_1.useState)(() => menu);
|
|
95
|
+
const want = (0, react_1.useCallback)(() => {
|
|
96
|
+
if (Live)
|
|
126
97
|
return;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}
|
|
142
|
-
if (e.key === 'Enter') {
|
|
143
|
-
e.preventDefault?.();
|
|
144
|
-
choose(rows[at]);
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
if (e.key === 'Escape') {
|
|
148
|
-
e.preventDefault?.();
|
|
149
|
-
close();
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
const range = (0, picker_logic_1.visibleRange)(top, viewH, row, rows.length);
|
|
153
|
-
const shown = rows.slice(range.start, range.end);
|
|
154
|
-
const body = ((0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('model-picker-body'), flex: sheet ? 1 : undefined, minH: 0, gap: "$1", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('model-picker-search'), height: sheet ? 40 : 32, px: "$2", gap: "$2", items: "center", rounded: "$2", borderWidth: 1, borderColor: "$rim", bg: "$background", focusWithinStyle: { borderColor: '$outlineColor' }, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Search, { size: 14, color: "$soft", "aria-hidden": true }), (0, jsx_runtime_1.jsx)(gui_1.Input, { ref: field, ...(0, slot_1.slot)('model-picker-input'), unstyled: true, flex: 1, minW: 0, height: sheet ? 38 : 30, p: 0, borderWidth: 0, bg: "transparent", fontSize: sheet ? '$3' : '$2', color: "$ink", placeholderTextColor: "$soft", placeholder: "Search models", value: q, onChangeText: setQ, role: "combobox", "aria-label": "Search models", "aria-expanded": open, "aria-controls": listId, "aria-autocomplete": "list", "aria-activedescendant": at >= 0 && rows[at] ? optionId(at) : undefined, autoComplete: "off", spellCheck: false, onKeyDown: onField }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { ...(0, slot_1.slot)('model-picker-count'), size: "$1", color: "$soft", shrink: 0, "aria-live": "polite", children: loading && !models.length ? 'Loading' : `${total} ${total === 1 ? 'model' : 'models'}` })] }), error ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('model-picker-error'), px: "$2", py: "$1.5", role: "alert", children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$2", color: "$bad", children: error }) })) : null, (0, jsx_runtime_1.jsxs)(gui_1.ScrollView, { ref: list, height: sheet ? undefined : Math.min(LIST_H, Math.max(row * 3, rows.length * row)), flex: sheet ? 1 : undefined, showsVerticalScrollIndicator: true, scrollEventThrottle: 16, onScroll: (e) => setTop(e.nativeEvent?.contentOffset?.y ?? 0), onLayout: (e) => {
|
|
155
|
-
const h = e.nativeEvent?.layout?.height;
|
|
156
|
-
if (h)
|
|
157
|
-
setViewH(h);
|
|
158
|
-
}, children: [(0, jsx_runtime_1.jsxs)(gui_1.YStack, { ...(0, slot_1.slot)('model-picker-list'), id: listId, role: "listbox", "aria-label": name, height: rows.length * row, children: [(0, jsx_runtime_1.jsx)(gui_1.YStack, { height: range.start * row }), shown.map((r, k) => {
|
|
159
|
-
const i = range.start + k;
|
|
160
|
-
if (r.kind === 'group') {
|
|
161
|
-
return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('model-picker-group'), role: "presentation", height: row, px: "$2", gap: "$2", items: "flex-end", pb: "$1.5", children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$soft", fontWeight: "600", numberOfLines: 1, flex: 1, children: r.label }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$soft", fontVariant: ['tabular-nums'], children: r.count })] }, r.key));
|
|
162
|
-
}
|
|
163
|
-
const m = r.model;
|
|
164
|
-
const locked = !(0, picker_logic_1.pickable)(m);
|
|
165
|
-
const paused = !locked && (0, catalog_1.isPaused)(m, limits);
|
|
166
|
-
const picked = m.id === value;
|
|
167
|
-
const ctx = (0, catalog_1.formatContext)(m.context_window);
|
|
168
|
-
const title = (0, catalog_1.modelName)(m);
|
|
169
|
-
// A model that answers in something other than a conversation says
|
|
170
|
-
// what it does, so an unscoped list is honest about each row.
|
|
171
|
-
const kind = scope || (0, catalog_1.can)(m, 'chat') ? null : (0, catalog_1.capabilitiesOf)(m)[0];
|
|
172
|
-
// A model sold against another says by how much, from the two list prices;
|
|
173
|
-
// a router, the ceiling it bills up to.
|
|
174
|
-
const saving = (0, catalog_1.savingOf)(m, models);
|
|
175
|
-
const ceiling = (0, catalog_1.formatCeiling)(m);
|
|
176
|
-
return ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('model-picker-option'), id: optionId(i), role: "option", "aria-selected": picked, "aria-disabled": locked || undefined, "aria-setsize": total, "aria-posinset": position[i], "aria-label": `${title}, ${(0, catalog_1.groupLabel)(m)}${paused ? ', paused' : ''}${locked ? ', research preview' : ''}`, "data-model": m.id, "data-class": m.class, "data-paused": paused || undefined, height: row, px: "$2", gap: "$2", items: "center", rounded: "$2", cursor: locked ? 'default' : 'pointer', bg: i === at ? '$raised' : 'transparent', onHoverIn: () => setAt(i), onPress: () => choose(r), children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Check, { size: 14, color: "$ink", shrink: 0, opacity: picked ? 1 : 0, "aria-hidden": true }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: sheet ? '$3' : '$2', color: "$ink", opacity: locked ? 0.5 : 1, numberOfLines: 1, flex: 1, minW: 0, children: title }), m.class === 'premium' ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$soft", shrink: 0, "aria-hidden": true, children: "\u2726" })) : null, locked || paused || saving || ceiling || kind || ctx ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$1", color: "$soft", shrink: 0, maxW: "60%", numberOfLines: 1, fontVariant: ['tabular-nums'], children: locked
|
|
177
|
-
? 'Research preview'
|
|
178
|
-
: paused
|
|
179
|
-
? 'Paused'
|
|
180
|
-
: saving
|
|
181
|
-
? (0, catalog_1.formatSaving)(saving)
|
|
182
|
-
: ceiling
|
|
183
|
-
? ceiling
|
|
184
|
-
: kind
|
|
185
|
-
? catalog_1.CAPABILITY_NAMES[kind]
|
|
186
|
-
: ctx })) : null] }, m.id));
|
|
187
|
-
})] }), rows.length === 0 && !error ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { ...(0, slot_1.slot)('model-picker-empty'), px: "$2", py: "$2", role: "status", children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: "$2", color: "$soft", children: loading ? 'Loading models…' : q ? `No models match “${q}”.` : 'No models to choose from.' }) })) : null] }), research.length ? ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ...(0, slot_1.slot)('model-picker-research'), px: "$2", py: "$1.5", gap: "$1.5", items: "center", flexWrap: "wrap", children: [(0, jsx_runtime_1.jsxs)(gui_1.SizableText, { size: "$1", color: "$soft", children: [research.map(catalog_1.modelName).join(', '), " ", research.length === 1 ? 'is' : 'are', " in research preview."] }), (0, jsx_runtime_1.jsx)(gui_1.Anchor, { href: research[0].request, target: "_blank", rel: "noopener noreferrer", size: "$1", color: "$ink", textDecorationLine: "underline", children: "Request access" })] })) : null] }));
|
|
98
|
+
void load().then((m) => setLive(() => m));
|
|
99
|
+
}, [Live]);
|
|
100
|
+
(0, react_1.useEffect)(() => {
|
|
101
|
+
if (open)
|
|
102
|
+
want();
|
|
103
|
+
}, [open, want]);
|
|
104
|
+
// The trigger is drawn again inside the popover once it arrives; one that
|
|
105
|
+
// held the focus keeps it. Its removal blurs it with nowhere to go, which is
|
|
106
|
+
// not the reader leaving.
|
|
107
|
+
const focused = (0, react_1.useRef)(false);
|
|
108
|
+
(0, react_1.useEffect)(() => {
|
|
109
|
+
if (Live && focused.current)
|
|
110
|
+
trigger.current?.focus?.();
|
|
111
|
+
}, [Live]);
|
|
188
112
|
const small = size === 'sm';
|
|
189
|
-
const button = ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ref: trigger, ...(0, slot_1.slot)('model-picker'), role: "button", tabIndex: disabled ? -1 : 0, "aria-label": `${name}: ${label}`, "aria-haspopup": "listbox", "aria-expanded": open, "aria-disabled": disabled || undefined, height: small ? 28 : 36, px: small ? '$2' : '$3', gap: "$2", items: "center", maxW: "100%", rounded: "$3", borderWidth: quiet ? 0 : 1, borderColor: "$borderColor", bg: quiet ? 'transparent' : '$background', cursor: disabled ? 'default' : 'pointer', opacity: disabled ? 0.5 : 1, hoverStyle: disabled ? undefined : quiet ? { bg: '$hover' } : { borderColor: '$rim' }, pressStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: press_1.RING, onLayout: (e) => setTriggerW(e.nativeEvent?.layout?.width ?? 0),
|
|
113
|
+
const button = ((0, jsx_runtime_1.jsxs)(gui_1.XStack, { ref: trigger, ...(0, slot_1.slot)('model-picker'), role: "button", tabIndex: disabled ? -1 : 0, "aria-label": `${name}: ${label}`, "aria-haspopup": "listbox", "aria-expanded": open, "aria-disabled": disabled || undefined, height: small ? 28 : 36, px: small ? '$2' : '$3', gap: "$2", items: "center", maxW: "100%", rounded: "$3", borderWidth: quiet ? 0 : 1, borderColor: "$borderColor", bg: quiet ? 'transparent' : '$background', cursor: disabled ? 'default' : 'pointer', opacity: disabled ? 0.5 : 1, hoverStyle: disabled ? undefined : quiet ? { bg: '$hover' } : { borderColor: '$rim' }, pressStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: press_1.RING, onLayout: (e) => setTriggerW(e.nativeEvent?.layout?.width ?? 0),
|
|
114
|
+
// The popover opens on press once it is here; before that, and on a phone, the press opens it.
|
|
115
|
+
onPress: disabled || (Live && !sheet) ? undefined : () => setOpen(true), onMouseEnter: disabled ? undefined : want, onFocus: disabled
|
|
116
|
+
? undefined
|
|
117
|
+
: () => {
|
|
118
|
+
focused.current = true;
|
|
119
|
+
want();
|
|
120
|
+
}, onBlur: (e) => {
|
|
121
|
+
if (e.relatedTarget)
|
|
122
|
+
focused.current = false;
|
|
123
|
+
}, onKeyDown: (e) => {
|
|
190
124
|
if (disabled)
|
|
191
125
|
return;
|
|
192
126
|
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
|
@@ -194,15 +128,8 @@ function ModelPicker({ models, value, onChange, scope, limits, loading = false,
|
|
|
194
128
|
setOpen(true);
|
|
195
129
|
}
|
|
196
130
|
}, children: [(0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: small ? '$1' : '$2', color: quiet ? '$quiet' : '$ink', numberOfLines: 1, shrink: 1, minW: 0, children: label }), selected && !quiet ? ((0, jsx_runtime_1.jsx)(gui_1.SizableText, { size: small ? '$1' : '$2', color: "$soft", numberOfLines: 1, shrink: 2, minW: 0, children: (0, catalog_1.groupLabel)(selected) })) : null, (0, jsx_runtime_1.jsx)(lucide_icons_2_1.ChevronsUpDown, { size: small ? 12 : 14, color: "$soft", shrink: 0, "aria-hidden": true })] }));
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
}, onCloseAutoFocus: (e) => {
|
|
201
|
-
e.preventDefault();
|
|
202
|
-
trigger.current?.focus?.();
|
|
203
|
-
}, children: body }))] }), sheet ? ((0, jsx_runtime_1.jsx)(sheet_1.Sheet, { open: open, onOpenChange: (v) => (v ? setOpen(true) : close()), children: (0, jsx_runtime_1.jsxs)(sheet_1.SheetContent, { ...(0, slot_1.slot)('model-picker-sheet'), side: "bottom", height: "85%", maxH: "85%", p: "$3", gap: "$2", onOpenAutoFocus: (e) => {
|
|
204
|
-
e.preventDefault();
|
|
205
|
-
field.current?.focus();
|
|
206
|
-
}, children: [(0, jsx_runtime_1.jsx)(sheet_1.SheetTitle, { size: "$4", children: name }), body] }) })) : null] }));
|
|
131
|
+
if (!Live)
|
|
132
|
+
return button;
|
|
133
|
+
return ((0, jsx_runtime_1.jsx)(Live, { trigger: button, open: open, onOpen: () => setOpen(true), onClose: close, disabled: disabled, width: triggerW, focusTrigger: () => trigger.current?.focus?.(), models: models, value: value, onChange: onChange, scope: scope, limits: limits, loading: loading, error: error, name: name, sheet: sheet, row: row }));
|
|
207
134
|
}
|
|
208
135
|
exports.default = ModelPicker;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../src/models/ModelPicker.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ModelPicker.d.ts","sourceRoot":"","sources":["../../src/models/ModelPicker.tsx"],"names":[],"mappings":"AA6BA,OAAO,EAAyB,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AAa5G,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAA;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC9B,+DAA+D;IAC/D,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAC3B,uCAAuC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,yFAAyF;IACzF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAe,EACf,KAAY,EACZ,QAAgB,EAChB,KAAa,EACb,IAAW,EACX,WAA8B,EAC9B,IAAc,EACd,IAAI,EAAE,QAAQ,EACd,YAAY,GACb,EAAE,gBAAgB,+BA6HlB;eAEc,WAAW"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
4
|
* ModelPicker — the one model picker every Hanzo surface uses: hanzo.ai chat
|
|
5
5
|
* and dev, and every playground tab in the console.
|
|
@@ -14,36 +14,26 @@ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-run
|
|
|
14
14
|
* it with the policy's refusal or from Enso, and the host shows that. Only a
|
|
15
15
|
* research preview, which nothing can call yet, is listed and never picked.
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* scrolls itself into view, so keyboard reach is the same as a full render.
|
|
21
|
-
*
|
|
22
|
-
* ARIA: the search field is the combobox and owns the cursor through
|
|
23
|
-
* `aria-activedescendant`; the list is a listbox whose options carry
|
|
24
|
-
* `aria-setsize` / `aria-posinset`, since most of them are not in the DOM.
|
|
25
|
-
* Group headings are presentation: the option's own label names the group.
|
|
17
|
+
* LAZY. The trigger is all a page carries until the picker is pointed at,
|
|
18
|
+
* focused or opened: the popover or sheet, the search, the virtualised list and
|
|
19
|
+
* its rows (`ModelPickerMenu`) load then, in their own chunk.
|
|
26
20
|
*
|
|
27
21
|
* On a phone it is a bottom sheet with rows sized for a thumb; elsewhere a
|
|
28
22
|
* popover. Styling is gui props and tokens only.
|
|
29
23
|
*/
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import { useCallback, useEffect,
|
|
33
|
-
import { Popover, PopoverContent, PopoverTrigger } from '../backends/gui/popover.js';
|
|
24
|
+
import { SizableText, XStack, useMedia } from '@hanzo/gui';
|
|
25
|
+
import { ChevronsUpDown } from '@hanzogui/lucide-icons-2';
|
|
26
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
34
27
|
import { RING } from '../backends/gui/press.js';
|
|
35
|
-
import { Sheet, SheetContent, SheetTitle } from '../backends/gui/sheet.js';
|
|
36
28
|
import { slot } from '../backends/gui/slot.js';
|
|
37
|
-
import {
|
|
38
|
-
|
|
39
|
-
|
|
29
|
+
import { groupLabel, modelName } from './catalog.js';
|
|
30
|
+
/** The open half, once loaded: every picker on the page shares it. */
|
|
31
|
+
let menu = null;
|
|
32
|
+
let pending = null;
|
|
33
|
+
const load = () => (pending ??= import('./ModelPickerMenu.js').then((m) => (menu = m.ModelPickerMenu)));
|
|
40
34
|
/** Row height, px: a line of 13px type on a pointer, a thumb's reach on a phone. */
|
|
41
35
|
const ROW = 32;
|
|
42
36
|
const ROW_TOUCH = 44;
|
|
43
|
-
/** The list's ceiling in a popover, px. */
|
|
44
|
-
const LIST_H = 360;
|
|
45
|
-
const PANEL_W = 360;
|
|
46
|
-
const MOVES = new Set(['ArrowDown', 'ArrowUp', 'Home', 'End', 'PageDown', 'PageUp']);
|
|
47
37
|
export function ModelPicker({ models, value, onChange, scope, limits, loading = false, error = null, disabled = false, quiet = false, size = 'md', placeholder = 'Choose a model', name = 'Model', open: openProp, onOpenChange, }) {
|
|
48
38
|
const [own, setOwn] = useState(false);
|
|
49
39
|
const open = openProp ?? own;
|
|
@@ -55,135 +45,46 @@ export function ModelPicker({ models, value, onChange, scope, limits, loading =
|
|
|
55
45
|
const media = useMedia();
|
|
56
46
|
const sheet = !media.sm;
|
|
57
47
|
const row = sheet ? ROW_TOUCH : ROW;
|
|
58
|
-
const [q, setQ] = useState('');
|
|
59
|
-
const [at, setAt] = useState(-1);
|
|
60
|
-
const [top, setTop] = useState(0);
|
|
61
|
-
const [viewH, setViewH] = useState(LIST_H);
|
|
62
48
|
const [triggerW, setTriggerW] = useState(0);
|
|
63
|
-
const list = useRef(null);
|
|
64
|
-
const field = useRef(null);
|
|
65
49
|
const trigger = useRef(null);
|
|
66
|
-
const id = useId();
|
|
67
|
-
const listId = `${id}-list`;
|
|
68
|
-
const optionId = (i) => `${id}-opt-${i}`;
|
|
69
|
-
const rows = useMemo(() => pickerRows(models, q, scope), [models, q, scope]);
|
|
70
|
-
const total = useMemo(() => modelCount(rows), [rows]);
|
|
71
|
-
const research = useMemo(() => RESEARCH.filter((r) => rows.some((x) => x.kind === 'model' && x.model.id === r.id)), [rows]);
|
|
72
|
-
// Position among the models alone, for aria-posinset.
|
|
73
|
-
const position = useMemo(() => {
|
|
74
|
-
const pos = [];
|
|
75
|
-
let n = 0;
|
|
76
|
-
for (const r of rows)
|
|
77
|
-
pos.push(r.kind === 'model' ? ++n : 0);
|
|
78
|
-
return pos;
|
|
79
|
-
}, [rows]);
|
|
80
50
|
const selected = value ? models.find((m) => m.id === value) : undefined;
|
|
81
51
|
const label = selected ? modelName(selected) : value || placeholder;
|
|
82
|
-
const scrollTo = useCallback((y) => {
|
|
83
|
-
list.current?.scrollTo?.({ y, animated: false });
|
|
84
|
-
setTop(y);
|
|
85
|
-
}, []);
|
|
86
|
-
// Opening starts from the top of an empty search, the cursor on the chosen
|
|
87
|
-
// model — scrolled to the middle of the list — or the first one.
|
|
88
|
-
useEffect(() => {
|
|
89
|
-
if (!open) {
|
|
90
|
-
setQ('');
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const all = pickerRows(models, '', scope);
|
|
94
|
-
const chosen = all.findIndex((r) => r.kind === 'model' && r.model.id === value);
|
|
95
|
-
const first = all.findIndex((_, i) => restable(all, i));
|
|
96
|
-
const i = chosen >= 0 ? chosen : first;
|
|
97
|
-
setAt(i);
|
|
98
|
-
const y = i >= 0 ? Math.max(0, i * row - viewH / 2 + row / 2) : 0;
|
|
99
|
-
// The list mounts with the panel; scroll once it is there.
|
|
100
|
-
requestAnimationFrame(() => scrollTo(y));
|
|
101
|
-
// Only on open: the cursor is the reader's after that.
|
|
102
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
103
|
-
}, [open]);
|
|
104
|
-
// A new search puts the cursor on its first match, at the top.
|
|
105
|
-
useEffect(() => {
|
|
106
|
-
if (!open)
|
|
107
|
-
return;
|
|
108
|
-
setAt(rows.findIndex((_, i) => restable(rows, i)));
|
|
109
|
-
scrollTo(0);
|
|
110
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
111
|
-
}, [q]);
|
|
112
|
-
const reveal = useCallback((i) => {
|
|
113
|
-
const y = revealTop(i, top, viewH, row);
|
|
114
|
-
if (y !== null)
|
|
115
|
-
scrollTo(y);
|
|
116
|
-
}, [top, viewH, row, scrollTo]);
|
|
117
52
|
const close = useCallback(() => {
|
|
118
53
|
setOpen(false);
|
|
119
54
|
queueMicrotask(() => trigger.current?.focus?.());
|
|
120
55
|
}, [setOpen]);
|
|
121
|
-
|
|
122
|
-
|
|
56
|
+
// The open half arrives on first pointing, focus or open; until then the
|
|
57
|
+
// trigger stands alone, drawn the same.
|
|
58
|
+
const [Live, setLive] = useState(() => menu);
|
|
59
|
+
const want = useCallback(() => {
|
|
60
|
+
if (Live)
|
|
123
61
|
return;
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
if (e.key === 'Enter') {
|
|
140
|
-
e.preventDefault?.();
|
|
141
|
-
choose(rows[at]);
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
if (e.key === 'Escape') {
|
|
145
|
-
e.preventDefault?.();
|
|
146
|
-
close();
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
const range = visibleRange(top, viewH, row, rows.length);
|
|
150
|
-
const shown = rows.slice(range.start, range.end);
|
|
151
|
-
const body = (_jsxs(YStack, { ...slot('model-picker-body'), flex: sheet ? 1 : undefined, minH: 0, gap: "$1", children: [_jsxs(XStack, { ...slot('model-picker-search'), height: sheet ? 40 : 32, px: "$2", gap: "$2", items: "center", rounded: "$2", borderWidth: 1, borderColor: "$rim", bg: "$background", focusWithinStyle: { borderColor: '$outlineColor' }, children: [_jsx(Search, { size: 14, color: "$soft", "aria-hidden": true }), _jsx(GuiInput, { ref: field, ...slot('model-picker-input'), unstyled: true, flex: 1, minW: 0, height: sheet ? 38 : 30, p: 0, borderWidth: 0, bg: "transparent", fontSize: sheet ? '$3' : '$2', color: "$ink", placeholderTextColor: "$soft", placeholder: "Search models", value: q, onChangeText: setQ, role: "combobox", "aria-label": "Search models", "aria-expanded": open, "aria-controls": listId, "aria-autocomplete": "list", "aria-activedescendant": at >= 0 && rows[at] ? optionId(at) : undefined, autoComplete: "off", spellCheck: false, onKeyDown: onField }), _jsx(SizableText, { ...slot('model-picker-count'), size: "$1", color: "$soft", shrink: 0, "aria-live": "polite", children: loading && !models.length ? 'Loading' : `${total} ${total === 1 ? 'model' : 'models'}` })] }), error ? (_jsx(XStack, { ...slot('model-picker-error'), px: "$2", py: "$1.5", role: "alert", children: _jsx(SizableText, { size: "$2", color: "$bad", children: error }) })) : null, _jsxs(ScrollView, { ref: list, height: sheet ? undefined : Math.min(LIST_H, Math.max(row * 3, rows.length * row)), flex: sheet ? 1 : undefined, showsVerticalScrollIndicator: true, scrollEventThrottle: 16, onScroll: (e) => setTop(e.nativeEvent?.contentOffset?.y ?? 0), onLayout: (e) => {
|
|
152
|
-
const h = e.nativeEvent?.layout?.height;
|
|
153
|
-
if (h)
|
|
154
|
-
setViewH(h);
|
|
155
|
-
}, children: [_jsxs(YStack, { ...slot('model-picker-list'), id: listId, role: "listbox", "aria-label": name, height: rows.length * row, children: [_jsx(YStack, { height: range.start * row }), shown.map((r, k) => {
|
|
156
|
-
const i = range.start + k;
|
|
157
|
-
if (r.kind === 'group') {
|
|
158
|
-
return (_jsxs(XStack, { ...slot('model-picker-group'), role: "presentation", height: row, px: "$2", gap: "$2", items: "flex-end", pb: "$1.5", children: [_jsx(SizableText, { size: "$1", color: "$soft", fontWeight: "600", numberOfLines: 1, flex: 1, children: r.label }), _jsx(SizableText, { size: "$1", color: "$soft", fontVariant: ['tabular-nums'], children: r.count })] }, r.key));
|
|
159
|
-
}
|
|
160
|
-
const m = r.model;
|
|
161
|
-
const locked = !pickable(m);
|
|
162
|
-
const paused = !locked && isPaused(m, limits);
|
|
163
|
-
const picked = m.id === value;
|
|
164
|
-
const ctx = formatContext(m.context_window);
|
|
165
|
-
const title = modelName(m);
|
|
166
|
-
// A model that answers in something other than a conversation says
|
|
167
|
-
// what it does, so an unscoped list is honest about each row.
|
|
168
|
-
const kind = scope || can(m, 'chat') ? null : capabilitiesOf(m)[0];
|
|
169
|
-
// A model sold against another says by how much, from the two list prices;
|
|
170
|
-
// a router, the ceiling it bills up to.
|
|
171
|
-
const saving = savingOf(m, models);
|
|
172
|
-
const ceiling = formatCeiling(m);
|
|
173
|
-
return (_jsxs(XStack, { ...slot('model-picker-option'), id: optionId(i), role: "option", "aria-selected": picked, "aria-disabled": locked || undefined, "aria-setsize": total, "aria-posinset": position[i], "aria-label": `${title}, ${groupLabel(m)}${paused ? ', paused' : ''}${locked ? ', research preview' : ''}`, "data-model": m.id, "data-class": m.class, "data-paused": paused || undefined, height: row, px: "$2", gap: "$2", items: "center", rounded: "$2", cursor: locked ? 'default' : 'pointer', bg: i === at ? '$raised' : 'transparent', onHoverIn: () => setAt(i), onPress: () => choose(r), children: [_jsx(Check, { size: 14, color: "$ink", shrink: 0, opacity: picked ? 1 : 0, "aria-hidden": true }), _jsx(SizableText, { size: sheet ? '$3' : '$2', color: "$ink", opacity: locked ? 0.5 : 1, numberOfLines: 1, flex: 1, minW: 0, children: title }), m.class === 'premium' ? (_jsx(SizableText, { size: "$1", color: "$soft", shrink: 0, "aria-hidden": true, children: "\u2726" })) : null, locked || paused || saving || ceiling || kind || ctx ? (_jsx(SizableText, { size: "$1", color: "$soft", shrink: 0, maxW: "60%", numberOfLines: 1, fontVariant: ['tabular-nums'], children: locked
|
|
174
|
-
? 'Research preview'
|
|
175
|
-
: paused
|
|
176
|
-
? 'Paused'
|
|
177
|
-
: saving
|
|
178
|
-
? formatSaving(saving)
|
|
179
|
-
: ceiling
|
|
180
|
-
? ceiling
|
|
181
|
-
: kind
|
|
182
|
-
? CAPABILITY_NAMES[kind]
|
|
183
|
-
: ctx })) : null] }, m.id));
|
|
184
|
-
})] }), rows.length === 0 && !error ? (_jsx(XStack, { ...slot('model-picker-empty'), px: "$2", py: "$2", role: "status", children: _jsx(SizableText, { size: "$2", color: "$soft", children: loading ? 'Loading models…' : q ? `No models match “${q}”.` : 'No models to choose from.' }) })) : null] }), research.length ? (_jsxs(XStack, { ...slot('model-picker-research'), px: "$2", py: "$1.5", gap: "$1.5", items: "center", flexWrap: "wrap", children: [_jsxs(SizableText, { size: "$1", color: "$soft", children: [research.map(modelName).join(', '), " ", research.length === 1 ? 'is' : 'are', " in research preview."] }), _jsx(Anchor, { href: research[0].request, target: "_blank", rel: "noopener noreferrer", size: "$1", color: "$ink", textDecorationLine: "underline", children: "Request access" })] })) : null] }));
|
|
62
|
+
void load().then((m) => setLive(() => m));
|
|
63
|
+
}, [Live]);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (open)
|
|
66
|
+
want();
|
|
67
|
+
}, [open, want]);
|
|
68
|
+
// The trigger is drawn again inside the popover once it arrives; one that
|
|
69
|
+
// held the focus keeps it. Its removal blurs it with nowhere to go, which is
|
|
70
|
+
// not the reader leaving.
|
|
71
|
+
const focused = useRef(false);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (Live && focused.current)
|
|
74
|
+
trigger.current?.focus?.();
|
|
75
|
+
}, [Live]);
|
|
185
76
|
const small = size === 'sm';
|
|
186
|
-
const button = (_jsxs(XStack, { ref: trigger, ...slot('model-picker'), role: "button", tabIndex: disabled ? -1 : 0, "aria-label": `${name}: ${label}`, "aria-haspopup": "listbox", "aria-expanded": open, "aria-disabled": disabled || undefined, height: small ? 28 : 36, px: small ? '$2' : '$3', gap: "$2", items: "center", maxW: "100%", rounded: "$3", borderWidth: quiet ? 0 : 1, borderColor: "$borderColor", bg: quiet ? 'transparent' : '$background', cursor: disabled ? 'default' : 'pointer', opacity: disabled ? 0.5 : 1, hoverStyle: disabled ? undefined : quiet ? { bg: '$hover' } : { borderColor: '$rim' }, pressStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: RING, onLayout: (e) => setTriggerW(e.nativeEvent?.layout?.width ?? 0),
|
|
77
|
+
const button = (_jsxs(XStack, { ref: trigger, ...slot('model-picker'), role: "button", tabIndex: disabled ? -1 : 0, "aria-label": `${name}: ${label}`, "aria-haspopup": "listbox", "aria-expanded": open, "aria-disabled": disabled || undefined, height: small ? 28 : 36, px: small ? '$2' : '$3', gap: "$2", items: "center", maxW: "100%", rounded: "$3", borderWidth: quiet ? 0 : 1, borderColor: "$borderColor", bg: quiet ? 'transparent' : '$background', cursor: disabled ? 'default' : 'pointer', opacity: disabled ? 0.5 : 1, hoverStyle: disabled ? undefined : quiet ? { bg: '$hover' } : { borderColor: '$rim' }, pressStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: RING, onLayout: (e) => setTriggerW(e.nativeEvent?.layout?.width ?? 0),
|
|
78
|
+
// The popover opens on press once it is here; before that, and on a phone, the press opens it.
|
|
79
|
+
onPress: disabled || (Live && !sheet) ? undefined : () => setOpen(true), onMouseEnter: disabled ? undefined : want, onFocus: disabled
|
|
80
|
+
? undefined
|
|
81
|
+
: () => {
|
|
82
|
+
focused.current = true;
|
|
83
|
+
want();
|
|
84
|
+
}, onBlur: (e) => {
|
|
85
|
+
if (e.relatedTarget)
|
|
86
|
+
focused.current = false;
|
|
87
|
+
}, onKeyDown: (e) => {
|
|
187
88
|
if (disabled)
|
|
188
89
|
return;
|
|
189
90
|
if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
|
@@ -191,16 +92,9 @@ export function ModelPicker({ models, value, onChange, scope, limits, loading =
|
|
|
191
92
|
setOpen(true);
|
|
192
93
|
}
|
|
193
94
|
}, children: [_jsx(SizableText, { size: small ? '$1' : '$2', color: quiet ? '$quiet' : '$ink', numberOfLines: 1, shrink: 1, minW: 0, children: label }), selected && !quiet ? (_jsx(SizableText, { size: small ? '$1' : '$2', color: "$soft", numberOfLines: 1, shrink: 2, minW: 0, children: groupLabel(selected) })) : null, _jsx(ChevronsUpDown, { size: small ? 12 : 14, color: "$soft", shrink: 0, "aria-hidden": true })] }));
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}, onCloseAutoFocus: (e) => {
|
|
198
|
-
e.preventDefault();
|
|
199
|
-
trigger.current?.focus?.();
|
|
200
|
-
}, children: body }))] }), sheet ? (_jsx(Sheet, { open: open, onOpenChange: (v) => (v ? setOpen(true) : close()), children: _jsxs(SheetContent, { ...slot('model-picker-sheet'), side: "bottom", height: "85%", maxH: "85%", p: "$3", gap: "$2", onOpenAutoFocus: (e) => {
|
|
201
|
-
e.preventDefault();
|
|
202
|
-
field.current?.focus();
|
|
203
|
-
}, children: [_jsx(SheetTitle, { size: "$4", children: name }), body] }) })) : null] }));
|
|
95
|
+
if (!Live)
|
|
96
|
+
return button;
|
|
97
|
+
return (_jsx(Live, { trigger: button, open: open, onOpen: () => setOpen(true), onClose: close, disabled: disabled, width: triggerW, focusTrigger: () => trigger.current?.focus?.(), models: models, value: value, onChange: onChange, scope: scope, limits: limits, loading: loading, error: error, name: name, sheet: sheet, row: row }));
|
|
204
98
|
}
|
|
205
99
|
export default ModelPicker;
|
|
206
100
|
//# sourceMappingURL=ModelPicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../src/models/ModelPicker.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ModelPicker.js","sourceRoot":"","sources":["../../src/models/ModelPicker.tsx"],"names":[],"mappings":"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"}
|