@typecaast/skins 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.
Files changed (91) hide show
  1. package/dist/chunk-3WKOSJVB.js +320 -0
  2. package/dist/chunk-3WKOSJVB.js.map +1 -0
  3. package/dist/chunk-6K2ANTPJ.cjs +722 -0
  4. package/dist/chunk-6K2ANTPJ.cjs.map +1 -0
  5. package/dist/chunk-7IC3DRCQ.js +718 -0
  6. package/dist/chunk-7IC3DRCQ.js.map +1 -0
  7. package/dist/chunk-AMP2ZMTF.cjs +275 -0
  8. package/dist/chunk-AMP2ZMTF.cjs.map +1 -0
  9. package/dist/chunk-BMB4ZKAU.cjs +32 -0
  10. package/dist/chunk-BMB4ZKAU.cjs.map +1 -0
  11. package/dist/chunk-CAHWYIXY.js +272 -0
  12. package/dist/chunk-CAHWYIXY.js.map +1 -0
  13. package/dist/chunk-CCT33UVA.cjs +591 -0
  14. package/dist/chunk-CCT33UVA.cjs.map +1 -0
  15. package/dist/chunk-E5K2XXQL.cjs +469 -0
  16. package/dist/chunk-E5K2XXQL.cjs.map +1 -0
  17. package/dist/chunk-FEXZ3X5C.cjs +255 -0
  18. package/dist/chunk-FEXZ3X5C.cjs.map +1 -0
  19. package/dist/chunk-JDPMZ572.js +466 -0
  20. package/dist/chunk-JDPMZ572.js.map +1 -0
  21. package/dist/chunk-JZVM4T2A.js +29 -0
  22. package/dist/chunk-JZVM4T2A.js.map +1 -0
  23. package/dist/chunk-KTQVRSDX.cjs +323 -0
  24. package/dist/chunk-KTQVRSDX.cjs.map +1 -0
  25. package/dist/chunk-M54H2ZJJ.js +252 -0
  26. package/dist/chunk-M54H2ZJJ.js.map +1 -0
  27. package/dist/chunk-NCSI7C7I.js +561 -0
  28. package/dist/chunk-NCSI7C7I.js.map +1 -0
  29. package/dist/chunk-OC7WDISK.js +343 -0
  30. package/dist/chunk-OC7WDISK.js.map +1 -0
  31. package/dist/chunk-UC43JQYK.cjs +346 -0
  32. package/dist/chunk-UC43JQYK.cjs.map +1 -0
  33. package/dist/chunk-UFC4ODW5.js +587 -0
  34. package/dist/chunk-UFC4ODW5.js.map +1 -0
  35. package/dist/chunk-UKWBCC7E.cjs +567 -0
  36. package/dist/chunk-UKWBCC7E.cjs.map +1 -0
  37. package/dist/claude-code/index.cjs +19 -0
  38. package/dist/claude-code/index.cjs.map +1 -0
  39. package/dist/claude-code/index.d.cts +6 -0
  40. package/dist/claude-code/index.d.ts +6 -0
  41. package/dist/claude-code/index.js +4 -0
  42. package/dist/claude-code/index.js.map +1 -0
  43. package/dist/cursor/index.cjs +19 -0
  44. package/dist/cursor/index.cjs.map +1 -0
  45. package/dist/cursor/index.d.cts +6 -0
  46. package/dist/cursor/index.d.ts +6 -0
  47. package/dist/cursor/index.js +4 -0
  48. package/dist/cursor/index.js.map +1 -0
  49. package/dist/discord/index.cjs +19 -0
  50. package/dist/discord/index.cjs.map +1 -0
  51. package/dist/discord/index.d.cts +6 -0
  52. package/dist/discord/index.d.ts +6 -0
  53. package/dist/discord/index.js +4 -0
  54. package/dist/discord/index.js.map +1 -0
  55. package/dist/imessage/index.cjs +20 -0
  56. package/dist/imessage/index.cjs.map +1 -0
  57. package/dist/imessage/index.d.cts +6 -0
  58. package/dist/imessage/index.d.ts +6 -0
  59. package/dist/imessage/index.js +5 -0
  60. package/dist/imessage/index.js.map +1 -0
  61. package/dist/index.cjs +52 -2664
  62. package/dist/index.cjs.map +1 -1
  63. package/dist/index.d.cts +49 -27
  64. package/dist/index.d.ts +49 -27
  65. package/dist/index.js +20 -2656
  66. package/dist/index.js.map +1 -1
  67. package/dist/messages-macos/index.cjs +20 -0
  68. package/dist/messages-macos/index.cjs.map +1 -0
  69. package/dist/messages-macos/index.d.cts +10 -0
  70. package/dist/messages-macos/index.d.ts +10 -0
  71. package/dist/messages-macos/index.js +5 -0
  72. package/dist/messages-macos/index.js.map +1 -0
  73. package/dist/slack/index.cjs +19 -0
  74. package/dist/slack/index.cjs.map +1 -0
  75. package/dist/slack/index.d.cts +6 -0
  76. package/dist/slack/index.d.ts +6 -0
  77. package/dist/slack/index.js +4 -0
  78. package/dist/slack/index.js.map +1 -0
  79. package/dist/telegram/index.cjs +19 -0
  80. package/dist/telegram/index.cjs.map +1 -0
  81. package/dist/telegram/index.d.cts +6 -0
  82. package/dist/telegram/index.d.ts +6 -0
  83. package/dist/telegram/index.js +4 -0
  84. package/dist/telegram/index.js.map +1 -0
  85. package/dist/whatsapp/index.cjs +19 -0
  86. package/dist/whatsapp/index.cjs.map +1 -0
  87. package/dist/whatsapp/index.d.cts +6 -0
  88. package/dist/whatsapp/index.d.ts +6 -0
  89. package/dist/whatsapp/index.js +4 -0
  90. package/dist/whatsapp/index.js.map +1 -0
  91. package/package.json +49 -5
