@konce-pt/angular 0.8.3 → 0.8.5
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 +380 -0
- package/chat/src/lib/llms.txt +160 -0
- package/fesm2022/konce-pt-angular-chat.mjs +1270 -0
- package/fesm2022/konce-pt-angular-chat.mjs.map +1 -0
- package/fesm2022/konce-pt-angular.mjs +1755 -398
- package/fesm2022/konce-pt-angular.mjs.map +1 -1
- package/package.json +15 -8
- package/src/lib/backdrop/llms.txt +163 -0
- package/src/lib/chip/llms.txt +8 -0
- package/src/lib/data-view/llms.txt +18 -2
- package/src/lib/icon-button/llms.txt +1 -0
- package/src/lib/mention/llms.txt +60 -0
- package/src/lib/order-list/llms.txt +13 -2
- package/src/lib/peek/llms.txt +45 -0
- package/src/lib/pick-list/llms.txt +18 -2
- package/src/lib/rich-text/llms.txt +15 -0
- package/types/konce-pt-angular-chat.d.ts +334 -0
- package/types/konce-pt-angular-chat.d.ts.map +1 -0
- package/types/konce-pt-angular.d.ts +454 -18
- package/types/konce-pt-angular.d.ts.map +1 -1
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { TemplateRef } from '@angular/core';
|
|
3
|
+
import { KptI18n } from '@konce-pt/angular';
|
|
4
|
+
import { KptChatMessage as KptChatMessage$1, KptChatAuthor, KptChatReactionOption, KptChatReplyRef, KptChatRow, KptChatDateLabel, KptChatAttachment, KptChatReaction, KptChatStatus, KptChatGroupPosition } from '@konce-pt/chat';
|
|
5
|
+
export { KPT_CHAT_GROUP_GAP_MS, KPT_CHAT_REACTIONS, KptChatAttachment, KptChatAuthor, KptChatDateLabel, KptChatDateRow, KptChatGroupOptions, KptChatGroupPosition, KptChatMessage as KptChatMessageModel, KptChatMessageRow, KptChatReaction, KptChatReactionKind, KptChatReactionOption, KptChatReplyRef, KptChatRow, KptChatStatus, KptChatUnreadRow, buildChatRows, canRetry, chatDayIndicator, dateLabel, diffInDays, isSameDay, mergeStatus, pendingCount, replyRefFrom, startOfDay, statusRank, toDate, toggleReaction } from '@konce-pt/chat';
|
|
6
|
+
|
|
7
|
+
/** Wybór reakcji na wiadomości — komponent mówi, w co kliknięto, dopisanie należy do aplikacji. */
|
|
8
|
+
interface KptChatReactEvent<T = unknown> {
|
|
9
|
+
message: KptChatMessage$1<T>;
|
|
10
|
+
emoji: string;
|
|
11
|
+
}
|
|
12
|
+
/** Wiersz separatora daty z gotową etykietą — tłumaczenie robi komponent, nie rdzeń. */
|
|
13
|
+
type KptChatDateViewRow = {
|
|
14
|
+
kind: 'date';
|
|
15
|
+
key: string;
|
|
16
|
+
date: Date;
|
|
17
|
+
label: KptChatDateLabel;
|
|
18
|
+
text: string;
|
|
19
|
+
};
|
|
20
|
+
type KptChatViewRow<T> = KptChatDateViewRow | Exclude<KptChatRow<T>, {
|
|
21
|
+
kind: 'date';
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Lista rozmowy — grupuje wiadomości, wstawia separatory dni i dzielnik nieprzeczytanych,
|
|
25
|
+
* trzyma widok przy dole i pokazuje pasek offline z liczbą wiadomości czekających na wysłanie.
|
|
26
|
+
*
|
|
27
|
+
* Sama logika wierszy mieszka w `@konce-pt/chat` (`buildChatRows`), więc port Reacta liczy ją
|
|
28
|
+
* tak samo. Komponent nie ma nic wspólnego z transportem: wiadomości dostaje, a `(retry)`
|
|
29
|
+
* i `(loadMore)` tylko zgłasza — ponowieniem wysyłki i dociąganiem historii zajmuje się aplikacja.
|
|
30
|
+
*
|
|
31
|
+
* Treść bąbla można podmienić własnym `<ng-template>`; kontekst dostaje wiadomość jako
|
|
32
|
+
* `$implicit` i cały wiersz jako `row`.
|
|
33
|
+
*
|
|
34
|
+
* Kompozytor (`kpt-chat-composer`) jest osobnym komponentem i stoi obok listy — dzięki temu
|
|
35
|
+
* czat bez pola wpisywania (podgląd, archiwum) nie wozi go ze sobą.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* <kpt-chat [messages]="messages()" currentUser="me" [typing]="typing()" (retry)="resend($event)" />
|
|
39
|
+
*/
|
|
40
|
+
declare class KptChat<T = unknown> {
|
|
41
|
+
/** Wiadomości w kolejności chronologicznej — komponent ich nie sortuje. */
|
|
42
|
+
readonly messages: _angular_core.InputSignal<readonly KptChatMessage$1<T>[]>;
|
|
43
|
+
/** `id` nadawcy uznawanego za „mnie": jego wiadomości idą na prawo i mają status. */
|
|
44
|
+
readonly currentUser: _angular_core.InputSignal<string>;
|
|
45
|
+
/** Przerwa łamiąca grupę wiadomości jednego nadawcy. */
|
|
46
|
+
readonly groupGapMs: _angular_core.InputSignal<number>;
|
|
47
|
+
/** `id` pierwszej nieprzeczytanej wiadomości — nad nią stanie dzielnik. */
|
|
48
|
+
readonly unreadFrom: _angular_core.InputSignal<string | null>;
|
|
49
|
+
/** Brak połączenia: pasek u góry listy z liczbą wiadomości czekających na wysłanie. */
|
|
50
|
+
readonly offline: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
51
|
+
/** Osoby piszące w tej chwili. */
|
|
52
|
+
readonly typing: _angular_core.InputSignal<readonly KptChatAuthor[]>;
|
|
53
|
+
/** Dosuwanie widoku do najnowszej wiadomości, dopóki użytkownik nie odjedzie w górę. */
|
|
54
|
+
readonly autoScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
55
|
+
/** Akcje bąbla pod kursorem: odpowiedz i zareaguj. */
|
|
56
|
+
readonly actions: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
57
|
+
/** Zestaw wybieraka reakcji, przekazywany bąblom. Domyślnie pięć wbudowanych. */
|
|
58
|
+
readonly reactionOptions: _angular_core.InputSignal<readonly KptChatReactionOption[]>;
|
|
59
|
+
/** Własny komunikat pustej rozmowy. */
|
|
60
|
+
readonly emptyLabel: _angular_core.InputSignal<string>;
|
|
61
|
+
readonly retry: _angular_core.OutputEmitterRef<KptChatMessage$1<T>>;
|
|
62
|
+
readonly reply: _angular_core.OutputEmitterRef<KptChatMessage$1<T>>;
|
|
63
|
+
/** Kliknięcie w reakcję w wybieraku: wiadomość i wybrane emoji. */
|
|
64
|
+
readonly react: _angular_core.OutputEmitterRef<KptChatReactEvent<T>>;
|
|
65
|
+
readonly quoted: _angular_core.OutputEmitterRef<KptChatReplyRef>;
|
|
66
|
+
/** Przewinięcie na sam szczyt — moment na dociągnięcie starszych wiadomości. */
|
|
67
|
+
readonly loadMore: _angular_core.OutputEmitterRef<void>;
|
|
68
|
+
protected readonly i18n: KptI18n;
|
|
69
|
+
protected readonly messageTpl: _angular_core.Signal<TemplateRef<any> | undefined>;
|
|
70
|
+
private readonly viewport;
|
|
71
|
+
private readonly day;
|
|
72
|
+
private readonly destroyRef;
|
|
73
|
+
/** Czy widok stoi przy dole listy. Odjazd w górę wyłącza dosuwanie. */
|
|
74
|
+
protected readonly pinned: _angular_core.WritableSignal<boolean>;
|
|
75
|
+
/** Ile wiadomości przyszło, odkąd użytkownik odjechał w górę. */
|
|
76
|
+
protected readonly newCount: _angular_core.WritableSignal<number>;
|
|
77
|
+
/** Tekst pływającej pigułki dnia — zostaje po zgaszeniu, żeby jej pas nie zmieniał wysokości. */
|
|
78
|
+
protected readonly dayLabel: _angular_core.WritableSignal<string>;
|
|
79
|
+
/** Czy pigułka dnia jest widoczna. */
|
|
80
|
+
protected readonly dayVisible: _angular_core.WritableSignal<boolean>;
|
|
81
|
+
private lastCount;
|
|
82
|
+
private wasAtTop;
|
|
83
|
+
protected readonly rows: _angular_core.Signal<KptChatRow<T>[]>;
|
|
84
|
+
protected readonly viewRows: _angular_core.Signal<KptChatViewRow<T>[]>;
|
|
85
|
+
protected readonly pending: _angular_core.Signal<number>;
|
|
86
|
+
constructor();
|
|
87
|
+
/** Przewija do najnowszej wiadomości i kasuje licznik nowych. */
|
|
88
|
+
jumpToLatest(): void;
|
|
89
|
+
protected onScroll(element: HTMLElement): void;
|
|
90
|
+
/**
|
|
91
|
+
* Ustawia tekst pływającej pigułki dnia — co ma na niej być, liczy `chatDayIndicator`
|
|
92
|
+
* z `@konce-pt/chat`, tutaj zostaje czytanie prostokątów i przepisanie etykiety.
|
|
93
|
+
*
|
|
94
|
+
* Wszystkie pomiary idą przed zapisem sygnału, więc przeglądarka przelicza układ raz
|
|
95
|
+
* na klatkę zamiast przy każdym wierszu.
|
|
96
|
+
*/
|
|
97
|
+
private syncDay;
|
|
98
|
+
private scrollToBottom;
|
|
99
|
+
/**
|
|
100
|
+
* Etykieta separatora dnia. Rdzeń zwraca rodzaj, słownik daje „dziś"/„wczoraj",
|
|
101
|
+
* a nazwę dnia i pełną datę — `Intl`, żeby nie trzymać w słowniku kalendarza.
|
|
102
|
+
*/
|
|
103
|
+
private dateText;
|
|
104
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptChat<any>, never>;
|
|
105
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptChat<any>, "kpt-chat", never, { "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "currentUser": { "alias": "currentUser"; "required": false; "isSignal": true; }; "groupGapMs": { "alias": "groupGapMs"; "required": false; "isSignal": true; }; "unreadFrom": { "alias": "unreadFrom"; "required": false; "isSignal": true; }; "offline": { "alias": "offline"; "required": false; "isSignal": true; }; "typing": { "alias": "typing"; "required": false; "isSignal": true; }; "autoScroll": { "alias": "autoScroll"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "reactionOptions": { "alias": "reactionOptions"; "required": false; "isSignal": true; }; "emptyLabel": { "alias": "emptyLabel"; "required": false; "isSignal": true; }; }, { "retry": "retry"; "reply": "reply"; "react": "react"; "quoted": "quoted"; "loadMore": "loadMore"; }, ["messageTpl"], never, true, never>;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** Wygląd bąbla. `system` nie rysuje bąbla w ogóle — to komunikat, nie wypowiedź. */
|
|
109
|
+
type KptChatMessageVariant = 'neutral' | 'primary' | 'solid' | 'ghost' | 'system';
|
|
110
|
+
/**
|
|
111
|
+
* Pojedyncza wiadomość czatu — bąbel z treścią, godziną, statusem wysyłki i opcjonalnym
|
|
112
|
+
* awatarem, cytatem, załącznikami i reakcjami.
|
|
113
|
+
*
|
|
114
|
+
* Działa na dwa sposoby: dostaje gotowy obiekt przez `[message]` (tak używa go `kpt-chat`)
|
|
115
|
+
* albo pojedyncze inputy, gdy budujesz listę samodzielnie. Treść można też wrzucić
|
|
116
|
+
* przez `<ng-content />` — projekcja wygrywa z `text`, więc bąbel przyjmuje cokolwiek.
|
|
117
|
+
*
|
|
118
|
+
* Wygląd wewnątrz grupy steruje `position`: zapadnięty narożnik od strony nadawcy i ogonek
|
|
119
|
+
* tylko przy ostatnim bąblu. Wylicza to `buildChatRows()` z `@konce-pt/chat`.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* <kpt-chat-message [message]="msg" align="end" position="last" />
|
|
123
|
+
* <kpt-chat-message align="end" status="failed" (retry)="resend()">Nie poszło</kpt-chat-message>
|
|
124
|
+
*/
|
|
125
|
+
declare class KptChatMessage {
|
|
126
|
+
/** Cała wiadomość naraz. Pojedyncze inputy poniżej mają nad nią priorytet. */
|
|
127
|
+
readonly message: _angular_core.InputSignal<KptChatMessage$1<unknown> | null>;
|
|
128
|
+
readonly author: _angular_core.InputSignal<KptChatAuthor | null>;
|
|
129
|
+
readonly text: _angular_core.InputSignal<string | null>;
|
|
130
|
+
readonly time: _angular_core.InputSignal<string | number | Date | null>;
|
|
131
|
+
readonly attachments: _angular_core.InputSignal<readonly KptChatAttachment[] | null>;
|
|
132
|
+
readonly reactions: _angular_core.InputSignal<readonly KptChatReaction[] | null>;
|
|
133
|
+
readonly replyTo: _angular_core.InputSignal<KptChatReplyRef | null>;
|
|
134
|
+
readonly status: _angular_core.InputSignal<KptChatStatus | null>;
|
|
135
|
+
/** Strona listy: `start` to cudza wiadomość, `end` własna. */
|
|
136
|
+
readonly align: _angular_core.InputSignal<"start" | "end">;
|
|
137
|
+
/** Wariant kolorystyczny; bez niego wynika z `align` (własna = `primary`). */
|
|
138
|
+
readonly variant: _angular_core.InputSignal<KptChatMessageVariant | null>;
|
|
139
|
+
readonly position: _angular_core.InputSignal<KptChatGroupPosition>;
|
|
140
|
+
readonly system: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
141
|
+
readonly showAuthor: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
142
|
+
readonly showAvatar: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
143
|
+
readonly showMeta: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
144
|
+
readonly tail: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
145
|
+
/** Akcje pod kursorem: odpowiedz i zareaguj. Domyślnie wyłączone. */
|
|
146
|
+
readonly actions: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
147
|
+
/** Zestaw wybieraka reakcji. Domyślnie pięć wbudowanych; można go skrócić lub przestawić. */
|
|
148
|
+
readonly reactionOptions: _angular_core.InputSignal<readonly KptChatReactionOption[]>;
|
|
149
|
+
readonly retry: _angular_core.OutputEmitterRef<void>;
|
|
150
|
+
readonly reply: _angular_core.OutputEmitterRef<void>;
|
|
151
|
+
/** Wybrana reakcja (emoji). Biblioteka niczego nie dopisuje do modelu — robi to aplikacja. */
|
|
152
|
+
readonly react: _angular_core.OutputEmitterRef<string>;
|
|
153
|
+
/** Kliknięcie w cytat — aplikacja może przewinąć listę do oryginału. */
|
|
154
|
+
readonly quoted: _angular_core.OutputEmitterRef<KptChatReplyRef>;
|
|
155
|
+
protected readonly i18n: KptI18n;
|
|
156
|
+
private readonly host;
|
|
157
|
+
/** Czy wybierak reakcji jest otwarty. */
|
|
158
|
+
protected readonly pickerOpen: _angular_core.WritableSignal<boolean>;
|
|
159
|
+
constructor();
|
|
160
|
+
protected readonly isSystem: _angular_core.Signal<boolean>;
|
|
161
|
+
protected readonly resolvedAuthor: _angular_core.Signal<KptChatAuthor | null>;
|
|
162
|
+
protected readonly resolvedText: _angular_core.Signal<string>;
|
|
163
|
+
protected readonly resolvedStatus: _angular_core.Signal<KptChatStatus | null>;
|
|
164
|
+
protected readonly resolvedReplyTo: _angular_core.Signal<KptChatReplyRef | null>;
|
|
165
|
+
protected readonly resolvedAttachments: _angular_core.Signal<readonly KptChatAttachment[]>;
|
|
166
|
+
protected readonly resolvedReactions: _angular_core.Signal<readonly KptChatReaction[]>;
|
|
167
|
+
protected readonly sentAt: _angular_core.Signal<Date | null>;
|
|
168
|
+
/**
|
|
169
|
+
* Wariant domyślny bierze się z wyrównania. Własna wiadomość dostaje pełny `solid`,
|
|
170
|
+
* bo motyw biblioteki jest monochromatyczny: pastelowy `primary-subtle` ma tę samą
|
|
171
|
+
* jasność co `muted`, więc własny i cudzy bąbel byłyby nie do odróżnienia. Kto woli
|
|
172
|
+
* ciszej, ustawia `variant="primary"` ręcznie.
|
|
173
|
+
*/
|
|
174
|
+
protected readonly resolvedVariant: _angular_core.Signal<KptChatMessageVariant>;
|
|
175
|
+
/** Ogonek tylko na końcu grupy i tylko tam, gdzie bąbel ma tło, z którego da się go wyciąć. */
|
|
176
|
+
protected readonly hasTail: _angular_core.Signal<boolean>;
|
|
177
|
+
protected readonly canRetry: _angular_core.Signal<boolean>;
|
|
178
|
+
protected readonly statusIcon: _angular_core.Signal<string | null>;
|
|
179
|
+
protected readonly timeLabel: _angular_core.Signal<string>;
|
|
180
|
+
protected readonly isoTime: _angular_core.Signal<string | null>;
|
|
181
|
+
/**
|
|
182
|
+
* Etykieta dla czytnika ekranu. Bez niej z bąbla płynie sama treść — bez nadawcy,
|
|
183
|
+
* godziny i informacji, że wiadomość się nie wysłała.
|
|
184
|
+
*/
|
|
185
|
+
protected readonly ariaLabel: _angular_core.Signal<string>;
|
|
186
|
+
protected readonly statusLabel: _angular_core.Signal<string>;
|
|
187
|
+
/** Etykieta opcji wybieraka — `like` → `chat.reactLike`. */
|
|
188
|
+
protected reactionLabel(option: KptChatReactionOption): string;
|
|
189
|
+
/** Czy bieżący użytkownik dał już tę reakcję — opcja wybieraka pokazuje to przez `aria-pressed`. */
|
|
190
|
+
protected hasReacted(emoji: string): boolean;
|
|
191
|
+
protected pick(emoji: string): void;
|
|
192
|
+
/** Wyjście fokusu poza wybierak zamyka go — przechodzenie Tabem między opcjami nie. */
|
|
193
|
+
protected onPickerFocusOut(event: FocusEvent): void;
|
|
194
|
+
/** Rozmiar załącznika w kB/MB — surowe bajty nic nie mówią przy pliku obok nazwy. */
|
|
195
|
+
protected fileSize(bytes?: number): string;
|
|
196
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptChatMessage, never>;
|
|
197
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptChatMessage, "kpt-chat-message", never, { "message": { "alias": "message"; "required": false; "isSignal": true; }; "author": { "alias": "author"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; "attachments": { "alias": "attachments"; "required": false; "isSignal": true; }; "reactions": { "alias": "reactions"; "required": false; "isSignal": true; }; "replyTo": { "alias": "replyTo"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "system": { "alias": "system"; "required": false; "isSignal": true; }; "showAuthor": { "alias": "showAuthor"; "required": false; "isSignal": true; }; "showAvatar": { "alias": "showAvatar"; "required": false; "isSignal": true; }; "showMeta": { "alias": "showMeta"; "required": false; "isSignal": true; }; "tail": { "alias": "tail"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "reactionOptions": { "alias": "reactionOptions"; "required": false; "isSignal": true; }; }, { "retry": "retry"; "reply": "reply"; "react": "react"; "quoted": "quoted"; }, never, ["*"], true, never>;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Wskaźnik pisania — trzy kropki i informacja, kto pisze.
|
|
202
|
+
*
|
|
203
|
+
* Pusta lista autorów nie renderuje niczego, więc można go trzymać w szablonie na stałe
|
|
204
|
+
* i sterować wyłącznie danymi.
|
|
205
|
+
*
|
|
206
|
+
* Element jest `role="status"` z `aria-live="polite"`: czytnik ogłasza wejście i zniknięcie
|
|
207
|
+
* wskaźnika, ale nie przerywa czytania wiadomości. Sama animacja kropek nic nie mówi —
|
|
208
|
+
* informację niesie etykieta.
|
|
209
|
+
*
|
|
210
|
+
* @example
|
|
211
|
+
* <kpt-chat-typing [authors]="typing()" />
|
|
212
|
+
*/
|
|
213
|
+
declare class KptChatTyping {
|
|
214
|
+
/** Osoby piszące w tej chwili. Pusta lista chowa wskaźnik. */
|
|
215
|
+
readonly authors: _angular_core.InputSignal<readonly KptChatAuthor[]>;
|
|
216
|
+
/** Własna etykieta zamiast tej ze słownika. */
|
|
217
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
218
|
+
protected readonly i18n: KptI18n;
|
|
219
|
+
protected readonly visible: _angular_core.Signal<boolean>;
|
|
220
|
+
/**
|
|
221
|
+
* Jedna osoba jest wymieniona z imienia, przy większej liczbie liczy się głowy —
|
|
222
|
+
* lista nazwisk rozjeżdża wiersz i i tak nikt jej nie czyta.
|
|
223
|
+
*/
|
|
224
|
+
protected readonly text: _angular_core.Signal<string>;
|
|
225
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptChatTyping, never>;
|
|
226
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptChatTyping, "kpt-chat-typing", never, { "authors": { "alias": "authors"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** Ładunek wysyłki. Kompozytor niczego nie wysyła — pakuje dane i oddaje aplikacji. */
|
|
230
|
+
interface KptChatComposerSubmit {
|
|
231
|
+
text: string;
|
|
232
|
+
files: readonly File[];
|
|
233
|
+
replyTo: KptChatReplyRef | null;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Pole pisania wiadomości — autorosnące, z załącznikami i paskiem cytatu.
|
|
237
|
+
*
|
|
238
|
+
* Nie jest kontrolką Signal Forms i celowo nią nie będzie: nie wchodzi do formularza, nie ma
|
|
239
|
+
* stanu `touched`/`invalid`, a jego wartość znika po wysłaniu. `model('')` opisuje to wiernie.
|
|
240
|
+
*
|
|
241
|
+
* `Enter` wysyła, `Shift+Enter` łamie linię (`[enterToSend]="false"` odwraca układ).
|
|
242
|
+
* Przy `[offline]` przycisk zmienia etykietę na kolejkowanie — wiadomość dalej da się napisać
|
|
243
|
+
* i oddać aplikacji, bo to ona decyduje, co zrobić z kolejką.
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* <kpt-chat-composer [(value)]="draft" allowAttachments (send)="onSend($event)" />
|
|
247
|
+
*/
|
|
248
|
+
declare class KptChatComposer {
|
|
249
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
250
|
+
/** Podpowiedź w pustym polu; bez niej etykieta ze słownika. */
|
|
251
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
252
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
253
|
+
/** Brak połączenia — przycisk mówi o kolejkowaniu, nie o wysyłce. */
|
|
254
|
+
readonly offline: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
255
|
+
readonly allowAttachments: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
256
|
+
/** Ile wierszy pole może urosnąć, zanim zacznie się przewijać. */
|
|
257
|
+
readonly maxRows: _angular_core.InputSignal<number>;
|
|
258
|
+
readonly enterToSend: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
259
|
+
/** Wiadomość, na którą odpowiadamy. Po wysłaniu czyści się razem z treścią. */
|
|
260
|
+
readonly replyTo: _angular_core.ModelSignal<KptChatReplyRef | null>;
|
|
261
|
+
readonly send: _angular_core.OutputEmitterRef<KptChatComposerSubmit>;
|
|
262
|
+
/** Pierwsze uderzenie w klawiaturę — sygnał „piszę" dla drugiej strony. */
|
|
263
|
+
readonly typing: _angular_core.OutputEmitterRef<void>;
|
|
264
|
+
protected readonly i18n: KptI18n;
|
|
265
|
+
protected readonly files: _angular_core.WritableSignal<readonly File[]>;
|
|
266
|
+
protected readonly canSend: _angular_core.Signal<boolean>;
|
|
267
|
+
protected readonly sendLabel: _angular_core.Signal<string>;
|
|
268
|
+
protected onInput(element: HTMLTextAreaElement): void;
|
|
269
|
+
protected onKeydown(event: KeyboardEvent, element: HTMLTextAreaElement): void;
|
|
270
|
+
protected submit(element?: HTMLTextAreaElement): void;
|
|
271
|
+
protected onFiles(input: HTMLInputElement): void;
|
|
272
|
+
protected removeFile(file: File): void;
|
|
273
|
+
/**
|
|
274
|
+
* Wysokość liczona od treści. Zerowanie przed odczytem `scrollHeight` jest konieczne:
|
|
275
|
+
* bez niego pole potrafi tylko rosnąć, bo `scrollHeight` nigdy nie zejdzie poniżej
|
|
276
|
+
* ustawionej wcześniej wysokości. Górny limit trzyma CSS (`--_max-rows`).
|
|
277
|
+
*/
|
|
278
|
+
private grow;
|
|
279
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptChatComposer, never>;
|
|
280
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptChatComposer, "kpt-chat-composer", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "offline": { "alias": "offline"; "required": false; "isSignal": true; }; "allowAttachments": { "alias": "allowAttachments"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "enterToSend": { "alias": "enterToSend"; "required": false; "isSignal": true; }; "replyTo": { "alias": "replyTo"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "replyTo": "replyToChange"; "send": "send"; "typing": "typing"; }, never, never, true, never>;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
type KptChatDockPosition = 'bottom-end' | 'bottom-start';
|
|
284
|
+
/**
|
|
285
|
+
* Pływający czat w rogu ekranu — FAB z licznikiem nieprzeczytanych i panel z rozmową.
|
|
286
|
+
*
|
|
287
|
+
* Zawartość panelu jest rzutowana, więc dock nie wie nic o wiadomościach: wkłada się do niego
|
|
288
|
+
* `kpt-chat` i `kpt-chat-composer` (albo cokolwiek innego). Sam FAB to `kpt-fab` — dock go
|
|
289
|
+
* używa, nie zastępuje.
|
|
290
|
+
*
|
|
291
|
+
* Poniżej `--kpt-breakpoint-sm` panel wchodzi na pełny ekran: 22,5 cm szerokości na telefonie
|
|
292
|
+
* to nie panel, tylko szpara.
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* <kpt-chat-dock [(open)]="chatOpen" [unread]="unread()" header="Wsparcie">
|
|
296
|
+
* <kpt-chat [messages]="messages()" currentUser="me" />
|
|
297
|
+
* <kpt-chat-composer (send)="onSend($event)" />
|
|
298
|
+
* </kpt-chat-dock>
|
|
299
|
+
*/
|
|
300
|
+
declare class KptChatDock {
|
|
301
|
+
readonly open: _angular_core.ModelSignal<boolean>;
|
|
302
|
+
readonly position: _angular_core.InputSignal<KptChatDockPosition>;
|
|
303
|
+
/** Licznik na plakietce FAB-a. Zero chowa plakietkę. */
|
|
304
|
+
readonly unread: _angular_core.InputSignal<number>;
|
|
305
|
+
readonly header: _angular_core.InputSignal<string>;
|
|
306
|
+
/** Ikona zamkniętego FAB-a; otwarty zawsze pokazuje krzyżyk. */
|
|
307
|
+
readonly icon: _angular_core.InputSignal<string>;
|
|
308
|
+
/** Szerokość panelu na ekranach powyżej `--kpt-breakpoint-sm`. */
|
|
309
|
+
readonly width: _angular_core.InputSignal<string>;
|
|
310
|
+
/**
|
|
311
|
+
* Odsunięcie od rogu ekranu (dowolna długość CSS), wspólne dla obu osi.
|
|
312
|
+
* Domyślnie `--kpt-space-6`. Przydaje się, gdy w tym samym rogu stoi już inny widget —
|
|
313
|
+
* `kpt-scroll-top` przykleja się dokładnie tam samo i bez tego oba się nakładają.
|
|
314
|
+
*/
|
|
315
|
+
readonly offset: _angular_core.InputSignal<string>;
|
|
316
|
+
protected readonly i18n: KptI18n;
|
|
317
|
+
private readonly panel;
|
|
318
|
+
private readonly trigger;
|
|
319
|
+
protected readonly triggerLabel: _angular_core.Signal<string>;
|
|
320
|
+
constructor();
|
|
321
|
+
protected toggle(): void;
|
|
322
|
+
close(): void;
|
|
323
|
+
/**
|
|
324
|
+
* Fokus ląduje na polu pisania, jeśli w panelu jest — po to się czat otwiera.
|
|
325
|
+
* Bez pola bierze pierwszy element interaktywny, a w ostateczności sam panel.
|
|
326
|
+
*/
|
|
327
|
+
private focusPanel;
|
|
328
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KptChatDock, never>;
|
|
329
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KptChatDock, "kpt-chat-dock", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "unread": { "alias": "unread"; "required": false; "isSignal": true; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
export { KptChat, KptChatComposer, KptChatDock, KptChatMessage, KptChatTyping };
|
|
333
|
+
export type { KptChatComposerSubmit, KptChatDockPosition, KptChatMessageVariant, KptChatReactEvent };
|
|
334
|
+
//# sourceMappingURL=konce-pt-angular-chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"konce-pt-angular-chat.d.ts","sources":["../../chat/src/lib/chat.component.ts","../../chat/src/lib/chat-message.component.ts","../../chat/src/lib/chat-typing.component.ts","../../chat/src/lib/chat-composer.component.ts","../../chat/src/lib/chat-dock.component.ts"],"mappings":";;;;;;AAiCA;AACM,UAAW,iBAAiB;AAChC,aAASA,gBAAmB;;AAE7B;AAED;AACA,KAAK,kBAAkB;;;UAAsC,IAAI;WAAS,gBAAgB;;;AAC1F,KAAK,cAAc,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU;;AAAqB;AAYrF;;;;;;;;;;;;;;;;AAgBG;AACH,cASa,OAAO;;uBAED,aAAA,CAAA,WAAA,UAAAA,gBAAA;;0BAEG,aAAA,CAAA,WAAA;;yBAED,aAAA,CAAA,WAAA;;yBAEA,aAAA,CAAA,WAAA;;sBAEH,aAAA,CAAA,wBAAA;;qBAED,aAAA,CAAA,WAAA,UAAA,aAAA;;yBAEI,aAAA,CAAA,wBAAA;;sBAEH,aAAA,CAAA,wBAAA;;8BAEQ,aAAA,CAAA,WAAA,UAAA,qBAAA;;yBAEL,aAAA,CAAA,WAAA;oBAEL,aAAA,CAAA,gBAAA,CAAAA,gBAAA;oBACA,aAAA,CAAA,gBAAA,CAAAA,gBAAA;;oBAEA,aAAA,CAAA,gBAAA,CAAA,iBAAA;qBACC,aAAA,CAAA,gBAAA,CAAA,eAAA;;uBAEE,aAAA,CAAA,gBAAA;AAEjB,6BAAuB,OAAA;AACvB,mCAA6B,aAAA,CAAA,MAAA,CAAA,WAAA;AAE7B;AACA;AACA;;AAGA,+BAAyB,aAAA,CAAA,cAAA;;AAEzB,iCAA2B,aAAA,CAAA,cAAA;;AAE3B,iCAA2B,aAAA,CAAA,cAAA;;AAE3B,mCAA6B,aAAA,CAAA,cAAA;;;AAK7B,6BAAuB,aAAA,CAAA,MAAA,CAAA,UAAA;AAQvB,iCAA2B,aAAA,CAAA,MAAA,CAAA,cAAA;AAI3B,gCAA0B,aAAA,CAAA,MAAA;;;AAuC1B;AAMA,gCAA4B,WAAW;AAevC;;;;;;AAMG;AACH;AAsBA;AAOA;;;AAGG;AACH;oDAjKW,OAAO;sDAAP,OAAO;AA8KnB;;ACnOD;AACM,KAAM,qBAAqB;AAWjC;;;;;;;;;;;;;;AAcG;AACH,cAaa,cAAc;;sBAET,aAAA,CAAA,WAAA,CAAAA,gBAAA;qBAED,aAAA,CAAA,WAAA,CAAA,aAAA;mBACF,aAAA,CAAA,WAAA;mBACA,aAAA,CAAA,WAAA,mBAAA,IAAA;0BACO,aAAA,CAAA,WAAA,UAAA,iBAAA;wBACF,aAAA,CAAA,WAAA,UAAA,eAAA;sBACF,aAAA,CAAA,WAAA,CAAA,eAAA;qBACD,aAAA,CAAA,WAAA,CAAA,aAAA;;oBAGD,aAAA,CAAA,WAAA;;sBAEE,aAAA,CAAA,WAAA,CAAA,qBAAA;uBACC,aAAA,CAAA,WAAA,CAAA,oBAAA;qBACF,aAAA,CAAA,wBAAA;yBAEI,aAAA,CAAA,wBAAA;yBACA,aAAA,CAAA,wBAAA;uBACF,aAAA,CAAA,wBAAA;mBACJ,aAAA,CAAA,wBAAA;;sBAEG,aAAA,CAAA,wBAAA;;8BAEQ,aAAA,CAAA,WAAA,UAAA,qBAAA;oBAEV,aAAA,CAAA,gBAAA;oBACA,aAAA,CAAA,gBAAA;;oBAEA,aAAA,CAAA,gBAAA;;qBAEC,aAAA,CAAA,gBAAA,CAAA,eAAA;AAEf,6BAAuB,OAAA;AACvB;;AAGA,mCAA6B,aAAA,CAAA,cAAA;;AAiB7B,iCAA2B,aAAA,CAAA,MAAA;AAC3B,uCAAiC,aAAA,CAAA,MAAA,CAAA,aAAA;AACjC,qCAA+B,aAAA,CAAA,MAAA;AAC/B,uCAAiC,aAAA,CAAA,MAAA,CAAA,aAAA;AACjC,wCAAkC,aAAA,CAAA,MAAA,CAAA,eAAA;AAClC,4CAAsC,aAAA,CAAA,MAAA,UAAA,iBAAA;AAGtC,0CAAoC,aAAA,CAAA,MAAA,UAAA,eAAA;AAIpC,+BAAyB,aAAA,CAAA,MAAA,CAAA,IAAA;AAKzB;;;;;AAKG;AACH,wCAAkC,aAAA,CAAA,MAAA,CAAA,qBAAA;;AAMlC,gCAA0B,aAAA,CAAA,MAAA;AAM1B,iCAA2B,aAAA,CAAA,MAAA;AAE3B,mCAA6B,aAAA,CAAA,MAAA;AAK7B,kCAA4B,aAAA,CAAA,MAAA;AAM5B,gCAA0B,aAAA,CAAA,MAAA;AAE1B;;;AAGG;AACH,kCAA4B,aAAA,CAAA,MAAA;AAQ5B,oCAA8B,aAAA,CAAA,MAAA;;AAM9B,oCAAgC,qBAAqB;;AAKrD;AAIA;;AAMA,sCAAkC,UAAU;;;oDA3IjC,cAAc;sDAAd,cAAc;AAwJ1B;;ACtND;;;;;;;;;;;;AAYG;AACH,cAYa,aAAa;;sBAER,aAAA,CAAA,WAAA,UAAA,aAAA;;oBAEF,aAAA,CAAA,WAAA;AAEd,6BAAuB,OAAA;AAEvB,gCAA0B,aAAA,CAAA,MAAA;AAE1B;;;AAGG;AACH,6BAAuB,aAAA,CAAA,MAAA;oDAdZ,aAAa;sDAAb,aAAa;AAsBzB;;AC/CD;UACiB,qBAAqB;;AAEpC,oBAAgB,IAAI;AACpB,aAAS,eAAe;AACzB;AAED;;;;;;;;;;;;AAYG;AACH,cASa,eAAe;oBACZ,aAAA,CAAA,WAAA;;0BAEM,aAAA,CAAA,WAAA;uBACH,aAAA,CAAA,wBAAA;;sBAED,aAAA,CAAA,wBAAA;+BACS,aAAA,CAAA,wBAAA;;sBAET,aAAA,CAAA,WAAA;0BACI,aAAA,CAAA,wBAAA;;sBAEJ,aAAA,CAAA,WAAA,CAAA,eAAA;mBAEH,aAAA,CAAA,gBAAA,CAAA,qBAAA;;qBAEE,aAAA,CAAA,gBAAA;AAEf,6BAAuB,OAAA;AACvB,8BAAwB,aAAA,CAAA,cAAA,UAAA,IAAA;AAExB,gCAA0B,aAAA,CAAA,MAAA;AAI1B,kCAA4B,aAAA,CAAA,MAAA;AAI5B,+BAA2B,mBAAmB;+BAMnB,aAAa,WAAW,mBAAmB;+BAQ3C,mBAAmB;AAY9C,6BAAyB,gBAAgB;AAOzC,+BAA2B,IAAI;AAI/B;;;;AAIG;AACH;oDAvEW,eAAe;sDAAf,eAAe;AA+E3B;;KC5GW,mBAAmB;AAE/B;;;;;;;;;;;;;;;AAeG;AACH,cAYa,WAAW;mBACT,aAAA,CAAA,WAAA;uBACI,aAAA,CAAA,WAAA,CAAA,mBAAA;;qBAEF,aAAA,CAAA,WAAA;qBACA,aAAA,CAAA,WAAA;;mBAEF,aAAA,CAAA,WAAA;;oBAEC,aAAA,CAAA,WAAA;AACd;;;;AAIG;qBACY,aAAA,CAAA,WAAA;AAEf,6BAAuB,OAAA;AAEvB;AACA;AAEA,qCAA+B,aAAA,CAAA,MAAA;;;AAe/B;AAQA;;;AAGG;AACH;oDAjDW,WAAW;sDAAX,WAAW;AA4DvB;;;;","names":["KptChatMessageModel"]}
|