@kungal/ui-core 2.50.1 → 2.51.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 +23 -0
- package/dist/index.cjs +1042 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +329 -3
- package/dist/index.d.ts +329 -3
- package/dist/index.js +1027 -1
- package/dist/index.js.map +1 -1
- package/dist/locale/en.cjs +98 -0
- package/dist/locale/en.cjs.map +1 -1
- package/dist/locale/en.d.cts +1 -1
- package/dist/locale/en.d.ts +1 -1
- package/dist/locale/en.js +98 -0
- package/dist/locale/en.js.map +1 -1
- package/dist/{types-Cgq63U6z.d.cts → types-Dc-w7UpA.d.cts} +112 -0
- package/dist/{types-Cgq63U6z.d.ts → types-Dc-w7UpA.d.ts} +112 -0
- package/package.json +2 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ClassValue } from 'clsx';
|
|
2
2
|
export { ClassValue } from 'clsx';
|
|
3
|
-
import { K as KunMessages, a as KunMessagePath, b as KunMessageCatalog } from './types-
|
|
4
|
-
export { c as KunTranslate } from './types-
|
|
3
|
+
import { K as KunMessages, a as KunMessagePath, b as KunMessageCatalog } from './types-Dc-w7UpA.cjs';
|
|
4
|
+
export { c as KunTranslate } from './types-Dc-w7UpA.cjs';
|
|
5
5
|
|
|
6
6
|
type KunUIVariant = 'solid' | 'bordered' | 'light' | 'flat' | 'shadow';
|
|
7
7
|
type KunUIColor = 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';
|
|
@@ -167,6 +167,332 @@ interface KunAvatarDecoration {
|
|
|
167
167
|
animatedSrc?: string;
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
+
type KunChatEntityType = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'spoiler' | 'code' | 'pre' | 'blockquote' | 'text_link' | 'mention' | 'url';
|
|
171
|
+
/**
|
|
172
|
+
* A formatting range over a message's text. `offset` and `length` count
|
|
173
|
+
* UTF-16 code units, as JavaScript string indices and Dart strings do, so a
|
|
174
|
+
* range is `text.slice(offset, offset + length)` on both platforms.
|
|
175
|
+
*/
|
|
176
|
+
interface KunChatEntity {
|
|
177
|
+
type: KunChatEntityType;
|
|
178
|
+
offset: number;
|
|
179
|
+
length: number;
|
|
180
|
+
/** `mention` only: the mentioned user. */
|
|
181
|
+
user_id?: string;
|
|
182
|
+
/** `text_link` only: the link target. */
|
|
183
|
+
url?: string;
|
|
184
|
+
/** `pre` only: the code block's language, e.g. `go`. */
|
|
185
|
+
language?: string;
|
|
186
|
+
}
|
|
187
|
+
interface KunChatPhoto {
|
|
188
|
+
type: 'photo';
|
|
189
|
+
/** Image-service hash. The site turns it into a URL; KunUI never builds one. */
|
|
190
|
+
image_hash: string;
|
|
191
|
+
width: number;
|
|
192
|
+
height: number;
|
|
193
|
+
thumbhash?: string | null;
|
|
194
|
+
}
|
|
195
|
+
/** Media attached to a message. Only `photo` exists today; sticker and file
|
|
196
|
+
* arrive later, and every consumer switches on `type`. */
|
|
197
|
+
type KunChatMedia = KunChatPhoto;
|
|
198
|
+
/** The message a reply points at, embedded by the server so a reply renders
|
|
199
|
+
* without fetching its target. */
|
|
200
|
+
interface KunChatReplyTo {
|
|
201
|
+
seq: number;
|
|
202
|
+
sender_id: string;
|
|
203
|
+
text: string;
|
|
204
|
+
entities: KunChatEntity[];
|
|
205
|
+
/** The replied-to message's `media.type`, or null. */
|
|
206
|
+
media_type: string | null;
|
|
207
|
+
/** The target was deleted for everyone; render "message deleted". */
|
|
208
|
+
deleted: boolean;
|
|
209
|
+
}
|
|
210
|
+
/** A reply that quotes only part of its target. `offset` is where the quote
|
|
211
|
+
* starts in the target's text, in UTF-16 code units. */
|
|
212
|
+
interface KunChatReplyQuote {
|
|
213
|
+
text: string;
|
|
214
|
+
entities: KunChatEntity[];
|
|
215
|
+
offset: number;
|
|
216
|
+
}
|
|
217
|
+
type KunChatServiceAction = {
|
|
218
|
+
type: 'group_created';
|
|
219
|
+
title?: string;
|
|
220
|
+
} | {
|
|
221
|
+
type: 'members_added';
|
|
222
|
+
user_ids: string[];
|
|
223
|
+
} | {
|
|
224
|
+
type: 'member_left';
|
|
225
|
+
} | {
|
|
226
|
+
type: 'member_removed';
|
|
227
|
+
user_id: string;
|
|
228
|
+
} | {
|
|
229
|
+
type: 'title_changed';
|
|
230
|
+
title: string;
|
|
231
|
+
} | {
|
|
232
|
+
type: 'photo_changed';
|
|
233
|
+
} | {
|
|
234
|
+
type: 'message_pinned';
|
|
235
|
+
seq: number;
|
|
236
|
+
} | {
|
|
237
|
+
type: 'joined_by_link';
|
|
238
|
+
};
|
|
239
|
+
type KunChatServiceActionType = KunChatServiceAction['type'];
|
|
240
|
+
/** A cross-site context card, e.g. "sent from the moyu page of patch X". */
|
|
241
|
+
interface KunChatContext {
|
|
242
|
+
site: string;
|
|
243
|
+
kind: string;
|
|
244
|
+
id: string;
|
|
245
|
+
title: string;
|
|
246
|
+
url: string;
|
|
247
|
+
}
|
|
248
|
+
interface KunChatReaction {
|
|
249
|
+
/** A key from the reaction vocabulary, never an emoji character. */
|
|
250
|
+
reaction: string;
|
|
251
|
+
count: number;
|
|
252
|
+
/** Whether the viewer is one of `count`. */
|
|
253
|
+
reacted: boolean;
|
|
254
|
+
}
|
|
255
|
+
/** One entry of the reaction vocabulary served by `GET /v2/chat/reactions`. */
|
|
256
|
+
interface KunChatReactionOption {
|
|
257
|
+
key: string;
|
|
258
|
+
/** Native emoji, shown when there is no `image_url`. */
|
|
259
|
+
emoji: string;
|
|
260
|
+
/** Accessible name, e.g. "爱心". */
|
|
261
|
+
label: string;
|
|
262
|
+
/** Animated image to draw instead of the emoji. */
|
|
263
|
+
image_url?: string | null;
|
|
264
|
+
}
|
|
265
|
+
/** Client-side delivery state of a message the viewer sent. */
|
|
266
|
+
type KunChatSendStatus = 'sending' | 'sent' | 'read' | 'failed';
|
|
267
|
+
interface KunChatMessage {
|
|
268
|
+
object?: 'message';
|
|
269
|
+
id: string;
|
|
270
|
+
conversation_id: string;
|
|
271
|
+
/** Position in the conversation, from 1, gap-free. */
|
|
272
|
+
seq: number;
|
|
273
|
+
sender_id: string;
|
|
274
|
+
kind: 'message' | 'service';
|
|
275
|
+
text: string;
|
|
276
|
+
entities: KunChatEntity[];
|
|
277
|
+
media: KunChatMedia | null;
|
|
278
|
+
/** Photos sent together share one value; each photo is its own message. */
|
|
279
|
+
media_group_id: string | null;
|
|
280
|
+
reply_to: KunChatReplyTo | null;
|
|
281
|
+
reply_quote: KunChatReplyQuote | null;
|
|
282
|
+
service_action: KunChatServiceAction | null;
|
|
283
|
+
context: KunChatContext | null;
|
|
284
|
+
reactions: KunChatReaction[];
|
|
285
|
+
silent: boolean;
|
|
286
|
+
pinned_at: string | null;
|
|
287
|
+
edited_at: string | null;
|
|
288
|
+
created_at: string;
|
|
289
|
+
/** Local only: the idempotency key a pending message was sent with. Kept on
|
|
290
|
+
* the confirmed message, it keeps the row's identity across confirmation. */
|
|
291
|
+
client_message_id?: string | null;
|
|
292
|
+
/** Local only: the delivery state of the viewer's own message. When absent
|
|
293
|
+
* it is derived — `read` at or below the peer's read cursor, else `sent`. */
|
|
294
|
+
status?: KunChatSendStatus;
|
|
295
|
+
}
|
|
296
|
+
/** The result of parsing composer input, and what a send carries. */
|
|
297
|
+
interface KunChatFormattedText {
|
|
298
|
+
text: string;
|
|
299
|
+
entities: KunChatEntity[];
|
|
300
|
+
}
|
|
301
|
+
/** A member of the `users` array chat responses carry. A deleted account keeps
|
|
302
|
+
* its id with an empty name and `deleted: true`; the components render it as
|
|
303
|
+
* "deleted account" with the fallback avatar. Not a `KunUser`: that one's id
|
|
304
|
+
* is a number, this one's a string. */
|
|
305
|
+
interface KunChatUser {
|
|
306
|
+
object?: 'user';
|
|
307
|
+
id: string;
|
|
308
|
+
name: string;
|
|
309
|
+
avatar: string;
|
|
310
|
+
deleted?: boolean;
|
|
311
|
+
}
|
|
312
|
+
/** A typing notification as the site received it. `at` is the receiving
|
|
313
|
+
* client's own clock (`Date.now()`), never the server's, so the 6-second
|
|
314
|
+
* expiry is immune to clock skew. */
|
|
315
|
+
interface KunChatTypingEvent {
|
|
316
|
+
user_id: string;
|
|
317
|
+
at: number;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/** Longest message text, in UTF-16 code units (Telegram's value). */
|
|
321
|
+
declare const KUN_CHAT_TEXT_LIMIT = 4096;
|
|
322
|
+
/** Most photos one album can hold. */
|
|
323
|
+
declare const KUN_CHAT_ALBUM_LIMIT = 10;
|
|
324
|
+
/** A client sends at most one typing notification per this many ms. */
|
|
325
|
+
declare const KUN_CHAT_TYPING_INTERVAL = 5000;
|
|
326
|
+
/** A typing notification not renewed within this many ms has expired. */
|
|
327
|
+
declare const KUN_CHAT_TYPING_TIMEOUT = 6000;
|
|
328
|
+
|
|
329
|
+
/** Types that break the line around themselves. */
|
|
330
|
+
declare const KUN_CHAT_BLOCK_ENTITY_TYPES: ReadonlySet<string>;
|
|
331
|
+
/**
|
|
332
|
+
* Make an entity list safe to render, without ever changing `text`:
|
|
333
|
+
*
|
|
334
|
+
* 1. Drop unknown types, non-integer or negative positions, empty ranges, a
|
|
335
|
+
* `text_link` without a `url` and a `mention` without a `user_id`; clamp
|
|
336
|
+
* the end to the text. Widen a range that would cut a surrogate pair (an
|
|
337
|
+
* emoji) in half. Pull a blockquote's end in over trailing line breaks.
|
|
338
|
+
* 2. Merge touching or overlapping runs of one inline format (bold, italic,
|
|
339
|
+
* underline, strikethrough, spoiler).
|
|
340
|
+
* 3. Cut every other entity at the boundaries of a blockquote it straddles,
|
|
341
|
+
* so quotes are always outermost.
|
|
342
|
+
* 4. Pull the ends of an inline format in over line breaks, which draw
|
|
343
|
+
* nothing there (a blockquote's end, before step 3).
|
|
344
|
+
* 5. Order by start, then longer first, then by nesting order; split an
|
|
345
|
+
* entity that partially crosses another at the boundary, so every pair
|
|
346
|
+
* nests or is disjoint.
|
|
347
|
+
* 6. Drop what cannot nest: anything inside `code`/`pre`, a type inside the
|
|
348
|
+
* same type, a link inside a link.
|
|
349
|
+
*
|
|
350
|
+
* The result is a fixed point: normalizing it again changes nothing. The
|
|
351
|
+
* server already guarantees most of this; the client does it anyway so a bad
|
|
352
|
+
* row renders instead of throwing.
|
|
353
|
+
*/
|
|
354
|
+
declare const normalizeKunChatEntities: (text: string, entities: readonly KunChatEntity[] | null | undefined) => KunChatEntity[];
|
|
355
|
+
interface KunChatTextLeaf {
|
|
356
|
+
kind: 'text';
|
|
357
|
+
text: string;
|
|
358
|
+
/** Where `text` starts in the message text, in UTF-16 code units. */
|
|
359
|
+
offset: number;
|
|
360
|
+
}
|
|
361
|
+
interface KunChatEntityNode {
|
|
362
|
+
kind: 'entity';
|
|
363
|
+
entity: KunChatEntity;
|
|
364
|
+
children: KunChatTextNode[];
|
|
365
|
+
}
|
|
366
|
+
type KunChatTextNode = KunChatTextLeaf | KunChatEntityNode;
|
|
367
|
+
/**
|
|
368
|
+
* Turn `text` + `entities` into a tree: entity nodes whose children are text
|
|
369
|
+
* leaves and nested entity nodes, in document order. The entities are
|
|
370
|
+
* normalized first (see `normalizeKunChatEntities`), so any input renders.
|
|
371
|
+
*/
|
|
372
|
+
declare const buildKunChatEntityTree: (text: string, entities: readonly KunChatEntity[] | null | undefined) => KunChatTextNode[];
|
|
373
|
+
/** The plain text of a subtree, as rendered (block-adjacent breaks omitted). */
|
|
374
|
+
declare const kunChatTreeText: (nodes: readonly KunChatTextNode[]) => string;
|
|
375
|
+
/**
|
|
376
|
+
* The part of a message from `start` to `end` (UTF-16 code units), with the
|
|
377
|
+
* entities clipped to it and shifted to start at 0 — what a partial quote
|
|
378
|
+
* carries. The range is widened rather than split through an emoji.
|
|
379
|
+
*/
|
|
380
|
+
declare const sliceKunChatEntities: (text: string, entities: readonly KunChatEntity[] | null | undefined, start: number, end: number) => {
|
|
381
|
+
text: string;
|
|
382
|
+
entities: KunChatEntity[];
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Parse composer input into message text and entities. Never throws: input
|
|
387
|
+
* that is not valid shortcut syntax stays literal text.
|
|
388
|
+
*/
|
|
389
|
+
declare const parseKunChatMarkdown: (source: string) => KunChatFormattedText;
|
|
390
|
+
/**
|
|
391
|
+
* Turn message text + entities back into composer input — for editing a sent
|
|
392
|
+
* message, or restoring a draft. Parsing the result gives back the same text
|
|
393
|
+
* and (normalized) entities, except for what the syntax cannot spell:
|
|
394
|
+
*
|
|
395
|
+
* - `url` entities are dropped; the server detects links again on save.
|
|
396
|
+
* - A blockquote is dropped unless it starts and ends at line breaks that
|
|
397
|
+
* are text — not inside a code span or pre block.
|
|
398
|
+
* - Blockquotes on consecutive lines are written, and come back, as one.
|
|
399
|
+
* - A `pre` language with characters outside `A-Z a-z 0-9 _ + # . -` is
|
|
400
|
+
* dropped, as is a `text_link` whose URL is itself `mention:<digits>`.
|
|
401
|
+
*/
|
|
402
|
+
declare const formatKunChatMarkdown: (text: string, entities: readonly KunChatEntity[] | null | undefined) => string;
|
|
403
|
+
|
|
404
|
+
interface KunChatAlbumSize {
|
|
405
|
+
width: number;
|
|
406
|
+
height: number;
|
|
407
|
+
}
|
|
408
|
+
/** Which outer edges of the mosaic a tile touches — its rounded corners. */
|
|
409
|
+
declare const KUN_CHAT_ALBUM_SIDE: {
|
|
410
|
+
readonly top: 1;
|
|
411
|
+
readonly right: 2;
|
|
412
|
+
readonly bottom: 4;
|
|
413
|
+
readonly left: 8;
|
|
414
|
+
};
|
|
415
|
+
interface KunChatAlbumTile {
|
|
416
|
+
x: number;
|
|
417
|
+
y: number;
|
|
418
|
+
width: number;
|
|
419
|
+
height: number;
|
|
420
|
+
/** Bitmask of `KUN_CHAT_ALBUM_SIDE`. */
|
|
421
|
+
sides: number;
|
|
422
|
+
}
|
|
423
|
+
interface KunChatAlbumLayout {
|
|
424
|
+
width: number;
|
|
425
|
+
height: number;
|
|
426
|
+
tiles: KunChatAlbumTile[];
|
|
427
|
+
}
|
|
428
|
+
interface KunChatAlbumOptions {
|
|
429
|
+
/** Default 420, tweb's desktop bubble width. */
|
|
430
|
+
maxWidth?: number;
|
|
431
|
+
/** Narrowest tile. Default 100. */
|
|
432
|
+
minWidth?: number;
|
|
433
|
+
/** Gap between tiles. Default 2. */
|
|
434
|
+
spacing?: number;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Lay out an album of 1–10 photos as Telegram does. Sizes with a zero or
|
|
438
|
+
* missing side are treated as square.
|
|
439
|
+
*/
|
|
440
|
+
declare const layoutKunChatAlbum: (sizes: readonly KunChatAlbumSize[], options?: KunChatAlbumOptions) => KunChatAlbumLayout;
|
|
441
|
+
|
|
442
|
+
/** The row identity of a message: its `client_message_id` when it has one, so
|
|
443
|
+
* a pending message keeps its row when the server confirms it. */
|
|
444
|
+
declare const kunChatMessageKey: (message: KunChatMessage) => string;
|
|
445
|
+
/**
|
|
446
|
+
* `YYYY-MM-DD` of an instant, in `timeZone` (an IANA name) or, when omitted,
|
|
447
|
+
* the runtime's own zone. Keys sort chronologically as strings.
|
|
448
|
+
*/
|
|
449
|
+
declare const kunChatDayKey: (date: Date, timeZone?: string) => string;
|
|
450
|
+
type KunChatListRow = {
|
|
451
|
+
type: 'unread';
|
|
452
|
+
key: string;
|
|
453
|
+
} | {
|
|
454
|
+
type: 'service';
|
|
455
|
+
key: string;
|
|
456
|
+
message: KunChatMessage;
|
|
457
|
+
} | {
|
|
458
|
+
type: 'message';
|
|
459
|
+
key: string;
|
|
460
|
+
/** The message the row acts as: an album's first message with a
|
|
461
|
+
* caption, else its first; the message itself otherwise. */
|
|
462
|
+
message: KunChatMessage;
|
|
463
|
+
/** Every message the row shows — an album's photos, in order. */
|
|
464
|
+
messages: KunChatMessage[];
|
|
465
|
+
own: boolean;
|
|
466
|
+
/** First of consecutive messages from one sender: the name goes here. */
|
|
467
|
+
groupStart: boolean;
|
|
468
|
+
/** Last of the run: the avatar and the bubble tail go here. */
|
|
469
|
+
groupEnd: boolean;
|
|
470
|
+
};
|
|
471
|
+
interface KunChatDaySection {
|
|
472
|
+
/** `YYYY-MM-DD` in the list's time zone. */
|
|
473
|
+
key: string;
|
|
474
|
+
/** The first message's instant, for formatting the date pill. */
|
|
475
|
+
date: Date;
|
|
476
|
+
rows: KunChatListRow[];
|
|
477
|
+
}
|
|
478
|
+
interface KunChatGroupOptions {
|
|
479
|
+
currentUserId: string;
|
|
480
|
+
/** The viewer's read cursor when the conversation was opened. The unread
|
|
481
|
+
* divider goes above the first later message someone else sent. */
|
|
482
|
+
lastReadSeq?: number | null;
|
|
483
|
+
/** Longest gap, in seconds, inside one sender group. Default 600
|
|
484
|
+
* (telegram-tt's `GROUP_INTERVAL_SECONDS`). */
|
|
485
|
+
groupWindow?: number;
|
|
486
|
+
/** IANA time zone for day boundaries; the runtime's zone when omitted. */
|
|
487
|
+
timeZone?: string;
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Arrange messages — already in display order — into day sections and rows.
|
|
491
|
+
* A sender group breaks on another sender, a new day, a gap longer than
|
|
492
|
+
* `groupWindow`, the unread divider, and any service message.
|
|
493
|
+
*/
|
|
494
|
+
declare const groupKunChatMessages: (messages: readonly KunChatMessage[], options: KunChatGroupOptions) => KunChatDaySection[];
|
|
495
|
+
|
|
170
496
|
interface KunIconData {
|
|
171
497
|
body: string;
|
|
172
498
|
width?: number;
|
|
@@ -177,4 +503,4 @@ declare const registerKunIcons: (icons: Record<string, KunIconData>) => void;
|
|
|
177
503
|
declare const getKunIcon: (name: string) => KunIconData | undefined;
|
|
178
504
|
declare const hasKunIcon: (name: string) => boolean;
|
|
179
505
|
|
|
180
|
-
export { KUN_AVATAR_FALLBACK, KUN_CATALOG_ZH_CN, KUN_DEFAULT_ROUNDED, KUN_SHATTER_PHYSICS, KUN_SWIPE_DISMISS_PHYSICS, type KunAvatarDecoration, type KunIconData, KunMessageCatalog, KunMessagePath, KunMessages, type KunSelectionSize, type KunUIColor, type KunUIRounded, type KunUISize, type KunUIVariant, type KunUser, cn, decodeIfEncoded, getKunIcon, getRandomSticker, hasKunIcon, kunBgClasses, kunBorderClasses, kunChipSizeClasses, kunControlSizeClasses, kunControlSquareClasses, kunFocusRingClasses, kunFocusRingWithinClasses, kunPanelRoundedClass, kunRingClasses, kunRoundedClasses, kunSelectionSizeClasses, kunSoftBgClasses, kunSolidBgClasses, kunSolidClasses, kunSolidFgClasses, kunTextClasses, kunVariantClasses, pickAvatarFallback, randomNum, registerKunIcon, registerKunIcons, resolveRounded, translateKunMessage };
|
|
506
|
+
export { KUN_AVATAR_FALLBACK, KUN_CATALOG_ZH_CN, KUN_CHAT_ALBUM_LIMIT, KUN_CHAT_ALBUM_SIDE, KUN_CHAT_BLOCK_ENTITY_TYPES, KUN_CHAT_TEXT_LIMIT, KUN_CHAT_TYPING_INTERVAL, KUN_CHAT_TYPING_TIMEOUT, KUN_DEFAULT_ROUNDED, KUN_SHATTER_PHYSICS, KUN_SWIPE_DISMISS_PHYSICS, type KunAvatarDecoration, type KunChatAlbumLayout, type KunChatAlbumOptions, type KunChatAlbumSize, type KunChatAlbumTile, type KunChatContext, type KunChatDaySection, type KunChatEntity, type KunChatEntityNode, type KunChatEntityType, type KunChatFormattedText, type KunChatGroupOptions, type KunChatListRow, type KunChatMedia, type KunChatMessage, type KunChatPhoto, type KunChatReaction, type KunChatReactionOption, type KunChatReplyQuote, type KunChatReplyTo, type KunChatSendStatus, type KunChatServiceAction, type KunChatServiceActionType, type KunChatTextLeaf, type KunChatTextNode, type KunChatTypingEvent, type KunChatUser, type KunIconData, KunMessageCatalog, KunMessagePath, KunMessages, type KunSelectionSize, type KunUIColor, type KunUIRounded, type KunUISize, type KunUIVariant, type KunUser, buildKunChatEntityTree, cn, decodeIfEncoded, formatKunChatMarkdown, getKunIcon, getRandomSticker, groupKunChatMessages, hasKunIcon, kunBgClasses, kunBorderClasses, kunChatDayKey, kunChatMessageKey, kunChatTreeText, kunChipSizeClasses, kunControlSizeClasses, kunControlSquareClasses, kunFocusRingClasses, kunFocusRingWithinClasses, kunPanelRoundedClass, kunRingClasses, kunRoundedClasses, kunSelectionSizeClasses, kunSoftBgClasses, kunSolidBgClasses, kunSolidClasses, kunSolidFgClasses, kunTextClasses, kunVariantClasses, layoutKunChatAlbum, normalizeKunChatEntities, parseKunChatMarkdown, pickAvatarFallback, randomNum, registerKunIcon, registerKunIcons, resolveRounded, sliceKunChatEntities, translateKunMessage };
|