@@ -0,0 +1,722 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var zod = require('zod');
5
+ var skinKit = require('@typecaast/skin-kit');
6
+ var react = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ // src/telegram/index.ts
10
+
11
+ // src/telegram/tokens.ts
12
+ var TELEGRAM_COLORS = {
13
+ light: {
14
+ bg: "#d5e3f0",
15
+ headerBg: "#ffffff",
16
+ headerText: "#000000",
17
+ headerSubtle: "#3390ec",
18
+ subtle: "#a1aab3",
19
+ link: "#3390ec",
20
+ mentionText: "#3390ec",
21
+ nameColor: "#3390ec",
22
+ incomingBg: "#ffffff",
23
+ incomingText: "#000000",
24
+ incomingMeta: "#a1aab3",
25
+ outgoingBg: "#effdde",
26
+ outgoingText: "#000000",
27
+ outgoingMeta: "#5fb15a",
28
+ tick: "#5fb15a",
29
+ reactionBg: "#e8f3ff",
30
+ reactionText: "#3390ec",
31
+ composerBg: "#ffffff",
32
+ composerFieldBg: "#ffffff",
33
+ composerBorder: "#e3e8ec",
34
+ placeholder: "#a1aab3",
35
+ accent: "#3390ec",
36
+ accentText: "#ffffff",
37
+ buttonBg: "rgba(51,144,236,0.10)",
38
+ buttonText: "#3390ec",
39
+ systemBg: "rgba(0,0,0,0.26)",
40
+ systemText: "#ffffff",
41
+ shadow: "0 1px 0.5px rgba(0,0,0,0.13)"
42
+ },
43
+ dark: {
44
+ bg: "#0e1621",
45
+ headerBg: "#17212b",
46
+ headerText: "#ffffff",
47
+ headerSubtle: "#6cb7eb",
48
+ subtle: "#6d7f8f",
49
+ link: "#62bcf9",
50
+ mentionText: "#62bcf9",
51
+ nameColor: "#62bcf9",
52
+ incomingBg: "#182533",
53
+ incomingText: "#ffffff",
54
+ incomingMeta: "#6d7f8f",
55
+ outgoingBg: "#2b5278",
56
+ outgoingText: "#ffffff",
57
+ outgoingMeta: "#8badd6",
58
+ tick: "#72d5fd",
59
+ reactionBg: "#213040",
60
+ reactionText: "#62bcf9",
61
+ composerBg: "#17212b",
62
+ composerFieldBg: "#17212b",
63
+ composerBorder: "#101921",
64
+ placeholder: "#6d7f8f",
65
+ accent: "#3390ec",
66
+ accentText: "#ffffff",
67
+ buttonBg: "rgba(98,188,249,0.12)",
68
+ buttonText: "#62bcf9",
69
+ systemBg: "rgba(0,0,0,0.4)",
70
+ systemText: "#ffffff",
71
+ shadow: "0 1px 2px rgba(0,0,0,0.35)"
72
+ }
73
+ };
74
+ var telegramTokens = {
75
+ light: {
76
+ colors: TELEGRAM_COLORS.light
77
+ },
78
+ dark: { colors: TELEGRAM_COLORS.dark }
79
+ };
80
+
81
+ // src/telegram/fonts.ts
82
+ var telegramFonts = [
83
+ {
84
+ family: "Roboto",
85
+ intended: "system-ui / Roboto",
86
+ weights: [400, 500, 700],
87
+ sources: [
88
+ {
89
+ url: "https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu4mxK.woff2",
90
+ weight: 400,
91
+ format: "woff2"
92
+ },
93
+ {
94
+ url: "https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fBBc-.woff2",
95
+ weight: 500,
96
+ format: "woff2"
97
+ },
98
+ {
99
+ url: "https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfBBc-.woff2",
100
+ weight: 700,
101
+ format: "woff2"
102
+ }
103
+ ]
104
+ }
105
+ ];
106
+ var TELEGRAM_FONT_STACK = 'Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif';
107
+ var AVATAR_SIZE = 34;
108
+ var BUBBLE_RADIUS = 12;
109
+ var TAIL_RADIUS = 6;
110
+ function joinNames(names) {
111
+ if (names.length <= 1) return names[0] ?? "";
112
+ if (names.length === 2) return `${names[0]} and ${names[1]}`;
113
+ return `${names.slice(0, -1).join(", ")} and ${names[names.length - 1]}`;
114
+ }
115
+ function formatTime(atMs) {
116
+ const base = 9 * 3600 * 1e3;
117
+ const total = Math.floor((base + atMs) / 1e3);
118
+ const h = Math.floor(total / 3600) % 24;
119
+ const m = Math.floor(total % 3600 / 60);
120
+ const ampm = h >= 12 ? "PM" : "AM";
121
+ const hr = h % 12 === 0 ? 12 : h % 12;
122
+ return `${hr}:${String(m).padStart(2, "0")} ${ampm}`;
123
+ }
124
+ function initials(name) {
125
+ return name.split(/\s+/).map((w) => w.charAt(0)).slice(0, 2).join("").toUpperCase();
126
+ }
127
+ function markStyles(c) {
128
+ return {
129
+ link: { color: c.link, textDecoration: "none" },
130
+ mention: { color: c.mentionText, fontWeight: 500 },
131
+ code: {
132
+ fontFamily: "Menlo, Monaco, Consolas, monospace",
133
+ fontSize: "0.9em"
134
+ }
135
+ };
136
+ }
137
+ var Avatar = ({
138
+ theme,
139
+ participant,
140
+ size = AVATAR_SIZE
141
+ }) => {
142
+ if (participant.avatar) {
143
+ return /* @__PURE__ */ jsxRuntime.jsx(
144
+ "img",
145
+ {
146
+ src: participant.avatar,
147
+ alt: participant.name,
148
+ width: size,
149
+ height: size,
150
+ style: {
151
+ width: size,
152
+ height: size,
153
+ borderRadius: "50%",
154
+ objectFit: "cover",
155
+ display: "block"
156
+ }
157
+ }
158
+ );
159
+ }
160
+ return /* @__PURE__ */ jsxRuntime.jsx(
161
+ "div",
162
+ {
163
+ "aria-label": participant.name,
164
+ style: {
165
+ width: size,
166
+ height: size,
167
+ borderRadius: "50%",
168
+ background: participant.color ?? "#3390ec",
169
+ color: "#ffffff",
170
+ display: "flex",
171
+ alignItems: "center",
172
+ justifyContent: "center",
173
+ fontWeight: 600,
174
+ fontSize: size * 0.4
175
+ },
176
+ children: initials(participant.name)
177
+ }
178
+ );
179
+ };
180
+ var ReactionTooltip = ({ names }) => /* @__PURE__ */ jsxRuntime.jsx(
181
+ "span",
182
+ {
183
+ role: "tooltip",
184
+ style: {
185
+ position: "absolute",
186
+ bottom: "calc(100% + 6px)",
187
+ left: "50%",
188
+ transform: "translateX(-50%)",
189
+ zIndex: 20,
190
+ whiteSpace: "nowrap",
191
+ background: "rgba(0,0,0,0.82)",
192
+ color: "#fff",
193
+ borderRadius: 8,
194
+ padding: "5px 9px",
195
+ fontSize: 12,
196
+ boxShadow: "0 4px 14px rgba(0,0,0,0.4)",
197
+ pointerEvents: "none"
198
+ },
199
+ children: joinNames(names)
200
+ }
201
+ );
202
+ var Reaction = ({ theme, reaction }) => {
203
+ const c = TELEGRAM_COLORS[theme];
204
+ const [hover, setHover] = react.useState(false);
205
+ const hasReactors = reaction.byNames.length > 0;
206
+ return /* @__PURE__ */ jsxRuntime.jsxs(
207
+ "span",
208
+ {
209
+ style: {
210
+ position: "relative",
211
+ display: "inline-flex",
212
+ ...skinKit.popIn(reaction.progress)
213
+ },
214
+ onMouseEnter: () => setHover(true),
215
+ onMouseLeave: () => setHover(false),
216
+ children: [
217
+ /* @__PURE__ */ jsxRuntime.jsxs(
218
+ "span",
219
+ {
220
+ style: {
221
+ display: "inline-flex",
222
+ alignItems: "center",
223
+ gap: 3,
224
+ background: c.reactionBg,
225
+ color: c.reactionText,
226
+ borderRadius: 12,
227
+ padding: "2px 8px",
228
+ height: 22,
229
+ fontSize: 12.5,
230
+ fontWeight: 600,
231
+ cursor: hasReactors ? "pointer" : "default"
232
+ },
233
+ children: [
234
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 13 }, children: reaction.emoji }),
235
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontVariantNumeric: "tabular-nums" }, children: reaction.count })
236
+ ]
237
+ }
238
+ ),
239
+ hover && hasReactors ? /* @__PURE__ */ jsxRuntime.jsx(ReactionTooltip, { names: reaction.byNames }) : null
240
+ ]
241
+ }
242
+ );
243
+ };
244
+ var Dot = ({ c, delay }) => /* @__PURE__ */ jsxRuntime.jsx(
245
+ "span",
246
+ {
247
+ style: {
248
+ width: 5,
249
+ height: 5,
250
+ borderRadius: "50%",
251
+ background: c.headerSubtle,
252
+ display: "inline-block",
253
+ animation: `tc-tg-typing 1.2s ${delay}ms infinite ease-in-out`
254
+ }
255
+ }
256
+ );
257
+ var TypingIndicator = ({ theme, author }) => {
258
+ const c = TELEGRAM_COLORS[theme];
259
+ return /* @__PURE__ */ jsxRuntime.jsxs(
260
+ "div",
261
+ {
262
+ style: {
263
+ display: "flex",
264
+ alignItems: "flex-end",
265
+ gap: 8,
266
+ padding: "2px 12px 4px"
267
+ },
268
+ children: [
269
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { width: AVATAR_SIZE, flex: "0 0 auto" }, children: /* @__PURE__ */ jsxRuntime.jsx(Avatar, { theme, participant: author }) }),
270
+ /* @__PURE__ */ jsxRuntime.jsxs(
271
+ "div",
272
+ {
273
+ style: {
274
+ display: "inline-flex",
275
+ alignItems: "center",
276
+ gap: 4,
277
+ background: c.incomingBg,
278
+ borderRadius: `${BUBBLE_RADIUS}px ${BUBBLE_RADIUS}px ${BUBBLE_RADIUS}px ${TAIL_RADIUS}px`,
279
+ padding: "10px 12px",
280
+ boxShadow: c.shadow
281
+ },
282
+ children: [
283
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: "@keyframes tc-tg-typing{0%,80%,100%{opacity:.3;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}" }),
284
+ /* @__PURE__ */ jsxRuntime.jsx(Dot, { c, delay: 0 }),
285
+ /* @__PURE__ */ jsxRuntime.jsx(Dot, { c, delay: 160 }),
286
+ /* @__PURE__ */ jsxRuntime.jsx(Dot, { c, delay: 320 })
287
+ ]
288
+ }
289
+ )
290
+ ]
291
+ }
292
+ );
293
+ };
294
+ var Caret = ({ color }) => /* @__PURE__ */ jsxRuntime.jsx(
295
+ "span",
296
+ {
297
+ style: {
298
+ display: "inline-block",
299
+ width: 1.5,
300
+ height: "1.05em",
301
+ background: color,
302
+ marginLeft: 1,
303
+ verticalAlign: "text-bottom"
304
+ }
305
+ }
306
+ );
307
+ var PaperPlane = ({ color }) => /* @__PURE__ */ jsxRuntime.jsx(
308
+ "svg",
309
+ {
310
+ width: "20",
311
+ height: "20",
312
+ viewBox: "0 0 24 24",
313
+ fill: color,
314
+ "aria-hidden": "true",
315
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M2.5 12 21 3.5 17 21l-5.2-4.6L9 20l-.6-5.1L2.5 12Z" })
316
+ }
317
+ );
318
+ var Composer = ({ theme, composer }) => {
319
+ const c = TELEGRAM_COLORS[theme];
320
+ const hasText = composer.text.length > 0;
321
+ return /* @__PURE__ */ jsxRuntime.jsxs(
322
+ "div",
323
+ {
324
+ style: {
325
+ flex: "0 0 auto",
326
+ display: "flex",
327
+ alignItems: "flex-end",
328
+ gap: 8,
329
+ padding: "8px 10px 12px",
330
+ background: c.composerBg
331
+ },
332
+ children: [
333
+ /* @__PURE__ */ jsxRuntime.jsx(
334
+ "div",
335
+ {
336
+ style: {
337
+ flex: 1,
338
+ minWidth: 0,
339
+ border: `1px solid ${c.composerBorder}`,
340
+ borderRadius: 18,
341
+ background: c.composerFieldBg,
342
+ padding: "9px 14px",
343
+ minHeight: 20,
344
+ fontSize: 15,
345
+ color: c.incomingText,
346
+ boxShadow: c.shadow
347
+ },
348
+ children: hasText ? /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
349
+ composer.text,
350
+ /* @__PURE__ */ jsxRuntime.jsx(Caret, { color: c.accent })
351
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: c.placeholder }, children: "Message" })
352
+ }
353
+ ),
354
+ /* @__PURE__ */ jsxRuntime.jsx(
355
+ "div",
356
+ {
357
+ style: {
358
+ flex: "0 0 auto",
359
+ width: 38,
360
+ height: 38,
361
+ borderRadius: "50%",
362
+ background: hasText ? c.accent : "transparent",
363
+ display: "flex",
364
+ alignItems: "center",
365
+ justifyContent: "center"
366
+ },
367
+ children: /* @__PURE__ */ jsxRuntime.jsx(PaperPlane, { color: hasText ? c.accentText : c.placeholder })
368
+ }
369
+ )
370
+ ]
371
+ }
372
+ );
373
+ };
374
+ var Meta = ({
375
+ c,
376
+ atMs,
377
+ outgoing
378
+ }) => /* @__PURE__ */ jsxRuntime.jsxs(
379
+ "span",
380
+ {
381
+ style: {
382
+ display: "inline-flex",
383
+ alignItems: "center",
384
+ gap: 3,
385
+ fontSize: 11,
386
+ lineHeight: 1,
387
+ color: outgoing ? c.outgoingMeta : c.incomingMeta,
388
+ float: "right",
389
+ marginLeft: 8,
390
+ marginTop: 6,
391
+ position: "relative",
392
+ top: 4
393
+ },
394
+ children: [
395
+ formatTime(atMs),
396
+ outgoing ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: c.tick }, children: "\u2713\u2713" }) : null
397
+ ]
398
+ }
399
+ );
400
+ var Message = ({ theme, message, author }) => {
401
+ const c = TELEGRAM_COLORS[theme];
402
+ const outgoing = message.isSelf;
403
+ const grouped = message.isGrouped;
404
+ const radius = outgoing ? `${BUBBLE_RADIUS}px ${BUBBLE_RADIUS}px ${grouped ? BUBBLE_RADIUS : TAIL_RADIUS}px ${BUBBLE_RADIUS}px` : `${BUBBLE_RADIUS}px ${BUBBLE_RADIUS}px ${BUBBLE_RADIUS}px ${grouped ? BUBBLE_RADIUS : TAIL_RADIUS}px`;
405
+ return /* @__PURE__ */ jsxRuntime.jsxs(
406
+ "div",
407
+ {
408
+ style: {
409
+ display: "flex",
410
+ flexDirection: outgoing ? "row-reverse" : "row",
411
+ alignItems: "flex-end",
412
+ gap: 8,
413
+ padding: grouped ? "1px 12px" : "3px 12px 1px",
414
+ ...skinKit.fadeSlideIn(message.revealProgress)
415
+ },
416
+ children: [
417
+ outgoing ? null : /* @__PURE__ */ jsxRuntime.jsx("div", { style: { width: AVATAR_SIZE, flex: "0 0 auto" }, children: grouped ? null : /* @__PURE__ */ jsxRuntime.jsx(Avatar, { theme, participant: author }) }),
418
+ /* @__PURE__ */ jsxRuntime.jsxs(
419
+ "div",
420
+ {
421
+ style: { maxWidth: "78%", display: "flex", flexDirection: "column" },
422
+ children: [
423
+ /* @__PURE__ */ jsxRuntime.jsxs(
424
+ "div",
425
+ {
426
+ style: {
427
+ background: outgoing ? c.outgoingBg : c.incomingBg,
428
+ color: outgoing ? c.outgoingText : c.incomingText,
429
+ borderRadius: radius,
430
+ padding: "6px 10px 7px",
431
+ boxShadow: c.shadow,
432
+ wordBreak: "break-word",
433
+ fontSize: 15,
434
+ lineHeight: 1.35
435
+ },
436
+ children: [
437
+ !outgoing && !grouped ? /* @__PURE__ */ jsxRuntime.jsx(
438
+ "div",
439
+ {
440
+ style: {
441
+ color: author.color ?? c.nameColor,
442
+ fontWeight: 600,
443
+ fontSize: 13.5,
444
+ marginBottom: 2
445
+ },
446
+ children: author.name
447
+ }
448
+ ) : null,
449
+ /* @__PURE__ */ jsxRuntime.jsx(
450
+ skinKit.MessageContent,
451
+ {
452
+ nodes: message.content,
453
+ styles: markStyles(c),
454
+ imageStyle: { borderRadius: 8, marginTop: 2, maxWidth: 320 }
455
+ }
456
+ ),
457
+ /* @__PURE__ */ jsxRuntime.jsx(Meta, { c, atMs: message.atMs, outgoing })
458
+ ]
459
+ }
460
+ ),
461
+ message.reactions.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
462
+ "div",
463
+ {
464
+ style: {
465
+ display: "flex",
466
+ gap: 4,
467
+ marginTop: 4,
468
+ flexWrap: "wrap",
469
+ justifyContent: outgoing ? "flex-end" : "flex-start"
470
+ },
471
+ children: message.reactions.map((r, i) => /* @__PURE__ */ jsxRuntime.jsx(Reaction, { theme, reaction: r }, i))
472
+ }
473
+ ) : null
474
+ ]
475
+ }
476
+ )
477
+ ]
478
+ }
479
+ );
480
+ };
481
+ var SystemMessage = ({ theme, message, author }) => {
482
+ const c = TELEGRAM_COLORS[theme];
483
+ const actions = message.system?.actions ?? [];
484
+ return /* @__PURE__ */ jsxRuntime.jsxs(
485
+ "div",
486
+ {
487
+ style: {
488
+ display: "flex",
489
+ alignItems: "flex-end",
490
+ gap: 8,
491
+ padding: "3px 12px 1px",
492
+ ...skinKit.fadeSlideIn(message.revealProgress)
493
+ },
494
+ children: [
495
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { width: AVATAR_SIZE, flex: "0 0 auto" }, children: author ? /* @__PURE__ */ jsxRuntime.jsx(Avatar, { theme, participant: author }) : null }),
496
+ /* @__PURE__ */ jsxRuntime.jsxs(
497
+ "div",
498
+ {
499
+ style: { maxWidth: "78%", display: "flex", flexDirection: "column" },
500
+ children: [
501
+ /* @__PURE__ */ jsxRuntime.jsxs(
502
+ "div",
503
+ {
504
+ style: {
505
+ background: c.incomingBg,
506
+ color: c.incomingText,
507
+ borderRadius: `${BUBBLE_RADIUS}px ${BUBBLE_RADIUS}px ${BUBBLE_RADIUS}px ${TAIL_RADIUS}px`,
508
+ padding: "6px 10px 7px",
509
+ boxShadow: c.shadow,
510
+ fontSize: 15,
511
+ lineHeight: 1.35
512
+ },
513
+ children: [
514
+ /* @__PURE__ */ jsxRuntime.jsx(
515
+ "div",
516
+ {
517
+ style: {
518
+ color: author?.color ?? c.nameColor,
519
+ fontWeight: 600,
520
+ fontSize: 13.5,
521
+ marginBottom: 2
522
+ },
523
+ children: author?.name ?? "Bot"
524
+ }
525
+ ),
526
+ /* @__PURE__ */ jsxRuntime.jsx(skinKit.MessageContent, { nodes: message.content, styles: markStyles(c) }),
527
+ /* @__PURE__ */ jsxRuntime.jsx(Meta, { c, atMs: message.atMs, outgoing: false })
528
+ ]
529
+ }
530
+ ),
531
+ actions.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
532
+ "div",
533
+ {
534
+ style: {
535
+ display: "flex",
536
+ flexDirection: "column",
537
+ gap: 3,
538
+ marginTop: 4
539
+ },
540
+ children: actions.map((a, i) => /* @__PURE__ */ jsxRuntime.jsx(
541
+ "div",
542
+ {
543
+ style: {
544
+ background: c.buttonBg,
545
+ color: c.buttonText,
546
+ borderRadius: 8,
547
+ padding: "9px 12px",
548
+ textAlign: "center",
549
+ fontSize: 14,
550
+ fontWeight: 500,
551
+ cursor: "default"
552
+ },
553
+ children: a.label
554
+ },
555
+ i
556
+ ))
557
+ }
558
+ ) : null
559
+ ]
560
+ }
561
+ )
562
+ ]
563
+ }
564
+ );
565
+ };
566
+ var Frame = ({
567
+ theme,
568
+ options,
569
+ children
570
+ }) => {
571
+ const c = TELEGRAM_COLORS[theme];
572
+ const title = typeof options?.title === "string" && options.title || typeof options?.contact === "string" && options.contact || "Group chat";
573
+ const status = typeof options?.status === "string" && options.status ? options.status : "online";
574
+ return /* @__PURE__ */ jsxRuntime.jsxs(
575
+ "div",
576
+ {
577
+ style: {
578
+ fontFamily: TELEGRAM_FONT_STACK,
579
+ background: c.bg,
580
+ color: c.incomingText,
581
+ display: "flex",
582
+ flexDirection: "column",
583
+ height: "100%",
584
+ width: "100%",
585
+ fontSize: 15,
586
+ WebkitFontSmoothing: "antialiased"
587
+ },
588
+ children: [
589
+ /* @__PURE__ */ jsxRuntime.jsxs(
590
+ "header",
591
+ {
592
+ style: {
593
+ flex: "0 0 auto",
594
+ padding: "9px 14px",
595
+ background: c.headerBg,
596
+ borderBottom: `1px solid ${c.composerBorder}`,
597
+ display: "flex",
598
+ alignItems: "center",
599
+ gap: 12
600
+ },
601
+ children: [
602
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: c.headerSubtle, fontSize: 22, lineHeight: 1 }, children: "\u2039" }),
603
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
604
+ /* @__PURE__ */ jsxRuntime.jsx(
605
+ "div",
606
+ {
607
+ style: {
608
+ fontWeight: 600,
609
+ fontSize: 15,
610
+ color: c.headerText,
611
+ overflow: "hidden",
612
+ textOverflow: "ellipsis",
613
+ whiteSpace: "nowrap"
614
+ },
615
+ children: title
616
+ }
617
+ ),
618
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12.5, color: c.headerSubtle }, children: status })
619
+ ] }),
620
+ /* @__PURE__ */ jsxRuntime.jsx(
621
+ "div",
622
+ {
623
+ style: {
624
+ width: 36,
625
+ height: 36,
626
+ borderRadius: "50%",
627
+ background: c.accent,
628
+ color: "#fff",
629
+ display: "flex",
630
+ alignItems: "center",
631
+ justifyContent: "center",
632
+ fontWeight: 600,
633
+ fontSize: 14
634
+ },
635
+ children: initials(title)
636
+ }
637
+ )
638
+ ]
639
+ }
640
+ ),
641
+ /* @__PURE__ */ jsxRuntime.jsx(
642
+ "div",
643
+ {
644
+ style: {
645
+ flex: "1 1 auto",
646
+ minHeight: 0,
647
+ display: "flex",
648
+ flexDirection: "column",
649
+ paddingBottom: 6
650
+ },
651
+ children
652
+ }
653
+ )
654
+ ]
655
+ }
656
+ );
657
+ };
658
+ var telegramComponents = {
659
+ Frame,
660
+ Message,
661
+ TypingIndicator,
662
+ Reaction,
663
+ Composer,
664
+ SystemMessage,
665
+ Avatar
666
+ };
667
+
668
+ // src/telegram/capabilities.ts
669
+ var telegramCapabilities = {
670
+ events: {
671
+ message: "native",
672
+ reaction: "native",
673
+ typing: "native",
674
+ // "X is typing…" (rendered in-thread)
675
+ composerType: "native",
676
+ send: "native",
677
+ edit: "native",
678
+ delete: "native",
679
+ readReceipt: "unsupported",
680
+ // shown as double-ticks on the bubble, not a step
681
+ system: "native",
682
+ // bot message + inline keyboard
683
+ beat: "native"
684
+ },
685
+ content: {
686
+ text: true,
687
+ image: true
688
+ },
689
+ reactions: true,
690
+ threads: false,
691
+ readReceipts: false
692
+ };
693
+
694
+ // src/telegram/index.ts
695
+ var telegramOptionsSchema = zod.z.object({
696
+ /** Chat title shown in the header (e.g. `"PostHog team"`). */
697
+ title: zod.z.string().optional(),
698
+ /** Alias for the title (matches other contact-style skins). */
699
+ contact: zod.z.string().optional(),
700
+ /** Header subtitle, e.g. `"online"` or `"last seen recently"`. */
701
+ status: zod.z.string().optional()
702
+ });
703
+ var telegram = skinKit.defineSkin({
704
+ id: "telegram",
705
+ meta: {
706
+ name: "Telegram",
707
+ defaultCanvas: { width: 440, height: 780 },
708
+ supportsThemes: ["light", "dark"],
709
+ capabilities: telegramCapabilities,
710
+ optionsSchema: telegramOptionsSchema,
711
+ fonts: telegramFonts
712
+ },
713
+ components: telegramComponents,
714
+ tokens: telegramTokens
715
+ });
716
+ var telegram_default = telegram;
717
+
718
+ exports.TELEGRAM_COLORS = TELEGRAM_COLORS;
719
+ exports.telegram = telegram;
720
+ exports.telegram_default = telegram_default;
721
+ //# sourceMappingURL=chunk-6K2ANTPJ.cjs.map
722
+ //# sourceMappingURL=chunk-6K2ANTPJ.cjs.map