@aparte/core 0.2.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.
Files changed (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/dist/client/aparte-client.d.ts +326 -0
  4. package/dist/client/aparte-client.d.ts.map +1 -0
  5. package/dist/client/stream-adapter.d.ts +197 -0
  6. package/dist/client/stream-adapter.d.ts.map +1 -0
  7. package/dist/components/bubble/aparte-chat-bubble.d.ts +153 -0
  8. package/dist/components/bubble/aparte-chat-bubble.d.ts.map +1 -0
  9. package/dist/components/bubble/bubble-sync.d.ts +44 -0
  10. package/dist/components/bubble/bubble-sync.d.ts.map +1 -0
  11. package/dist/components/bubble/index.d.ts +4 -0
  12. package/dist/components/bubble/index.d.ts.map +1 -0
  13. package/dist/components/chat/aparte-chat.d.ts +49 -0
  14. package/dist/components/chat/aparte-chat.d.ts.map +1 -0
  15. package/dist/components/chat/index.d.ts +2 -0
  16. package/dist/components/chat/index.d.ts.map +1 -0
  17. package/dist/components/composer/aparte-composer-action.d.ts +37 -0
  18. package/dist/components/composer/aparte-composer-action.d.ts.map +1 -0
  19. package/dist/components/composer/aparte-composer-add-attachment.d.ts +27 -0
  20. package/dist/components/composer/aparte-composer-add-attachment.d.ts.map +1 -0
  21. package/dist/components/composer/aparte-composer-attachments.d.ts +26 -0
  22. package/dist/components/composer/aparte-composer-attachments.d.ts.map +1 -0
  23. package/dist/components/composer/aparte-composer-cancel.d.ts +21 -0
  24. package/dist/components/composer/aparte-composer-cancel.d.ts.map +1 -0
  25. package/dist/components/composer/aparte-composer-input.d.ts +63 -0
  26. package/dist/components/composer/aparte-composer-input.d.ts.map +1 -0
  27. package/dist/components/composer/aparte-composer-send.d.ts +25 -0
  28. package/dist/components/composer/aparte-composer-send.d.ts.map +1 -0
  29. package/dist/components/composer/aparte-composer.d.ts +150 -0
  30. package/dist/components/composer/aparte-composer.d.ts.map +1 -0
  31. package/dist/components/composer/index.d.ts +9 -0
  32. package/dist/components/composer/index.d.ts.map +1 -0
  33. package/dist/components/conversation-list/aparte-conversation-list.d.ts +50 -0
  34. package/dist/components/conversation-list/aparte-conversation-list.d.ts.map +1 -0
  35. package/dist/components/conversation-list/index.d.ts +2 -0
  36. package/dist/components/conversation-list/index.d.ts.map +1 -0
  37. package/dist/components/elicitation/aparte-elicitation.d.ts +29 -0
  38. package/dist/components/elicitation/aparte-elicitation.d.ts.map +1 -0
  39. package/dist/components/index.d.ts +10 -0
  40. package/dist/components/index.d.ts.map +1 -0
  41. package/dist/components/status/aparte-chat-status.d.ts +34 -0
  42. package/dist/components/status/aparte-chat-status.d.ts.map +1 -0
  43. package/dist/components/status/index.d.ts +2 -0
  44. package/dist/components/status/index.d.ts.map +1 -0
  45. package/dist/components/viewport/aparte-chat-viewport.d.ts +358 -0
  46. package/dist/components/viewport/aparte-chat-viewport.d.ts.map +1 -0
  47. package/dist/components/viewport/index.d.ts +2 -0
  48. package/dist/components/viewport/index.d.ts.map +1 -0
  49. package/dist/config/action-provider.d.ts +59 -0
  50. package/dist/config/action-provider.d.ts.map +1 -0
  51. package/dist/config/aparte-config.d.ts +490 -0
  52. package/dist/config/aparte-config.d.ts.map +1 -0
  53. package/dist/config/attachment-renderer.d.ts +28 -0
  54. package/dist/config/attachment-renderer.d.ts.map +1 -0
  55. package/dist/config/avatar-provider.d.ts +35 -0
  56. package/dist/config/avatar-provider.d.ts.map +1 -0
  57. package/dist/config/bubble-shell-renderer.d.ts +41 -0
  58. package/dist/config/bubble-shell-renderer.d.ts.map +1 -0
  59. package/dist/config/config-context.d.ts +47 -0
  60. package/dist/config/config-context.d.ts.map +1 -0
  61. package/dist/config/error-renderer.d.ts +26 -0
  62. package/dist/config/error-renderer.d.ts.map +1 -0
  63. package/dist/config/icon-provider.d.ts +63 -0
  64. package/dist/config/icon-provider.d.ts.map +1 -0
  65. package/dist/config/index.d.ts +19 -0
  66. package/dist/config/index.d.ts.map +1 -0
  67. package/dist/config/locale.d.ts +60 -0
  68. package/dist/config/locale.d.ts.map +1 -0
  69. package/dist/config/sanitize.d.ts +31 -0
  70. package/dist/config/sanitize.d.ts.map +1 -0
  71. package/dist/config/sibling-nav-renderer.d.ts +27 -0
  72. package/dist/config/sibling-nav-renderer.d.ts.map +1 -0
  73. package/dist/config/skeleton-provider.d.ts +26 -0
  74. package/dist/config/skeleton-provider.d.ts.map +1 -0
  75. package/dist/config/status-renderer.d.ts +23 -0
  76. package/dist/config/status-renderer.d.ts.map +1 -0
  77. package/dist/conversations/conversation-controller.d.ts +126 -0
  78. package/dist/conversations/conversation-controller.d.ts.map +1 -0
  79. package/dist/conversations/conversation-manager.d.ts +98 -0
  80. package/dist/conversations/conversation-manager.d.ts.map +1 -0
  81. package/dist/conversations/index.d.ts +5 -0
  82. package/dist/conversations/index.d.ts.map +1 -0
  83. package/dist/conversations/types.d.ts +172 -0
  84. package/dist/conversations/types.d.ts.map +1 -0
  85. package/dist/custom-elements.json +15833 -0
  86. package/dist/elicitation/index.d.ts +20 -0
  87. package/dist/elicitation/index.d.ts.map +1 -0
  88. package/dist/elicitation/panel.d.ts +18 -0
  89. package/dist/elicitation/panel.d.ts.map +1 -0
  90. package/dist/elicitation/types.d.ts +98 -0
  91. package/dist/elicitation/types.d.ts.map +1 -0
  92. package/dist/host/aparte-chat-host.d.ts +176 -0
  93. package/dist/host/aparte-chat-host.d.ts.map +1 -0
  94. package/dist/host/index.d.ts +2 -0
  95. package/dist/host/index.d.ts.map +1 -0
  96. package/dist/index-D89k-n2Q.js +6294 -0
  97. package/dist/index-D89k-n2Q.js.map +1 -0
  98. package/dist/index.css +2554 -0
  99. package/dist/index.d.ts +62 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +3763 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/index.node.d.ts +53 -0
  104. package/dist/index.node.d.ts.map +1 -0
  105. package/dist/index.node.js +49 -0
  106. package/dist/index.node.js.map +1 -0
  107. package/dist/interop/element-props.d.ts +23 -0
  108. package/dist/interop/element-props.d.ts.map +1 -0
  109. package/dist/parsers/aparte-event-stream.d.ts +13 -0
  110. package/dist/parsers/aparte-event-stream.d.ts.map +1 -0
  111. package/dist/parsers/aparte-stream-parser.d.ts +137 -0
  112. package/dist/parsers/aparte-stream-parser.d.ts.map +1 -0
  113. package/dist/parsers/index.d.ts +4 -0
  114. package/dist/parsers/index.d.ts.map +1 -0
  115. package/dist/primitives/index.d.ts +8 -0
  116. package/dist/primitives/index.d.ts.map +1 -0
  117. package/dist/primitives/progress-spinner/aparte-progress-spinner.d.ts +25 -0
  118. package/dist/primitives/progress-spinner/aparte-progress-spinner.d.ts.map +1 -0
  119. package/dist/primitives/progress-spinner/index.d.ts +2 -0
  120. package/dist/primitives/progress-spinner/index.d.ts.map +1 -0
  121. package/dist/primitives/select/aparte-optgroup.d.ts +32 -0
  122. package/dist/primitives/select/aparte-optgroup.d.ts.map +1 -0
  123. package/dist/primitives/select/aparte-option.d.ts +30 -0
  124. package/dist/primitives/select/aparte-option.d.ts.map +1 -0
  125. package/dist/primitives/select/aparte-select.d.ts +74 -0
  126. package/dist/primitives/select/aparte-select.d.ts.map +1 -0
  127. package/dist/primitives/select/index.d.ts +9 -0
  128. package/dist/primitives/select/index.d.ts.map +1 -0
  129. package/dist/renderers/index.d.ts +5 -0
  130. package/dist/renderers/index.d.ts.map +1 -0
  131. package/dist/renderers/segment-renderers.d.ts +31 -0
  132. package/dist/renderers/segment-renderers.d.ts.map +1 -0
  133. package/dist/runtime/message-repository.d.ts +111 -0
  134. package/dist/runtime/message-repository.d.ts.map +1 -0
  135. package/dist/transport/backend-handler.d.ts +50 -0
  136. package/dist/transport/backend-handler.d.ts.map +1 -0
  137. package/dist/transport/backend-transport.d.ts +39 -0
  138. package/dist/transport/backend-transport.d.ts.map +1 -0
  139. package/dist/transport/direct-transport.d.ts +36 -0
  140. package/dist/transport/direct-transport.d.ts.map +1 -0
  141. package/dist/transport/index.d.ts +6 -0
  142. package/dist/transport/index.d.ts.map +1 -0
  143. package/dist/transport/types.d.ts +73 -0
  144. package/dist/transport/types.d.ts.map +1 -0
  145. package/dist/types/chat.d.ts +223 -0
  146. package/dist/types/chat.d.ts.map +1 -0
  147. package/dist/types/errors.d.ts +25 -0
  148. package/dist/types/errors.d.ts.map +1 -0
  149. package/dist/types/event-map.d.ts +41 -0
  150. package/dist/types/event-map.d.ts.map +1 -0
  151. package/dist/types/events.d.ts +290 -0
  152. package/dist/types/events.d.ts.map +1 -0
  153. package/dist/types/imperative-api.d.ts +38 -0
  154. package/dist/types/imperative-api.d.ts.map +1 -0
  155. package/dist/types/index.d.ts +22 -0
  156. package/dist/types/index.d.ts.map +1 -0
  157. package/dist/types/model-provider.d.ts +229 -0
  158. package/dist/types/model-provider.d.ts.map +1 -0
  159. package/dist/types/models.d.ts +173 -0
  160. package/dist/types/models.d.ts.map +1 -0
  161. package/dist/types/parsers.d.ts +42 -0
  162. package/dist/types/parsers.d.ts.map +1 -0
  163. package/dist/types/providers.d.ts +93 -0
  164. package/dist/types/providers.d.ts.map +1 -0
  165. package/dist/types/segments.d.ts +221 -0
  166. package/dist/types/segments.d.ts.map +1 -0
  167. package/dist/types/theming.d.ts +44 -0
  168. package/dist/types/theming.d.ts.map +1 -0
  169. package/dist/types/tools.d.ts +98 -0
  170. package/dist/types/tools.d.ts.map +1 -0
  171. package/dist/utils/assert-never.d.ts +9 -0
  172. package/dist/utils/assert-never.d.ts.map +1 -0
  173. package/dist/utils/css-escape.d.ts +15 -0
  174. package/dist/utils/css-escape.d.ts.map +1 -0
  175. package/package.json +68 -0
@@ -0,0 +1,153 @@
1
+ import type { AparteSegment, AparteAttachment, AparteUsage, AparteMessage } from '../../types/index.js';
2
+ /**
3
+ * AparteChatBubble - The Render
4
+ *
5
+ * Message component supporting both simple content and rich segments.
6
+ * Uses Light DOM for global CSS styling.
7
+ */
8
+ export declare class AparteChatBubble extends HTMLElement {
9
+ private _contentEl;
10
+ private _segmentsEl;
11
+ private _attachmentsEl;
12
+ private _actionBarEl;
13
+ private _branchPickerEl;
14
+ private _content;
15
+ private _streaming;
16
+ private _segments;
17
+ private _role;
18
+ private _attachments;
19
+ private _usage;
20
+ /** Cleanup returned by the avatar provider — called on disconnect/re-render. */
21
+ private _avatarCleanup;
22
+ /** Sibling count for tree-based branch navigation (set by setSiblings()) */
23
+ private _siblingCount;
24
+ /** Sibling index for tree-based branch navigation (set by setSiblings()) */
25
+ private _siblingIndex;
26
+ /** True while the user-message inline editor is open. */
27
+ private _editing;
28
+ /** The live inline editor (the composer's contenteditable primitive), present only while `_editing`. */
29
+ private _editInput;
30
+ static get observedAttributes(): string[];
31
+ constructor();
32
+ private _onConfigChange;
33
+ /**
34
+ * Config governing this bubble: the instance config of the nearest
35
+ * `[data-aparte-host]` boundary, else the global singleton. Resolved live
36
+ * (a single `closest()`) rather than cached — the boundary may be attached
37
+ * AFTER this bubble mounts (AparteChatHost.bind() runs post-mount), so a
38
+ * connect-time cache would freeze the wrong config.
39
+ */
40
+ private get _cfg();
41
+ connectedCallback(): void;
42
+ disconnectedCallback(): void;
43
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
44
+ /** Append a token chunk (for streaming) */
45
+ appendToken(chunk: string): void;
46
+ /** Set content directly */
47
+ setContent(content: string): void;
48
+ /** Get current content */
49
+ getContent(): string;
50
+ /** Set segments for rich content */
51
+ setSegments(segments: AparteSegment[]): void;
52
+ /** Add a segment */
53
+ addSegment(segment: AparteSegment): void;
54
+ /** Update a specific segment */
55
+ updateSegment(segmentId: string, updates: Partial<AparteSegment>): void;
56
+ /** Append content to a segment */
57
+ appendToSegment(segmentId: string, content: string): void;
58
+ /** Get all segments */
59
+ getSegments(): AparteSegment[];
60
+ /** Remove a segment by id (e.g. to discard a transient waiting indicator) */
61
+ removeSegment(segmentId: string): void;
62
+ /** Set attachments (chips shown above message content, user role only) */
63
+ setAttachments(attachments: AparteAttachment[]): void;
64
+ /**
65
+ * Set token usage + timing for this message (assistant only).
66
+ * Renders the info ("i") action in the action bar; clicking it opens
67
+ * the app-owned stats popover (`aparte-message-info`).
68
+ */
69
+ setUsage(usage: AparteUsage | null | undefined): void;
70
+ /**
71
+ * Update the branch picker UI for tree-based navigation.
72
+ * The viewport calls this after a branch switch or re-render.
73
+ * Prev/Next clicks dispatch `aparte-branch-navigate` (bubbles: true) so
74
+ * the viewport can handle the actual tree switch.
75
+ */
76
+ setSiblings(count: number, index: number): void;
77
+ /**
78
+ * Atomic update for the message
79
+ */
80
+ updateMessage(updates: Partial<AparteMessage>): void;
81
+ private _appendSegmentEl;
82
+ private _applySegmentUpdate;
83
+ private _getDisplayName;
84
+ private _getAvatarInitial;
85
+ private _render;
86
+ /**
87
+ * Hand the avatar host element off to the registered AvatarProvider, if
88
+ * any. Falls back to the default initial / image rendered by `_render()`
89
+ * when no provider is set.
90
+ */
91
+ private _renderAvatar;
92
+ private _updateRole;
93
+ private _updateName;
94
+ private _updateContent;
95
+ /**
96
+ * Apply the registered syntax-highlight provider to the code blocks produced
97
+ * by the Markdown provider in the simple-content path. Provider-agnostic: a
98
+ * full-block provider (e.g. Shiki) returns `<pre>…</pre>` so we replace the
99
+ * element; a token provider (e.g. Prism, highlight.js) returns inner HTML so
100
+ * we fill the existing `<code>`. No-op when no highlighter is installed.
101
+ */
102
+ private _highlightContentCode;
103
+ private _renderSegments;
104
+ /**
105
+ * Reflect the error state on the bubble: `data-error` on `.aparte-message` while
106
+ * an error segment is present. Derived from segments (not the message `status`
107
+ * attribute) so it works identically in vanilla and in every wrapper — the
108
+ * error segment flows through the reactive list in all of them. CSS themes
109
+ * `.aparte-message[data-error]`; custom error content is via setErrorRenderer.
110
+ */
111
+ private _reflectError;
112
+ private _updateTimestamp;
113
+ private _getAriaLabel;
114
+ private _updateAttachments;
115
+ /** Uppercased file extension (≤4 chars), or 'FILE' when there is none. */
116
+ private _fileExt;
117
+ private _setupBranchPickerListeners;
118
+ private _updateBranchPicker;
119
+ private _updateActionBar;
120
+ /** Append the registered custom action buttons for this bubble's role. */
121
+ private _appendCustomActions;
122
+ /** Build the `<button>` HTML for a single named action (shared by flag + per-role rendering). */
123
+ private _actionButtonHtml;
124
+ /** Render the edit-mode action bar: ✓ save (green) + ✗ cancel (red). */
125
+ private _renderEditActions;
126
+ private _handleActionClick;
127
+ /**
128
+ * Open the inline editor for a user message. Idempotent — a second `edit`
129
+ * click while already editing is a no-op (no stacked editors).
130
+ *
131
+ * The editor reuses the composer's contenteditable primitive
132
+ * (`<aparte-composer-input>`) so editing is iso with composing: same autosize,
133
+ * IME, paste and styling. With no `<aparte-composer>` root it runs standalone —
134
+ * `Enter` (Shift+Enter = newline) surfaces as `aparte-composer-submit`, which we
135
+ * treat as save; `Esc` cancels.
136
+ */
137
+ private _enterEditMode;
138
+ /**
139
+ * Leave edit mode. When `save` is true and the text actually changed, emits
140
+ * `aparte-edit`; otherwise restores the original message untouched. Always
141
+ * restores the normal action bar and removes the inline editor.
142
+ */
143
+ private _exitEditMode;
144
+ private _resolveTargetId;
145
+ private _escapeHtml;
146
+ private _updateStreaming;
147
+ }
148
+ declare global {
149
+ interface HTMLElementTagNameMap {
150
+ 'aparte-chat-bubble': AparteChatBubble;
151
+ }
152
+ }
153
+ //# sourceMappingURL=aparte-chat-bubble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aparte-chat-bubble.d.ts","sourceRoot":"","sources":["../../../src/components/bubble/aparte-chat-bubble.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import type { AparteAttachment, AparteMessage, AparteSegment, AparteSiblingInfo, AparteUsage } from '../../types/index.js';
2
+ /**
3
+ * Minimal structural type representing the imperative slice of `AparteChatBubble`
4
+ * needed to reconcile a message into a bubble. Declared loosely so framework
5
+ * wrappers can pass any element that exposes the same surface (custom element
6
+ * registered cross-context, mocked test double, etc.) without dragging the
7
+ * concrete `AparteChatBubble` class through every wrapper's typing.
8
+ */
9
+ export interface SyncableBubble {
10
+ getSegments?: () => AparteSegment[];
11
+ setSegments?: (segments: AparteSegment[]) => void;
12
+ updateSegment?: (segmentId: string, updates: Partial<AparteSegment>) => void;
13
+ setContent?: (content: string) => void;
14
+ setAttachments?: (attachments: AparteAttachment[]) => void;
15
+ setSiblings?: (count: number, index: number) => void;
16
+ setUsage?: (usage: AparteUsage | null | undefined) => void;
17
+ }
18
+ /**
19
+ * Reconcile a bubble element with a message and optional sibling metadata.
20
+ *
21
+ * **For framework wrappers** (Angular, React, Vue, Svelte) that own bubble
22
+ * creation through their own template engine. After the framework has
23
+ * mounted/diffed its bubbles, call this helper for each (bubble, message,
24
+ * siblingInfo) tuple to push the imperative state — segments, attachments,
25
+ * and the sibling-picker — that cannot travel via attribute bindings.
26
+ *
27
+ * The default vanilla viewport (`AparteChatViewport` with `_frameworkManagedDOM
28
+ * === false`) uses this helper internally, so the contract stays in lockstep
29
+ * across the core and every wrapper.
30
+ *
31
+ * Idempotent. Safe to call on every render. Segment count drives the strategy:
32
+ * - same count → reconcile content per segment (cheap, preserves user-toggled
33
+ * <details> open/closed state on thinking blocks, etc.)
34
+ * - count changed (new segment streamed, branch switched, etc.) → full rebuild
35
+ * via setSegments
36
+ *
37
+ * Plain `content` is only pushed when no segments are present — segments take
38
+ * precedence in the bubble's render logic.
39
+ *
40
+ * Sibling-picker is only shown when `siblingInfo.count > 1`; below that, the
41
+ * bubble hides the picker on its own.
42
+ */
43
+ export declare function populateBubbleFromMessage(bubble: SyncableBubble, message: AparteMessage, siblingInfo?: AparteSiblingInfo): void;
44
+ //# sourceMappingURL=bubble-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bubble-sync.d.ts","sourceRoot":"","sources":["../../../src/components/bubble/bubble-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,WAAW,EACd,MAAM,sBAAsB,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC3B,WAAW,CAAC,EAAE,MAAM,aAAa,EAAE,CAAC;IACpC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IAClD,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IAC7E,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC3D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,aAAa,EACtB,WAAW,CAAC,EAAE,iBAAiB,GAChC,IAAI,CAsCN"}
@@ -0,0 +1,4 @@
1
+ export { AparteChatBubble } from './aparte-chat-bubble.js';
2
+ export { populateBubbleFromMessage } from './bubble-sync.js';
3
+ export type { SyncableBubble } from './bubble-sync.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/bubble/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,49 @@
1
+ import type { AparteChatViewport } from '../viewport/aparte-chat-viewport.js';
2
+ import type { AparteComposer } from '../composer/aparte-composer.js';
3
+ /**
4
+ * AparteChat - The Shell
5
+ *
6
+ * The container element for a chat. Wrap a `<aparte-chat-viewport>` and a
7
+ * `<aparte-composer>` in it and it lays them out as a flex column — the viewport
8
+ * grows and scrolls, the composer sits below. Provide your own children for full
9
+ * control (custom composer, extra buttons), or leave it empty and it fills in a
10
+ * sensible default composition. Uses Light DOM for global CSS styling.
11
+ *
12
+ * Being a component (not a bare `<div>`), it also owns behaviour a wrapper div
13
+ * can't: with `center-empty`, it watches its own viewport and keeps the composer
14
+ * centered as a welcome state until the first message, then slides to the normal
15
+ * layout — no external JavaScript.
16
+ *
17
+ * Presentational only: it does NOT wire a transport/client. Attach an
18
+ * `AparteClient`, or handle `aparte-send` yourself, as with the primitives.
19
+ * Size the element via CSS (a height, or let it fill a sized parent).
20
+ *
21
+ * @element aparte-chat
22
+ * @attr placeholder - Placeholder for the composer input (default composition)
23
+ * @attr disabled - Disables the composer
24
+ * @attr center-empty - Center the composer as a welcome state until the first message, then slide to the normal layout
25
+ */
26
+ export declare class AparteChat extends HTMLElement {
27
+ static get observedAttributes(): string[];
28
+ private _observer;
29
+ connectedCallback(): void;
30
+ disconnectedCallback(): void;
31
+ attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void;
32
+ /** The message viewport (yours or the default), or `null` before connect. */
33
+ get viewport(): AparteChatViewport | null;
34
+ /** The composer (yours or the default), or `null` before connect. */
35
+ get composer(): AparteComposer | null;
36
+ private _render;
37
+ /** Set an attribute on the inner composer only when the shell carries it. */
38
+ private _forwardAttr;
39
+ /** Start/stop watching the viewport so `center-empty` toggles itself. */
40
+ private _syncEmptyWatch;
41
+ private _updateEmpty;
42
+ private _escapeAttr;
43
+ }
44
+ declare global {
45
+ interface HTMLElementTagNameMap {
46
+ 'aparte-chat': AparteChat;
47
+ }
48
+ }
49
+ //# sourceMappingURL=aparte-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aparte-chat.d.ts","sourceRoot":"","sources":["../../../src/components/chat/aparte-chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,UAAW,SAAQ,WAAW;IACzC,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,OAAO,CAAC,SAAS,CAAiC;IAElD,iBAAiB,IAAI,IAAI;IAOzB,oBAAoB,IAAI,IAAI;IAK5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAe9F,6EAA6E;IAC7E,IAAI,QAAQ,IAAI,kBAAkB,GAAG,IAAI,CAExC;IAED,qEAAqE;IACrE,IAAI,QAAQ,IAAI,cAAc,GAAG,IAAI,CAEpC;IAED,OAAO,CAAC,OAAO;IAiCf,6EAA6E;IAC7E,OAAO,CAAC,YAAY;IAKpB,yEAAyE;IACzE,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,WAAW;CAGpB;AAOD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
@@ -0,0 +1,2 @@
1
+ export { AparteChat } from './aparte-chat.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @element aparte-composer-action
3
+ *
4
+ * Generic action button primitive for <aparte-composer>.
5
+ * The consumer declares it directly in markup — no global registration needed.
6
+ *
7
+ * @attr icon - Icon key for AparteConfig.getIcon(), or raw SVG/HTML starting with `<`
8
+ * @attr label - Accessible label (also used as tooltip)
9
+ * @attr disabled - Disables the button
10
+ *
11
+ * @fires aparte-action-click - Bubbles up when the button is clicked
12
+ * detail: { actionId: string, composer: AparteComposer | null }
13
+ *
14
+ * @slot default - Optional: override button content entirely
15
+ *
16
+ * @example
17
+ * <aparte-composer-action icon="star" label="Favourite"
18
+ * (click)="onFavourite()">
19
+ * </aparte-composer-action>
20
+ */
21
+ export declare class AparteComposerAction extends HTMLElement {
22
+ private _button;
23
+ private _unsubscribes;
24
+ private _onClick;
25
+ static get observedAttributes(): string[];
26
+ connectedCallback(): void;
27
+ disconnectedCallback(): void;
28
+ attributeChangedCallback(name: string, _old: string | null, value: string | null): void;
29
+ private _getRoot;
30
+ private _render;
31
+ private _connectToRoot;
32
+ private _handleClick;
33
+ private _resolveIcon;
34
+ /** Escape a value before it lands in a double-quoted HTML attribute. */
35
+ private _escapeAttr;
36
+ }
37
+ //# sourceMappingURL=aparte-composer-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aparte-composer-action.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-action.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACjD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,QAAQ,CAAgC;IAEhD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAM5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAgBvF,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAsBf,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,YAAY;IAMpB,wEAAwE;IACxE,OAAO,CAAC,WAAW;CAGtB"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @element aparte-composer-add-attachment
3
+ *
4
+ * File picker button for <aparte-composer>.
5
+ * Opens a native file picker on click, then pushes picked files to root.addAttachments().
6
+ * Also sets up drag & drop on the nearest <aparte-composer> root.
7
+ *
8
+ * @attr accept - MIME types / extensions passed to the file input (e.g. "image/*,.pdf")
9
+ * @attr multiple - Allow multiple file selection (default: true)
10
+ */
11
+ export declare class AparteComposerAddAttachment extends HTMLElement {
12
+ private _button;
13
+ private _dragCleanup;
14
+ private _unsubscribes;
15
+ private _onClick;
16
+ static get observedAttributes(): string[];
17
+ connectedCallback(): void;
18
+ disconnectedCallback(): void;
19
+ attributeChangedCallback(name: string, _old: string | null, value: string | null): void;
20
+ private _getRoot;
21
+ private _render;
22
+ private _connectToRoot;
23
+ private _handleClick;
24
+ private _setupDragDrop;
25
+ private _defaultIcon;
26
+ }
27
+ //# sourceMappingURL=aparte-composer-add-attachment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aparte-composer-add-attachment.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-add-attachment.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,qBAAa,2BAA4B,SAAQ,WAAW;IACxD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,QAAQ,CAAgC;IAEhD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAO5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQvF,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,YAAY;CAGvB"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @element aparte-composer-attachments
3
+ *
4
+ * Renders a square thumbnail tile for each file attached to the root composer.
5
+ * Image files show the actual picture; other files show an extension badge.
6
+ * The filename and a remove (✗) button surface on hover; clicking an image
7
+ * opens it full-size (dispatches `aparte-attachment-preview`).
8
+ * Automatically hidden when there are no attachments.
9
+ * Must be a descendant of <aparte-composer>.
10
+ */
11
+ export declare class AparteComposerAttachments extends HTMLElement {
12
+ private _unsubscribes;
13
+ /** Object URLs minted for image previews — revoked on re-render/disconnect. */
14
+ private _objectUrls;
15
+ connectedCallback(): void;
16
+ disconnectedCallback(): void;
17
+ private _getRoot;
18
+ private _connectToRoot;
19
+ /** Release the previous render's blob URLs so they don't leak. */
20
+ private _revokeUrls;
21
+ private _render;
22
+ /** Uppercased file extension (≤4 chars), or 'FILE' when there is none. */
23
+ private _ext;
24
+ private _escape;
25
+ }
26
+ //# sourceMappingURL=aparte-composer-attachments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aparte-composer-attachments.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-attachments.ts"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,qBAAa,yBAA0B,SAAQ,WAAW;IACtD,OAAO,CAAC,aAAa,CAAsB;IAC3C,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAAgB;IAEnC,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,cAAc;IAYtB,kEAAkE;IAClE,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,OAAO;IA+Cf,0EAA0E;IAC1E,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,OAAO;CAGlB"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @element aparte-composer-cancel
3
+ *
4
+ * Cancel/stop streaming button primitive for <aparte-composer>.
5
+ * Must be a descendant of <aparte-composer>.
6
+ *
7
+ * Hidden when not streaming. Visible only during active streaming.
8
+ */
9
+ export declare class AparteComposerCancel extends HTMLElement {
10
+ private _button;
11
+ private _unsubscribes;
12
+ private _onClick;
13
+ connectedCallback(): void;
14
+ disconnectedCallback(): void;
15
+ private _getRoot;
16
+ private _render;
17
+ private _connectToRoot;
18
+ private _handleClick;
19
+ private _getStopIcon;
20
+ }
21
+ //# sourceMappingURL=aparte-composer-cancel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aparte-composer-cancel.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-cancel.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,WAAW;IACjD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,QAAQ,CAAgC;IAEhD,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,YAAY;CAGvB"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @element aparte-composer-input
3
+ *
4
+ * Contenteditable text input primitive.
5
+ * Must be a descendant of <aparte-composer>.
6
+ *
7
+ * Behaviour: Enter submits (calls root.submit()), Shift+Enter inserts newline.
8
+ * Auto-expands up to max-height. Paste strips HTML, handles image paste.
9
+ *
10
+ * @attr placeholder - Placeholder text (fallback: reads from aparte-composer)
11
+ * @attr max-height - Max height in px before scroll (default: 200)
12
+ * @attr min-height - Min height in px. When omitted, the stylesheet's
13
+ * min-height governs (44px in aparte.css) — so themes can
14
+ * resize the editor in pure CSS without being fought by
15
+ * an inline height.
16
+ */
17
+ export declare class AparteComposerInput extends HTMLElement {
18
+ private _editor;
19
+ private _maxHeight;
20
+ private _minHeight;
21
+ private _unsubscribes;
22
+ private _onInput;
23
+ private _onKeydown;
24
+ private _onFocus;
25
+ private _onBlur;
26
+ private _onPaste;
27
+ static get observedAttributes(): string[];
28
+ connectedCallback(): void;
29
+ disconnectedCallback(): void;
30
+ attributeChangedCallback(name: string, _old: string | null, value: string | null): void;
31
+ getValue(): string;
32
+ setValue(value: string): void;
33
+ clear(): void;
34
+ focus(): void;
35
+ blur(): void;
36
+ /** Focus the editor and place the caret at the very end of its content. */
37
+ focusEnd(): void;
38
+ private _getRoot;
39
+ private _getPlaceholder;
40
+ private _render;
41
+ private _connectToRoot;
42
+ private _handleInput;
43
+ private _handleKeydown;
44
+ private _handleFocus;
45
+ private _handleBlur;
46
+ private _handlePaste;
47
+ private _adjustHeight;
48
+ /**
49
+ * The first `_adjustHeight()` runs synchronously in `_render()` on connect —
50
+ * before the stylesheet, flex layout and web fonts have necessarily settled.
51
+ * On an unstabilized layout `scrollHeight` can read inflated, leaving the
52
+ * editor stuck tall (misaligned with the composer controls) until the first
53
+ * keystroke re-measures it. Re-measure once the layout is ready so it's
54
+ * correct from the first paint.
55
+ */
56
+ private _scheduleInitialReflow;
57
+ private _updatePlaceholder;
58
+ private _updatePlaceholderVisibility;
59
+ private _updateDisabled;
60
+ /** Escape a value before it lands in a double-quoted HTML attribute. */
61
+ private _escapeAttr;
62
+ }
63
+ //# sourceMappingURL=aparte-composer-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aparte-composer-input.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-input.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;IAChD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,UAAU,CAAO;IACzB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,QAAQ,CAAgC;IAChD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAAgC;IAEhD,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IAU5B,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IASvF,QAAQ,IAAI,MAAM;IAkBlB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ7B,KAAK,IAAI,IAAI;IAQJ,KAAK,IAAI,IAAI;IACb,IAAI,IAAI,IAAI;IAErB,2EAA2E;IAC3E,QAAQ,IAAI,IAAI;IAchB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,OAAO;IA8Bf,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,cAAc;IAoCtB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAmBpB,OAAO,CAAC,aAAa;IAmBrB;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,eAAe;IAMvB,wEAAwE;IACxE,OAAO,CAAC,WAAW;CAGtB"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @element aparte-composer-send
3
+ *
4
+ * Submit button primitive for <aparte-composer>.
5
+ * Must be a descendant of <aparte-composer>.
6
+ *
7
+ * - Disabled when composer value is empty, composer is disabled, or streaming
8
+ * - While streaming: shows stop icon and acts as cancel button
9
+ */
10
+ export declare class AparteComposerSend extends HTMLElement {
11
+ private _button;
12
+ private _unsubscribes;
13
+ private _onClick;
14
+ connectedCallback(): void;
15
+ disconnectedCallback(): void;
16
+ private _getRoot;
17
+ private _render;
18
+ private _connectToRoot;
19
+ private _handleClick;
20
+ private _syncState;
21
+ private _syncStreamingState;
22
+ private _getSendIcon;
23
+ private _getStopIcon;
24
+ }
25
+ //# sourceMappingURL=aparte-composer-send.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aparte-composer-send.d.ts","sourceRoot":"","sources":["../../../src/components/composer/aparte-composer-send.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IAC/C,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,aAAa,CAAsB;IAG3C,OAAO,CAAC,QAAQ,CAAgC;IAEhD,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAQ5B,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,cAAc;IA6CtB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;CAGvB"}