@gojargo/jargo-elements 0.1.0
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/LICENSE +24 -0
- package/README.md +80 -0
- package/dist/chunk-JTFSFMFL.js +341 -0
- package/dist/chunk-JTFSFMFL.js.map +1 -0
- package/dist/define.cjs +325 -0
- package/dist/define.cjs.map +1 -0
- package/dist/define.d.cts +2 -0
- package/dist/define.d.ts +2 -0
- package/dist/define.js +7 -0
- package/dist/define.js.map +1 -0
- package/dist/index.cjs +372 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +103 -0
- package/dist/index.d.ts +103 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
package/dist/define.cjs
ADDED
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// src/index.ts
|
|
4
|
+
var import_jargo_ui = require("@gojargo/jargo-ui");
|
|
5
|
+
|
|
6
|
+
// src/components.ts
|
|
7
|
+
var import_jargo_client_js = require("@gojargo/jargo-client-js");
|
|
8
|
+
|
|
9
|
+
// src/client-registry.ts
|
|
10
|
+
var current = null;
|
|
11
|
+
var subscribers = /* @__PURE__ */ new Set();
|
|
12
|
+
function getJargoClient() {
|
|
13
|
+
return current;
|
|
14
|
+
}
|
|
15
|
+
function subscribeJargoClient(fn) {
|
|
16
|
+
subscribers.add(fn);
|
|
17
|
+
return () => subscribers.delete(fn);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// src/JargoClientElement.ts
|
|
21
|
+
var JargoClientElement = class extends HTMLElement {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
/** The bound client, available to subclasses in {@link bind}/{@link render}. */
|
|
25
|
+
this.jargo = null;
|
|
26
|
+
this.clientOverride = null;
|
|
27
|
+
this.offs = [];
|
|
28
|
+
}
|
|
29
|
+
/** Set a specific client, overriding the global {@link setJargoClient} registry. */
|
|
30
|
+
set client(client) {
|
|
31
|
+
this.clientOverride = client;
|
|
32
|
+
this.rebind();
|
|
33
|
+
}
|
|
34
|
+
get client() {
|
|
35
|
+
return this.clientOverride ?? getJargoClient();
|
|
36
|
+
}
|
|
37
|
+
connectedCallback() {
|
|
38
|
+
this.offRegistry = subscribeJargoClient(() => {
|
|
39
|
+
if (!this.clientOverride) this.rebind();
|
|
40
|
+
});
|
|
41
|
+
this.rebind();
|
|
42
|
+
}
|
|
43
|
+
disconnectedCallback() {
|
|
44
|
+
this.offRegistry?.();
|
|
45
|
+
this.teardown();
|
|
46
|
+
}
|
|
47
|
+
attributeChangedCallback() {
|
|
48
|
+
this.render();
|
|
49
|
+
}
|
|
50
|
+
/** Track a cleanup (e.g. an event unsubscribe) tied to the current binding. */
|
|
51
|
+
track(off) {
|
|
52
|
+
this.offs.push(off);
|
|
53
|
+
}
|
|
54
|
+
rebind() {
|
|
55
|
+
this.teardown();
|
|
56
|
+
this.jargo = this.client;
|
|
57
|
+
if (this.jargo) this.bind(this.jargo);
|
|
58
|
+
this.render();
|
|
59
|
+
}
|
|
60
|
+
teardown() {
|
|
61
|
+
this.offs.forEach((off) => off());
|
|
62
|
+
this.offs = [];
|
|
63
|
+
}
|
|
64
|
+
/** Subscribe to client events here via {@link track}; called on each (re)bind. */
|
|
65
|
+
bind(_client) {
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
function escapeHtml(s) {
|
|
69
|
+
return s.replace(
|
|
70
|
+
/[&<>]/g,
|
|
71
|
+
(c) => ({ "&": "&", "<": "<", ">": ">" })[c]
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
function micIcon(muted) {
|
|
75
|
+
return `<svg class="jargo-mic-icon" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="3" width="6" height="11" rx="3"/><path d="M5 11a7 7 0 0 0 14 0"/><line x1="12" y1="18" x2="12" y2="21"/>${muted ? '<line x1="3" y1="3" x2="21" y2="21"/>' : ""}</svg>`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// src/components.ts
|
|
79
|
+
var isConnected = (s) => s === "connected" || s === "ready";
|
|
80
|
+
var JargoConnectButtonElement = class extends JargoClientElement {
|
|
81
|
+
constructor() {
|
|
82
|
+
super(...arguments);
|
|
83
|
+
this.state = "disconnected";
|
|
84
|
+
}
|
|
85
|
+
bind(client) {
|
|
86
|
+
this.state = client.state;
|
|
87
|
+
this.track(
|
|
88
|
+
client.on("transportStateChanged", (s) => {
|
|
89
|
+
this.state = s;
|
|
90
|
+
this.render();
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
render() {
|
|
95
|
+
const conn = isConnected(this.state);
|
|
96
|
+
const connecting = this.state === "connecting";
|
|
97
|
+
const label = conn ? this.getAttribute("label-connected") ?? "End conversation" : connecting ? this.getAttribute("label-connecting") ?? "Connecting\u2026" : this.getAttribute("label-idle") ?? "Start conversation";
|
|
98
|
+
this.innerHTML = `<button class="jargo-btn ${conn ? "jargo-btn--danger" : "jargo-btn--primary"}" ${connecting ? "disabled aria-busy='true'" : ""}>${connecting ? '<span class="jargo-spinner"></span>' : ""}${escapeHtml(label)}</button>`;
|
|
99
|
+
const btn = this.querySelector("button");
|
|
100
|
+
if (btn) {
|
|
101
|
+
btn.onclick = () => {
|
|
102
|
+
const c = this.jargo;
|
|
103
|
+
if (!c) return;
|
|
104
|
+
if (isConnected(c.state)) c.disconnect();
|
|
105
|
+
else void c.connect().catch(() => {
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
JargoConnectButtonElement.observedAttributes = [
|
|
112
|
+
"label-idle",
|
|
113
|
+
"label-connecting",
|
|
114
|
+
"label-connected"
|
|
115
|
+
];
|
|
116
|
+
var JargoMicButtonElement = class extends JargoClientElement {
|
|
117
|
+
constructor() {
|
|
118
|
+
super(...arguments);
|
|
119
|
+
this.state = "disconnected";
|
|
120
|
+
this.enabled = true;
|
|
121
|
+
}
|
|
122
|
+
bind(client) {
|
|
123
|
+
this.state = client.state;
|
|
124
|
+
this.enabled = client.micEnabled;
|
|
125
|
+
this.track(
|
|
126
|
+
client.on("transportStateChanged", (s) => {
|
|
127
|
+
this.state = s;
|
|
128
|
+
this.enabled = client.micEnabled;
|
|
129
|
+
this.render();
|
|
130
|
+
})
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
render() {
|
|
134
|
+
const conn = isConnected(this.state);
|
|
135
|
+
const label = this.enabled ? this.getAttribute("label-mute") ?? "Mute" : this.getAttribute("label-unmute") ?? "Unmute";
|
|
136
|
+
this.innerHTML = `<button class="jargo-btn jargo-btn--ghost" ${conn ? "" : "disabled"} aria-pressed="${!this.enabled}" data-muted="${!this.enabled}">${micIcon(
|
|
137
|
+
!this.enabled
|
|
138
|
+
)}${escapeHtml(label)}</button>`;
|
|
139
|
+
const btn = this.querySelector("button");
|
|
140
|
+
if (btn) {
|
|
141
|
+
btn.onclick = () => {
|
|
142
|
+
const c = this.jargo;
|
|
143
|
+
if (!c) return;
|
|
144
|
+
this.enabled = c.toggleMic();
|
|
145
|
+
this.render();
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
JargoMicButtonElement.observedAttributes = ["label-mute", "label-unmute"];
|
|
151
|
+
var STATUS_LABELS = {
|
|
152
|
+
disconnected: "Offline",
|
|
153
|
+
connecting: "Connecting\u2026",
|
|
154
|
+
connected: "Connected",
|
|
155
|
+
ready: "Live",
|
|
156
|
+
error: "Error"
|
|
157
|
+
};
|
|
158
|
+
var JargoStatusElement = class extends JargoClientElement {
|
|
159
|
+
constructor() {
|
|
160
|
+
super(...arguments);
|
|
161
|
+
this.state = "disconnected";
|
|
162
|
+
}
|
|
163
|
+
bind(client) {
|
|
164
|
+
this.state = client.state;
|
|
165
|
+
this.track(
|
|
166
|
+
client.on("transportStateChanged", (s) => {
|
|
167
|
+
this.state = s;
|
|
168
|
+
this.render();
|
|
169
|
+
})
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
render() {
|
|
173
|
+
const label = this.getAttribute(`label-${this.state}`) ?? STATUS_LABELS[this.state];
|
|
174
|
+
this.innerHTML = `<span class="jargo-status jargo-status--${this.state}" role="status"><span class="jargo-status__dot"></span>${escapeHtml(
|
|
175
|
+
label
|
|
176
|
+
)}</span>`;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
JargoStatusElement.observedAttributes = [
|
|
180
|
+
"label-disconnected",
|
|
181
|
+
"label-connecting",
|
|
182
|
+
"label-connected",
|
|
183
|
+
"label-ready",
|
|
184
|
+
"label-error"
|
|
185
|
+
];
|
|
186
|
+
var JargoTranscriptElement = class extends JargoClientElement {
|
|
187
|
+
constructor() {
|
|
188
|
+
super();
|
|
189
|
+
this.tracker = null;
|
|
190
|
+
this.messages = [];
|
|
191
|
+
this.style.display = "block";
|
|
192
|
+
}
|
|
193
|
+
bind(client) {
|
|
194
|
+
const tracker = new import_jargo_client_js.TranscriptTracker(client);
|
|
195
|
+
this.tracker = tracker;
|
|
196
|
+
this.messages = tracker.getMessages();
|
|
197
|
+
this.track(
|
|
198
|
+
tracker.onChange((m) => {
|
|
199
|
+
this.messages = m;
|
|
200
|
+
this.render();
|
|
201
|
+
})
|
|
202
|
+
);
|
|
203
|
+
this.track(() => {
|
|
204
|
+
tracker.destroy();
|
|
205
|
+
this.tracker = null;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
render() {
|
|
209
|
+
const empty = this.getAttribute("empty-label") ?? "No messages yet.";
|
|
210
|
+
const body = this.messages.length ? this.messages.map(
|
|
211
|
+
(m) => `<div class="jargo-msg jargo-msg--${m.role}" data-streaming="${!m.final}"><span class="jargo-msg__role">${m.role === "user" ? "You" : "Assistant"}</span><span class="jargo-msg__text">${escapeHtml(m.text)}</span></div>`
|
|
212
|
+
).join("") : `<p class="jargo-transcript__empty">${escapeHtml(empty)}</p>`;
|
|
213
|
+
this.innerHTML = `<div class="jargo-transcript" role="log" aria-live="polite" aria-relevant="additions text" style="height:100%">${body}</div>`;
|
|
214
|
+
const list = this.querySelector(".jargo-transcript");
|
|
215
|
+
if (list) list.scrollTop = list.scrollHeight;
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
JargoTranscriptElement.observedAttributes = ["empty-label"];
|
|
219
|
+
|
|
220
|
+
// src/index.ts
|
|
221
|
+
var JargoOrbElement = class extends HTMLElement {
|
|
222
|
+
constructor() {
|
|
223
|
+
super();
|
|
224
|
+
this.orb = null;
|
|
225
|
+
const root = this.attachShadow({ mode: "open" });
|
|
226
|
+
const style = document.createElement("style");
|
|
227
|
+
style.textContent = ":host{display:block;width:220px;height:220px}canvas{display:block;width:100%;height:100%}";
|
|
228
|
+
this.canvas = document.createElement("canvas");
|
|
229
|
+
root.append(style, this.canvas);
|
|
230
|
+
}
|
|
231
|
+
connectedCallback() {
|
|
232
|
+
if (this.orb) return;
|
|
233
|
+
this.orb = new import_jargo_ui.Orb(this.canvas, this.readOptions());
|
|
234
|
+
const level = this.getAttribute("level");
|
|
235
|
+
if (level !== null) this.orb.setLevel(parseFloat(level));
|
|
236
|
+
if (!this.hasAttribute("paused")) this.orb.start();
|
|
237
|
+
}
|
|
238
|
+
disconnectedCallback() {
|
|
239
|
+
this.orb?.destroy();
|
|
240
|
+
this.orb = null;
|
|
241
|
+
}
|
|
242
|
+
attributeChangedCallback(name, _old, value) {
|
|
243
|
+
const orb = this.orb;
|
|
244
|
+
if (!orb) return;
|
|
245
|
+
if (name === "level") {
|
|
246
|
+
if (value !== null) orb.setLevel(parseFloat(value));
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
if (name === "paused") {
|
|
250
|
+
if (value !== null) orb.stop();
|
|
251
|
+
else orb.start();
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
orb.setOptions(this.readOptions());
|
|
255
|
+
}
|
|
256
|
+
/** Drive the orb from a MediaStream (e.g. a bot's remote audio); null detaches. */
|
|
257
|
+
attachStream(stream) {
|
|
258
|
+
this.orb?.attachStream(stream);
|
|
259
|
+
}
|
|
260
|
+
/** Manually set the drive level (0..1). */
|
|
261
|
+
setLevel(level) {
|
|
262
|
+
this.orb?.setLevel(level);
|
|
263
|
+
}
|
|
264
|
+
readOptions() {
|
|
265
|
+
const o = {};
|
|
266
|
+
const num = (attr, key) => {
|
|
267
|
+
const v = this.getAttribute(attr);
|
|
268
|
+
if (v !== null && v !== "") o[key] = parseFloat(v);
|
|
269
|
+
};
|
|
270
|
+
num("rings", "rings");
|
|
271
|
+
num("radius", "radius");
|
|
272
|
+
num("inner-scale", "innerScale");
|
|
273
|
+
num("line-width", "lineWidth");
|
|
274
|
+
num("speed", "speed");
|
|
275
|
+
num("idle-amplitude", "idleAmplitude");
|
|
276
|
+
num("reactivity", "reactivity");
|
|
277
|
+
num("glow", "glow");
|
|
278
|
+
const core = this.getAttribute("core");
|
|
279
|
+
if (core !== null) o.core = core !== "false";
|
|
280
|
+
const blend = this.getAttribute("blend");
|
|
281
|
+
if (blend === "lighter" || blend === "source-over") o.blend = blend;
|
|
282
|
+
const bg = this.getAttribute("background");
|
|
283
|
+
if (bg !== null) o.background = bg;
|
|
284
|
+
const colors = this.getAttribute("colors");
|
|
285
|
+
if (colors) {
|
|
286
|
+
o.colors = import_jargo_ui.OrbPalettes[colors] ?? colors.split(/[,\s]+/).filter(Boolean);
|
|
287
|
+
}
|
|
288
|
+
return o;
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
JargoOrbElement.observedAttributes = [
|
|
292
|
+
"rings",
|
|
293
|
+
"radius",
|
|
294
|
+
"inner-scale",
|
|
295
|
+
"line-width",
|
|
296
|
+
"speed",
|
|
297
|
+
"idle-amplitude",
|
|
298
|
+
"reactivity",
|
|
299
|
+
"glow",
|
|
300
|
+
"core",
|
|
301
|
+
"blend",
|
|
302
|
+
"background",
|
|
303
|
+
"colors",
|
|
304
|
+
"level",
|
|
305
|
+
"paused"
|
|
306
|
+
];
|
|
307
|
+
function define(tag, ctor) {
|
|
308
|
+
if (typeof customElements !== "undefined" && !customElements.get(tag)) {
|
|
309
|
+
customElements.define(tag, ctor);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
function defineJargoOrb(tag = "jargo-orb") {
|
|
313
|
+
define(tag, JargoOrbElement);
|
|
314
|
+
}
|
|
315
|
+
function defineJargoElements() {
|
|
316
|
+
defineJargoOrb();
|
|
317
|
+
define("jargo-connect-button", JargoConnectButtonElement);
|
|
318
|
+
define("jargo-mic-button", JargoMicButtonElement);
|
|
319
|
+
define("jargo-status", JargoStatusElement);
|
|
320
|
+
define("jargo-transcript", JargoTranscriptElement);
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
// src/define.ts
|
|
324
|
+
defineJargoElements();
|
|
325
|
+
//# sourceMappingURL=define.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components.ts","../src/client-registry.ts","../src/JargoClientElement.ts","../src/define.ts"],"sourcesContent":["// @gojargo/jargo-elements — native web components for jargo. The visual\n// <jargo-orb> is built on @gojargo/jargo-ui; the client-driven components\n// (<jargo-connect-button>, <jargo-mic-button>, <jargo-status>,\n// <jargo-transcript>) read a client set via setJargoClient(). Style them all\n// by importing \"@gojargo/jargo-ui/theme.css\" once.\n//\n// import \"@gojargo/jargo-elements/define\";\n// import \"@gojargo/jargo-ui/theme.css\";\n// setJargoClient(new JargoClient({ baseUrl }));\n// // <jargo-orb colors=\"aurora\"></jargo-orb>\n// // <jargo-connect-button></jargo-connect-button>\n\nimport {\n Orb,\n OrbPalettes,\n type OrbOptions,\n type OrbPaletteName,\n} from \"@gojargo/jargo-ui\";\nimport {\n JargoConnectButtonElement,\n JargoMicButtonElement,\n JargoStatusElement,\n JargoTranscriptElement,\n} from \"./components\";\n\nexport { setJargoClient, getJargoClient } from \"./client-registry\";\nexport { JargoClientElement } from \"./JargoClientElement\";\nexport {\n JargoConnectButtonElement,\n JargoMicButtonElement,\n JargoStatusElement,\n JargoTranscriptElement,\n} from \"./components\";\n\n// OrbOptions keys that take a number, mapped from their kebab-case attributes.\ntype NumKey =\n | \"rings\"\n | \"radius\"\n | \"innerScale\"\n | \"lineWidth\"\n | \"speed\"\n | \"idleAmplitude\"\n | \"reactivity\"\n | \"glow\"\n | \"maxDpr\";\n\n/**\n * `<jargo-orb>` — the Orb as a custom element. Size it with CSS (defaults to\n * 220×220). Attributes mirror the Orb options (kebab-case): `rings`, `radius`,\n * `inner-scale`, `line-width`, `speed`, `idle-amplitude`, `reactivity`, `glow`,\n * `core`, `blend`, `background`, plus `colors` (a palette name like `aurora`,\n * or a comma/space-separated list of CSS colors), `level` (0..1), and `paused`.\n *\n * Drive it from live audio with the {@link attachStream} method.\n */\nexport class JargoOrbElement extends HTMLElement {\n static readonly observedAttributes = [\n \"rings\",\n \"radius\",\n \"inner-scale\",\n \"line-width\",\n \"speed\",\n \"idle-amplitude\",\n \"reactivity\",\n \"glow\",\n \"core\",\n \"blend\",\n \"background\",\n \"colors\",\n \"level\",\n \"paused\",\n ];\n\n private orb: Orb | null = null;\n private readonly canvas: HTMLCanvasElement;\n\n constructor() {\n super();\n const root = this.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent =\n \":host{display:block;width:220px;height:220px}canvas{display:block;width:100%;height:100%}\";\n this.canvas = document.createElement(\"canvas\");\n root.append(style, this.canvas);\n }\n\n connectedCallback(): void {\n if (this.orb) return;\n this.orb = new Orb(this.canvas, this.readOptions());\n const level = this.getAttribute(\"level\");\n if (level !== null) this.orb.setLevel(parseFloat(level));\n if (!this.hasAttribute(\"paused\")) this.orb.start();\n }\n\n disconnectedCallback(): void {\n this.orb?.destroy();\n this.orb = null;\n }\n\n attributeChangedCallback(\n name: string,\n _old: string | null,\n value: string | null,\n ): void {\n const orb = this.orb;\n if (!orb) return;\n if (name === \"level\") {\n if (value !== null) orb.setLevel(parseFloat(value));\n return;\n }\n if (name === \"paused\") {\n if (value !== null) orb.stop();\n else orb.start();\n return;\n }\n orb.setOptions(this.readOptions());\n }\n\n /** Drive the orb from a MediaStream (e.g. a bot's remote audio); null detaches. */\n attachStream(stream: MediaStream | null): void {\n this.orb?.attachStream(stream);\n }\n\n /** Manually set the drive level (0..1). */\n setLevel(level: number): void {\n this.orb?.setLevel(level);\n }\n\n private readOptions(): OrbOptions {\n const o: OrbOptions = {};\n const num = (attr: string, key: NumKey) => {\n const v = this.getAttribute(attr);\n if (v !== null && v !== \"\") o[key] = parseFloat(v);\n };\n num(\"rings\", \"rings\");\n num(\"radius\", \"radius\");\n num(\"inner-scale\", \"innerScale\");\n num(\"line-width\", \"lineWidth\");\n num(\"speed\", \"speed\");\n num(\"idle-amplitude\", \"idleAmplitude\");\n num(\"reactivity\", \"reactivity\");\n num(\"glow\", \"glow\");\n\n const core = this.getAttribute(\"core\");\n if (core !== null) o.core = core !== \"false\";\n const blend = this.getAttribute(\"blend\");\n if (blend === \"lighter\" || blend === \"source-over\") o.blend = blend;\n const bg = this.getAttribute(\"background\");\n if (bg !== null) o.background = bg;\n\n const colors = this.getAttribute(\"colors\");\n if (colors) {\n o.colors =\n (OrbPalettes as Record<string, string[]>)[colors] ??\n colors.split(/[,\\s]+/).filter(Boolean);\n }\n return o;\n }\n}\n\nfunction define(tag: string, ctor: CustomElementConstructor): void {\n if (typeof customElements !== \"undefined\" && !customElements.get(tag)) {\n customElements.define(tag, ctor);\n }\n}\n\n/** Register {@link JargoOrbElement} as `<jargo-orb>` (or a custom tag). */\nexport function defineJargoOrb(tag = \"jargo-orb\"): void {\n define(tag, JargoOrbElement);\n}\n\n/**\n * Register all jargo web components: `<jargo-orb>`, `<jargo-connect-button>`,\n * `<jargo-mic-button>`, `<jargo-status>`, `<jargo-transcript>`.\n */\nexport function defineJargoElements(): void {\n defineJargoOrb();\n define(\"jargo-connect-button\", JargoConnectButtonElement);\n define(\"jargo-mic-button\", JargoMicButtonElement);\n define(\"jargo-status\", JargoStatusElement);\n define(\"jargo-transcript\", JargoTranscriptElement);\n}\n\nexport { OrbPalettes };\nexport type { OrbOptions, OrbPaletteName };\n","import type { JargoClient, TransportState } from \"@gojargo/jargo-client-js\";\nimport { TranscriptTracker, type TranscriptMessage } from \"@gojargo/jargo-client-js\";\nimport { JargoClientElement, escapeHtml, micIcon } from \"./JargoClientElement\";\n\nconst isConnected = (s: TransportState) => s === \"connected\" || s === \"ready\";\n\n/** `<jargo-connect-button>` — start/end the conversation, following the state. */\nexport class JargoConnectButtonElement extends JargoClientElement {\n static readonly observedAttributes = [\n \"label-idle\",\n \"label-connecting\",\n \"label-connected\",\n ];\n private state: TransportState = \"disconnected\";\n\n protected bind(client: JargoClient): void {\n this.state = client.state;\n this.track(\n client.on(\"transportStateChanged\", (s) => {\n this.state = s;\n this.render();\n }),\n );\n }\n\n protected render(): void {\n const conn = isConnected(this.state);\n const connecting = this.state === \"connecting\";\n const label = conn\n ? (this.getAttribute(\"label-connected\") ?? \"End conversation\")\n : connecting\n ? (this.getAttribute(\"label-connecting\") ?? \"Connecting…\")\n : (this.getAttribute(\"label-idle\") ?? \"Start conversation\");\n this.innerHTML = `<button class=\"jargo-btn ${\n conn ? \"jargo-btn--danger\" : \"jargo-btn--primary\"\n }\" ${connecting ? \"disabled aria-busy='true'\" : \"\"}>${\n connecting ? '<span class=\"jargo-spinner\"></span>' : \"\"\n }${escapeHtml(label)}</button>`;\n const btn = this.querySelector(\"button\");\n if (btn) {\n btn.onclick = () => {\n const c = this.jargo;\n if (!c) return;\n if (isConnected(c.state)) c.disconnect();\n else void c.connect().catch(() => {});\n };\n }\n }\n}\n\n/** `<jargo-mic-button>` — mute/unmute the microphone. */\nexport class JargoMicButtonElement extends JargoClientElement {\n static readonly observedAttributes = [\"label-mute\", \"label-unmute\"];\n private state: TransportState = \"disconnected\";\n private enabled = true;\n\n protected bind(client: JargoClient): void {\n this.state = client.state;\n this.enabled = client.micEnabled;\n this.track(\n client.on(\"transportStateChanged\", (s) => {\n this.state = s;\n this.enabled = client.micEnabled;\n this.render();\n }),\n );\n }\n\n protected render(): void {\n const conn = isConnected(this.state);\n const label = this.enabled\n ? (this.getAttribute(\"label-mute\") ?? \"Mute\")\n : (this.getAttribute(\"label-unmute\") ?? \"Unmute\");\n this.innerHTML = `<button class=\"jargo-btn jargo-btn--ghost\" ${\n conn ? \"\" : \"disabled\"\n } aria-pressed=\"${!this.enabled}\" data-muted=\"${!this.enabled}\">${micIcon(\n !this.enabled,\n )}${escapeHtml(label)}</button>`;\n const btn = this.querySelector(\"button\");\n if (btn) {\n btn.onclick = () => {\n const c = this.jargo;\n if (!c) return;\n this.enabled = c.toggleMic();\n this.render();\n };\n }\n }\n}\n\nconst STATUS_LABELS: Record<TransportState, string> = {\n disconnected: \"Offline\",\n connecting: \"Connecting…\",\n connected: \"Connected\",\n ready: \"Live\",\n error: \"Error\",\n};\n\n/** `<jargo-status>` — a badge reflecting the connection state. */\nexport class JargoStatusElement extends JargoClientElement {\n static readonly observedAttributes = [\n \"label-disconnected\",\n \"label-connecting\",\n \"label-connected\",\n \"label-ready\",\n \"label-error\",\n ];\n private state: TransportState = \"disconnected\";\n\n protected bind(client: JargoClient): void {\n this.state = client.state;\n this.track(\n client.on(\"transportStateChanged\", (s) => {\n this.state = s;\n this.render();\n }),\n );\n }\n\n protected render(): void {\n const label =\n this.getAttribute(`label-${this.state}`) ?? STATUS_LABELS[this.state];\n this.innerHTML = `<span class=\"jargo-status jargo-status--${this.state}\" role=\"status\"><span class=\"jargo-status__dot\"></span>${escapeHtml(\n label,\n )}</span>`;\n }\n}\n\n/**\n * `<jargo-transcript>` — an auto-scrolling message list built from the shared\n * {@link TranscriptTracker}. Size it with CSS (defaults to `display:block`).\n */\nexport class JargoTranscriptElement extends JargoClientElement {\n static readonly observedAttributes = [\"empty-label\"];\n private tracker: TranscriptTracker | null = null;\n private messages: TranscriptMessage[] = [];\n\n constructor() {\n super();\n this.style.display = \"block\";\n }\n\n protected bind(client: JargoClient): void {\n const tracker = new TranscriptTracker(client);\n this.tracker = tracker;\n this.messages = tracker.getMessages();\n this.track(\n tracker.onChange((m) => {\n this.messages = m;\n this.render();\n }),\n );\n this.track(() => {\n tracker.destroy();\n this.tracker = null;\n });\n }\n\n protected render(): void {\n const empty = this.getAttribute(\"empty-label\") ?? \"No messages yet.\";\n const body = this.messages.length\n ? this.messages\n .map(\n (m) =>\n `<div class=\"jargo-msg jargo-msg--${m.role}\" data-streaming=\"${!m.final}\"><span class=\"jargo-msg__role\">${\n m.role === \"user\" ? \"You\" : \"Assistant\"\n }</span><span class=\"jargo-msg__text\">${escapeHtml(m.text)}</span></div>`,\n )\n .join(\"\")\n : `<p class=\"jargo-transcript__empty\">${escapeHtml(empty)}</p>`;\n this.innerHTML = `<div class=\"jargo-transcript\" role=\"log\" aria-live=\"polite\" aria-relevant=\"additions text\" style=\"height:100%\">${body}</div>`;\n const list = this.querySelector<HTMLElement>(\".jargo-transcript\");\n if (list) list.scrollTop = list.scrollHeight;\n }\n}\n","// A tiny registry so the client-driven web components can find a JargoClient\n// without a framework's context. Set one client for the page:\n//\n// import { setJargoClient } from \"@gojargo/jargo-elements\";\n// setJargoClient(new JargoClient({ baseUrl }));\n//\n// Individual elements can override it by setting their `.client` property.\n\nimport type { JargoClient } from \"@gojargo/jargo-client-js\";\n\nlet current: JargoClient | null = null;\nconst subscribers = new Set<(client: JargoClient | null) => void>();\n\n/** Set (or clear) the client the jargo web components use by default. */\nexport function setJargoClient(client: JargoClient | null): void {\n current = client;\n subscribers.forEach((fn) => fn(client));\n}\n\n/** The current default client, if any. */\nexport function getJargoClient(): JargoClient | null {\n return current;\n}\n\n/** Subscribe to default-client changes. Returns an unsubscribe function. */\nexport function subscribeJargoClient(\n fn: (client: JargoClient | null) => void,\n): () => void {\n subscribers.add(fn);\n return () => subscribers.delete(fn);\n}\n","import type { JargoClient } from \"@gojargo/jargo-client-js\";\nimport { getJargoClient, subscribeJargoClient } from \"./client-registry\";\n\n/**\n * Base class for client-driven jargo web components. It resolves the client\n * (an explicit `.client` property, else the {@link setJargoClient} registry),\n * re-binds when it changes, and renders in light DOM so the app's\n * `@gojargo/jargo-ui/theme.css` styles apply.\n */\nexport abstract class JargoClientElement extends HTMLElement {\n /** The bound client, available to subclasses in {@link bind}/{@link render}. */\n protected jargo: JargoClient | null = null;\n\n private clientOverride: JargoClient | null = null;\n private offRegistry?: () => void;\n private offs: Array<() => void> = [];\n\n /** Set a specific client, overriding the global {@link setJargoClient} registry. */\n set client(client: JargoClient | null) {\n this.clientOverride = client;\n this.rebind();\n }\n get client(): JargoClient | null {\n return this.clientOverride ?? getJargoClient();\n }\n\n connectedCallback(): void {\n this.offRegistry = subscribeJargoClient(() => {\n if (!this.clientOverride) this.rebind();\n });\n this.rebind();\n }\n\n disconnectedCallback(): void {\n this.offRegistry?.();\n this.teardown();\n }\n\n attributeChangedCallback(): void {\n this.render();\n }\n\n /** Track a cleanup (e.g. an event unsubscribe) tied to the current binding. */\n protected track(off: () => void): void {\n this.offs.push(off);\n }\n\n private rebind(): void {\n this.teardown();\n this.jargo = this.client;\n if (this.jargo) this.bind(this.jargo);\n this.render();\n }\n\n private teardown(): void {\n this.offs.forEach((off) => off());\n this.offs = [];\n }\n\n /** Subscribe to client events here via {@link track}; called on each (re)bind. */\n protected bind(_client: JargoClient): void {}\n\n /** Render the element's light-DOM markup; called on bind and attribute changes. */\n protected abstract render(): void;\n}\n\nexport function escapeHtml(s: string): string {\n return s.replace(\n /[&<>]/g,\n (c) => ({ \"&\": \"&\", \"<\": \"<\", \">\": \">\" })[c] as string,\n );\n}\n\nexport function micIcon(muted: boolean): string {\n return `<svg class=\"jargo-mic-icon\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"3\" width=\"6\" height=\"11\" rx=\"3\"/><path d=\"M5 11a7 7 0 0 0 14 0\"/><line x1=\"12\" y1=\"18\" x2=\"12\" y2=\"21\"/>${\n muted ? '<line x1=\"3\" y1=\"3\" x2=\"21\" y2=\"21\"/>' : \"\"\n }</svg>`;\n}\n","// Side-effect entry: importing this registers all jargo web components.\n// import \"@gojargo/jargo-elements/define\";\nimport { defineJargoElements } from \"./index\";\n\ndefineJargoElements();\n"],"mappings":"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","names":[]}
|
package/dist/define.d.ts
ADDED
package/dist/define.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/define.ts"],"sourcesContent":["// Side-effect entry: importing this registers all jargo web components.\n// import \"@gojargo/jargo-elements/define\";\nimport { defineJargoElements } from \"./index\";\n\ndefineJargoElements();\n"],"mappings":";;;;;AAIA,oBAAoB;","names":[]}
|