@aparte/core 0.6.1 → 0.7.1
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/components/bubble/aparte-chat-bubble.d.ts +13 -0
- package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -1
- package/dist/components/chat/aparte-chat.d.ts +17 -0
- package/dist/components/chat/aparte-chat.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-add-attachment.d.ts +11 -0
- package/dist/components/composer/aparte-composer-add-attachment.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-attachments.d.ts +14 -0
- package/dist/components/composer/aparte-composer-attachments.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-cancel.d.ts +11 -0
- package/dist/components/composer/aparte-composer-cancel.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-input.d.ts +10 -0
- package/dist/components/composer/aparte-composer-input.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-send.d.ts +10 -0
- package/dist/components/composer/aparte-composer-send.d.ts.map +1 -1
- package/dist/components/composer/aparte-composer-toolbar.d.ts +53 -0
- package/dist/components/composer/aparte-composer-toolbar.d.ts.map +1 -0
- package/dist/components/composer/aparte-composer.d.ts +13 -0
- package/dist/components/composer/aparte-composer.d.ts.map +1 -1
- package/dist/components/composer/index.d.ts +1 -0
- package/dist/components/composer/index.d.ts.map +1 -1
- package/dist/components/conversation-list/aparte-conversation-list.d.ts +15 -1
- package/dist/components/conversation-list/aparte-conversation-list.d.ts.map +1 -1
- package/dist/components/elicitation/aparte-elicitation.d.ts +15 -0
- package/dist/components/elicitation/aparte-elicitation.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/status/aparte-chat-status.d.ts +6 -0
- package/dist/components/status/aparte-chat-status.d.ts.map +1 -1
- package/dist/components/viewport/aparte-chat-viewport.d.ts +8 -0
- package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -1
- package/dist/custom-elements.json +4909 -4733
- package/dist/index.css +23 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -1
- package/dist/primitives/progress-spinner/aparte-progress-spinner.d.ts +5 -0
- package/dist/primitives/progress-spinner/aparte-progress-spinner.d.ts.map +1 -1
- package/dist/primitives/select/aparte-optgroup.d.ts +11 -0
- package/dist/primitives/select/aparte-optgroup.d.ts.map +1 -1
- package/dist/primitives/select/aparte-option.d.ts +6 -0
- package/dist/primitives/select/aparte-option.d.ts.map +1 -1
- package/dist/primitives/select/aparte-select.d.ts +13 -0
- package/dist/primitives/select/aparte-select.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.css
CHANGED
|
@@ -299,6 +299,12 @@
|
|
|
299
299
|
|
|
300
300
|
/* Viewport */
|
|
301
301
|
--aparte-viewport-padding: 16px;
|
|
302
|
+
/* Breathing room UNDER the composer, so it does not sit flush against the bottom
|
|
303
|
+
edge of a full-height chat. Same 16px the viewport already puts between the last
|
|
304
|
+
bubble and the composer — this restores the symmetry rather than inventing a
|
|
305
|
+
value. Set it to 0 for a flush composer (a full-bleed mobile shell with a docked
|
|
306
|
+
keyboard is the legitimate case). */
|
|
307
|
+
--aparte-chat-bottom-gap: var(--aparte-space-8, 16px);
|
|
302
308
|
|
|
303
309
|
/* Content */
|
|
304
310
|
--aparte-content-line-height: var(--aparte-line-height-loose, 1.7);
|
|
@@ -435,6 +441,12 @@ aparte-chat,
|
|
|
435
441
|
height: 100%;
|
|
436
442
|
width: 100%;
|
|
437
443
|
overflow: hidden;
|
|
444
|
+
/* The composer used to touch the bottom edge as soon as a conversation started: the
|
|
445
|
+
viewport gives 16px above the composer and there was nothing below it. An app
|
|
446
|
+
cannot fix this from outside without padding the container, which also shrinks the
|
|
447
|
+
scroll area — so the transcript would stop before the edge instead of scrolling to
|
|
448
|
+
it. That makes the gap ours. */
|
|
449
|
+
padding-block-end: var(--aparte-chat-bottom-gap, var(--aparte-space-8, 16px));
|
|
438
450
|
}
|
|
439
451
|
|
|
440
452
|
/* The viewport takes the space left by the composer; the standalone height:100%
|
|
@@ -2059,7 +2071,12 @@ aparte-composer.is-dragover:not(:has(.aparte-composer-shell)) {
|
|
|
2059
2071
|
justify-content: center;
|
|
2060
2072
|
}
|
|
2061
2073
|
|
|
2062
|
-
/*
|
|
2074
|
+
/* The composer's bottom row (mode picker, model selector, token counter…).
|
|
2075
|
+
`aparte-composer-toolbar` is the element consumers write — one name for vanilla and
|
|
2076
|
+
every wrapper. `.aparte-composer-footer` is the class the same row used to be built
|
|
2077
|
+
with, kept so markup that predates the element keeps its styling instead of silently
|
|
2078
|
+
rendering as a bare div. Removable at 1.0. */
|
|
2079
|
+
aparte-composer-toolbar,
|
|
2063
2080
|
.aparte-composer-footer {
|
|
2064
2081
|
display: flex;
|
|
2065
2082
|
align-items: center;
|
|
@@ -2068,6 +2085,11 @@ aparte-composer.is-dragover:not(:has(.aparte-composer-shell)) {
|
|
|
2068
2085
|
border-top: var(--aparte-border-width, 1px) solid var(--aparte-border);
|
|
2069
2086
|
}
|
|
2070
2087
|
|
|
2088
|
+
/* A row with nothing in it must not draw its separator. The element reflects
|
|
2089
|
+
`data-empty` itself (see aparte-composer-toolbar.ts) because `:empty` is defeated by
|
|
2090
|
+
the whitespace text node an indented template leaves behind; the legacy class keeps
|
|
2091
|
+
`:empty`, which is all it ever had. */
|
|
2092
|
+
aparte-composer-toolbar[data-empty],
|
|
2071
2093
|
.aparte-composer-footer:empty {
|
|
2072
2094
|
display: none;
|
|
2073
2095
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -26,7 +26,7 @@ export { AparteChatBubble, populateBubbleFromMessage } from './components/index.
|
|
|
26
26
|
export type { SyncableBubble } from './components/index.js';
|
|
27
27
|
export { AparteChatStatus } from './components/index.js';
|
|
28
28
|
export { AparteChatViewport } from './components/index.js';
|
|
29
|
-
export { AparteComposer, AparteComposerInput, AparteComposerSend, AparteComposerCancel, AparteComposerAttachments, AparteComposerAddAttachment, AparteComposerAction } from './components/index.js';
|
|
29
|
+
export { AparteComposer, AparteComposerInput, AparteComposerSend, AparteComposerCancel, AparteComposerAttachments, AparteComposerAddAttachment, AparteComposerAction, AparteComposerToolbar } from './components/index.js';
|
|
30
30
|
export type { AparteComposerEventMap, AparteComposerEventType, AparteComposerState, AparteComposerChangeEventDetail } from './components/index.js';
|
|
31
31
|
export { AparteConversationList } from './components/index.js';
|
|
32
32
|
export type { AparteConversationListItem, AparteConversationSelectDetail, AparteConversationDeleteDetail } from './components/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":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,qBAAqB,CAAC;AAC7B,OAAO,gCAAgC,CAAC;AACxC,OAAO,oDAAoD,CAAC;AAG5D,OAAO,sBAAsB,CAAC;AAG9B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGzI,YAAY,EACR,gBAAgB,EAChB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,yBAAyB,EACzB,sBAAsB,EACtB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,EAErB,gBAAgB,EAChB,aAAa,EACb,2BAA2B,EAC3B,4BAA4B,EAC5B,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,4BAA4B,EAC5B,4BAA4B,EAC5B,4BAA4B,EAC5B,iBAAiB,EACjB,+BAA+B,EAC/B,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,8BAA8B,EAC9B,8BAA8B,EAC9B,8BAA8B,EAC9B,6BAA6B,EAE7B,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,WAAW,EAEX,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,+BAA+B,EAC/B,sBAAsB,EAEtB,uBAAuB,EAC1B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG/E,OAAO,EACH,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,EAC3B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AACpF,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -2749,7 +2749,25 @@ class AparteComposer extends HTMLElement {
|
|
|
2749
2749
|
_modelGated = false;
|
|
2750
2750
|
_onConfigChange = () => {
|
|
2751
2751
|
this._evaluateModelGate();
|
|
2752
|
+
this._applyDirection();
|
|
2752
2753
|
};
|
|
2754
|
+
/**
|
|
2755
|
+
* Mirror `locale.direction` onto ourselves, so everything inside — input, buttons,
|
|
2756
|
+
* the toolbar row and whatever the consumer put in it — inherits it.
|
|
2757
|
+
*
|
|
2758
|
+
* The direction used to stop at the transcript: only the viewport applied `dir`, so
|
|
2759
|
+
* an RTL locale flipped the conversation and left the composer left-to-right. It is
|
|
2760
|
+
* also what makes the toolbar's placement idiom real: `margin-inline-start: auto` in
|
|
2761
|
+
* a subtree that inherits no direction is just `margin-left`.
|
|
2762
|
+
*
|
|
2763
|
+
* One attribute on the host rather than a stamp per child: inheritance is the
|
|
2764
|
+
* mechanism, so nothing needs to know about the consumer's markup.
|
|
2765
|
+
*/
|
|
2766
|
+
_applyDirection() {
|
|
2767
|
+
const direction = (this._cfg ?? resolveConfig(this)).getLocale().direction;
|
|
2768
|
+
if (direction) this.setAttribute("dir", direction);
|
|
2769
|
+
else this.removeAttribute("dir");
|
|
2770
|
+
}
|
|
2753
2771
|
static get observedAttributes() {
|
|
2754
2772
|
return ["placeholder", "disabled", "target"];
|
|
2755
2773
|
}
|
|
@@ -2761,6 +2779,7 @@ class AparteComposer extends HTMLElement {
|
|
|
2761
2779
|
this._cfg = resolveConfig(this);
|
|
2762
2780
|
this._configUnsub = this._cfg.subscribe(this._onConfigChange);
|
|
2763
2781
|
this._evaluateModelGate();
|
|
2782
|
+
this._applyDirection();
|
|
2764
2783
|
}
|
|
2765
2784
|
disconnectedCallback() {
|
|
2766
2785
|
window.removeEventListener("aparte-message-start", this._onMessageStart);
|
|
@@ -3646,6 +3665,39 @@ class AparteComposerAction extends HTMLElement {
|
|
|
3646
3665
|
if (!customElements.get("aparte-composer-action")) {
|
|
3647
3666
|
customElements.define("aparte-composer-action", AparteComposerAction);
|
|
3648
3667
|
}
|
|
3668
|
+
class AparteComposerToolbar extends HTMLElement {
|
|
3669
|
+
_observer = null;
|
|
3670
|
+
connectedCallback() {
|
|
3671
|
+
this._syncEmpty();
|
|
3672
|
+
this._observer ??= new MutationObserver(() => this._syncEmpty());
|
|
3673
|
+
this._observer.observe(this, { childList: true });
|
|
3674
|
+
}
|
|
3675
|
+
disconnectedCallback() {
|
|
3676
|
+
this._observer?.disconnect();
|
|
3677
|
+
this._observer = null;
|
|
3678
|
+
}
|
|
3679
|
+
/**
|
|
3680
|
+
* Reflect `data-empty` from the presence of an ELEMENT child.
|
|
3681
|
+
*
|
|
3682
|
+
* Not `:empty` in CSS: that selector does not match an element holding a whitespace
|
|
3683
|
+
* text node, so a template that indents its content keeps the row — separator,
|
|
3684
|
+
* padding and all — while it looks empty to the user. Every framework template
|
|
3685
|
+
* indents. An empty row must not draw its own separator (the same rule as an empty
|
|
3686
|
+
* bubble action bar).
|
|
3687
|
+
*
|
|
3688
|
+
* Non-whitespace TEXT counts as content, not just an element child: a hand-written
|
|
3689
|
+
* row holding a bare token count (`<aparte-composer-toolbar>1 240 tokens</…>`) is
|
|
3690
|
+
* not empty, and hiding it would be a twenty-minute mystery for whoever wrote it.
|
|
3691
|
+
*/
|
|
3692
|
+
_syncEmpty() {
|
|
3693
|
+
const hasContent = Boolean(this.firstElementChild) || this.textContent?.trim() !== "";
|
|
3694
|
+
if (hasContent) this.removeAttribute("data-empty");
|
|
3695
|
+
else this.setAttribute("data-empty", "");
|
|
3696
|
+
}
|
|
3697
|
+
}
|
|
3698
|
+
if (!customElements.get("aparte-composer-toolbar")) {
|
|
3699
|
+
customElements.define("aparte-composer-toolbar", AparteComposerToolbar);
|
|
3700
|
+
}
|
|
3649
3701
|
class AparteConversationList extends HTMLElement {
|
|
3650
3702
|
_conversations = [];
|
|
3651
3703
|
_activeId = null;
|
|
@@ -3931,6 +3983,7 @@ export {
|
|
|
3931
3983
|
AparteComposerCancel,
|
|
3932
3984
|
AparteComposerInput,
|
|
3933
3985
|
AparteComposerSend,
|
|
3986
|
+
AparteComposerToolbar,
|
|
3934
3987
|
AparteConfig,
|
|
3935
3988
|
e as AparteConfigClass,
|
|
3936
3989
|
f as AparteConversationController,
|