@aparte/angular 0.10.0 → 0.12.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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, Injectable, makeEnvironmentProviders, provideAppInitializer, DestroyRef, effect, ElementRef, signal, output, computed, numberAttribute, booleanAttribute, ViewChildren, ViewChild, Input, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, Component, Renderer2 } from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, makeEnvironmentProviders, provideAppInitializer, DestroyRef, effect, ElementRef, signal, output, computed, numberAttribute, booleanAttribute, ViewChildren, ViewChild, Input, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, Component, Renderer2, Directive, EventEmitter, HostListener, Output } from '@angular/core';
3
3
  import { AparteClient, aparteGlobalConfig, isAwaitingReply, uuid, AparteChatHost, APARTE_DEFAULT_UI_EVENTS, applyElementProps, AparteConversationManager } from '@aparte/core';
4
4
  export { aparteGlobalConfig } from '@aparte/core';
5
5
  import { NgTemplateOutlet } from '@angular/common';
@@ -765,6 +765,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
765
765
  * its own once the definition arrives, which is what makes `provideAparte`'s lazy
766
766
  * `plugins` loaders work.
767
767
  *
768
+ * A PLUGIN's event is not in the default forward list — that default is core's, and a
769
+ * third-party plugin's author cannot add to it, so listing ours would privilege our
770
+ * packages over theirs. Name it in `events` and it arrives; leave it out and the handler
771
+ * silently never fires, which is what this example used to do.
772
+ *
768
773
  * @example
769
774
  * ```html
770
775
  * <aparte-ui
@@ -774,6 +779,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
774
779
  * '--glow-opacity': '1',
775
780
  * '--glow-speed': '4s'
776
781
  * }"
782
+ * [events]="['aparte-model-change']"
777
783
  * (elementEvent)="onEvent($event)"
778
784
  * />
779
785
  * ```
@@ -924,6 +930,632 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
924
930
  type: Input
925
931
  }] } });
926
932
 
