@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.
@@ -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, 11px)`,
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)`,
@@ -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, 11px)`,
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
- * VIRTUALISED. Five hundred rows are drawn as the ~15 in view plus a margin:
21
- * every row is one height, so a scroll offset names the slice outright and
22
- * two spacers stand in for the rest. The cursor moves over the full list and
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
- const picker_logic_1 = require("./picker.logic.cjs");
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
- const choose = (0, react_1.useCallback)((r) => {
125
- if (r?.kind !== 'model' || !(0, picker_logic_1.pickable)(r.model))
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
- onChange(r.model.id);
128
- close();
129
- }, [onChange, close]);
130
- const onField = (e) => {
131
- const key = e.key;
132
- if (MOVES.has(key)) {
133
- if ((key === 'Home' || key === 'End') && q)
134
- return;
135
- e.preventDefault?.();
136
- const to = (0, chipSelect_logic_1.move)(key, at, rows.length, (i) => !(0, picker_logic_1.restable)(rows, i));
137
- setAt(to);
138
- if (to >= 0)
139
- reveal(to);
140
- return;
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), onPress: sheet && !disabled ? () => setOpen(true) : undefined, onKeyDown: (e) => {
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
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsxs)(popover_1.Popover, { open: open && !sheet, onOpenChange: (v) => (v ? setOpen(true) : close()), placement: "bottom-start", allowFlip: true, stayInFrame: true, children: [(0, jsx_runtime_1.jsx)(popover_1.PopoverTrigger, { asChild: true, disabled: disabled, children: button }), sheet ? null : ((0, jsx_runtime_1.jsx)(popover_1.PopoverContent, { ...(0, slot_1.slot)('model-picker-panel'), sideOffset: 6, width: Math.max(triggerW, PANEL_W), maxW: "92vw", p: "$1.5", items: "stretch", trapFocus: true, onOpenAutoFocus: (e) => {
198
- e.preventDefault();
199
- field.current?.focus();
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":"AAsCA,OAAO,EAYL,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,WAAW,CAAA;AAYlB,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,+BAyYlB;eAEc,WAAW"}
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 { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
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
- * VIRTUALISED. Five hundred rows are drawn as the ~15 in view plus a margin:
18
- * every row is one height, so a scroll offset names the slice outright and
19
- * two spacers stand in for the rest. The cursor moves over the full list and
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 { Anchor, Input as GuiInput, ScrollView, SizableText, XStack, YStack, useMedia } from '@hanzo/gui';
31
- import { Check, ChevronsUpDown, Search } from '@hanzogui/lucide-icons-2';
32
- import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';
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 { move } from '../product/chipSelect.logic.js';
38
- import { CAPABILITY_NAMES, can, capabilitiesOf, formatCeiling, formatContext, formatSaving, groupLabel, isPaused, modelName, RESEARCH, savingOf, } from './catalog.js';
39
- import { modelCount, pickable, pickerRows, restable, revealTop, visibleRange } from './picker.logic.js';
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
- const choose = useCallback((r) => {
122
- if (r?.kind !== 'model' || !pickable(r.model))
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
- onChange(r.model.id);
125
- close();
126
- }, [onChange, close]);
127
- const onField = (e) => {
128
- const key = e.key;
129
- if (MOVES.has(key)) {
130
- if ((key === 'Home' || key === 'End') && q)
131
- return;
132
- e.preventDefault?.();
133
- const to = move(key, at, rows.length, (i) => !restable(rows, i));
134
- setAt(to);
135
- if (to >= 0)
136
- reveal(to);
137
- return;
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), onPress: sheet && !disabled ? () => setOpen(true) : undefined, onKeyDown: (e) => {
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
- return (_jsxs(_Fragment, { children: [_jsxs(Popover, { open: open && !sheet, onOpenChange: (v) => (v ? setOpen(true) : close()), placement: "bottom-start", allowFlip: true, stayInFrame: true, children: [_jsx(PopoverTrigger, { asChild: true, disabled: disabled, children: button }), sheet ? null : (_jsx(PopoverContent, { ...slot('model-picker-panel'), sideOffset: 6, width: Math.max(triggerW, PANEL_W), maxW: "92vw", p: "$1.5", items: "stretch", trapFocus: true, onOpenAutoFocus: (e) => {
195
- e.preventDefault();
196
- field.current?.focus();
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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"}