@aparte/core 0.3.0-alpha.0 → 0.5.0-alpha.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 +26 -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 +26 -2
- package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -1
- package/dist/components/chat/aparte-chat.d.ts +13 -0
- package/dist/components/chat/aparte-chat.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 +17 -4
- package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
- package/dist/config/aparte-config.d.ts +64 -7
- package/dist/config/aparte-config.d.ts.map +1 -1
- package/dist/config/icon-provider.d.ts +21 -21
- package/dist/config/icon-provider.d.ts.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/conversations/conversation-controller.d.ts.map +1 -1
- package/dist/custom-elements.json +3435 -3000
- package/dist/host/aparte-chat-host.d.ts +58 -1
- package/dist/host/aparte-chat-host.d.ts.map +1 -1
- package/dist/{index-CW2BCAqn.js → index-Dn7TH14G.js} +282 -81
- package/dist/index-Dn7TH14G.js.map +1 -0
- package/dist/index.css +75 -8
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +216 -62
- package/dist/index.js.map +1 -1
- package/dist/index.node.d.ts +3 -1
- package/dist/index.node.d.ts.map +1 -1
- package/dist/index.node.js +34 -30
- package/dist/index.node.js.map +1 -1
- package/dist/primitives/select/aparte-optgroup.d.ts +2 -0
- package/dist/primitives/select/aparte-optgroup.d.ts.map +1 -1
- package/dist/primitives/select/aparte-select.d.ts +2 -0
- package/dist/primitives/select/aparte-select.d.ts.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/imperative-api.d.ts +13 -0
- package/dist/types/imperative-api.d.ts.map +1 -1
- package/dist/types/models.d.ts +56 -9
- package/dist/types/models.d.ts.map +1 -1
- package/dist/utils/files-to-attachments.d.ts +27 -0
- package/dist/utils/files-to-attachments.d.ts.map +1 -0
- package/dist/utils/is-awaiting-reply.d.ts +22 -0
- package/dist/utils/is-awaiting-reply.d.ts.map +1 -0
- package/package.json +8 -1
- package/dist/index-CW2BCAqn.js.map +0 -1
package/dist/index.css
CHANGED
|
@@ -216,6 +216,10 @@
|
|
|
216
216
|
--aparte-status-bg: transparent;
|
|
217
217
|
--aparte-status-dot-size: 6px;
|
|
218
218
|
|
|
219
|
+
/* Waiting Indicator (the bubble's own dots, before the first token) */
|
|
220
|
+
--aparte-waiting-height: 1.5em;
|
|
221
|
+
--aparte-waiting-dot-gap: 4px;
|
|
222
|
+
|
|
219
223
|
/* Thinking Segment */
|
|
220
224
|
--aparte-thinking-border: var(--aparte-border);
|
|
221
225
|
--aparte-thinking-bg: var(--aparte-surface-2);
|
|
@@ -712,8 +716,8 @@ aparte-chat-bubble {
|
|
|
712
716
|
min-width: 0;
|
|
713
717
|
}
|
|
714
718
|
|
|
715
|
-
/* The message bubble — the surface fills ONLY the content (
|
|
716
|
-
|
|
719
|
+
/* The message bubble — the surface fills ONLY the content (segments + text).
|
|
720
|
+
The sender name and attachment strip (above) and the action bar (below) are
|
|
717
721
|
siblings in .aparte-body, so they stay OUTSIDE the coloured surface. */
|
|
718
722
|
.aparte-message-content {
|
|
719
723
|
border-radius: var(--aparte-message-content-radius, 0);
|
|
@@ -782,8 +786,11 @@ aparte-chat-bubble {
|
|
|
782
786
|
.aparte-attachments {
|
|
783
787
|
display: flex;
|
|
784
788
|
flex-wrap: wrap;
|
|
785
|
-
/*
|
|
786
|
-
|
|
789
|
+
/* The strip sits directly above the message bubble and belongs to it, so it
|
|
790
|
+
must share the bubble's edge. The user bubble hugs its text on the LEADING
|
|
791
|
+
edge (AI-chat convention, see .aparte-message-content below), so anchoring
|
|
792
|
+
the strip to the trailing edge would split one message across both sides. */
|
|
793
|
+
justify-content: flex-start;
|
|
787
794
|
gap: var(--aparte-space-3, 6px);
|
|
788
795
|
margin-bottom: var(--aparte-space-4, 8px);
|
|
789
796
|
/* Really small tiles inside the conversation. */
|
|
@@ -815,10 +822,16 @@ aparte-chat-bubble {
|
|
|
815
822
|
border: var(--aparte-border-width, 1px) solid var(--aparte-attachment-chip-border, var(--aparte-border));
|
|
816
823
|
}
|
|
817
824
|
|
|
818
|
-
|
|
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'] {
|
|
819
828
|
cursor: pointer;
|
|
820
829
|
}
|
|
821
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
|
+
|
|
822
835
|
.aparte-thumb__img {
|
|
823
836
|
width: 100%;
|
|
824
837
|
height: 100%;
|
|
@@ -960,7 +973,14 @@ aparte-chat-bubble:last-of-type .aparte-message[data-role="assistant"]:not(.apar
|
|
|
960
973
|
gap: var(--aparte-branch-picker-gap, 4px);
|
|
961
974
|
}
|
|
962
975
|
|
|
963
|
-
/* [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
|
+
|
|
964
984
|
.aparte-branch-picker[hidden] {
|
|
965
985
|
display: none;
|
|
966
986
|
}
|
|
@@ -1320,6 +1340,47 @@ aparte-chat-status:not([visible]) {
|
|
|
1320
1340
|
align-items: center;
|
|
1321
1341
|
}
|
|
1322
1342
|
|
|
1343
|
+
/* Screen-reader-only text. Used by the bubble's waiting indicator, whose dots are
|
|
1344
|
+
decorative: the state is conveyed by aria-busy + this localized label. */
|
|
1345
|
+
.aparte-sr-only {
|
|
1346
|
+
position: absolute;
|
|
1347
|
+
width: 1px;
|
|
1348
|
+
height: 1px;
|
|
1349
|
+
padding: 0;
|
|
1350
|
+
margin: -1px;
|
|
1351
|
+
overflow: hidden;
|
|
1352
|
+
clip: rect(0, 0, 0, 0);
|
|
1353
|
+
white-space: nowrap;
|
|
1354
|
+
border: 0;
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
/* The waiting indicator: between "user sends" and the first token. Built into the
|
|
1358
|
+
bubble, so it needs no wiring and behaves the same in core and every wrapper.
|
|
1359
|
+
Sits in the content region and disappears as soon as there is anything to show. */
|
|
1360
|
+
.aparte-waiting {
|
|
1361
|
+
display: flex;
|
|
1362
|
+
align-items: center;
|
|
1363
|
+
min-height: var(--aparte-waiting-height, 1.5em);
|
|
1364
|
+
}
|
|
1365
|
+
|
|
1366
|
+
.aparte-waiting[hidden] {
|
|
1367
|
+
display: none;
|
|
1368
|
+
}
|
|
1369
|
+
|
|
1370
|
+
.aparte-waiting .aparte-dots {
|
|
1371
|
+
gap: var(--aparte-waiting-dot-gap, 4px);
|
|
1372
|
+
}
|
|
1373
|
+
|
|
1374
|
+
/* Staggered so it reads as "working", not as three synchronized blobs. Scoped to
|
|
1375
|
+
the waiting region — the status element keeps its single-dot pulse. */
|
|
1376
|
+
.aparte-waiting .aparte-dot:nth-child(2) {
|
|
1377
|
+
animation-delay: 0.15s;
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
.aparte-waiting .aparte-dot:nth-child(3) {
|
|
1381
|
+
animation-delay: 0.3s;
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1323
1384
|
.aparte-dot {
|
|
1324
1385
|
width: var(--aparte-status-dot-size, 6px);
|
|
1325
1386
|
height: var(--aparte-status-dot-size, 6px);
|
|
@@ -2409,9 +2470,15 @@ aparte-option[data-active] {
|
|
|
2409
2470
|
box-shadow: inset 0 0 0 2px var(--aparte-primary, #3b82f6);
|
|
2410
2471
|
}
|
|
2411
2472
|
|
|
2473
|
+
/* Selected option: an accent TINT plus an accent bar, keeping the theme's own
|
|
2474
|
+
text colour. A solid `--aparte-primary` fill with white text failed WCAG AA in
|
|
2475
|
+
both themes (the brass accent is mid-luminance, so white sits around 3.4:1),
|
|
2476
|
+
and an unreadable selected row is the one row that must be readable. Both
|
|
2477
|
+
tokens stay overridable for a design that wants the solid fill back. */
|
|
2412
2478
|
aparte-option[selected] {
|
|
2413
|
-
background: var(--aparte-select-option-selected, var(--aparte-primary, #3b82f6));
|
|
2414
|
-
color: var(--aparte-select-option-selected-text, #
|
|
2479
|
+
background: var(--aparte-select-option-selected, color-mix(in srgb, var(--aparte-primary, #3b82f6) 18%, transparent));
|
|
2480
|
+
color: var(--aparte-select-option-selected-text, var(--aparte-select-text, var(--aparte-text, #1e293b)));
|
|
2481
|
+
box-shadow: inset 2px 0 0 var(--aparte-primary, #3b82f6);
|
|
2415
2482
|
}
|
|
2416
2483
|
|
|
2417
2484
|
aparte-option[disabled] {
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,14 @@
|
|
|
3
3
|
* High-performance AI conversation engine in Vanilla TypeScript
|
|
4
4
|
* Zero-dependency Web Components for LLM streaming
|
|
5
5
|
*
|
|
6
|
+
* ⚠️ This is the **browser** entry: it defines the custom elements and imports CSS
|
|
7
|
+
* at module scope, so it needs a DOM. **Node resolves `index.node.ts` instead**
|
|
8
|
+
* (via the `node` condition in package.json) — a DOM-free entry with the client,
|
|
9
|
+
* host, transports, the chat handler and every type. This file sits first in the
|
|
10
|
+
* exports map only because of the repo-local `@aparte-workspace/source` condition,
|
|
11
|
+
* which is why reading it can look like "this package can't run in Node".
|
|
12
|
+
* See the "Node / SSR" section of the README.
|
|
13
|
+
*
|
|
6
14
|
* @packageDocumentation
|
|
7
15
|
*/
|
|
8
16
|
|
|
@@ -30,12 +38,14 @@ export { AparteChatHost, type AparteChatHostBinding, type AparteChatHostOptions,
|
|
|
30
38
|
export { AparteStreamParser, parseMarkdownToSegments, deriveArtifactKind } from './parsers/index.js';
|
|
31
39
|
export type { AparteStreamParserOptions, AparteThinkingDelimiterPair, AparteParserState, AparteParserResult } from './parsers/index.js';
|
|
32
40
|
export { parseAparteEventStream } from './parsers/index.js';
|
|
33
|
-
export { AparteConfig, AparteConfigClass } from './config/index.js';
|
|
41
|
+
export { AparteConfig, AparteConfigClass, DEFAULT_BUBBLE_ACTIONS, DEFAULT_HOST_HANDLERS } from './config/index.js';
|
|
34
42
|
export { resolveConfig, attachConfig, detachConfig, runWithConfig, contextConfig, APARTE_HOST_ATTR } from './config/index.js';
|
|
35
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';
|
|
36
44
|
export { DEFAULT_ICON_FALLBACKS, DEFAULT_SKELETON_FALLBACKS, DEFAULT_LOCALE, defaultSanitizer, isSafeUrl } from './config/index.js';
|
|
37
45
|
export { AparteClient } from './client/aparte-client.js';
|
|
38
46
|
export { applyElementProps, DEFAULT_UI_EVENTS } from './interop/element-props.js';
|
|
47
|
+
export { filesToAttachments } from './utils/files-to-attachments.js';
|
|
48
|
+
export { isAwaitingReply } from './utils/is-awaiting-reply.js';
|
|
39
49
|
export type { AparteClientOptions, AparteToolApprovalResolver, AparteCompactionSelector } from './client/aparte-client.js';
|
|
40
50
|
export { createStreamAdapter, readableToAsyncIterable } from './client/stream-adapter.js';
|
|
41
51
|
export type { AparteStreamRunEvent, AparteStreamRunEmitter, StreamAdapterTarget, CreateStreamAdapterOptions, AparteStreamRunner, AparteStreamRunOptions } from './client/stream-adapter.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|