@hanzo/ui 8.29.22 → 8.29.24
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/chat/Composer.cjs +182 -99
- package/dist/chat/Composer.d.ts +110 -81
- package/dist/chat/Composer.d.ts.map +1 -1
- package/dist/chat/Composer.js +184 -101
- package/dist/chat/Composer.js.map +1 -1
- package/dist/chat/Dial.cjs +96 -0
- package/dist/chat/Dial.d.ts +7 -0
- package/dist/chat/Dial.d.ts.map +1 -0
- package/dist/chat/Dial.js +94 -0
- package/dist/chat/Dial.js.map +1 -0
- package/dist/chat/Dictation.cjs +142 -0
- package/dist/chat/Dictation.d.ts +13 -0
- package/dist/chat/Dictation.d.ts.map +1 -0
- package/dist/chat/Dictation.js +140 -0
- package/dist/chat/Dictation.js.map +1 -0
- package/dist/chat/Families.cjs +41 -0
- package/dist/chat/Families.d.ts +3 -0
- package/dist/chat/Families.d.ts.map +1 -0
- package/dist/chat/Families.js +39 -0
- package/dist/chat/Families.js.map +1 -0
- package/dist/chat/Mention.cjs +25 -0
- package/dist/chat/Mention.d.ts +16 -0
- package/dist/chat/Mention.d.ts.map +1 -0
- package/dist/chat/Mention.js +22 -0
- package/dist/chat/Mention.js.map +1 -0
- package/dist/chat/Palette.cjs +22 -0
- package/dist/chat/Palette.d.ts +21 -0
- package/dist/chat/Palette.d.ts.map +1 -0
- package/dist/chat/Palette.js +20 -0
- package/dist/chat/Palette.js.map +1 -0
- package/dist/chat/Plus.cjs +76 -0
- package/dist/chat/Plus.d.ts +49 -0
- package/dist/chat/Plus.d.ts.map +1 -0
- package/dist/chat/Plus.js +74 -0
- package/dist/chat/Plus.js.map +1 -0
- package/dist/chat/Tune.cjs +55 -0
- package/dist/chat/Tune.d.ts +49 -0
- package/dist/chat/Tune.d.ts.map +1 -0
- package/dist/chat/Tune.js +51 -0
- package/dist/chat/Tune.js.map +1 -0
- package/dist/chat/index.cjs +25 -4
- package/dist/chat/index.d.ts +11 -3
- package/dist/chat/index.d.ts.map +1 -1
- package/dist/chat/index.js +10 -2
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/languages.cjs +17 -0
- package/dist/chat/languages.d.ts +11 -0
- package/dist/chat/languages.d.ts.map +1 -0
- package/dist/chat/languages.js +15 -0
- package/dist/chat/languages.js.map +1 -0
- package/dist/chat/pure.cjs +7 -1
- package/dist/chat/pure.d.ts +3 -1
- package/dist/chat/pure.d.ts.map +1 -1
- package/dist/chat/pure.js +4 -0
- package/dist/chat/pure.js.map +1 -1
- package/dist/chat/ring.cjs +9 -0
- package/dist/chat/ring.d.ts +11 -0
- package/dist/chat/ring.d.ts.map +1 -0
- package/dist/chat/ring.js +7 -0
- package/dist/chat/ring.js.map +1 -0
- package/dist/chat/send.cjs +3 -2
- package/dist/chat/send.d.ts +4 -1
- package/dist/chat/send.d.ts.map +1 -1
- package/dist/chat/send.js +3 -2
- package/dist/chat/send.js.map +1 -1
- package/dist/chat/ways.cjs +19 -0
- package/dist/chat/ways.d.ts +11 -0
- package/dist/chat/ways.d.ts.map +1 -0
- package/dist/chat/ways.js +17 -0
- package/dist/chat/ways.js.map +1 -0
- package/dist/gallery.cjs +4 -1
- package/dist/gallery.d.ts.map +1 -1
- package/dist/gallery.html +45 -15
- package/dist/gallery.js +5 -2
- package/dist/gallery.js.map +1 -1
- package/dist/models/ModelPicker.cjs +3 -3
- package/dist/models/ModelPicker.d.ts +6 -1
- package/dist/models/ModelPicker.d.ts.map +1 -1
- package/dist/models/ModelPicker.js +3 -3
- package/dist/models/ModelPicker.js.map +1 -1
- package/dist/models/ModelPickerMenu.cjs +19 -13
- package/dist/models/ModelPickerMenu.d.ts +4 -0
- package/dist/models/ModelPickerMenu.d.ts.map +1 -1
- package/dist/models/ModelPickerMenu.js +19 -13
- package/dist/models/ModelPickerMenu.js.map +1 -1
- package/dist/models/catalog.cjs +7 -0
- package/dist/models/catalog.d.ts +2 -0
- package/dist/models/catalog.d.ts.map +1 -1
- package/dist/models/catalog.js +6 -0
- package/dist/models/catalog.js.map +1 -1
- package/dist/models/index.cjs +2 -1
- package/dist/models/index.d.ts +1 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +1 -1
- package/dist/models/index.js.map +1 -1
- package/dist/product/BranchSelect.cjs +1 -1
- package/dist/product/BranchSelect.js +1 -1
- package/dist/product/BranchSelect.js.map +1 -1
- package/dist/product/ChipSelect.cjs +60 -11
- package/dist/product/ChipSelect.d.ts +13 -2
- package/dist/product/ChipSelect.d.ts.map +1 -1
- package/dist/product/ChipSelect.js +61 -12
- package/dist/product/ChipSelect.js.map +1 -1
- package/dist/product/RepoSelect.cjs +11 -5
- package/dist/product/RepoSelect.d.ts +6 -2
- package/dist/product/RepoSelect.d.ts.map +1 -1
- package/dist/product/RepoSelect.js +13 -7
- package/dist/product/RepoSelect.js.map +1 -1
- package/dist/product/chipSelect.logic.d.ts +4 -1
- package/dist/product/chipSelect.logic.d.ts.map +1 -1
- package/dist/product/chipSelect.logic.js.map +1 -1
- package/dist/product/index.cjs +3 -3
- package/dist/product/index.d.ts +1 -1
- package/dist/product/index.d.ts.map +1 -1
- package/dist/product/index.js +3 -3
- package/dist/product/index.js.map +1 -1
- package/dist/styles.css +41 -11
- package/package.json +8 -2
package/dist/chat/Composer.js
CHANGED
|
@@ -1,127 +1,210 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
/**
|
|
4
|
-
* Composer — the one
|
|
4
|
+
* Composer — the one composer every Hanzo surface draws: Chat, Dev, Studio, a
|
|
5
|
+
* room, a reply, a run being steered. A surface hands it slots and defaults and
|
|
6
|
+
* nothing else; the field, the keys, the controls and their look are here once.
|
|
5
7
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* ┌ pills ───────────────────────────────┐ where a run goes, which repository
|
|
9
|
+
* │ the field │
|
|
10
|
+
* │ + carried… children ✦ 🎙 ⬆ │ + menu, what the draft carries,
|
|
11
|
+
* └──────────────────────────────────────┘ commands, dictation, send / stop
|
|
12
|
+
* chips… model effort mode
|
|
10
13
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* surface got subtly different.
|
|
14
|
+
* Above the frame: the surface's `head`, the `/` or `@` list, and the `note`.
|
|
15
|
+
* Under it, one row: the surface's chips, then the model, the effort and the mode.
|
|
14
16
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
+
* THE PERSON'S SETTING (@hanzo/appearance `useComposing`, Settings →
|
|
18
|
+
* Appearance) decides which key sends and whether the chips, the model
|
|
19
|
+
* selector and the mode are drawn, everywhere at once. An axis they left on
|
|
20
|
+
* Auto takes the surface's `defaults`, and the model selector is off until
|
|
21
|
+
* they turn it on.
|
|
17
22
|
*
|
|
18
|
-
*
|
|
19
|
-
* the
|
|
23
|
+
* Its paint is @hanzo/design's: `$` tokens and `--primary`, sized through
|
|
24
|
+
* `--density` (the round controls are @hanzo/composer's `Control`), so text
|
|
25
|
+
* size, density and accent change it with the rest of the product.
|
|
26
|
+
*
|
|
27
|
+
* Its own words are the reader's language (@hanzo/i18n `t`). A host's words —
|
|
28
|
+
* its placeholder, a shelf's rows, a chip's label — are drawn as given.
|
|
20
29
|
*/
|
|
21
|
-
import { SizableText, XStack, YStack } from '@hanzo/gui';
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
30
|
+
import { SizableText, useMedia, XStack, YStack } from '@hanzo/gui';
|
|
31
|
+
import { useComposing } from '@hanzo/appearance';
|
|
32
|
+
import { Control } from '@hanzo/composer';
|
|
33
|
+
import { phrase } from '@hanzo/i18n';
|
|
34
|
+
import { useI18n } from '@hanzo/i18n/react';
|
|
35
|
+
import { ArrowUp, AudioLines, Square, X } from '@hanzogui/lucide-icons-2';
|
|
36
|
+
import { Voice } from '@hanzo/voice';
|
|
37
|
+
import { useEffect, useRef, useState } from 'react';
|
|
38
|
+
import { Textarea } from '../backends/gui/index.js';
|
|
39
|
+
import { slot } from '../backends/gui/slot.js';
|
|
40
|
+
import { glass } from '../glass.js';
|
|
41
|
+
import { Dial } from './Dial.js';
|
|
42
|
+
import { Dictation } from './Dictation.js';
|
|
43
|
+
import { Mention, trigger } from './Mention.js';
|
|
44
|
+
import { Palette } from './Palette.js';
|
|
45
|
+
import { Plus } from './Plus.js';
|
|
25
46
|
import { ready, sends } from './send.js';
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
/** How tall the field may grow before it scrolls, px. Uncapped, a long paste
|
|
29
|
-
* pushes the thread off screen; narrower frames pass their own. */
|
|
30
|
-
const CEILING = 200;
|
|
31
|
-
/** Floor for the field, px. `Textarea` defaults to 64, which is three lines of
|
|
32
|
-
* chrome before anything is typed. 44 is the touch-target floor. */
|
|
33
|
-
const FLOOR = 44;
|
|
47
|
+
import { RING } from './ring.js';
|
|
48
|
+
import { Chips, Tune } from './Tune.js';
|
|
34
49
|
/**
|
|
35
|
-
* The
|
|
36
|
-
*
|
|
37
|
-
* is why the send control can be a 28px mark inside a row a thumb already hits.
|
|
50
|
+
* The resting placeholder. It addresses the person rather than the mechanism,
|
|
51
|
+
* and as one constant it never re-announces when the model changes.
|
|
38
52
|
*/
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
/** The
|
|
43
|
-
const
|
|
53
|
+
export const ASK = phrase('Ask anything');
|
|
54
|
+
/** The reading measure: @hanzo/design's prose width, which Width (appearance) retunes. */
|
|
55
|
+
export const MEASURE = 'var(--container-prose, 48rem)';
|
|
56
|
+
/** The space between turns, px: one rhythm for every thread. */
|
|
57
|
+
export const GAP = 20;
|
|
58
|
+
/** The composer's width under a thread: the measure less its 0.75rem gutters, centred, so its edges are the text's. */
|
|
59
|
+
export const measure = { width: 'calc(100% - 1.5rem)', maxW: `calc(${MEASURE} - 1.5rem)`, mx: 'auto' };
|
|
60
|
+
/** The round controls' box, px, and a phone's, a thumb's width kept small so the frame is a slim glass bar: `+`, the effort, the mic, its chevron and send all take it, so they share one centreline. */
|
|
61
|
+
export const ROUND = 32;
|
|
62
|
+
const TAP = 36;
|
|
63
|
+
/** The frame's corner, px: 12 on a laptop; on a phone the inset plus a control's radius, so the send's circle and the frame's corner are concentric. */
|
|
64
|
+
const CORNER = 12;
|
|
65
|
+
const CORNER_PHONE = 24;
|
|
66
|
+
/** How tall the field grows before it scrolls, px. */
|
|
67
|
+
const CEILING = 200;
|
|
68
|
+
/** The ink on a filled round: the accent's own foreground. */
|
|
69
|
+
const ON = 'var(--primary-foreground)';
|
|
70
|
+
/** A round control with no ground of its own until it is pointed at. */
|
|
71
|
+
const QUIET = { bg: 'transparent', color: 'var(--foreground)', hoverStyle: { bg: '$hover' } };
|
|
72
|
+
/** Ctrl+U (⌘U) uploads, while a composer with an upload is on the page. */
|
|
73
|
+
export function useUpload(upload) {
|
|
74
|
+
const now = useRef(upload);
|
|
75
|
+
now.current = upload;
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
if (!upload)
|
|
78
|
+
return;
|
|
79
|
+
const key = (e) => {
|
|
80
|
+
if ((e.ctrlKey || e.metaKey) && !e.altKey && !e.shiftKey && e.key.toLowerCase() === 'u') {
|
|
81
|
+
e.preventDefault();
|
|
82
|
+
now.current?.();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
window.addEventListener('keydown', key);
|
|
86
|
+
return () => window.removeEventListener('keydown', key);
|
|
87
|
+
}, [Boolean(upload)]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
88
|
+
}
|
|
89
|
+
/** The modifier state off a keydown, web or native. */
|
|
90
|
+
const modsOf = (e) => ({
|
|
91
|
+
shiftKey: e.shiftKey ?? e.nativeEvent?.shiftKey,
|
|
92
|
+
altKey: e.altKey ?? e.nativeEvent?.altKey,
|
|
93
|
+
metaKey: e.metaKey ?? e.nativeEvent?.metaKey,
|
|
94
|
+
ctrlKey: e.ctrlKey ?? e.nativeEvent?.ctrlKey,
|
|
95
|
+
isComposing: e.isComposing ?? e.nativeEvent?.isComposing,
|
|
96
|
+
// Safari's only honest IME signal on this keydown.
|
|
97
|
+
keyCode: e.keyCode ?? e.nativeEvent?.keyCode,
|
|
98
|
+
});
|
|
44
99
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
* the
|
|
49
|
-
* it never has to be recomputed or re-announced when the model or endpoint
|
|
50
|
-
* changes — which is what a model-named placeholder forces a surface to do.
|
|
100
|
+
* How far the software keyboard covers the page, px: the layout viewport less the
|
|
101
|
+
* visual one. A phone keyboard that does not shrink the layout leaves a fixed
|
|
102
|
+
* composer under it; this is how far to lift it. Zero where the layout follows the
|
|
103
|
+
* keyboard (the browser resized it) and wherever there is no keyboard.
|
|
51
104
|
*/
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
isComposing: e.isComposing ?? e.nativeEvent?.isComposing,
|
|
63
|
-
// Safari's only honest IME signal on this keydown. Dropping it here would
|
|
64
|
-
// put the mid-candidate submit straight back, whatever `sends` checks.
|
|
65
|
-
keyCode: e.keyCode ?? e.nativeEvent?.keyCode,
|
|
105
|
+
function useLift() {
|
|
106
|
+
const [lift, setLift] = useState(0);
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
const vv = typeof window === 'undefined' ? null : window.visualViewport;
|
|
109
|
+
if (!vv)
|
|
110
|
+
return;
|
|
111
|
+
const read = () => {
|
|
112
|
+
const covered = Math.round(window.innerHeight - vv.height - vv.offsetTop);
|
|
113
|
+
// A bar of the browser's own coming and going is not a keyboard.
|
|
114
|
+
setLift(covered > 100 ? covered : 0);
|
|
66
115
|
};
|
|
67
|
-
|
|
116
|
+
read();
|
|
117
|
+
vv.addEventListener('resize', read);
|
|
118
|
+
vv.addEventListener('scroll', read);
|
|
119
|
+
return () => {
|
|
120
|
+
vv.removeEventListener('resize', read);
|
|
121
|
+
vv.removeEventListener('scroll', read);
|
|
122
|
+
};
|
|
123
|
+
}, []);
|
|
124
|
+
return lift;
|
|
125
|
+
}
|
|
126
|
+
export function Composer({ value, onChange, onSend, onStop, busy = false, disabled = false, ready: readyProp, placeholder, label, rows = 1, maxHeight = CEILING, field, hint, children, head, pills, carried, plus, slash, at, commands, chips, mind, effort, limits, onUpgrade, mode, voice, language = null, onLanguage, talk, starters, note, column = false, framed = false, narrow: narrowProp, defaults, ...props }) {
|
|
127
|
+
const { t } = useI18n();
|
|
128
|
+
const media = useMedia();
|
|
129
|
+
const narrow = narrowProp ?? !media.sm;
|
|
130
|
+
const hit = narrow ? TAP : ROUND;
|
|
131
|
+
const lift = useLift();
|
|
132
|
+
const chosen = useComposing();
|
|
133
|
+
const rule = chosen.send ?? defaults?.send ?? 'enter';
|
|
134
|
+
const showChips = chosen.chips ?? defaults?.chips ?? true;
|
|
135
|
+
const showModel = chosen.model ?? defaults?.model ?? false;
|
|
136
|
+
const showMode = chosen.mode ?? defaults?.mode ?? true;
|
|
137
|
+
const lit = readyProp ?? ready(value);
|
|
138
|
+
const live = busy ? Boolean(onStop) : lit && !disabled;
|
|
139
|
+
useUpload(plus?.upload);
|
|
140
|
+
// `/` and `@`: the shelf the caret's word opens, filtered by what follows it.
|
|
141
|
+
const [index, setIndex] = useState(0);
|
|
142
|
+
const [closed, setClosed] = useState(null);
|
|
143
|
+
const typed = trigger(value);
|
|
144
|
+
const shelf = typed ? (typed.char === '/' ? slash : at) : undefined;
|
|
145
|
+
const listed = shelf && typed && closed !== value ? shelf.rows.filter((r) => r.label.toLowerCase().includes(typed.query)).slice(0, 8) : null;
|
|
146
|
+
const row = Math.min(index, Math.max(0, (listed?.length ?? 1) - 1));
|
|
147
|
+
useEffect(() => setIndex(0), [typed?.char, typed?.query]);
|
|
148
|
+
const pick = (id) => {
|
|
149
|
+
if (!typed || !shelf)
|
|
68
150
|
return;
|
|
69
|
-
|
|
70
|
-
|
|
151
|
+
onChange(value.slice(0, typed.at).trimEnd() + (typed.at > 0 ? ' ' : ''));
|
|
152
|
+
shelf.pick(id);
|
|
153
|
+
};
|
|
154
|
+
const [palette, setPalette] = useState(false);
|
|
155
|
+
const submit = () => {
|
|
156
|
+
if (listed?.length)
|
|
157
|
+
return pick(listed[row].id);
|
|
158
|
+
if (live && !busy)
|
|
71
159
|
onSend();
|
|
72
160
|
};
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
161
|
+
const keyed = (e) => {
|
|
162
|
+
const key = e?.key ?? e?.nativeEvent?.key ?? '';
|
|
163
|
+
const mods = modsOf(e ?? {});
|
|
164
|
+
if (listed) {
|
|
165
|
+
if (key === 'ArrowDown') {
|
|
166
|
+
e.preventDefault?.();
|
|
167
|
+
return setIndex((i) => Math.min(i + 1, listed.length - 1));
|
|
168
|
+
}
|
|
169
|
+
if (key === 'ArrowUp') {
|
|
170
|
+
e.preventDefault?.();
|
|
171
|
+
return setIndex((i) => Math.max(0, i - 1));
|
|
82
172
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
173
|
+
if (key === 'Escape') {
|
|
174
|
+
e.preventDefault?.();
|
|
175
|
+
return setClosed(value);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
if (commands?.length && (mods.metaKey || mods.ctrlKey) && key.toLowerCase() === 'k') {
|
|
179
|
+
e.preventDefault?.();
|
|
180
|
+
return setPalette(true);
|
|
181
|
+
}
|
|
182
|
+
if (!sends(key, mods, rule))
|
|
183
|
+
return;
|
|
184
|
+
e.preventDefault?.();
|
|
185
|
+
submit();
|
|
186
|
+
};
|
|
187
|
+
const input = (_jsx(Textarea, { ...slot('composer-field'), rows: rows, placeholder: placeholder ?? t(ASK), disabled: disabled, borderWidth: 0, fontSize: 16, lineHeight: 24, px: 8, pt: 2, pb: 0, minH: 26, maxH: maxHeight, bg: "transparent", "aria-label": label ?? placeholder ?? t(ASK), ...field,
|
|
188
|
+
// After `field`: a caller's `onKeyDown` runs first and can claim the key,
|
|
189
|
+
// but cannot replace the send rule and the IME guard.
|
|
86
190
|
value: value, onChangeText: onChange, onKeyDown: (e) => {
|
|
87
191
|
field?.onKeyDown?.(e);
|
|
88
192
|
if (!e?.defaultPrevented)
|
|
89
193
|
keyed(e);
|
|
90
194
|
} }));
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
if (e?.key !== 'Enter' && e?.key !== ' ')
|
|
94
|
-
return;
|
|
95
|
-
e.preventDefault?.();
|
|
96
|
-
if (busy)
|
|
97
|
-
onStop?.();
|
|
98
|
-
else if (sendable)
|
|
99
|
-
onSend();
|
|
100
|
-
}, children: busy ? _jsx(Square, { size: 12, color: "$soft" }) : _jsx(CornerDownLeft, { size: 14, color: "$soft" }) }))] })) : (_jsxs(YStack, { ...slot('composer'), width: "100%", rounded: "$5", borderWidth: 1, borderColor: "$borderColor", bg: "$background", p: PAD, gap: PAD, ...props, children: [input, _jsxs(XStack, { items: "center", gap: PAD, children: [children, _jsx(XStack, { flex: 1 }), said, send ?? (_jsx(Button, { ...slot('composer-send'), size: "sm", disabled: busy ? !onStop : !sendable, onPress: busy ? onStop : onSend, "aria-label": busy ? 'Stop' : 'Send',
|
|
101
|
-
// A circle, and the room's one primary control. The height is the
|
|
102
|
-
// size's; `aspectRatio` takes the width from it, so no second number
|
|
103
|
-
// is written down. `--primary` is the accent a reader picks, and at
|
|
104
|
-
// rest it is the ink pair Send already paints in both themes.
|
|
105
|
-
px: 0, aspectRatio: 1, rounded: 'var(--radius-full, 9999px)', bg: "var(--primary)", borderWidth: 0, hoverStyle: { bg: 'var(--primary)', opacity: 0.9 }, pressStyle: { bg: 'var(--primary)', opacity: 0.85 }, children: busy ? (_jsx(Square, { size: 14, color: 'var(--primary-foreground)' })) : (_jsx(ArrowUp, { size: 16, color: 'var(--primary-foreground)' })) }))] })] }));
|
|
106
|
-
// With nothing above or below it the composer IS the frame, exactly as it
|
|
107
|
-
// was before either existed — no wrapper, so every caller's tree is unchanged.
|
|
108
|
-
if (!head && !foot)
|
|
109
|
-
return frame;
|
|
110
|
-
return (_jsxs(YStack, { ...slot('composer-shell'), width: "100%", gap: "$2.5", children: [head ? (_jsx(XStack, { ...slot('composer-head'), items: "center", gap: "$1.5", flexWrap: "wrap", children: head })) : null, frame, foot ? (_jsx(XStack, { ...slot('composer-foot'), items: "center", gap: "$2", px: "$1.5", mt: -4, children: foot })) : null] }));
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* ComposerTool — one quiet control in a composer's `foot` or `head`: attach,
|
|
114
|
-
* voice, a mode, the model. 24px tall, muted until pointed at, and a real
|
|
115
|
-
* button to the keyboard. Its name is `label` whether or not it shows words,
|
|
116
|
-
* because an icon-only control is the whole navigation for someone who cannot
|
|
117
|
-
* see the icon.
|
|
118
|
-
*/
|
|
119
|
-
export function ComposerTool({ label, icon, text, caret = false, onPress, disabled = false, ...rest }) {
|
|
120
|
-
return (_jsxs(XStack, { ...slot('composer-tool'), ...tip(label), role: "button", tabIndex: disabled ? -1 : 0, "aria-label": label, "aria-disabled": disabled || undefined, "aria-haspopup": caret ? 'menu' : undefined, height: 24, px: text ? '$1.5' : '$1', gap: "$1", items: "center", rounded: "$2", shrink: 0, cursor: disabled ? 'default' : 'pointer', opacity: disabled ? 0.5 : 1, hoverStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: { outlineColor: '$outlineColor', outlineWidth: 2, outlineStyle: 'solid' }, hitSlop: { top: 10, bottom: 10, left: 2, right: 2 }, onPress: disabled ? undefined : onPress, onKeyDown: (e) => {
|
|
121
|
-
if (disabled || (e?.key !== 'Enter' && e?.key !== ' '))
|
|
195
|
+
const round = (_jsx(Control, { type: "button", size: hit, fill: true, rounded: 999, ...slot('composer-send'), "aria-label": t(busy ? 'Stop' : 'Send'), "aria-disabled": !live || undefined, opacity: live ? 1 : 0.4, focusVisibleStyle: RING, onClick: () => {
|
|
196
|
+
if (!live)
|
|
122
197
|
return;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
198
|
+
if (busy)
|
|
199
|
+
onStop?.();
|
|
200
|
+
else
|
|
201
|
+
onSend();
|
|
202
|
+
}, children: busy ? _jsx(Square, { size: 13, color: ON, fill: ON }) : _jsx(ArrowUp, { size: 16, strokeWidth: 2.5, color: ON }) }));
|
|
203
|
+
const mention = listed && shelf && typed ? _jsx(Mention, { shelf: shelf, rows: listed, index: row, onPick: pick, skills: typed.char === '/' }) : null;
|
|
204
|
+
const above = starters || head || note || mention ? (_jsxs(YStack, { ...slot('composer-head'), gap: "$1.5", children: [starters, head, mention, note ? (_jsx(SizableText, { ...slot('composer-note'), fontSize: 12, color: "$soft", text: "center", self: "center", children: note })) : null] })) : null;
|
|
205
|
+
const shown = showChips && chips?.length ? chips : null;
|
|
206
|
+
const tuned = (showModel && mind) || (showMode && mode);
|
|
207
|
+
const under = shown || tuned ? (_jsxs(XStack, { ...slot('composer-foot'), items: "center", gap: 6, flexWrap: "wrap", rowGap: 4, width: "100%", children: [shown ? _jsx(Chips, { chips: shown }) : null, tuned ? _jsx(Tune, { mind: showModel ? mind : null, mode: showMode ? mode : null, onUpgrade: onUpgrade, limits: limits }) : null] })) : null;
|
|
208
|
+
return (_jsxs(YStack, { ...slot('composer-shell'), ...(column ? measure : { width: '100%' }), gap: 6, ...(lift ? { mb: lift } : null), ...props, children: [above, _jsxs(YStack, { ...slot('composer'), width: "100%", rounded: CORNER, borderWidth: 1, ...glass(2), p: 6, pt: pills ? 6 : 10, gap: 4, "$max-sm": { rounded: CORNER_PHONE }, ...(framed ? { boxShadow: 'var(--shadow-sheet-1)' } : null), children: [pills ? (_jsx(XStack, { ...slot('composer-pills'), items: "center", gap: 4, flexWrap: "wrap", rowGap: 4, px: 2, children: pills })) : null, input, _jsxs(XStack, { items: "center", gap: 4, children: [_jsxs(XStack, { ...slot('composer-start'), items: "center", gap: 4, flex: 1, minW: 0, flexWrap: "wrap", children: [plus ? _jsx(Plus, { ...plus, size: hit, disabled: disabled || plus.disabled }) : null, (carried ?? []).map((c) => (_jsxs(XStack, { ...slot('composer-carried'), items: "center", gap: 6, paddingInlineStart: 8, paddingInlineEnd: 4, height: 28, rounded: 8, bg: "$hover", maxW: 180, children: [c.icon ? _jsx(XStack, { "aria-hidden": true, children: c.icon }) : null, _jsx(SizableText, { fontSize: 13, color: "$ink", numberOfLines: 1, shrink: 1, children: c.label }), _jsx(XStack, { render: "button", "aria-label": t('Remove {name}', { name: c.label }), onPress: c.onRemove, width: 20, height: 20, rounded: 6, items: "center", justify: "center", hoverStyle: { bg: '$raised' }, cursor: "pointer", children: _jsx(X, { size: 12, color: "$hint" }) })] }, c.id))), children] }), _jsxs(XStack, { ...slot('composer-end'), items: "center", gap: 4, shrink: 0, children: [hint ? (_jsx(SizableText, { size: "$1", color: "$soft", numberOfLines: 1, children: hint })) : null, effort ? _jsx(Dial, { effort: effort, size: hit, disabled: disabled }) : null, commands?.length ? _jsx(Palette, { commands: commands, open: palette, onOpenChange: setPalette, size: hit, disabled: disabled }) : null, voice ? _jsx(Dictation, { voice: voice, disabled: disabled, size: hit, language: language, ...(onLanguage ? { onLanguage } : {}) }) : null, !busy && !lit && talk ? (_jsx(Control, { asChild: true, size: hit, fill: narrow, rounded: 999, ...(narrow ? null : QUIET), focusVisibleStyle: RING, children: _jsx(Voice, { voice: talk, disabled: disabled, "data-slot": "composer-talk", says: { idle: t('Voice mode'), listening: t('In conversation — click to hang up'), speaking: t('Hanzo is speaking — talk to interrupt') }, children: () => _jsx(AudioLines, { size: 16, color: narrow ? ON : 'var(--foreground)' }) }) })) : (round)] })] })] }), under] }));
|
|
126
209
|
}
|
|
127
210
|
//# sourceMappingURL=Composer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../src/chat/Composer.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Composer.js","sourceRoot":"","sources":["../../src/chat/Composer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
'use client';"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Dial = Dial;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
/**
|
|
7
|
+
* The effort, as ONE small icon button — a gauge with the level in a tiny pip —
|
|
8
|
+
* the same in Chat and Dev, in the composer's end row beside the mic.
|
|
9
|
+
*
|
|
10
|
+
* press opens a compact list of the levels, the one in force checked
|
|
11
|
+
* drag press the icon and move along the row: each step of the finger
|
|
12
|
+
* is a level (`STEP` px), snapped to the surface's own list, with a
|
|
13
|
+
* small label above the icon naming the level while it is held
|
|
14
|
+
* ← ↓ / → ↑ the arrows move one level, in the reading direction
|
|
15
|
+
* Enter, Space opens the list
|
|
16
|
+
*
|
|
17
|
+
* The list is the surface's (`Modes`): a chat offers six levels, a coding run four.
|
|
18
|
+
* The pointer events are the page's own — nothing is captured past the press.
|
|
19
|
+
*/
|
|
20
|
+
const gui_1 = require("@hanzo/gui");
|
|
21
|
+
const react_1 = require("@hanzo/i18n/react");
|
|
22
|
+
const lucide_icons_2_1 = require("@hanzogui/lucide-icons-2");
|
|
23
|
+
const react_2 = require("react");
|
|
24
|
+
const gui_2 = require("../backends/gui/index.cjs");
|
|
25
|
+
const ring_1 = require("./ring.cjs");
|
|
26
|
+
const Tune_1 = require("./Tune.cjs");
|
|
27
|
+
/** How far the finger travels for one level, px. */
|
|
28
|
+
const STEP = 22;
|
|
29
|
+
/** The pip: the level in a letter or two, so the icon says where it stands without a word. */
|
|
30
|
+
const PIP = { auto: 'A', low: 'L', medium: 'M', high: 'H', xhigh: 'XH', max: 'MAX' };
|
|
31
|
+
const pip = (id, label) => PIP[id] ?? label.slice(0, 1).toUpperCase();
|
|
32
|
+
function Dial({ effort, size = 36, disabled = false }) {
|
|
33
|
+
const { t, dir } = (0, react_1.useI18n)();
|
|
34
|
+
const [open, setOpen] = (0, react_2.useState)(false);
|
|
35
|
+
// The level under the finger while it is held, as a place in the list.
|
|
36
|
+
const [held, setHeld] = (0, react_2.useState)(null);
|
|
37
|
+
const press = (0, react_2.useRef)(null);
|
|
38
|
+
const index = Math.max(0, effort.items.findIndex((e) => e.id === effort.value));
|
|
39
|
+
const now = effort.items[index] ?? effort.items[0];
|
|
40
|
+
const shown = held === null ? now : (effort.items[held] ?? now);
|
|
41
|
+
const flip = dir === 'rtl' ? -1 : 1;
|
|
42
|
+
const clamp = (i) => Math.max(0, Math.min(effort.items.length - 1, i));
|
|
43
|
+
const go = (i) => {
|
|
44
|
+
const next = effort.items[clamp(i)];
|
|
45
|
+
if (next && next.id !== effort.value)
|
|
46
|
+
effort.set(next.id);
|
|
47
|
+
};
|
|
48
|
+
return ((0, jsx_runtime_1.jsxs)(gui_2.Popover, { open: open, onOpenChange: setOpen, allowFlip: true, placement: "top-end", children: [(0, jsx_runtime_1.jsx)(gui_2.PopoverAnchor, { asChild: true, children: (0, jsx_runtime_1.jsxs)(gui_1.XStack, { position: "relative", shrink: 0, "data-slot": "dial", children: [(0, jsx_runtime_1.jsxs)(gui_1.XStack, { render: "button", "data-slot": "dial-button", "aria-label": t('Effort: {level}', { level: t(now.label) }), "aria-haspopup": "listbox", "aria-expanded": open, "aria-disabled": disabled || undefined, tabIndex: disabled ? -1 : 0, width: size, height: size, rounded: 999, items: "center", justify: "center", shrink: 0, position: "relative", cursor: disabled ? 'default' : 'ew-resize', opacity: disabled ? 0.5 : 1, bg: open || held !== null ? '$hover' : 'transparent', hoverStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: ring_1.RING,
|
|
49
|
+
// inline-style: the page must not scroll or select under a drag along the icon.
|
|
50
|
+
style: { touchAction: 'none', userSelect: 'none' }, onPointerDown: (e) => {
|
|
51
|
+
if (disabled)
|
|
52
|
+
return;
|
|
53
|
+
press.current = { x: e.clientX, at: index, moved: false };
|
|
54
|
+
e.currentTarget?.setPointerCapture?.(e.pointerId);
|
|
55
|
+
}, onPointerMove: (e) => {
|
|
56
|
+
const p = press.current;
|
|
57
|
+
if (!p)
|
|
58
|
+
return;
|
|
59
|
+
const dx = (e.clientX - p.x) * flip;
|
|
60
|
+
if (Math.abs(dx) > 4)
|
|
61
|
+
p.moved = true;
|
|
62
|
+
if (p.moved)
|
|
63
|
+
setHeld(clamp(p.at + Math.round(dx / STEP)));
|
|
64
|
+
}, onPointerUp: (e) => {
|
|
65
|
+
const p = press.current;
|
|
66
|
+
press.current = null;
|
|
67
|
+
e.currentTarget?.releasePointerCapture?.(e.pointerId);
|
|
68
|
+
if (!p)
|
|
69
|
+
return;
|
|
70
|
+
if (p.moved) {
|
|
71
|
+
go(held ?? p.at);
|
|
72
|
+
setHeld(null);
|
|
73
|
+
}
|
|
74
|
+
else
|
|
75
|
+
setOpen((o) => !o);
|
|
76
|
+
}, onPointerCancel: () => {
|
|
77
|
+
press.current = null;
|
|
78
|
+
setHeld(null);
|
|
79
|
+
}, onKeyDown: (e) => {
|
|
80
|
+
if (disabled)
|
|
81
|
+
return;
|
|
82
|
+
const key = e?.key;
|
|
83
|
+
const step = key === 'ArrowRight' || key === 'ArrowUp' ? flip : key === 'ArrowLeft' || key === 'ArrowDown' ? -flip : 0;
|
|
84
|
+
if (step) {
|
|
85
|
+
e.preventDefault?.();
|
|
86
|
+
go(index + step);
|
|
87
|
+
}
|
|
88
|
+
else if (key === 'Enter' || key === ' ') {
|
|
89
|
+
e.preventDefault?.();
|
|
90
|
+
setOpen((o) => !o);
|
|
91
|
+
}
|
|
92
|
+
}, children: [(0, jsx_runtime_1.jsx)(lucide_icons_2_1.Gauge, { size: 18, color: "var(--foreground)", "aria-hidden": true }), (0, jsx_runtime_1.jsx)(gui_1.SizableText, { "data-slot": "dial-pip", "aria-hidden": true, position: "absolute", b: 3, insetInlineEnd: 2, fontSize: 9, lineHeight: 10, fontWeight: "700", color: "$ink", px: 2, rounded: 4, bg: "$background", children: pip(shown.id, t(shown.label)) })] }), held !== null ? ((0, jsx_runtime_1.jsx)(gui_1.XStack, { "data-slot": "dial-tip", role: "status", position: "absolute", b: size + 6, self: "center", px: 8, py: 3, rounded: 6, bg: "$ink", pointerEvents: "none", style: { whiteSpace: 'nowrap' }, children: (0, jsx_runtime_1.jsx)(gui_1.SizableText, { fontSize: 12, color: "$background", children: t(shown.label) }) })) : null] }) }), (0, jsx_runtime_1.jsx)(gui_2.PopoverContent, { solid: true, p: 6, width: 288, maxW: "calc(100vw - 24px)", children: (0, jsx_runtime_1.jsx)(Tune_1.Choices, { title: t('Effort'), items: effort.items, value: effort.value, onPick: (id) => {
|
|
93
|
+
effort.set(id);
|
|
94
|
+
setOpen(false);
|
|
95
|
+
} }) })] }));
|
|
96
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dial.d.ts","sourceRoot":"","sources":["../../src/chat/Dial.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAA;AAU5C,wBAAgB,IAAI,CAAC,EAAE,MAAM,EAAE,IAAS,EAAE,QAAgB,EAAE,EAAE;IAAE,MAAM,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,+BAsIjH"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* The effort, as ONE small icon button — a gauge with the level in a tiny pip —
|
|
5
|
+
* the same in Chat and Dev, in the composer's end row beside the mic.
|
|
6
|
+
*
|
|
7
|
+
* press opens a compact list of the levels, the one in force checked
|
|
8
|
+
* drag press the icon and move along the row: each step of the finger
|
|
9
|
+
* is a level (`STEP` px), snapped to the surface's own list, with a
|
|
10
|
+
* small label above the icon naming the level while it is held
|
|
11
|
+
* ← ↓ / → ↑ the arrows move one level, in the reading direction
|
|
12
|
+
* Enter, Space opens the list
|
|
13
|
+
*
|
|
14
|
+
* The list is the surface's (`Modes`): a chat offers six levels, a coding run four.
|
|
15
|
+
* The pointer events are the page's own — nothing is captured past the press.
|
|
16
|
+
*/
|
|
17
|
+
import { SizableText, XStack } from '@hanzo/gui';
|
|
18
|
+
import { useI18n } from '@hanzo/i18n/react';
|
|
19
|
+
import { Gauge } from '@hanzogui/lucide-icons-2';
|
|
20
|
+
import { useRef, useState } from 'react';
|
|
21
|
+
import { Popover, PopoverAnchor, PopoverContent } from '../backends/gui/index.js';
|
|
22
|
+
import { RING } from './ring.js';
|
|
23
|
+
import { Choices } from './Tune.js';
|
|
24
|
+
/** How far the finger travels for one level, px. */
|
|
25
|
+
const STEP = 22;
|
|
26
|
+
/** The pip: the level in a letter or two, so the icon says where it stands without a word. */
|
|
27
|
+
const PIP = { auto: 'A', low: 'L', medium: 'M', high: 'H', xhigh: 'XH', max: 'MAX' };
|
|
28
|
+
const pip = (id, label) => PIP[id] ?? label.slice(0, 1).toUpperCase();
|
|
29
|
+
export function Dial({ effort, size = 36, disabled = false }) {
|
|
30
|
+
const { t, dir } = useI18n();
|
|
31
|
+
const [open, setOpen] = useState(false);
|
|
32
|
+
// The level under the finger while it is held, as a place in the list.
|
|
33
|
+
const [held, setHeld] = useState(null);
|
|
34
|
+
const press = useRef(null);
|
|
35
|
+
const index = Math.max(0, effort.items.findIndex((e) => e.id === effort.value));
|
|
36
|
+
const now = effort.items[index] ?? effort.items[0];
|
|
37
|
+
const shown = held === null ? now : (effort.items[held] ?? now);
|
|
38
|
+
const flip = dir === 'rtl' ? -1 : 1;
|
|
39
|
+
const clamp = (i) => Math.max(0, Math.min(effort.items.length - 1, i));
|
|
40
|
+
const go = (i) => {
|
|
41
|
+
const next = effort.items[clamp(i)];
|
|
42
|
+
if (next && next.id !== effort.value)
|
|
43
|
+
effort.set(next.id);
|
|
44
|
+
};
|
|
45
|
+
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, allowFlip: true, placement: "top-end", children: [_jsx(PopoverAnchor, { asChild: true, children: _jsxs(XStack, { position: "relative", shrink: 0, "data-slot": "dial", children: [_jsxs(XStack, { render: "button", "data-slot": "dial-button", "aria-label": t('Effort: {level}', { level: t(now.label) }), "aria-haspopup": "listbox", "aria-expanded": open, "aria-disabled": disabled || undefined, tabIndex: disabled ? -1 : 0, width: size, height: size, rounded: 999, items: "center", justify: "center", shrink: 0, position: "relative", cursor: disabled ? 'default' : 'ew-resize', opacity: disabled ? 0.5 : 1, bg: open || held !== null ? '$hover' : 'transparent', hoverStyle: disabled ? undefined : { bg: '$hover' }, focusVisibleStyle: RING,
|
|
46
|
+
// inline-style: the page must not scroll or select under a drag along the icon.
|
|
47
|
+
style: { touchAction: 'none', userSelect: 'none' }, onPointerDown: (e) => {
|
|
48
|
+
if (disabled)
|
|
49
|
+
return;
|
|
50
|
+
press.current = { x: e.clientX, at: index, moved: false };
|
|
51
|
+
e.currentTarget?.setPointerCapture?.(e.pointerId);
|
|
52
|
+
}, onPointerMove: (e) => {
|
|
53
|
+
const p = press.current;
|
|
54
|
+
if (!p)
|
|
55
|
+
return;
|
|
56
|
+
const dx = (e.clientX - p.x) * flip;
|
|
57
|
+
if (Math.abs(dx) > 4)
|
|
58
|
+
p.moved = true;
|
|
59
|
+
if (p.moved)
|
|
60
|
+
setHeld(clamp(p.at + Math.round(dx / STEP)));
|
|
61
|
+
}, onPointerUp: (e) => {
|
|
62
|
+
const p = press.current;
|
|
63
|
+
press.current = null;
|
|
64
|
+
e.currentTarget?.releasePointerCapture?.(e.pointerId);
|
|
65
|
+
if (!p)
|
|
66
|
+
return;
|
|
67
|
+
if (p.moved) {
|
|
68
|
+
go(held ?? p.at);
|
|
69
|
+
setHeld(null);
|
|
70
|
+
}
|
|
71
|
+
else
|
|
72
|
+
setOpen((o) => !o);
|
|
73
|
+
}, onPointerCancel: () => {
|
|
74
|
+
press.current = null;
|
|
75
|
+
setHeld(null);
|
|
76
|
+
}, onKeyDown: (e) => {
|
|
77
|
+
if (disabled)
|
|
78
|
+
return;
|
|
79
|
+
const key = e?.key;
|
|
80
|
+
const step = key === 'ArrowRight' || key === 'ArrowUp' ? flip : key === 'ArrowLeft' || key === 'ArrowDown' ? -flip : 0;
|
|
81
|
+
if (step) {
|
|
82
|
+
e.preventDefault?.();
|
|
83
|
+
go(index + step);
|
|
84
|
+
}
|
|
85
|
+
else if (key === 'Enter' || key === ' ') {
|
|
86
|
+
e.preventDefault?.();
|
|
87
|
+
setOpen((o) => !o);
|
|
88
|
+
}
|
|
89
|
+
}, children: [_jsx(Gauge, { size: 18, color: "var(--foreground)", "aria-hidden": true }), _jsx(SizableText, { "data-slot": "dial-pip", "aria-hidden": true, position: "absolute", b: 3, insetInlineEnd: 2, fontSize: 9, lineHeight: 10, fontWeight: "700", color: "$ink", px: 2, rounded: 4, bg: "$background", children: pip(shown.id, t(shown.label)) })] }), held !== null ? (_jsx(XStack, { "data-slot": "dial-tip", role: "status", position: "absolute", b: size + 6, self: "center", px: 8, py: 3, rounded: 6, bg: "$ink", pointerEvents: "none", style: { whiteSpace: 'nowrap' }, children: _jsx(SizableText, { fontSize: 12, color: "$background", children: t(shown.label) }) })) : null] }) }), _jsx(PopoverContent, { solid: true, p: 6, width: 288, maxW: "calc(100vw - 24px)", children: _jsx(Choices, { title: t('Effort'), items: effort.items, value: effort.value, onPick: (id) => {
|
|
90
|
+
effort.set(id);
|
|
91
|
+
setOpen(false);
|
|
92
|
+
} }) })] }));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=Dial.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dial.js","sourceRoot":"","sources":["../../src/chat/Dial.tsx"],"names":[],"mappings":"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"}
|