933
+ // AUTO-GENERATED by scripts/gen-element-bindings.mjs from this package's
934
+ // custom-elements.json. Do not edit: it is gitignored and rewritten every build.
935
+ // The source of every fact below is the element's own JSDoc.
936
+ /**
937
+ * A typed Angular surface for every element this package defines.
938
+ *
939
+ * Generated, and that is the point: a hand-written directive is a parallel structure over
940
+ * the manifest with nothing watching it, so an attribute added to an element would be
941
+ * typed in React, Vue and Svelte — which derive from the registry — and silently missing
942
+ * here. That happened, which is why this file is generated now.
943
+ *
944
+ * Outputs emit the event's DETAIL, not the `CustomEvent`, because
945
+ * `(selectChange)="pick($event.value)"` is the Angular idiom. Reach the event itself with
946
+ * a plain host listener when you need `stopPropagation`.
947
+ */
948
+ /**
949
+ * Writes one declared attribute onto the host element.
950
+ *
951
+ * `applyElementProps` is core's own rule, reused rather than reimplemented: a primitive
952
+ * goes through `setAttribute`, `true` becomes the empty presence attribute,
953
+ * `false`/`null`/`undefined` remove it, and only a value an attribute cannot carry is
954
+ * handed over as a property.
955
+ */
956
+ class AparteElementBase {
957
+ host = inject((ElementRef));
958
+ write(name, value) {
959
+ applyElementProps(this.host.nativeElement, { [name]: value });
960
+ }
961
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteElementBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
962
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: AparteElementBase, isStandalone: true, ngImport: i0 });
963
+ }
964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteElementBase, decorators: [{
965
+ type: Directive
966
+ }] });
967
+ /** `<aparte-chat-bubble>` — One message: plain content or a list of rich segments, in light DOM. */
968
+ class AparteChatBubbleDirective extends AparteElementBase {
969
+ /** `user` / `assistant` / `system`; what the CSS keys off. */
970
+ set messageRole(v) { this.write('data-role', v); }
971
+ /** Plain text content, for a bubble with no segments. */
972
+ set content(v) { this.write('content', v); }
973
+ /** Epoch milliseconds OR a date string: `_updateTimestamp` accepts either and only coerces when the value is numeric. */
974
+ set timestamp(v) { this.write('timestamp', v); }
975
+ /** How streaming and the action bar address this bubble. */
976
+ set messageId(v) { this.write('message-id', v); }
977
+ /** Hides the action bar and shows the caret while a reply is in flight. */
978
+ set streaming(v) { this.write('streaming', v); }
979
+ /** The display name in the header. */
980
+ set name(v) { this.write('name', v); }
981
+ /** An attached image was clicked, asking the app to open it full-size. */
982
+ attachmentPreview = new EventEmitter();
983
+ /** A custom action-bar button was pressed. */
984
+ action = new EventEmitter();
985
+ /** Retry was pressed; the host forks the turn. */
986
+ retry = new EventEmitter();
987
+ /** Thumbs up or down. */
988
+ feedback = new EventEmitter();
989
+ /** The info affordance was pressed. */
990
+ messageInfo = new EventEmitter();
991
+ /** An edit was saved. */
992
+ edit = new EventEmitter();
993
+ /** The `‹1/2›` picker moved between sibling versions. */
994
+ branchNavigate = new EventEmitter();
995
+ onAttachmentPreview(e) { this.attachmentPreview.emit(e.detail); }
996
+ onAction(e) { this.action.emit(e.detail); }
997
+ onRetry(e) { this.retry.emit(e.detail); }
998
+ onFeedback(e) { this.feedback.emit(e.detail); }
999
+ onMessageInfo(e) { this.messageInfo.emit(e.detail); }
1000
+ onEdit(e) { this.edit.emit(e.detail); }
1001
+ onBranchNavigate(e) { this.branchNavigate.emit(e.detail); }
1002
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteChatBubbleDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1003
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteChatBubbleDirective, isStandalone: true, selector: "aparte-chat-bubble", inputs: { messageRole: "messageRole", content: "content", timestamp: "timestamp", messageId: "messageId", streaming: ["streaming", "streaming", booleanAttribute], name: "name" }, outputs: { attachmentPreview: "attachmentPreview", action: "action", retry: "retry", feedback: "feedback", messageInfo: "messageInfo", edit: "edit", branchNavigate: "branchNavigate" }, host: { listeners: { "aparte-attachment-preview": "onAttachmentPreview($event)", "aparte-action": "onAction($event)", "aparte-retry": "onRetry($event)", "aparte-feedback": "onFeedback($event)", "aparte-message-info": "onMessageInfo($event)", "aparte-edit": "onEdit($event)", "aparte-branch-navigate": "onBranchNavigate($event)" } }, usesInheritance: true, ngImport: i0 });
1004
+ }
1005
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteChatBubbleDirective, decorators: [{
1006
+ type: Directive,
1007
+ args: [{ selector: 'aparte-chat-bubble', standalone: true }]
1008
+ }], propDecorators: { messageRole: [{
1009
+ type: Input
1010
+ }], content: [{
1011
+ type: Input
1012
+ }], timestamp: [{
1013
+ type: Input
1014
+ }], messageId: [{
1015
+ type: Input
1016
+ }], streaming: [{
1017
+ type: Input,
1018
+ args: [{ transform: booleanAttribute }]
1019
+ }], name: [{
1020
+ type: Input
1021
+ }], attachmentPreview: [{
1022
+ type: Output
1023
+ }], action: [{
1024
+ type: Output
1025
+ }], retry: [{
1026
+ type: Output
1027
+ }], feedback: [{
1028
+ type: Output
1029
+ }], messageInfo: [{
1030
+ type: Output
1031
+ }], edit: [{
1032
+ type: Output
1033
+ }], branchNavigate: [{
1034
+ type: Output
1035
+ }], onAttachmentPreview: [{
1036
+ type: HostListener,
1037
+ args: ['aparte-attachment-preview', ['$event']]
1038
+ }], onAction: [{
1039
+ type: HostListener,
1040
+ args: ['aparte-action', ['$event']]
1041
+ }], onRetry: [{
1042
+ type: HostListener,
1043
+ args: ['aparte-retry', ['$event']]
1044
+ }], onFeedback: [{
1045
+ type: HostListener,
1046
+ args: ['aparte-feedback', ['$event']]
1047
+ }], onMessageInfo: [{
1048
+ type: HostListener,
1049
+ args: ['aparte-message-info', ['$event']]
1050
+ }], onEdit: [{
1051
+ type: HostListener,
1052
+ args: ['aparte-edit', ['$event']]
1053
+ }], onBranchNavigate: [{
1054
+ type: HostListener,
1055
+ args: ['aparte-branch-navigate', ['$event']]
1056
+ }] } });
1057
+ /** `<aparte-chat-status>` — A standalone status line — a light-DOM typing indicator the APP owns. Core never turns it on by itself, so it can never compete with the bubble's own waiting state. */
1058
+ class AparteChatStatusDirective extends AparteElementBase {
1059
+ /** Shows or hides the indicator. */
1060
+ set visible(v) { this.write('visible', v); }
1061
+ /** The line to show. Defaults to the locale's typing string. */
1062
+ set text(v) { this.write('text', v); }
1063
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteChatStatusDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1064
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteChatStatusDirective, isStandalone: true, selector: "aparte-chat-status", inputs: { visible: ["visible", "visible", booleanAttribute], text: "text" }, usesInheritance: true, ngImport: i0 });
1065
+ }
1066
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteChatStatusDirective, decorators: [{
1067
+ type: Directive,
1068
+ args: [{ selector: 'aparte-chat-status', standalone: true }]
1069
+ }], propDecorators: { visible: [{
1070
+ type: Input,
1071
+ args: [{ transform: booleanAttribute }]
1072
+ }], text: [{
1073
+ type: Input
1074
+ }] } });
1075
+ /** `<aparte-chat-viewport>` — The transcript surface: a light-DOM container with sticky scrolling, token streaming and segment-aware rendering. */
1076
+ class AparteChatViewportDirective extends AparteElementBase {
1077
+ /** How close to the bottom still counts as "at the bottom". */
1078
+ set scrollThreshold(v) { this.write('scroll-threshold', v); }
1079
+ /** Caps how many bubbles stay in the DOM; older ones are released. */
1080
+ set maxRenderedBubbles(v) { this.write('max-rendered-bubbles', v); }
1081
+ /** DEPRECATED. It used to evict messages from the model; it now only caps rendered bubbles, which is what `max-rendered-bubbles` says. For real history retention configure the conversation manager instead. */
1082
+ set maxMessages(v) { this.write('max-messages', v); }
1083
+ /** The wrapper's explicit hands-off signal: set it and this element composes none of its own children, because the framework owns them. All four wrappers set it; it was read by this element and declared by nothing until now. */
1084
+ set frameworkManaged(v) { this.write('framework-managed', v); }
1085
+ /** A segment grew or settled during a stream. */
1086
+ segmentUpdate = new EventEmitter();
1087
+ /** `clearAll()` finished emptying the transcript. No detail. */
1088
+ resetDone = new EventEmitter();
1089
+ /** The active branch path changed, after a retry fork or a navigation. Features: - Smart Scroll: Sticks to bottom when user is at bottom, stops on manual scroll up - appendToken(): For simple content streaming - appendToSegment(): For segment-aware streaming (thinking, code, etc.) - Internal message registry for memory management */
1090
+ pathChanged = new EventEmitter();
1091
+ onSegmentUpdate(e) { this.segmentUpdate.emit(e.detail); }
1092
+ onResetDone() { this.resetDone.emit(); }
1093
+ onPathChanged(e) { this.pathChanged.emit(e.detail); }
1094
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteChatViewportDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1095
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteChatViewportDirective, isStandalone: true, selector: "aparte-chat-viewport", inputs: { scrollThreshold: ["scrollThreshold", "scrollThreshold", numberAttribute], maxRenderedBubbles: ["maxRenderedBubbles", "maxRenderedBubbles", numberAttribute], maxMessages: ["maxMessages", "maxMessages", numberAttribute], frameworkManaged: ["frameworkManaged", "frameworkManaged", booleanAttribute] }, outputs: { segmentUpdate: "segmentUpdate", resetDone: "resetDone", pathChanged: "pathChanged" }, host: { listeners: { "aparte-segment-update": "onSegmentUpdate($event)", "aparte-reset-done": "onResetDone()", "aparte-path-changed": "onPathChanged($event)" } }, usesInheritance: true, ngImport: i0 });
1096
+ }
1097
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteChatViewportDirective, decorators: [{
1098
+ type: Directive,
1099
+ args: [{ selector: 'aparte-chat-viewport', standalone: true }]
1100
+ }], propDecorators: { scrollThreshold: [{
1101
+ type: Input,
1102
+ args: [{ transform: numberAttribute }]
1103
+ }], maxRenderedBubbles: [{
1104
+ type: Input,
1105
+ args: [{ transform: numberAttribute }]
1106
+ }], maxMessages: [{
1107
+ type: Input,
1108
+ args: [{ transform: numberAttribute }]
1109
+ }], frameworkManaged: [{
1110
+ type: Input,
1111
+ args: [{ transform: booleanAttribute }]
1112
+ }], segmentUpdate: [{
1113
+ type: Output
1114
+ }], resetDone: [{
1115
+ type: Output
1116
+ }], pathChanged: [{
1117
+ type: Output
1118
+ }], onSegmentUpdate: [{
1119
+ type: HostListener,
1120
+ args: ['aparte-segment-update', ['$event']]
1121
+ }], onResetDone: [{
1122
+ type: HostListener,
1123
+ args: ['aparte-reset-done']
1124
+ }], onPathChanged: [{
1125
+ type: HostListener,
1126
+ args: ['aparte-path-changed', ['$event']]
1127
+ }] } });
1128
+ /** `<aparte-composer>` — The root context for every `aparte-composer-*` primitive. It imposes no visual layout — the consumer owns the structure — and holds the shared state the parts read: the value, the streaming flag, pending attachments, the panel slot. */
1129
+ class AparteComposerDirective extends AparteElementBase {
1130
+ /** Forwarded to `<aparte-composer-input>` through the internal bus. */
1131
+ set placeholder(v) { this.write('placeholder', v); }
1132
+ /** Disables the whole composer, every part included. */
1133
+ set disabled(v) { this.write('disabled', v); }
1134
+ /** The id of the `<aparte-chat>` this composer drives. */
1135
+ set target(v) { this.write('target', v); }
1136
+ /** Enter sends and Shift+Enter breaks the line (the default); set it to the string `"false"` to swap them. Read lazily by the `submitOnEnter` getter rather than observed, which is why it was missing from the manifest — and so from every typed surface — while all four wrappers wrote it. */
1137
+ set submitOnEnter(v) { this.write('submit-on-enter', v ? '' : 'false'); }
1138
+ /** A message was submitted: the text, its attachments and the target. */
1139
+ send = new EventEmitter();
1140
+ /** The stop button was pressed. No detail; the two window events below carry the target. */
1141
+ cancel = new EventEmitter();
1142
+ /** Any of value / streaming / disabled / attachments / panel changed, folded into one event. */
1143
+ composerChange = new EventEmitter();
1144
+ onSend(e) { this.send.emit(e.detail); }
1145
+ onCancel() { this.cancel.emit(); }
1146
+ onComposerChange(e) { this.composerChange.emit(e.detail); }
1147
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1148
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteComposerDirective, isStandalone: true, selector: "aparte-composer", inputs: { placeholder: "placeholder", disabled: ["disabled", "disabled", booleanAttribute], target: "target", submitOnEnter: ["submitOnEnter", "submitOnEnter", booleanAttribute] }, outputs: { send: "send", cancel: "cancel", composerChange: "composerChange" }, host: { listeners: { "aparte-send": "onSend($event)", "aparte-cancel": "onCancel()", "aparte-composer-change": "onComposerChange($event)" } }, usesInheritance: true, ngImport: i0 });
1149
+ }
1150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerDirective, decorators: [{
1151
+ type: Directive,
1152
+ args: [{ selector: 'aparte-composer', standalone: true }]
1153
+ }], propDecorators: { placeholder: [{
1154
+ type: Input
1155
+ }], disabled: [{
1156
+ type: Input,
1157
+ args: [{ transform: booleanAttribute }]
1158
+ }], target: [{
1159
+ type: Input
1160
+ }], submitOnEnter: [{
1161
+ type: Input,
1162
+ args: [{ transform: booleanAttribute }]
1163
+ }], send: [{
1164
+ type: Output
1165
+ }], cancel: [{
1166
+ type: Output
1167
+ }], composerChange: [{
1168
+ type: Output
1169
+ }], onSend: [{
1170
+ type: HostListener,
1171
+ args: ['aparte-send', ['$event']]
1172
+ }], onCancel: [{
1173
+ type: HostListener,
1174
+ args: ['aparte-cancel']
1175
+ }], onComposerChange: [{
1176
+ type: HostListener,
1177
+ args: ['aparte-composer-change', ['$event']]
1178
+ }] } });
1179
+ /** `<aparte-composer-action>` — Generic action button primitive for <aparte-composer>. */
1180
+ class AparteComposerActionDirective extends AparteElementBase {
1181
+ /** Icon key for aparteGlobalConfig.getIcon(), or raw SVG/HTML starting with `<` */
1182
+ set icon(v) { this.write('icon', v); }
1183
+ /** Accessible label (also used as tooltip) */
1184
+ set label(v) { this.write('label', v); }
1185
+ /** Disables the button */
1186
+ set disabled(v) { this.write('disabled', v); }
1187
+ /** Identifies WHICH button fired; carried as `AparteActionClickEventDetail.actionId`. Read lazily at dispatch time rather than observed, so the manifest never recorded it — leaving the only way to tell two custom composer buttons apart absent from the typed surface. */
1188
+ set actionId(v) { this.write('action-id', v); }
1189
+ /** Bubbles up when the button is clicked, carrying which button it was and the composer it belongs to. The type argument is not decoration: a BARE `@fires` records `CustomEvent` with no argument, and the bindings generator then emits `EventEmitter<void>` with a listener that drops `$event` — so an Angular consumer with two custom buttons could not tell which one fired. detail: { actionId: string, composer: AparteComposer | null } */
1190
+ actionClick = new EventEmitter();
1191
+ onActionClick(e) { this.actionClick.emit(e.detail); }
1192
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerActionDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1193
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteComposerActionDirective, isStandalone: true, selector: "aparte-composer-action", inputs: { icon: "icon", label: "label", disabled: ["disabled", "disabled", booleanAttribute], actionId: "actionId" }, outputs: { actionClick: "actionClick" }, host: { listeners: { "aparte-action-click": "onActionClick($event)" } }, usesInheritance: true, ngImport: i0 });
1194
+ }
1195
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerActionDirective, decorators: [{
1196
+ type: Directive,
1197
+ args: [{ selector: 'aparte-composer-action', standalone: true }]
1198
+ }], propDecorators: { icon: [{
1199
+ type: Input
1200
+ }], label: [{
1201
+ type: Input
1202
+ }], disabled: [{
1203
+ type: Input,
1204
+ args: [{ transform: booleanAttribute }]
1205
+ }], actionId: [{
1206
+ type: Input
1207
+ }], actionClick: [{
1208
+ type: Output
1209
+ }], onActionClick: [{
1210
+ type: HostListener,
1211
+ args: ['aparte-action-click', ['$event']]
1212
+ }] } });
1213
+ /** `<aparte-composer-add-attachment>` — File picker button for <aparte-composer>. */
1214
+ class AparteComposerAddAttachmentDirective extends AparteElementBase {
1215
+ /** MIME types / extensions passed to the file input (e.g. "image/*,.pdf") */
1216
+ set accept(v) { this.write('accept', v); }
1217
+ /** Allow multiple file selection (default: true) */
1218
+ set multiple(v) { this.write('multiple', v ? '' : 'false'); }
1219
+ /** Greys out the picker and ignores drops. */
1220
+ set disabled(v) { this.write('disabled', v); }
1221
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerAddAttachmentDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1222
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteComposerAddAttachmentDirective, isStandalone: true, selector: "aparte-composer-add-attachment", inputs: { accept: "accept", multiple: ["multiple", "multiple", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, usesInheritance: true, ngImport: i0 });
1223
+ }
1224
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerAddAttachmentDirective, decorators: [{
1225
+ type: Directive,
1226
+ args: [{ selector: 'aparte-composer-add-attachment', standalone: true }]
1227
+ }], propDecorators: { accept: [{
1228
+ type: Input
1229
+ }], multiple: [{
1230
+ type: Input,
1231
+ args: [{ transform: booleanAttribute }]
1232
+ }], disabled: [{
1233
+ type: Input,
1234
+ args: [{ transform: booleanAttribute }]
1235
+ }] } });
1236
+ /** `<aparte-composer-attachments>` — Renders a square thumbnail tile for each file attached to the root composer. */
1237
+ class AparteComposerAttachmentsDirective {
1238
+ /** An attached image was clicked; the app opens it full-size, and only if it declared `attachmentPreview`. */
1239
+ attachmentPreview = new EventEmitter();
1240
+ onAttachmentPreview(e) { this.attachmentPreview.emit(e.detail); }
1241
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerAttachmentsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1242
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: AparteComposerAttachmentsDirective, isStandalone: true, selector: "aparte-composer-attachments", outputs: { attachmentPreview: "attachmentPreview" }, host: { listeners: { "aparte-attachment-preview": "onAttachmentPreview($event)" } }, ngImport: i0 });
1243
+ }
1244
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerAttachmentsDirective, decorators: [{
1245
+ type: Directive,
1246
+ args: [{ selector: 'aparte-composer-attachments', standalone: true }]
1247
+ }], propDecorators: { attachmentPreview: [{
1248
+ type: Output
1249
+ }], onAttachmentPreview: [{
1250
+ type: HostListener,
1251
+ args: ['aparte-attachment-preview', ['$event']]
1252
+ }] } });
1253
+ /** `<aparte-composer-cancel>` — Cancel/stop streaming button primitive for <aparte-composer>. */
1254
+ /**
1255
+ * No member at all: this element observes nothing and dispatches nothing, so the
1256
+ * directive exists only to CLAIM THE TAG — which is what spares a consuming component
1257
+ * `CUSTOM_ELEMENTS_SCHEMA`, a switch that turns checking off for every unknown tag in
1258
+ * the file rather than just this one.
1259
+ */
1260
+ class AparteComposerCancelDirective {
1261
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerCancelDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1262
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: AparteComposerCancelDirective, isStandalone: true, selector: "aparte-composer-cancel", ngImport: i0 });
1263
+ }
1264
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerCancelDirective, decorators: [{
1265
+ type: Directive,
1266
+ args: [{ selector: 'aparte-composer-cancel', standalone: true }]
1267
+ }] });
1268
+ /** `<aparte-composer-input>` — Contenteditable text input primitive. */
1269
+ class AparteComposerInputDirective extends AparteElementBase {
1270
+ /** Placeholder text (fallback: reads from aparte-composer) */
1271
+ set placeholder(v) { this.write('placeholder', v); }
1272
+ /** Max height in px before scroll (default: 200) */
1273
+ set maxHeight(v) { this.write('max-height', v); }
1274
+ /** Min height in px. When omitted, the stylesheet's min-height governs (44px in aparte.css) — so themes can resize the editor in pure CSS without being fought by an inline height. */
1275
+ set minHeight(v) { this.write('min-height', v); }
1276
+ /** Makes the field non-editable; the composer's own `disabled` also reaches it. */
1277
+ set disabled(v) { this.write('disabled', v); }
1278
+ /** Enter was pressed with content. No detail; the composer reads its own value. Behaviour: Enter submits (calls root.submit()), Shift+Enter inserts newline. Auto-expands up to max-height. Paste strips HTML, handles image paste. */
1279
+ composerSubmit = new EventEmitter();
1280
+ onComposerSubmit() { this.composerSubmit.emit(); }
1281
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerInputDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1282
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteComposerInputDirective, isStandalone: true, selector: "aparte-composer-input", inputs: { placeholder: "placeholder", maxHeight: ["maxHeight", "maxHeight", numberAttribute], minHeight: ["minHeight", "minHeight", numberAttribute], disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { composerSubmit: "composerSubmit" }, host: { listeners: { "aparte-composer-submit": "onComposerSubmit()" } }, usesInheritance: true, ngImport: i0 });
1283
+ }
1284
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerInputDirective, decorators: [{
1285
+ type: Directive,
1286
+ args: [{ selector: 'aparte-composer-input', standalone: true }]
1287
+ }], propDecorators: { placeholder: [{
1288
+ type: Input
1289
+ }], maxHeight: [{
1290
+ type: Input,
1291
+ args: [{ transform: numberAttribute }]
1292
+ }], minHeight: [{
1293
+ type: Input,
1294
+ args: [{ transform: numberAttribute }]
1295
+ }], disabled: [{
1296
+ type: Input,
1297
+ args: [{ transform: booleanAttribute }]
1298
+ }], composerSubmit: [{
1299
+ type: Output
1300
+ }], onComposerSubmit: [{
1301
+ type: HostListener,
1302
+ args: ['aparte-composer-submit']
1303
+ }] } });
1304
+ /** `<aparte-composer-send>` — Submit button primitive for <aparte-composer>. */
1305
+ /**
1306
+ * No member at all: this element observes nothing and dispatches nothing, so the
1307
+ * directive exists only to CLAIM THE TAG — which is what spares a consuming component
1308
+ * `CUSTOM_ELEMENTS_SCHEMA`, a switch that turns checking off for every unknown tag in
1309
+ * the file rather than just this one.
1310
+ */
1311
+ class AparteComposerSendDirective {
1312
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerSendDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1313
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: AparteComposerSendDirective, isStandalone: true, selector: "aparte-composer-send", ngImport: i0 });
1314
+ }
1315
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerSendDirective, decorators: [{
1316
+ type: Directive,
1317
+ args: [{ selector: 'aparte-composer-send', standalone: true }]
1318
+ }] });
1319
+ /** `<aparte-composer-toolbar>` — The composer's bottom row — the strip a mode picker, a model selector or a token counter belongs in, rather than a bar of your own floating below the chat. Purely structural: it lays its children out in a row and gets out of the way. */
1320
+ /**
1321
+ * No member at all: this element observes nothing and dispatches nothing, so the
1322
+ * directive exists only to CLAIM THE TAG — which is what spares a consuming component
1323
+ * `CUSTOM_ELEMENTS_SCHEMA`, a switch that turns checking off for every unknown tag in
1324
+ * the file rather than just this one.
1325
+ */
1326
+ class AparteComposerToolbarDirective {
1327
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerToolbarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1328
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: AparteComposerToolbarDirective, isStandalone: true, selector: "aparte-composer-toolbar", ngImport: i0 });
1329
+ }
1330
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteComposerToolbarDirective, decorators: [{
1331
+ type: Directive,
1332
+ args: [{ selector: 'aparte-composer-toolbar', standalone: true }]
1333
+ }] });
1334
+ /** `<aparte-conversation-list>` — Conversation-history sidebar — a framework-agnostic web component. The host sets the `conversations` JS property and the `active-id` attribute; this renders the list and fires the user's intent, never acting on it itself. */
1335
+ class AparteConversationListDirective extends AparteElementBase {
1336
+ /** The id of the conversation to render as selected. */
1337
+ set activeId(v) { this.write('active-id', v); }
1338
+ /** A row was activated; the host loads that conversation. */
1339
+ selectConversation = new EventEmitter();
1340
+ /** The delete action was pressed. Nothing is removed here. */
1341
+ deleteConversation = new EventEmitter();
1342
+ /** The archive action was pressed on a live conversation. */
1343
+ archiveConversation = new EventEmitter();
1344
+ /** The same action on an already-archived one; same detail shape, opposite intent. */
1345
+ unarchiveConversation = new EventEmitter();
1346
+ onSelectConversation(e) { this.selectConversation.emit(e.detail); }
1347
+ onDeleteConversation(e) { this.deleteConversation.emit(e.detail); }
1348
+ onArchiveConversation(e) { this.archiveConversation.emit(e.detail); }
1349
+ onUnarchiveConversation(e) { this.unarchiveConversation.emit(e.detail); }
1350
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteConversationListDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1351
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: AparteConversationListDirective, isStandalone: true, selector: "aparte-conversation-list", inputs: { activeId: "activeId" }, outputs: { selectConversation: "selectConversation", deleteConversation: "deleteConversation", archiveConversation: "archiveConversation", unarchiveConversation: "unarchiveConversation" }, host: { listeners: { "aparte-select-conversation": "onSelectConversation($event)", "aparte-delete-conversation": "onDeleteConversation($event)", "aparte-archive-conversation": "onArchiveConversation($event)", "aparte-unarchive-conversation": "onUnarchiveConversation($event)" } }, usesInheritance: true, ngImport: i0 });
1352
+ }
1353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteConversationListDirective, decorators: [{
1354
+ type: Directive,
1355
+ args: [{ selector: 'aparte-conversation-list', standalone: true }]
1356
+ }], propDecorators: { activeId: [{
1357
+ type: Input
1358
+ }], selectConversation: [{
1359
+ type: Output
1360
+ }], deleteConversation: [{
1361
+ type: Output
1362
+ }], archiveConversation: [{
1363
+ type: Output
1364
+ }], unarchiveConversation: [{
1365
+ type: Output
1366
+ }], onSelectConversation: [{
1367
+ type: HostListener,
1368
+ args: ['aparte-select-conversation', ['$event']]
1369
+ }], onDeleteConversation: [{
1370
+ type: HostListener,
1371
+ args: ['aparte-delete-conversation', ['$event']]
1372
+ }], onArchiveConversation: [{
1373
+ type: HostListener,
1374
+ args: ['aparte-archive-conversation', ['$event']]
1375
+ }], onUnarchiveConversation: [{
1376
+ type: HostListener,
1377
+ args: ['aparte-unarchive-conversation', ['$event']]
1378
+ }] } });
1379
+ /** `<aparte-elicitation>` — The default presenter for a request to the human. It renders nothing itself: it registers as the presenter for the config governing its subtree, and mounts a panel inside the nearest `<aparte-composer>` when something asks — a tool handler calling `requestUserInput`, or core's own approval gate. */
1380
+ /**
1381
+ * No member at all: this element observes nothing and dispatches nothing, so the
1382
+ * directive exists only to CLAIM THE TAG — which is what spares a consuming component
1383
+ * `CUSTOM_ELEMENTS_SCHEMA`, a switch that turns checking off for every unknown tag in
1384
+ * the file rather than just this one.
1385
+ */
1386
+ class AparteElicitationDirective {
1387
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteElicitationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1388
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.25", type: AparteElicitationDirective, isStandalone: true, selector: "aparte-elicitation", ngImport: i0 });
1389
+ }
1390
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteElicitationDirective, decorators: [{
1391
+ type: Directive,
1392
+ args: [{ selector: 'aparte-elicitation', standalone: true }]
1393
+ }] });
1394
+ /** `<aparte-optgroup>` — AparteOptgroup */
1395
+ class AparteOptgroupDirective extends AparteElementBase {
1396
+ /** Group label */
1397
+ set label(v) { this.write('label', v); }
1398
+ /** Allow collapse/expand */
1399
+ set collapsible(v) { this.write('collapsible', v); }
1400
+ /** Collapsed state */
1401
+ set collapsed(v) { this.write('collapsed', v); }
1402
+ /** Shows a spinner in place of the group's options. */
1403
+ set loading(v) { this.write('loading', v); }
1404
+ /** The group was collapsed or expanded. */
1405
+ optgroupToggle = new EventEmitter();
1406
+ onOptgroupToggle(e) { this.optgroupToggle.emit(e.detail); }
1407
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteOptgroupDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1408
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteOptgroupDirective, isStandalone: true, selector: "aparte-optgroup", inputs: { label: "label", collapsible: ["collapsible", "collapsible", booleanAttribute], collapsed: ["collapsed", "collapsed", booleanAttribute], loading: ["loading", "loading", booleanAttribute] }, outputs: { optgroupToggle: "optgroupToggle" }, host: { listeners: { "aparte-optgroup-toggle": "onOptgroupToggle($event)" } }, usesInheritance: true, ngImport: i0 });
1409
+ }
1410
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteOptgroupDirective, decorators: [{
1411
+ type: Directive,
1412
+ args: [{ selector: 'aparte-optgroup', standalone: true }]
1413
+ }], propDecorators: { label: [{
1414
+ type: Input
1415
+ }], collapsible: [{
1416
+ type: Input,
1417
+ args: [{ transform: booleanAttribute }]
1418
+ }], collapsed: [{
1419
+ type: Input,
1420
+ args: [{ transform: booleanAttribute }]
1421
+ }], loading: [{
1422
+ type: Input,
1423
+ args: [{ transform: booleanAttribute }]
1424
+ }], optgroupToggle: [{
1425
+ type: Output
1426
+ }], onOptgroupToggle: [{
1427
+ type: HostListener,
1428
+ args: ['aparte-optgroup-toggle', ['$event']]
1429
+ }] } });
1430
+ /** `<aparte-option>` — AparteOption */
1431
+ class AparteOptionDirective extends AparteElementBase {
1432
+ /** Option value */
1433
+ set value(v) { this.write('value', v); }
1434
+ /** Disabled state */
1435
+ set disabled(v) { this.write('disabled', v); }
1436
+ /** Selected state */
1437
+ set selected(v) { this.write('selected', v); }
1438
+ /** Free-form status the host sets; styled, never read by core. */
1439
+ set dataStatus(v) { this.write('data-status', v); }
1440
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteOptionDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1441
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteOptionDirective, isStandalone: true, selector: "aparte-option", inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute], selected: ["selected", "selected", booleanAttribute], dataStatus: "dataStatus" }, usesInheritance: true, ngImport: i0 });
1442
+ }
1443
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteOptionDirective, decorators: [{
1444
+ type: Directive,
1445
+ args: [{ selector: 'aparte-option', standalone: true }]
1446
+ }], propDecorators: { value: [{
1447
+ type: Input
1448
+ }], disabled: [{
1449
+ type: Input,
1450
+ args: [{ transform: booleanAttribute }]
1451
+ }], selected: [{
1452
+ type: Input,
1453
+ args: [{ transform: booleanAttribute }]
1454
+ }], dataStatus: [{
1455
+ type: Input
1456
+ }] } });
1457
+ /** `<aparte-progress-spinner>` — AparteProgressSpinner */
1458
+ class AparteProgressSpinnerDirective extends AparteElementBase {
1459
+ /** Progress percentage 0–100 (omit for indeterminate) */
1460
+ set value(v) { this.write('value', v); }
1461
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteProgressSpinnerDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1462
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteProgressSpinnerDirective, isStandalone: true, selector: "aparte-progress-spinner", inputs: { value: ["value", "value", numberAttribute] }, usesInheritance: true, ngImport: i0 });
1463
+ }
1464
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteProgressSpinnerDirective, decorators: [{
1465
+ type: Directive,
1466
+ args: [{ selector: 'aparte-progress-spinner', standalone: true }]
1467
+ }], propDecorators: { value: [{
1468
+ type: Input,
1469
+ args: [{ transform: numberAttribute }]
1470
+ }] } });
1471
+ /** `<aparte-select>` — Dropdown select for aparté — a vanilla web component with optional grouping, a search filter and a keyboard-driven listbox. */
1472
+ class AparteSelectDirective extends AparteElementBase {
1473
+ /** The selected option's value. */
1474
+ set value(v) { this.write('value', v); }
1475
+ /** Shown while nothing is selected. */
1476
+ set placeholder(v) { this.write('placeholder', v); }
1477
+ /** Blocks opening and selection. */
1478
+ set disabled(v) { this.write('disabled', v); }
1479
+ /** Renders `<aparte-optgroup>` children as collapsible groups. */
1480
+ set grouped(v) { this.write('grouped', v); }
1481
+ /** Adds a filter field above the options. */
1482
+ set searchable(v) { this.write('searchable', v); }
1483
+ /** Reflects (and controls) whether the dropdown is open. */
1484
+ set open(v) { this.write('open', v); }
1485
+ /** The dropdown opened. No detail. */
1486
+ selectOpen = new EventEmitter();
1487
+ /** The dropdown closed. No detail. */
1488
+ selectClose = new EventEmitter();
1489
+ /** The selection changed; carries the new value, its label and the previous value. */
1490
+ selectChange = new EventEmitter();
1491
+ onSelectOpen() { this.selectOpen.emit(); }
1492
+ onSelectClose() { this.selectClose.emit(); }
1493
+ onSelectChange(e) { this.selectChange.emit(e.detail); }
1494
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteSelectDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
1495
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "19.2.25", type: AparteSelectDirective, isStandalone: true, selector: "aparte-select", inputs: { value: "value", placeholder: "placeholder", disabled: ["disabled", "disabled", booleanAttribute], grouped: ["grouped", "grouped", booleanAttribute], searchable: ["searchable", "searchable", booleanAttribute], open: ["open", "open", booleanAttribute] }, outputs: { selectOpen: "selectOpen", selectClose: "selectClose", selectChange: "selectChange" }, host: { listeners: { "aparte-select-open": "onSelectOpen()", "aparte-select-close": "onSelectClose()", "aparte-select-change": "onSelectChange($event)" } }, usesInheritance: true, ngImport: i0 });
1496
+ }
1497
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: AparteSelectDirective, decorators: [{
1498
+ type: Directive,
1499
+ args: [{ selector: 'aparte-select', standalone: true }]
1500
+ }], propDecorators: { value: [{
1501
+ type: Input
1502
+ }], placeholder: [{
1503
+ type: Input
1504
+ }], disabled: [{
1505
+ type: Input,
1506
+ args: [{ transform: booleanAttribute }]
1507
+ }], grouped: [{
1508
+ type: Input,
1509
+ args: [{ transform: booleanAttribute }]
1510
+ }], searchable: [{
1511
+ type: Input,
1512
+ args: [{ transform: booleanAttribute }]
1513
+ }], open: [{
1514
+ type: Input,
1515
+ args: [{ transform: booleanAttribute }]
1516
+ }], selectOpen: [{
1517
+ type: Output
1518
+ }], selectClose: [{
1519
+ type: Output
1520
+ }], selectChange: [{
1521
+ type: Output
1522
+ }], onSelectOpen: [{
1523
+ type: HostListener,
1524
+ args: ['aparte-select-open']
1525
+ }], onSelectClose: [{
1526
+ type: HostListener,
1527
+ args: ['aparte-select-close']
1528
+ }], onSelectChange: [{
1529
+ type: HostListener,
1530
+ args: ['aparte-select-change', ['$event']]
1531
+ }] } });
1532
+ /**
1533
+ * Every element directive, for one import in a standalone component.
1534
+ *
1535
+ * ```ts
1536
+ * @Component({ imports: [...APARTE_ELEMENT_DIRECTIVES], template: `…` })
1537
+ * ```
1538
+ */
1539
+ const APARTE_ELEMENT_DIRECTIVES = [
1540
+ AparteChatBubbleDirective,
1541
+ AparteChatStatusDirective,
1542
+ AparteChatViewportDirective,
1543
+ AparteComposerDirective,
1544
+ AparteComposerActionDirective,
1545
+ AparteComposerAddAttachmentDirective,
1546
+ AparteComposerAttachmentsDirective,
1547
+ AparteComposerCancelDirective,
1548
+ AparteComposerInputDirective,
1549
+ AparteComposerSendDirective,
1550
+ AparteComposerToolbarDirective,
1551
+ AparteConversationListDirective,
1552
+ AparteElicitationDirective,
1553
+ AparteOptgroupDirective,
1554
+ AparteOptionDirective,
1555
+ AparteProgressSpinnerDirective,
1556
+ AparteSelectDirective,
1557
+ ];
1558
+
927
1559
  /**
928
1560
  * Angular 19 Signal-based wrapper around AparteConversationManager.
929
1561
  *
@@ -1058,5 +1690,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
1058
1690
  * Generated bundle index. Do not edit.
1059
1691
  */
1060
1692
 
1061
- export { APARTE_CLIENT_OPTIONS, APARTE_CONFIG_TOKEN, AparteAiService, AparteChatComponent, AparteUiComponent, ConversationManagerService, provideAparte };
1693
+ export { APARTE_CLIENT_OPTIONS, APARTE_CONFIG_TOKEN, APARTE_ELEMENT_DIRECTIVES, AparteAiService, AparteChatBubbleDirective, AparteChatComponent, AparteChatStatusDirective, AparteChatViewportDirective, AparteComposerActionDirective, AparteComposerAddAttachmentDirective, AparteComposerAttachmentsDirective, AparteComposerCancelDirective, AparteComposerDirective, AparteComposerInputDirective, AparteComposerSendDirective, AparteComposerToolbarDirective, AparteConversationListDirective, AparteElicitationDirective, AparteOptgroupDirective, AparteOptionDirective, AparteProgressSpinnerDirective, AparteSelectDirective, AparteUiComponent, ConversationManagerService, provideAparte };
1062
1694
  //# sourceMappingURL=aparte-angular.mjs.map