@aparte/core 0.4.0-alpha.0 → 0.6.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/README.md +5 -2
- package/dist/client/aparte-client.d.ts +7 -1
- package/dist/client/aparte-client.d.ts.map +1 -1
- package/dist/components/bubble/aparte-chat-bubble.d.ts +15 -2
- package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-attachments.d.ts +3 -2
- package/dist/components/composer/aparte-composer-attachments.d.ts.map +1 -1
- package/dist/components/viewport/aparte-chat-viewport.d.ts +4 -2
- package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
- package/dist/config/aparte-config.d.ts +54 -5
- package/dist/config/aparte-config.d.ts.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/custom-elements.json +4501 -4310
- package/dist/host/aparte-chat-host.d.ts +11 -0
- package/dist/host/aparte-chat-host.d.ts.map +1 -1
- package/dist/{index-BBg6dsYx.js → index-Dn7TH14G.js} +137 -59
- package/dist/index-Dn7TH14G.js.map +1 -0
- package/dist/index.css +15 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +106 -48
- package/dist/index.js.map +1 -1
- package/dist/index.node.d.ts +1 -1
- package/dist/index.node.d.ts.map +1 -1
- package/dist/index.node.js +34 -32
- package/dist/index.node.js.map +1 -1
- package/dist/renderers/index.d.ts +1 -1
- package/dist/renderers/index.d.ts.map +1 -1
- package/dist/renderers/segment-renderers.d.ts +23 -0
- package/dist/renderers/segment-renderers.d.ts.map +1 -1
- package/dist/types/models.d.ts +56 -9
- package/dist/types/models.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/index-BBg6dsYx.js.map +0 -1
package/dist/index.css
CHANGED
|
@@ -822,10 +822,16 @@ aparte-chat-bubble {
|
|
|
822
822
|
border: var(--aparte-border-width, 1px) solid var(--aparte-attachment-chip-border, var(--aparte-border));
|
|
823
823
|
}
|
|
824
824
|
|
|
825
|
-
|
|
825
|
+
/* Only an image tile the app declared it can preview is a button — see
|
|
826
|
+
AparteConfig.setHostHandlers(). Undeclared, it is a picture, not a control. */
|
|
827
|
+
.aparte-thumb--image[role='button'] {
|
|
826
828
|
cursor: pointer;
|
|
827
829
|
}
|
|
828
830
|
|
|
831
|
+
.aparte-thumb--image[role='button']:focus-visible {
|
|
832
|
+
box-shadow: var(--aparte-focus-ring, 0 0 0 3px rgba(99, 102, 241, 0.15));
|
|
833
|
+
}
|
|
834
|
+
|
|
829
835
|
.aparte-thumb__img {
|
|
830
836
|
width: 100%;
|
|
831
837
|
height: 100%;
|
|
@@ -967,7 +973,14 @@ aparte-chat-bubble:last-of-type .aparte-message[data-role="assistant"]:not(.apar
|
|
|
967
973
|
gap: var(--aparte-branch-picker-gap, 4px);
|
|
968
974
|
}
|
|
969
975
|
|
|
970
|
-
/* [hidden] is overridden by display:flex — force it back
|
|
976
|
+
/* [hidden] is overridden by display:flex — force it back. The bar and the footer
|
|
977
|
+
hide themselves when they hold nothing (see _syncFooterVisibility): an empty
|
|
978
|
+
toolbar is announced to screen readers and reserves height for nothing. */
|
|
979
|
+
.aparte-action-bar[hidden],
|
|
980
|
+
.aparte-footer[hidden] {
|
|
981
|
+
display: none;
|
|
982
|
+
}
|
|
983
|
+
|
|
971
984
|
.aparte-branch-picker[hidden] {
|
|
972
985
|
display: none;
|
|
973
986
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export { AparteChatHost, type AparteChatHostBinding, type AparteChatHostOptions,
|
|
|
38
38
|
export { AparteStreamParser, parseMarkdownToSegments, deriveArtifactKind } from './parsers/index.js';
|
|
39
39
|
export type { AparteStreamParserOptions, AparteThinkingDelimiterPair, AparteParserState, AparteParserResult } from './parsers/index.js';
|
|
40
40
|
export { parseAparteEventStream } from './parsers/index.js';
|
|
41
|
-
export { AparteConfig, AparteConfigClass } from './config/index.js';
|
|
41
|
+
export { AparteConfig, AparteConfigClass, DEFAULT_BUBBLE_ACTIONS, DEFAULT_HOST_HANDLERS } from './config/index.js';
|
|
42
42
|
export { resolveConfig, attachConfig, detachConfig, runWithConfig, contextConfig, APARTE_HOST_ATTR } from './config/index.js';
|
|
43
43
|
export type { AparteMarkdownProvider, AparteStreamingMarkdownProvider, AparteStreamingMarkdownRenderer, AparteHighlightProvider, AparteSystemPromptVarsProvider, AparteSkeletonProvider, AparteSkeletonType, AparteLocale, AparteAction, AparteActionZone, AparteIconProvider, AparteIconName, AparteAvatarProvider, AparteStatusRenderer, AparteErrorRenderer, AparteAttachmentRenderer, AparteSiblingNavRenderer, AparteBubbleShellRenderer, AparteModelPreference, AparteModelPreferenceProvider, AparteArtifactPreviewBuilder, AparteSanitizer } from './config/index.js';
|
|
44
44
|
export { DEFAULT_ICON_FALLBACKS, DEFAULT_SKELETON_FALLBACKS, DEFAULT_LOCALE, defaultSanitizer, isSafeUrl } from './config/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { A, a, b, c, e, f, g, h, i, B, C, D, j, k, l, m, n, o,
|
|
1
|
+
import { R as resolveConfig, S as runWithConfig, F as getSegmentRenderer, U as installDefaultRenderersOnce, M as MessageRepository, G as isAwaitingReply, L as populateBubbleFromMessage, d as AparteConfig, r as buildElicitationPanel } from "./index-Dn7TH14G.js";
|
|
2
|
+
import { A, a, b, c, e, f, g, h, i, B, C, D, j, k, l, m, n, o, p, q, s, t, u, v, w, x, y, z, E, H, I, J, K, N, O, P, Q, T } from "./index-Dn7TH14G.js";
|
|
3
3
|
class AparteOption extends HTMLElement {
|
|
4
4
|
static get observedAttributes() {
|
|
5
5
|
return ["value", "disabled", "selected", "data-status"];
|
|
@@ -721,7 +721,13 @@ let _warnedNoRenderer = false;
|
|
|
721
721
|
function warnMissingRenderer(type) {
|
|
722
722
|
if (_warnedNoRenderer) return;
|
|
723
723
|
_warnedNoRenderer = true;
|
|
724
|
-
console.warn(`[aparte] No renderer for segment "${type}".
|
|
724
|
+
console.warn(`[aparte] No renderer for segment "${type}". Register one with registerSegmentRenderer({ type: '${type}', render }) from @aparte/core — see https://apartejs.dev/guides/customization/#custom-segment-types`);
|
|
725
|
+
}
|
|
726
|
+
function resolveSegmentRenderer(type) {
|
|
727
|
+
const renderer = getSegmentRenderer(type);
|
|
728
|
+
if (renderer) return renderer;
|
|
729
|
+
installDefaultRenderersOnce();
|
|
730
|
+
return getSegmentRenderer(type);
|
|
725
731
|
}
|
|
726
732
|
function segmentRenderResultToElement(result) {
|
|
727
733
|
if (result instanceof HTMLElement) return result;
|
|
@@ -736,6 +742,7 @@ class AparteChatBubble extends HTMLElement {
|
|
|
736
742
|
_attachmentsEl = null;
|
|
737
743
|
_actionBarEl = null;
|
|
738
744
|
_branchPickerEl = null;
|
|
745
|
+
_footerEl = null;
|
|
739
746
|
_content = "";
|
|
740
747
|
_streaming = false;
|
|
741
748
|
_segments = [];
|
|
@@ -886,8 +893,12 @@ class AparteChatBubble extends HTMLElement {
|
|
|
886
893
|
}
|
|
887
894
|
/**
|
|
888
895
|
* Set token usage + timing for this message (assistant only).
|
|
889
|
-
*
|
|
890
|
-
* the
|
|
896
|
+
*
|
|
897
|
+
* This is the *precondition* for the info ("i") action, not the trigger: the
|
|
898
|
+
* button appears only if the app also declared it wants it —
|
|
899
|
+
* `AparteConfig.setBubbleActions({ info: true })` — because the stats popover it
|
|
900
|
+
* opens (`aparte-message-info`) is the app's, and core has none. Without usage
|
|
901
|
+
* there is nothing to show, so the button never renders either way.
|
|
891
902
|
*/
|
|
892
903
|
setUsage(usage) {
|
|
893
904
|
this._usage = usage ?? null;
|
|
@@ -940,7 +951,7 @@ class AparteChatBubble extends HTMLElement {
|
|
|
940
951
|
console.warn(`[AparteChatBubble] _appendSegmentEl ABORT: _segmentsEl is null`);
|
|
941
952
|
return;
|
|
942
953
|
}
|
|
943
|
-
const renderer =
|
|
954
|
+
const renderer = resolveSegmentRenderer(segment.type);
|
|
944
955
|
if (renderer) {
|
|
945
956
|
const el = segmentRenderResultToElement(runWithConfig(this._cfg, () => renderer.render(segment)));
|
|
946
957
|
if (el) {
|
|
@@ -963,7 +974,7 @@ class AparteChatBubble extends HTMLElement {
|
|
|
963
974
|
this._renderSegments();
|
|
964
975
|
return;
|
|
965
976
|
}
|
|
966
|
-
const renderer =
|
|
977
|
+
const renderer = resolveSegmentRenderer(segment.type);
|
|
967
978
|
if (!renderer) return;
|
|
968
979
|
if (renderer.update) {
|
|
969
980
|
runWithConfig(this._cfg, () => renderer.update(el, segment));
|
|
@@ -1046,6 +1057,7 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1046
1057
|
this._attachmentsEl = this.querySelector(".aparte-attachments");
|
|
1047
1058
|
this._actionBarEl = this.querySelector(".aparte-action-bar");
|
|
1048
1059
|
this._branchPickerEl = this.querySelector(".aparte-branch-picker");
|
|
1060
|
+
this._footerEl = this.querySelector(".aparte-footer");
|
|
1049
1061
|
this._setupBranchPickerListeners();
|
|
1050
1062
|
this._updateActionBar();
|
|
1051
1063
|
this._renderAvatar();
|
|
@@ -1160,7 +1172,7 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1160
1172
|
if (!this._segmentsEl) return;
|
|
1161
1173
|
this._segmentsEl.innerHTML = "";
|
|
1162
1174
|
for (const segment of this._segments) {
|
|
1163
|
-
const renderer =
|
|
1175
|
+
const renderer = resolveSegmentRenderer(segment.type);
|
|
1164
1176
|
if (renderer) {
|
|
1165
1177
|
const el = segmentRenderResultToElement(runWithConfig(this._cfg, () => renderer.render(segment)));
|
|
1166
1178
|
if (el) {
|
|
@@ -1238,8 +1250,11 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1238
1250
|
}
|
|
1239
1251
|
return `<div class="aparte-thumb aparte-thumb--file" title="${name}"><span class="aparte-thumb__ext">${this._escapeHtml(this._fileExt(a2.name))}</span><span class="aparte-thumb__name">${name}</span></div>`;
|
|
1240
1252
|
}).join("");
|
|
1253
|
+
if (!this._cfg.getHostHandlers().attachmentPreview) return;
|
|
1241
1254
|
this._attachmentsEl.querySelectorAll(".aparte-thumb--image").forEach((tile) => {
|
|
1242
|
-
tile.
|
|
1255
|
+
tile.setAttribute("role", "button");
|
|
1256
|
+
tile.setAttribute("tabindex", "0");
|
|
1257
|
+
const open = () => {
|
|
1243
1258
|
const img = tile.querySelector(".aparte-thumb__img");
|
|
1244
1259
|
if (!img) return;
|
|
1245
1260
|
this.dispatchEvent(new CustomEvent("aparte-attachment-preview", {
|
|
@@ -1247,6 +1262,13 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1247
1262
|
composed: true,
|
|
1248
1263
|
detail: { url: img.src, name: tile.getAttribute("title") ?? "" }
|
|
1249
1264
|
}));
|
|
1265
|
+
};
|
|
1266
|
+
tile.addEventListener("click", open);
|
|
1267
|
+
tile.addEventListener("keydown", (e2) => {
|
|
1268
|
+
const key = e2.key;
|
|
1269
|
+
if (key !== "Enter" && key !== " ") return;
|
|
1270
|
+
e2.preventDefault();
|
|
1271
|
+
open();
|
|
1250
1272
|
});
|
|
1251
1273
|
});
|
|
1252
1274
|
}
|
|
@@ -1278,9 +1300,11 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1278
1300
|
if (!this._branchPickerEl) return;
|
|
1279
1301
|
if (this._siblingCount <= 1 || this._role !== "assistant") {
|
|
1280
1302
|
this._branchPickerEl.hidden = true;
|
|
1303
|
+
this._syncFooterVisibility();
|
|
1281
1304
|
return;
|
|
1282
1305
|
}
|
|
1283
1306
|
this._branchPickerEl.hidden = false;
|
|
1307
|
+
this._syncFooterVisibility();
|
|
1284
1308
|
const label = this._branchPickerEl.querySelector(".aparte-branch-label");
|
|
1285
1309
|
if (label) {
|
|
1286
1310
|
const customNav = this._cfg.getSiblingNavRenderer?.();
|
|
@@ -1327,12 +1351,7 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1327
1351
|
buttons.push(this._actionButtonHtml("thumbUp", icons, locale));
|
|
1328
1352
|
buttons.push(this._actionButtonHtml("thumbDown", icons, locale));
|
|
1329
1353
|
}
|
|
1330
|
-
if (this.
|
|
1331
|
-
const infoLabel = locale.messageInfo ?? "Details";
|
|
1332
|
-
buttons.push(`<button class="aparte-action-btn aparte-action-info" data-action="info" aria-label="${infoLabel}" title="${infoLabel}">
|
|
1333
|
-
${INFO_ICON_SVG}
|
|
1334
|
-
</button>`);
|
|
1335
|
-
}
|
|
1354
|
+
if (config.info) buttons.push(this._actionButtonHtml("info", icons, locale));
|
|
1336
1355
|
}
|
|
1337
1356
|
}
|
|
1338
1357
|
this._actionBarEl.innerHTML = buttons.join("");
|
|
@@ -1340,6 +1359,21 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1340
1359
|
this._actionBarEl.querySelectorAll(".aparte-action-btn").forEach((btn) => {
|
|
1341
1360
|
btn.addEventListener("click", (e2) => this._handleActionClick(e2));
|
|
1342
1361
|
});
|
|
1362
|
+
this._syncFooterVisibility();
|
|
1363
|
+
}
|
|
1364
|
+
/**
|
|
1365
|
+
* An empty action bar is not a bar: with every action off it was still a
|
|
1366
|
+
* `role="toolbar"` with nothing in it (announced as such), and it still reserved
|
|
1367
|
+
* its fixed height plus the footer's under every bubble. So both follow their
|
|
1368
|
+
* contents — the footer stays as long as the branch picker or the bar has
|
|
1369
|
+
* something to show.
|
|
1370
|
+
*/
|
|
1371
|
+
_syncFooterVisibility() {
|
|
1372
|
+
if (this._actionBarEl) this._actionBarEl.hidden = this._actionBarEl.children.length === 0;
|
|
1373
|
+
if (!this._footerEl) return;
|
|
1374
|
+
const barEmpty = !this._actionBarEl || this._actionBarEl.hidden;
|
|
1375
|
+
const pickerHidden = !this._branchPickerEl || this._branchPickerEl.hidden;
|
|
1376
|
+
this._footerEl.hidden = barEmpty && pickerHidden;
|
|
1343
1377
|
}
|
|
1344
1378
|
/** Append the registered custom action buttons for this bubble's role. */
|
|
1345
1379
|
_appendCustomActions(icons) {
|
|
@@ -1380,6 +1414,11 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1380
1414
|
const l2 = locale.feedbackNegative ?? "Bad response";
|
|
1381
1415
|
return `<button class="aparte-action-btn aparte-action-feedback-neg" data-action="feedback-negative" aria-label="${l2}" title="${l2}">${icons.thumbDown()}</button>`;
|
|
1382
1416
|
}
|
|
1417
|
+
case "info": {
|
|
1418
|
+
if (!this._usage) return "";
|
|
1419
|
+
const l2 = locale.messageInfo ?? "Details";
|
|
1420
|
+
return `<button class="aparte-action-btn aparte-action-info" data-action="info" aria-label="${l2}" title="${l2}">${INFO_ICON_SVG}</button>`;
|
|
1421
|
+
}
|
|
1383
1422
|
default:
|
|
1384
1423
|
return "";
|
|
1385
1424
|
}
|
|
@@ -1394,6 +1433,7 @@ class AparteChatBubble extends HTMLElement {
|
|
|
1394
1433
|
this._actionBarEl.querySelectorAll(".aparte-action-btn").forEach((btn) => {
|
|
1395
1434
|
btn.addEventListener("click", (e2) => this._handleActionClick(e2));
|
|
1396
1435
|
});
|
|
1436
|
+
this._syncFooterVisibility();
|
|
1397
1437
|
}
|
|
1398
1438
|
_handleActionClick(e2) {
|
|
1399
1439
|
const btn = e2.currentTarget;
|
|
@@ -1831,9 +1871,13 @@ class AparteChatViewport extends HTMLElement {
|
|
|
1831
1871
|
if (!message.segments) {
|
|
1832
1872
|
message.segments = [];
|
|
1833
1873
|
}
|
|
1834
|
-
const
|
|
1874
|
+
const index = message.segments.findIndex((s2) => s2.id === segmentId);
|
|
1875
|
+
const segment = index === -1 ? void 0 : message.segments[index];
|
|
1835
1876
|
if (segment && "content" in segment) {
|
|
1836
|
-
|
|
1877
|
+
message.segments[index] = {
|
|
1878
|
+
...segment,
|
|
1879
|
+
content: segment.content + chunk
|
|
1880
|
+
};
|
|
1837
1881
|
}
|
|
1838
1882
|
this.dispatchEvent(new CustomEvent("aparte-segment-update", {
|
|
1839
1883
|
bubbles: true,
|
|
@@ -1909,8 +1953,10 @@ class AparteChatViewport extends HTMLElement {
|
|
|
1909
1953
|
this.updateSegment(messageId, segmentId, { isStreaming: false });
|
|
1910
1954
|
}
|
|
1911
1955
|
/**
|
|
1912
|
-
* Persist token usage on a message and propagate to the live bubble
|
|
1913
|
-
*
|
|
1956
|
+
* Persist token usage on a message and propagate to the live bubble, which is
|
|
1957
|
+
* what allows the info ("i") action to render — provided the app declared it
|
|
1958
|
+
* with `AparteConfig.setBubbleActions({ info: true })`; it is off by default,
|
|
1959
|
+
* since the popover it opens belongs to the app.
|
|
1914
1960
|
*/
|
|
1915
1961
|
setUsage(messageId, usage) {
|
|
1916
1962
|
const message = this._repo.getMessageById(messageId);
|
|
@@ -3087,9 +3133,9 @@ class AparteComposerInput extends HTMLElement {
|
|
|
3087
3133
|
}
|
|
3088
3134
|
_updatePlaceholder() {
|
|
3089
3135
|
if (this._editor) {
|
|
3090
|
-
const
|
|
3091
|
-
this._editor.setAttribute("data-placeholder",
|
|
3092
|
-
this._editor.setAttribute("aria-label",
|
|
3136
|
+
const p2 = this._getPlaceholder();
|
|
3137
|
+
this._editor.setAttribute("data-placeholder", p2);
|
|
3138
|
+
this._editor.setAttribute("aria-label", p2);
|
|
3093
3139
|
}
|
|
3094
3140
|
}
|
|
3095
3141
|
_updatePlaceholderVisibility() {
|
|
@@ -3320,8 +3366,11 @@ class AparteComposerAttachments extends HTMLElement {
|
|
|
3320
3366
|
if (root) root.removeAttachment(root.attachments[i2]);
|
|
3321
3367
|
});
|
|
3322
3368
|
});
|
|
3369
|
+
if (!resolveConfig(this).getHostHandlers().attachmentPreview) return;
|
|
3323
3370
|
this.querySelectorAll(".aparte-thumb--image").forEach((tile) => {
|
|
3324
|
-
tile.
|
|
3371
|
+
tile.setAttribute("role", "button");
|
|
3372
|
+
tile.setAttribute("tabindex", "0");
|
|
3373
|
+
const open = () => {
|
|
3325
3374
|
const img = tile.querySelector(".aparte-thumb__img");
|
|
3326
3375
|
if (!img) return;
|
|
3327
3376
|
this.dispatchEvent(new CustomEvent("aparte-attachment-preview", {
|
|
@@ -3329,6 +3378,13 @@ class AparteComposerAttachments extends HTMLElement {
|
|
|
3329
3378
|
composed: true,
|
|
3330
3379
|
detail: { url: img.src, name: tile.getAttribute("title") ?? "" }
|
|
3331
3380
|
}));
|
|
3381
|
+
};
|
|
3382
|
+
tile.addEventListener("click", open);
|
|
3383
|
+
tile.addEventListener("keydown", (e2) => {
|
|
3384
|
+
const key = e2.key;
|
|
3385
|
+
if (key !== "Enter" && key !== " ") return;
|
|
3386
|
+
e2.preventDefault();
|
|
3387
|
+
open();
|
|
3332
3388
|
});
|
|
3333
3389
|
});
|
|
3334
3390
|
}
|
|
@@ -3823,38 +3879,40 @@ export {
|
|
|
3823
3879
|
i as AparteStreamParser,
|
|
3824
3880
|
B as BackendTransport,
|
|
3825
3881
|
C as ConversationManager,
|
|
3826
|
-
D as
|
|
3827
|
-
j as
|
|
3828
|
-
k as
|
|
3829
|
-
l as
|
|
3830
|
-
m as
|
|
3882
|
+
D as DEFAULT_BUBBLE_ACTIONS,
|
|
3883
|
+
j as DEFAULT_HOST_HANDLERS,
|
|
3884
|
+
k as DEFAULT_ICON_FALLBACKS,
|
|
3885
|
+
l as DEFAULT_LOCALE,
|
|
3886
|
+
m as DEFAULT_SKELETON_FALLBACKS,
|
|
3887
|
+
n as DEFAULT_UI_EVENTS,
|
|
3888
|
+
o as DirectTransport,
|
|
3831
3889
|
MessageRepository,
|
|
3832
|
-
|
|
3833
|
-
|
|
3890
|
+
p as applyElementProps,
|
|
3891
|
+
q as attachConfig,
|
|
3834
3892
|
buildElicitationPanel,
|
|
3835
|
-
|
|
3836
|
-
|
|
3837
|
-
|
|
3838
|
-
|
|
3839
|
-
|
|
3840
|
-
|
|
3841
|
-
|
|
3842
|
-
|
|
3843
|
-
|
|
3893
|
+
s as collectRendererStyles,
|
|
3894
|
+
t as contentToText,
|
|
3895
|
+
u as contextConfig,
|
|
3896
|
+
v as createAparteChatHandler,
|
|
3897
|
+
w as createStreamAdapter,
|
|
3898
|
+
x as defaultSanitizer,
|
|
3899
|
+
y as deriveArtifactKind,
|
|
3900
|
+
z as detachConfig,
|
|
3901
|
+
E as filesToAttachments,
|
|
3844
3902
|
getSegmentRenderer,
|
|
3845
3903
|
isAwaitingReply,
|
|
3846
|
-
|
|
3847
|
-
|
|
3848
|
-
|
|
3849
|
-
|
|
3904
|
+
H as isFormatAdapter,
|
|
3905
|
+
I as isSafeUrl,
|
|
3906
|
+
J as parseAparteEventStream,
|
|
3907
|
+
K as parseMarkdownToSegments,
|
|
3850
3908
|
populateBubbleFromMessage,
|
|
3851
|
-
|
|
3909
|
+
N as readableToAsyncIterable,
|
|
3852
3910
|
registerAllComponents,
|
|
3853
|
-
|
|
3854
|
-
|
|
3855
|
-
|
|
3911
|
+
O as registerDefaultRenderers,
|
|
3912
|
+
P as registerSegmentRenderer,
|
|
3913
|
+
Q as requestUserInput,
|
|
3856
3914
|
resolveConfig,
|
|
3857
3915
|
runWithConfig,
|
|
3858
|
-
|
|
3916
|
+
T as unregisterSegmentRenderer
|
|
3859
3917
|
};
|
|
3860
3918
|
//# sourceMappingURL=index.js.map
|