@bloonio/chat-angular 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/README.md +120 -6
- package/fesm2022/bloonio-chat-angular.mjs +557 -168
- package/fesm2022/bloonio-chat-angular.mjs.map +1 -1
- package/package.json +5 -7
- package/src/lib/styles/chat.css +16 -3
- package/types/bloonio-chat-angular.d.ts +330 -0
- package/esm2022/bloonio-chat-angular.mjs +0 -5
- package/esm2022/index.mjs +0 -25
- package/esm2022/lib/bloonio-chat.service.mjs +0 -311
- package/esm2022/lib/bloonio-chat.token.mjs +0 -46
- package/esm2022/lib/components/input-bar.component.mjs +0 -91
- package/esm2022/lib/components/launcher.component.mjs +0 -81
- package/esm2022/lib/components/message-list.component.mjs +0 -58
- package/esm2022/lib/components/panel.component.mjs +0 -211
- package/esm2022/lib/components/quick-replies.component.mjs +0 -58
- package/esm2022/lib/components/thread.component.mjs +0 -103
- package/index.d.ts +0 -27
- package/lib/bloonio-chat.service.d.ts +0 -79
- package/lib/bloonio-chat.token.d.ts +0 -67
- package/lib/components/input-bar.component.d.ts +0 -18
- package/lib/components/launcher.component.d.ts +0 -14
- package/lib/components/message-list.component.d.ts +0 -8
- package/lib/components/panel.component.d.ts +0 -31
- package/lib/components/quick-replies.component.d.ts +0 -10
- package/lib/components/thread.component.d.ts +0 -27
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken, EnvironmentProviders, Signal, AfterViewChecked, EventEmitter } from '@angular/core';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import * as _bloonio_chat_client_core from '@bloonio/chat-client-core';
|
|
5
|
+
import { Attachment, WidgetBootstrapConfig, CreateVisitorSessionResponse } from '@bloonio/chat-client-core';
|
|
6
|
+
export { BloonioChatAuthError, BloonioChatError, BloonioChatNetworkError, BloonioChatServerError, MessageSender, ServerMsgFrame, WidgetBootstrapConfig, WidgetPosition, WidgetVisibility } from '@bloonio/chat-client-core';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Built-in strings for everything the widget renders itself. Text that comes
|
|
10
|
+
* from the relay (status texts, offline message, quick replies, messages) is
|
|
11
|
+
* shown as received.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
type BloonioChatLocale = 'fr' | 'en' | 'zh';
|
|
15
|
+
interface BloonioChatStrings {
|
|
16
|
+
placeholder: string;
|
|
17
|
+
send: string;
|
|
18
|
+
close: string;
|
|
19
|
+
openChat: string;
|
|
20
|
+
closeChat: string;
|
|
21
|
+
unread: (count: number) => string;
|
|
22
|
+
typing: string;
|
|
23
|
+
suggestedReplies: string;
|
|
24
|
+
chatWith: (name: string) => string;
|
|
25
|
+
/** Header name when the tenant has none. */
|
|
26
|
+
support: string;
|
|
27
|
+
poweredBy: string;
|
|
28
|
+
connecting: string;
|
|
29
|
+
unavailable: string;
|
|
30
|
+
error: (message: string) => string;
|
|
31
|
+
agentJoined: (name: string) => string;
|
|
32
|
+
agentLeft: string;
|
|
33
|
+
ticketCreated: (ticketNumber: string, category: string, priority: string, slaHours: number) => string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Dependency-injection plumbing for the Angular chat SDK.
|
|
38
|
+
*
|
|
39
|
+
* Consumers wire the SDK into their app via the standard Angular pattern
|
|
40
|
+
* documented in docs/12 §7.3:
|
|
41
|
+
*
|
|
42
|
+
* // app.config.ts
|
|
43
|
+
* export const appConfig: ApplicationConfig = {
|
|
44
|
+
* providers: [
|
|
45
|
+
* provideBloonioChat({
|
|
46
|
+
* tenantId: env.CHAT_TENANT_ID,
|
|
47
|
+
* publicKey: env.CHAT_PUBLIC_KEY,
|
|
48
|
+
* baseUrl: 'https://chat-relay.example.com',
|
|
49
|
+
* visitorTokenProvider: () => inject(HttpClient).get<{token: string}>(
|
|
50
|
+
* '/api/chat/visitor-token'
|
|
51
|
+
* ).pipe(map(r => r.token)),
|
|
52
|
+
* locale: 'fr',
|
|
53
|
+
* }),
|
|
54
|
+
* ],
|
|
55
|
+
* };
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
/** Caller-supplied resolver for the tenant-signed visitor token.
|
|
59
|
+
*
|
|
60
|
+
* Two acceptable shapes:
|
|
61
|
+
* - Returns nothing (or `null`) → SDK falls back to anonymous mode.
|
|
62
|
+
* A session is minted via `/create/visitor-session` and the visitor
|
|
63
|
+
* stays unidentified until you supply one.
|
|
64
|
+
* - Returns a string / Observable<string> → SDK calls `/identify/visitor`
|
|
65
|
+
* with this signed token to bind the anonymous session to a tenant user.
|
|
66
|
+
*/
|
|
67
|
+
type VisitorTokenProvider = (() => string | null | Promise<string | null> | Observable<string | null>) | undefined;
|
|
68
|
+
/** A fixed value, or a function (a signal works) re-read when it changes. */
|
|
69
|
+
type BloonioChatOption<T> = T | (() => T);
|
|
70
|
+
interface BloonioChatConfig {
|
|
71
|
+
/** Tenant UUID v7 (the canonical handle issued by chat_relay). */
|
|
72
|
+
tenantId: string;
|
|
73
|
+
/** `pk_…` widget key bound to the tenant's `allowed_origins`. */
|
|
74
|
+
publicKey: string;
|
|
75
|
+
/** Base URL of the chat relay (https://chat-relay.example.com or local). */
|
|
76
|
+
baseUrl: string;
|
|
77
|
+
/** Visitor-identification resolver. See {@link VisitorTokenProvider}. */
|
|
78
|
+
visitorTokenProvider?: VisitorTokenProvider;
|
|
79
|
+
/**
|
|
80
|
+
* Language of the widget's own strings and of new conversations:
|
|
81
|
+
* `'fr' | 'en' | 'zh'`, default `'en'`. Pass a function (a signal works) to
|
|
82
|
+
* follow the host app's language at runtime.
|
|
83
|
+
*/
|
|
84
|
+
locale?: BloonioChatLocale | (string & {}) | (() => string);
|
|
85
|
+
/**
|
|
86
|
+
* Opening bubble, drawn like an assistant message at the top of a new
|
|
87
|
+
* conversation. Local only: never sent or stored, and not shown above a
|
|
88
|
+
* thread replayed after a reload. Shown in place of the tenant's offline
|
|
89
|
+
* message.
|
|
90
|
+
*/
|
|
91
|
+
greeting?: BloonioChatOption<string>;
|
|
92
|
+
/** Label next to the launcher. An empty string shows none. */
|
|
93
|
+
launcherLabel?: BloonioChatOption<string>;
|
|
94
|
+
/** Header subtitle during opening hours. */
|
|
95
|
+
onlineStatusText?: BloonioChatOption<string>;
|
|
96
|
+
/** Header subtitle outside opening hours. */
|
|
97
|
+
offlineStatusText?: BloonioChatOption<string>;
|
|
98
|
+
/** Suggested replies shown until the visitor's first message. */
|
|
99
|
+
quickReplies?: BloonioChatOption<string[]>;
|
|
100
|
+
/** Free-form metadata attached to every visitor session. */
|
|
101
|
+
metadata?: Record<string, unknown>;
|
|
102
|
+
/** Optional override of `window.location.origin` (tests / SSR). */
|
|
103
|
+
origin?: string;
|
|
104
|
+
/**
|
|
105
|
+
* Pre-fetched attachments to attach to the first outbound message.
|
|
106
|
+
* Reserved for phase 11; kept on the interface for forward compat.
|
|
107
|
+
*/
|
|
108
|
+
attachments?: Attachment[];
|
|
109
|
+
}
|
|
110
|
+
declare const BLOONIO_CHAT_CONFIG: InjectionToken<BloonioChatConfig>;
|
|
111
|
+
/** Standalone-provider factory.
|
|
112
|
+
*
|
|
113
|
+
* Returns ``EnvironmentProviders`` so consumers can spread it into
|
|
114
|
+
* ``app.config.ts``'s providers array. The service itself is
|
|
115
|
+
* ``providedIn: 'root'`` so we don't need an explicit provider entry — we
|
|
116
|
+
* only need the config token to be registered.
|
|
117
|
+
*/
|
|
118
|
+
declare function provideBloonioChat(
|
|
119
|
+
/** The config, or a factory run in an injection context (so it can
|
|
120
|
+
* `inject()` the host's language signal, for instance). */
|
|
121
|
+
config: BloonioChatConfig | (() => BloonioChatConfig)): EnvironmentProviders;
|
|
122
|
+
/** Internal accessor used by the components to fail loud when the
|
|
123
|
+
* consumer forgot ``provideBloonioChat()``. */
|
|
124
|
+
declare function injectBloonioChatConfig(): BloonioChatConfig;
|
|
125
|
+
|
|
126
|
+
interface ChatMessage {
|
|
127
|
+
id: string;
|
|
128
|
+
from: 'visitor' | 'bot' | 'agent' | 'system';
|
|
129
|
+
content: string;
|
|
130
|
+
pending?: boolean;
|
|
131
|
+
client_msg_id?: string;
|
|
132
|
+
}
|
|
133
|
+
declare class BloonioChatService {
|
|
134
|
+
private readonly config;
|
|
135
|
+
private readonly platformId;
|
|
136
|
+
private readonly destroyRef;
|
|
137
|
+
private readonly t;
|
|
138
|
+
/** True when running in the browser (vs. server pre-render). */
|
|
139
|
+
private readonly isBrowser;
|
|
140
|
+
/** Identified visitors are not resumed: a stored thread would outlive a
|
|
141
|
+
* logout and show to the next account on the same browser.
|
|
142
|
+
* shortcut: scope the storage key by user id to resume them too. */
|
|
143
|
+
private readonly canPersist;
|
|
144
|
+
/** Bootstrap config — populated by the first `loadBootstrap()` call. */
|
|
145
|
+
readonly bootstrap: _angular_core.WritableSignal<WidgetBootstrapConfig | null>;
|
|
146
|
+
/** Visitor session (id + JWT + expires_at) — set lazily on first open,
|
|
147
|
+
* or on load when a stored session resumes. */
|
|
148
|
+
readonly session: _angular_core.WritableSignal<CreateVisitorSessionResponse | null>;
|
|
149
|
+
/** Message log, oldest → newest. */
|
|
150
|
+
readonly messages: _angular_core.WritableSignal<ChatMessage[]>;
|
|
151
|
+
/** True between bot's typing(start) and typing(stop) frames. */
|
|
152
|
+
readonly botTyping: _angular_core.WritableSignal<boolean>;
|
|
153
|
+
/** Panel visibility — drives Launcher / Panel rendering. */
|
|
154
|
+
readonly open: _angular_core.WritableSignal<boolean>;
|
|
155
|
+
/** True from the start of `ensureSession()` until the relay's welcome
|
|
156
|
+
* frame: while it is set, nothing can be sent yet. */
|
|
157
|
+
readonly connecting: _angular_core.WritableSignal<boolean>;
|
|
158
|
+
/** Set when bootstrap or the session fails; cleared by the next attempt
|
|
159
|
+
* (reopening the panel retries). Diagnostic text, not shown to visitors. */
|
|
160
|
+
readonly fatalError: _angular_core.WritableSignal<string | null>;
|
|
161
|
+
/** True once a reload replayed an existing thread: the host's greeting
|
|
162
|
+
* opens new conversations only. */
|
|
163
|
+
private readonly replayed;
|
|
164
|
+
/** What the panel renders: the log, under the host's greeting when the
|
|
165
|
+
* conversation is new, plus one status line when the chat is connecting,
|
|
166
|
+
* unavailable, or closed for the day with nothing said yet. The greeting
|
|
167
|
+
* and the status lines are local: they are not in `messages`, never sent
|
|
168
|
+
* and never stored. */
|
|
169
|
+
readonly visibleMessages: Signal<ChatMessage[]>;
|
|
170
|
+
/** Number of bot/agent messages received while the panel was closed.
|
|
171
|
+
* Resets to 0 the moment the panel opens; what arrived while it was open
|
|
172
|
+
* has been seen too. */
|
|
173
|
+
private readonly _seenCount;
|
|
174
|
+
readonly unreadCount: Signal<number>;
|
|
175
|
+
private client;
|
|
176
|
+
private ws;
|
|
177
|
+
private bootstrapPromise;
|
|
178
|
+
private sessionPromise;
|
|
179
|
+
/** Sockets the relay refused in a row (reset by a welcome frame). */
|
|
180
|
+
private wsRejections;
|
|
181
|
+
private typingTimer;
|
|
182
|
+
constructor();
|
|
183
|
+
/** Toggle panel visibility. First open also opens the WS session. */
|
|
184
|
+
toggle(): Promise<void>;
|
|
185
|
+
/** Force the panel open. */
|
|
186
|
+
openPanel(): Promise<void>;
|
|
187
|
+
/** Force the panel closed. Keeps the WS open so reopening is instant. */
|
|
188
|
+
closePanel(): void;
|
|
189
|
+
/** Send a visitor message. No-op if the WS isn't connected. */
|
|
190
|
+
sendMessage(content: string): void;
|
|
191
|
+
/** Everything received so far counts as read (on open and on close). */
|
|
192
|
+
private markSeen;
|
|
193
|
+
private setTyping;
|
|
194
|
+
private loadBootstrap;
|
|
195
|
+
/** Resume the stored session, or — once the panel is open — mint a new
|
|
196
|
+
* one. A closed panel never creates a session by itself. */
|
|
197
|
+
private ensureSession;
|
|
198
|
+
private createSession;
|
|
199
|
+
/** Rejoin the stored session: refresh its token (the relay accepts an
|
|
200
|
+
* expired one while the session lives), replay the thread, hand back the
|
|
201
|
+
* same session. Null when there is none or it cannot be resumed — the
|
|
202
|
+
* caller then starts a fresh one, and the visitor sees no error. */
|
|
203
|
+
private resumeSession;
|
|
204
|
+
/** The two visitor endpoints `ChatClient` (core 0.1.0) does not wrap. */
|
|
205
|
+
private relay;
|
|
206
|
+
private readStored;
|
|
207
|
+
private writeStored;
|
|
208
|
+
private storageKey;
|
|
209
|
+
/** The relay closed the socket for good. WSClient would retry the same
|
|
210
|
+
* dead token forever, so stop it and recover here. */
|
|
211
|
+
private onSocketRejected;
|
|
212
|
+
private openWebSocket;
|
|
213
|
+
private tryIdentify;
|
|
214
|
+
private getClient;
|
|
215
|
+
private resolvedOrigin;
|
|
216
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BloonioChatService, never>;
|
|
217
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<BloonioChatService>;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
declare class BloonioChatLauncherComponent {
|
|
221
|
+
protected readonly chat: BloonioChatService;
|
|
222
|
+
protected readonly t: _angular_core.Signal<BloonioChatStrings>;
|
|
223
|
+
private readonly config;
|
|
224
|
+
private button?;
|
|
225
|
+
constructor();
|
|
226
|
+
protected readonly position: _angular_core.Signal<_bloonio_chat_client_core.WidgetPosition>;
|
|
227
|
+
/** Tint the bubble with the tenant's brand colour (falls back to the
|
|
228
|
+
* stylesheet default until bootstrap config loads). */
|
|
229
|
+
protected readonly themeStyle: _angular_core.Signal<string>;
|
|
230
|
+
protected readonly label: _angular_core.Signal<string | null>;
|
|
231
|
+
protected readonly ariaLabel: _angular_core.Signal<string>;
|
|
232
|
+
onToggle(): void;
|
|
233
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BloonioChatLauncherComponent, never>;
|
|
234
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BloonioChatLauncherComponent, "bloonio-chat-launcher", never, {}, {}, never, never, true, never>;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
type ChatPanelMode = 'floating' | 'docked' | 'inline';
|
|
238
|
+
declare class BloonioChatPanelComponent implements AfterViewChecked {
|
|
239
|
+
/** floating = paired with launcher (default). docked/inline = always-on
|
|
240
|
+
* inside the page flow (use for SSR landing pages or sidebar layouts). */
|
|
241
|
+
mode: ChatPanelMode;
|
|
242
|
+
protected readonly chat: BloonioChatService;
|
|
243
|
+
protected readonly t: _angular_core.Signal<BloonioChatStrings>;
|
|
244
|
+
private readonly config;
|
|
245
|
+
private readonly injector;
|
|
246
|
+
private messagesRef?;
|
|
247
|
+
private panelRef?;
|
|
248
|
+
private lastScrollLen;
|
|
249
|
+
constructor();
|
|
250
|
+
protected readonly position: _angular_core.Signal<_bloonio_chat_client_core.WidgetPosition>;
|
|
251
|
+
protected readonly visible: _angular_core.Signal<boolean>;
|
|
252
|
+
protected readonly themeStyle: _angular_core.Signal<string>;
|
|
253
|
+
protected readonly displayName: _angular_core.Signal<string>;
|
|
254
|
+
protected readonly logoUrl: _angular_core.Signal<string | null>;
|
|
255
|
+
protected readonly initials: _angular_core.Signal<string>;
|
|
256
|
+
protected readonly statusText: _angular_core.Signal<string>;
|
|
257
|
+
protected readonly isOnlineStr: _angular_core.Signal<string>;
|
|
258
|
+
ngAfterViewChecked(): void;
|
|
259
|
+
onClose(): void;
|
|
260
|
+
onSend(content: string): void;
|
|
261
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BloonioChatPanelComponent, never>;
|
|
262
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BloonioChatPanelComponent, "bloonio-chat-panel", never, { "mode": { "alias": "mode"; "required": false; }; }, {}, never, never, true, never>;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
declare class BloonioChatThreadComponent implements AfterViewChecked {
|
|
266
|
+
protected readonly chat: BloonioChatService;
|
|
267
|
+
private messagesRef?;
|
|
268
|
+
private lastScrollLen;
|
|
269
|
+
protected readonly themeStyle: _angular_core.Signal<string>;
|
|
270
|
+
ngAfterViewChecked(): void;
|
|
271
|
+
/** Convenience: thread is meant to be always-on, so it opens the
|
|
272
|
+
* service-level session as soon as it's instantiated.
|
|
273
|
+
* (Floating panel waits for the launcher click.) */
|
|
274
|
+
constructor();
|
|
275
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BloonioChatThreadComponent, never>;
|
|
276
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BloonioChatThreadComponent, "bloonio-chat-thread", never, {}, {}, never, never, true, never>;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
declare class MessageListComponent {
|
|
280
|
+
messages: ChatMessage[];
|
|
281
|
+
botTyping: boolean;
|
|
282
|
+
protected readonly t: _angular_core.Signal<BloonioChatStrings>;
|
|
283
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MessageListComponent, never>;
|
|
284
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MessageListComponent, "bloonio-chat-message-list", never, { "messages": { "alias": "messages"; "required": true; }; "botTyping": { "alias": "botTyping"; "required": false; }; }, {}, never, never, true, never>;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
declare class InputBarComponent {
|
|
288
|
+
disabled: boolean;
|
|
289
|
+
send: EventEmitter<string>;
|
|
290
|
+
protected readonly t: _angular_core.Signal<BloonioChatStrings>;
|
|
291
|
+
protected readonly value: _angular_core.WritableSignal<string>;
|
|
292
|
+
protected canSend(): boolean;
|
|
293
|
+
onInput(e: Event): void;
|
|
294
|
+
onKey(e: KeyboardEvent): void;
|
|
295
|
+
submit(): void;
|
|
296
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputBarComponent, never>;
|
|
297
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputBarComponent, "bloonio-chat-input-bar", never, { "disabled": { "alias": "disabled"; "required": false; }; }, { "send": "send"; }, never, never, true, never>;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
declare class QuickRepliesComponent {
|
|
301
|
+
protected readonly chat: BloonioChatService;
|
|
302
|
+
protected readonly t: _angular_core.Signal<BloonioChatStrings>;
|
|
303
|
+
private readonly config;
|
|
304
|
+
/** Show the chips (the host's, else the tenant's) only until the
|
|
305
|
+
* visitor's first message, and only once a tap can actually be sent. */
|
|
306
|
+
protected readonly replies: _angular_core.Signal<string[]>;
|
|
307
|
+
protected pick(text: string): void;
|
|
308
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuickRepliesComponent, never>;
|
|
309
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuickRepliesComponent, "bloonio-chat-quick-replies", never, {}, {}, never, never, true, never>;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* @bloonio/chat-angular — Angular library for the bloonio chat PaaS.
|
|
314
|
+
*
|
|
315
|
+
* Public surface:
|
|
316
|
+
* - {@link provideBloonioChat} — environment-provider factory for app.config.ts
|
|
317
|
+
* - {@link BloonioChatService} — signals-based reactive state
|
|
318
|
+
* - Three standalone components:
|
|
319
|
+
* <bloonio-chat-launcher> floating bubble (collapsed)
|
|
320
|
+
* <bloonio-chat-panel> expandable card (the full chat UX)
|
|
321
|
+
* <bloonio-chat-thread> headless variant for inline embedding
|
|
322
|
+
*
|
|
323
|
+
* Styles ship separately at `@bloonio/chat-angular/styles.css` — import once
|
|
324
|
+
* in your global stylesheet (see README).
|
|
325
|
+
*/
|
|
326
|
+
|
|
327
|
+
declare const VERSION = "0.2.0";
|
|
328
|
+
|
|
329
|
+
export { BLOONIO_CHAT_CONFIG, BloonioChatLauncherComponent, BloonioChatPanelComponent, BloonioChatService, BloonioChatThreadComponent, InputBarComponent, MessageListComponent, QuickRepliesComponent, VERSION, injectBloonioChatConfig, provideBloonioChat };
|
|
330
|
+
export type { BloonioChatConfig, BloonioChatLocale, BloonioChatOption, ChatMessage, ChatPanelMode, VisitorTokenProvider };
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvb25pby1jaGF0LWFuZ3VsYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmxvb25pby1jaGF0LWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
package/esm2022/index.mjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @bloonio/chat-angular — Angular library for the bloonio chat PaaS.
|
|
3
|
-
*
|
|
4
|
-
* Public surface:
|
|
5
|
-
* - {@link provideBloonioChat} — environment-provider factory for app.config.ts
|
|
6
|
-
* - {@link BloonioChatService} — signals-based reactive state
|
|
7
|
-
* - Three standalone components:
|
|
8
|
-
* <bloonio-chat-launcher> floating bubble (collapsed)
|
|
9
|
-
* <bloonio-chat-panel> expandable card (the full chat UX)
|
|
10
|
-
* <bloonio-chat-thread> headless variant for inline embedding
|
|
11
|
-
*
|
|
12
|
-
* Styles ship separately at `@bloonio/chat-angular/styles.css` — import once
|
|
13
|
-
* in your global stylesheet (see README).
|
|
14
|
-
*/
|
|
15
|
-
export { provideBloonioChat, BLOONIO_CHAT_CONFIG, injectBloonioChatConfig } from './lib/bloonio-chat.token';
|
|
16
|
-
export { BloonioChatService } from './lib/bloonio-chat.service';
|
|
17
|
-
export { BloonioChatLauncherComponent } from './lib/components/launcher.component';
|
|
18
|
-
export { BloonioChatPanelComponent, } from './lib/components/panel.component';
|
|
19
|
-
export { BloonioChatThreadComponent } from './lib/components/thread.component';
|
|
20
|
-
export { MessageListComponent } from './lib/components/message-list.component';
|
|
21
|
-
export { InputBarComponent } from './lib/components/input-bar.component';
|
|
22
|
-
export { QuickRepliesComponent } from './lib/components/quick-replies.component';
|
|
23
|
-
export { BloonioChatError, BloonioChatNetworkError, BloonioChatServerError, BloonioChatAuthError, } from '@bloonio/chat-client-core';
|
|
24
|
-
export const VERSION = '0.1.0';
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBTTVHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2hFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25GLE9BQU8sRUFDTCx5QkFBeUIsR0FFMUIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQVlqRixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixzQkFBc0IsRUFDdEIsb0JBQW9CLEdBQ3JCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGJsb29uaW8vY2hhdC1hbmd1bGFyIOKAlCBBbmd1bGFyIGxpYnJhcnkgZm9yIHRoZSBibG9vbmlvIGNoYXQgUGFhUy5cbiAqXG4gKiBQdWJsaWMgc3VyZmFjZTpcbiAqICAgLSB7QGxpbmsgcHJvdmlkZUJsb29uaW9DaGF0fSDigJQgZW52aXJvbm1lbnQtcHJvdmlkZXIgZmFjdG9yeSBmb3IgYXBwLmNvbmZpZy50c1xuICogICAtIHtAbGluayBCbG9vbmlvQ2hhdFNlcnZpY2V9ICDigJQgc2lnbmFscy1iYXNlZCByZWFjdGl2ZSBzdGF0ZVxuICogICAtIFRocmVlIHN0YW5kYWxvbmUgY29tcG9uZW50czpcbiAqICAgICAgIDxibG9vbmlvLWNoYXQtbGF1bmNoZXI+ICAgZmxvYXRpbmcgYnViYmxlIChjb2xsYXBzZWQpXG4gKiAgICAgICA8Ymxvb25pby1jaGF0LXBhbmVsPiAgICAgIGV4cGFuZGFibGUgY2FyZCAodGhlIGZ1bGwgY2hhdCBVWClcbiAqICAgICAgIDxibG9vbmlvLWNoYXQtdGhyZWFkPiAgICAgaGVhZGxlc3MgdmFyaWFudCBmb3IgaW5saW5lIGVtYmVkZGluZ1xuICpcbiAqIFN0eWxlcyBzaGlwIHNlcGFyYXRlbHkgYXQgYEBibG9vbmlvL2NoYXQtYW5ndWxhci9zdHlsZXMuY3NzYCDigJQgaW1wb3J0IG9uY2VcbiAqIGluIHlvdXIgZ2xvYmFsIHN0eWxlc2hlZXQgKHNlZSBSRUFETUUpLlxuICovXG5cbmV4cG9ydCB7IHByb3ZpZGVCbG9vbmlvQ2hhdCwgQkxPT05JT19DSEFUX0NPTkZJRywgaW5qZWN0Qmxvb25pb0NoYXRDb25maWcgfSBmcm9tICcuL2xpYi9ibG9vbmlvLWNoYXQudG9rZW4nO1xuZXhwb3J0IHR5cGUge1xuICBCbG9vbmlvQ2hhdENvbmZpZyxcbiAgVmlzaXRvclRva2VuUHJvdmlkZXIsXG59IGZyb20gJy4vbGliL2Jsb29uaW8tY2hhdC50b2tlbic7XG5cbmV4cG9ydCB7IEJsb29uaW9DaGF0U2VydmljZSB9IGZyb20gJy4vbGliL2Jsb29uaW8tY2hhdC5zZXJ2aWNlJztcbmV4cG9ydCB0eXBlIHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICcuL2xpYi9ibG9vbmlvLWNoYXQuc2VydmljZSc7XG5cbmV4cG9ydCB7IEJsb29uaW9DaGF0TGF1bmNoZXJDb21wb25lbnQgfSBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xhdW5jaGVyLmNvbXBvbmVudCc7XG5leHBvcnQge1xuICBCbG9vbmlvQ2hhdFBhbmVsQ29tcG9uZW50LFxuICB0eXBlIENoYXRQYW5lbE1vZGUsXG59IGZyb20gJy4vbGliL2NvbXBvbmVudHMvcGFuZWwuY29tcG9uZW50JztcbmV4cG9ydCB7IEJsb29uaW9DaGF0VGhyZWFkQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy90aHJlYWQuY29tcG9uZW50JztcbmV4cG9ydCB7IE1lc3NhZ2VMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9tZXNzYWdlLWxpc3QuY29tcG9uZW50JztcbmV4cG9ydCB7IElucHV0QmFyQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9pbnB1dC1iYXIuY29tcG9uZW50JztcbmV4cG9ydCB7IFF1aWNrUmVwbGllc0NvbXBvbmVudCB9IGZyb20gJy4vbGliL2NvbXBvbmVudHMvcXVpY2stcmVwbGllcy5jb21wb25lbnQnO1xuXG4vLyBSZS1leHBvcnQgdGhlIGJpdHMgb2YgQGJsb29uaW8vY2hhdC1jbGllbnQtY29yZSBhIGNvbnN1bWVyIGlzIGxpa2VseSB0b1xuLy8gdG91Y2ggKHR5cGVzLCBlcnJvciBjbGFzc2VzKS4gS2VlcHMgYGltcG9ydCB74oCmfSBmcm9tICdAYmxvb25pby9jaGF0LWFuZ3VsYXInYFxuLy8gdGhlIG9uZSBlbnRyeSBwb2ludCBmb3IgbW9zdCBjYXNlcy5cbmV4cG9ydCB0eXBlIHtcbiAgV2lkZ2V0Qm9vdHN0cmFwQ29uZmlnLFxuICBXaWRnZXRQb3NpdGlvbixcbiAgV2lkZ2V0VmlzaWJpbGl0eSxcbiAgU2VydmVyTXNnRnJhbWUsXG4gIE1lc3NhZ2VTZW5kZXIsXG59IGZyb20gJ0BibG9vbmlvL2NoYXQtY2xpZW50LWNvcmUnO1xuZXhwb3J0IHtcbiAgQmxvb25pb0NoYXRFcnJvcixcbiAgQmxvb25pb0NoYXROZXR3b3JrRXJyb3IsXG4gIEJsb29uaW9DaGF0U2VydmVyRXJyb3IsXG4gIEJsb29uaW9DaGF0QXV0aEVycm9yLFxufSBmcm9tICdAYmxvb25pby9jaGF0LWNsaWVudC1jb3JlJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnMC4xLjAnO1xuIl19
|