@openim/im-composer 1.0.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/dist/index.css ADDED
@@ -0,0 +1,518 @@
1
+ /* src/IMComposer.css */
2
+ .im-composer {
3
+ display: flex;
4
+ flex-direction: column;
5
+ background: #ffffff;
6
+ height: 100%;
7
+ font-family:
8
+ -apple-system,
9
+ BlinkMacSystemFont,
10
+ "Segoe UI",
11
+ Roboto,
12
+ sans-serif;
13
+ position: relative;
14
+ }
15
+ .im-composer-disabled {
16
+ opacity: 0.6;
17
+ pointer-events: none;
18
+ }
19
+ .im-composer-editor-container {
20
+ position: relative;
21
+ min-height: 80px;
22
+ height: 100%;
23
+ overflow-y: auto;
24
+ }
25
+ .im-composer-editor {
26
+ font-family:
27
+ system-ui,
28
+ -apple-system,
29
+ BlinkMacSystemFont,
30
+ "MozillaTwemojiColr",
31
+ "Apple Color Emoji",
32
+ "Segoe UI Emoji",
33
+ "Noto Color Emoji",
34
+ sans-serif;
35
+ height: 100%;
36
+ min-height: 80px;
37
+ padding: 6px 10px;
38
+ outline: none;
39
+ font-size: 14px;
40
+ line-height: 1.5;
41
+ }
42
+ .im-composer-editor:focus {
43
+ outline: none;
44
+ }
45
+ .im-composer-placeholder {
46
+ position: absolute;
47
+ top: 6px;
48
+ left: 12px;
49
+ color: #999;
50
+ pointer-events: none;
51
+ font-size: 14px;
52
+ }
53
+ .im-composer-toolbar {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: 2px;
57
+ padding: 8px;
58
+ border-bottom: 1px solid #e0e0e0;
59
+ background: #f9f9f9;
60
+ flex-wrap: wrap;
61
+ }
62
+ .im-composer-toolbar-btn {
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ width: 28px;
67
+ height: 28px;
68
+ border: 1px solid transparent;
69
+ background: transparent;
70
+ border-radius: 4px;
71
+ cursor: pointer;
72
+ font-size: 14px;
73
+ color: #555;
74
+ transition: all 0.2s;
75
+ padding: 0;
76
+ margin-right: 2px;
77
+ }
78
+ .im-composer-toolbar-btn svg {
79
+ width: 16px;
80
+ height: 16px;
81
+ pointer-events: none;
82
+ }
83
+ .im-composer-toolbar-btn:hover {
84
+ background: #e0e0e0;
85
+ }
86
+ .im-composer-toolbar-btn:active {
87
+ background: #d0d0d0;
88
+ }
89
+ .im-composer-toolbar-divider {
90
+ width: 1px;
91
+ height: 24px;
92
+ background: #e0e0e0;
93
+ margin: 0 4px;
94
+ }
95
+ .im-composer-link-dialog {
96
+ position: fixed;
97
+ top: 50%;
98
+ left: 50%;
99
+ transform: translate(-50%, -50%);
100
+ width: 320px;
101
+ z-index: 1000;
102
+ background: #fff;
103
+ border: 1px solid #e0e0e0;
104
+ border-radius: 8px;
105
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
106
+ padding: 12px;
107
+ }
108
+ .im-composer-link-dialog-content {
109
+ display: flex;
110
+ flex-direction: column;
111
+ gap: 8px;
112
+ }
113
+ .im-composer-link-input {
114
+ padding: 8px 12px;
115
+ border: 1px solid #e0e0e0;
116
+ border-radius: 4px;
117
+ font-size: 14px;
118
+ }
119
+ .im-composer-link-input:focus {
120
+ outline: none;
121
+ border-color: #007bff;
122
+ }
123
+ .im-composer-link-dialog-buttons {
124
+ display: flex;
125
+ justify-content: flex-end;
126
+ gap: 8px;
127
+ margin-top: 8px;
128
+ }
129
+ .im-composer-link-dialog-buttons button {
130
+ padding: 8px 16px;
131
+ border: none;
132
+ border-radius: 4px;
133
+ cursor: pointer;
134
+ font-size: 14px;
135
+ }
136
+ .im-composer-link-dialog-buttons button:first-child {
137
+ background: #f0f0f0;
138
+ color: #333;
139
+ }
140
+ .im-composer-link-dialog-buttons button:last-child {
141
+ background: #007bff;
142
+ color: #fff;
143
+ }
144
+ .im-composer-link-edit-popup {
145
+ z-index: 1001;
146
+ background: #fff;
147
+ border: 1px solid #e0e0e0;
148
+ border-radius: 6px;
149
+ box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);
150
+ padding: 8px;
151
+ }
152
+ .im-composer-link-edit-content {
153
+ display: flex;
154
+ flex-direction: column;
155
+ gap: 6px;
156
+ }
157
+ .im-composer-link-edit-field {
158
+ display: flex;
159
+ flex-direction: column;
160
+ gap: 2px;
161
+ }
162
+ .im-composer-link-edit-field label {
163
+ font-size: 11px;
164
+ color: #666;
165
+ font-weight: 500;
166
+ }
167
+ .im-composer-link-edit-field input {
168
+ padding: 5px 8px;
169
+ border: 1px solid #e0e0e0;
170
+ border-radius: 4px;
171
+ font-size: 12px;
172
+ }
173
+ .im-composer-link-edit-field input:focus {
174
+ outline: none;
175
+ border-color: #007bff;
176
+ }
177
+ .im-composer-link-edit-buttons {
178
+ display: flex;
179
+ justify-content: flex-end;
180
+ gap: 6px;
181
+ margin-top: 2px;
182
+ }
183
+ .im-composer-link-edit-buttons button {
184
+ padding: 4px 10px;
185
+ border: none;
186
+ border-radius: 4px;
187
+ cursor: pointer;
188
+ font-size: 12px;
189
+ }
190
+ .im-composer-link-edit-buttons button.remove {
191
+ background: #f5f5f5;
192
+ color: #e53935;
193
+ }
194
+ .im-composer-link-edit-buttons button.remove:hover {
195
+ background: #ffebee;
196
+ }
197
+ .im-composer-link-edit-buttons button.save {
198
+ background: #007bff;
199
+ color: #fff;
200
+ }
201
+ .im-composer-link-edit-buttons button.save:hover {
202
+ background: #0056b3;
203
+ }
204
+ .im-composer-mention {
205
+ background: #e8f0fe;
206
+ color: #1a73e8;
207
+ padding: 1px 4px;
208
+ border-radius: 3px;
209
+ font-weight: 500;
210
+ }
211
+ .im-composer-mention-menu {
212
+ background: #fff;
213
+ border-radius: 8px;
214
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
215
+ max-height: 200px;
216
+ overflow-y: auto;
217
+ z-index: 1000;
218
+ min-width: 200px;
219
+ }
220
+ .im-composer-mention-item {
221
+ display: flex;
222
+ align-items: center;
223
+ gap: 8px;
224
+ padding: 8px 12px;
225
+ cursor: pointer;
226
+ transition: background 0.15s;
227
+ }
228
+ .im-composer-mention-item:hover,
229
+ .im-composer-mention-item.selected {
230
+ background: #f3f8ff;
231
+ }
232
+ .im-composer-mention-avatar {
233
+ width: 24px;
234
+ height: 24px;
235
+ border-radius: 50%;
236
+ object-fit: cover;
237
+ }
238
+ .im-composer-mention-name {
239
+ font-size: 14px;
240
+ color: #333;
241
+ }
242
+ .im-composer-attachments {
243
+ display: flex;
244
+ flex-wrap: wrap;
245
+ gap: 8px;
246
+ padding: 8px 12px;
247
+ background: #f9f9f9;
248
+ }
249
+ .im-composer-attachments-top {
250
+ border-bottom: 1px solid #e0e0e0;
251
+ }
252
+ .im-composer-attachments-bottom {
253
+ border-top: 1px solid #e0e0e0;
254
+ }
255
+ .im-composer-attachment-item {
256
+ display: flex;
257
+ align-items: center;
258
+ gap: 8px;
259
+ padding: 8px;
260
+ background: #fff;
261
+ border: 1px solid #e0e0e0;
262
+ border-radius: 6px;
263
+ max-width: 200px;
264
+ }
265
+ .im-composer-attachment-preview {
266
+ width: 40px;
267
+ height: 40px;
268
+ object-fit: cover;
269
+ border-radius: 4px;
270
+ }
271
+ .im-composer-attachment-icon {
272
+ width: 40px;
273
+ height: 40px;
274
+ display: flex;
275
+ align-items: center;
276
+ justify-content: center;
277
+ font-size: 24px;
278
+ background: #f0f0f0;
279
+ border-radius: 4px;
280
+ }
281
+ .im-composer-attachment-info {
282
+ flex: 1;
283
+ min-width: 0;
284
+ display: flex;
285
+ flex-direction: column;
286
+ }
287
+ .im-composer-attachment-name {
288
+ font-size: 12px;
289
+ color: #333;
290
+ white-space: nowrap;
291
+ overflow: hidden;
292
+ text-overflow: ellipsis;
293
+ }
294
+ .im-composer-attachment-size {
295
+ font-size: 11px;
296
+ color: #999;
297
+ }
298
+ .im-composer-attachment-remove {
299
+ display: flex;
300
+ align-items: center;
301
+ justify-content: center;
302
+ width: 20px;
303
+ height: 20px;
304
+ border: none;
305
+ background: #f0f0f0;
306
+ border-radius: 50%;
307
+ cursor: pointer;
308
+ font-size: 14px;
309
+ color: #666;
310
+ flex-shrink: 0;
311
+ }
312
+ .im-composer-attachment-remove:hover {
313
+ background: #e0e0e0;
314
+ color: #333;
315
+ }
316
+ .im-composer-image-container {
317
+ display: block;
318
+ margin: 8px 0;
319
+ text-align: center;
320
+ }
321
+ .im-composer-image-wrapper {
322
+ display: inline-block;
323
+ position: relative;
324
+ cursor: pointer;
325
+ border: 2px solid transparent;
326
+ border-radius: 6px;
327
+ transition: border-color 0.15s ease;
328
+ }
329
+ .im-composer-image-wrapper.selected {
330
+ border-color: #1890ff;
331
+ outline: 2px solid rgba(24, 144, 255, 0.3);
332
+ }
333
+ .im-composer-image-wrapper:hover {
334
+ border-color: #91d5ff;
335
+ }
336
+ .im-composer-image {
337
+ display: block;
338
+ max-width: 100%;
339
+ max-height: 300px;
340
+ border-radius: 4px;
341
+ user-select: none;
342
+ }
343
+ .im-composer-uploading {
344
+ position: absolute;
345
+ bottom: 8px;
346
+ right: 8px;
347
+ padding: 4px 8px;
348
+ background: rgba(0, 0, 0, 0.7);
349
+ color: #fff;
350
+ border-radius: 4px;
351
+ font-size: 12px;
352
+ }
353
+ .im-composer-editor h1 {
354
+ font-size: 24px;
355
+ font-weight: 700;
356
+ margin: 16px 0 8px;
357
+ }
358
+ .im-composer-editor h2 {
359
+ font-size: 20px;
360
+ font-weight: 600;
361
+ margin: 14px 0 6px;
362
+ }
363
+ .im-composer-editor h3 {
364
+ font-size: 16px;
365
+ font-weight: 600;
366
+ margin: 12px 0 4px;
367
+ }
368
+ .im-composer-editor blockquote {
369
+ border-left: 3px solid #e0e0e0;
370
+ margin: 8px 0;
371
+ padding-left: 12px;
372
+ color: #666;
373
+ }
374
+ .im-composer-editor code {
375
+ background: #f5f5f5;
376
+ padding: 2px 4px;
377
+ border-radius: 3px;
378
+ font-family:
379
+ "SF Mono",
380
+ Monaco,
381
+ monospace;
382
+ font-size: 13px;
383
+ }
384
+ .im-composer-editor pre {
385
+ background: #f5f5f5;
386
+ padding: 12px;
387
+ border-radius: 6px;
388
+ overflow-x: auto;
389
+ margin: 8px 0;
390
+ }
391
+ .im-composer-editor pre code {
392
+ background: transparent;
393
+ padding: 0;
394
+ }
395
+ .im-composer-editor ul,
396
+ .im-composer-editor ol {
397
+ margin: 8px 0;
398
+ padding-left: 24px;
399
+ }
400
+ .im-composer-editor a {
401
+ color: #007bff;
402
+ text-decoration: none;
403
+ }
404
+ .im-composer-editor a:hover {
405
+ text-decoration: underline;
406
+ }
407
+ .im-composer-editor p,
408
+ .im-composer-paragraph {
409
+ margin: 0;
410
+ }
411
+ .im-composer-editor p:last-child {
412
+ margin-bottom: 0;
413
+ }
414
+ .im-composer-emoji {
415
+ display: inline;
416
+ vertical-align: middle;
417
+ }
418
+ .im-composer-emoji-img {
419
+ width: 1.2em;
420
+ height: 1.2em;
421
+ vertical-align: -0.2em;
422
+ margin: 0 1px;
423
+ display: inline-block;
424
+ }
425
+ .im-composer-quote-wrapper {
426
+ display: block;
427
+ margin-bottom: 8px;
428
+ user-select: none;
429
+ }
430
+ .im-composer-quote {
431
+ display: inline-flex;
432
+ align-items: center;
433
+ background-color: #f0f2f5;
434
+ color: #666;
435
+ padding: 4px 8px;
436
+ border-radius: 4px;
437
+ font-size: 12px;
438
+ max-width: 100%;
439
+ box-sizing: border-box;
440
+ gap: 6px;
441
+ }
442
+ .im-composer-quote-close {
443
+ order: -1;
444
+ background: none;
445
+ border: none;
446
+ cursor: pointer;
447
+ padding: 0;
448
+ margin: 0;
449
+ color: #999;
450
+ font-size: 14px;
451
+ line-height: 1;
452
+ display: flex;
453
+ align-items: center;
454
+ justify-content: center;
455
+ width: 16px;
456
+ height: 16px;
457
+ }
458
+ .im-composer-quote-close:hover {
459
+ color: #666;
460
+ background-color: rgba(0, 0, 0, 0.05);
461
+ border-radius: 50%;
462
+ }
463
+ .im-composer-quote-text {
464
+ font-family:
465
+ system-ui,
466
+ -apple-system,
467
+ BlinkMacSystemFont,
468
+ "MozillaTwemojiColr",
469
+ "Apple Color Emoji",
470
+ "Segoe UI Emoji",
471
+ "Noto Color Emoji",
472
+ sans-serif;
473
+ display: flex;
474
+ align-items: center;
475
+ overflow: hidden;
476
+ text-overflow: ellipsis;
477
+ white-space: nowrap;
478
+ gap: 4px;
479
+ color: #8e9ab0;
480
+ }
481
+ .im-composer-quote-title {
482
+ font-weight: 500;
483
+ }
484
+ .im-composer-quote-content {
485
+ overflow: hidden;
486
+ text-overflow: ellipsis;
487
+ }
488
+ .im-composer-text-bold {
489
+ font-weight: bold;
490
+ }
491
+ .im-composer-text-italic {
492
+ font-style: italic;
493
+ }
494
+ .im-composer-text-underline {
495
+ text-decoration: underline;
496
+ }
497
+ .im-composer-text-strikethrough {
498
+ text-decoration: line-through;
499
+ }
500
+ .im-composer-text-underline-strikethrough {
501
+ text-decoration: underline line-through;
502
+ }
503
+ .im-composer-text-code {
504
+ background-color: #f0f2f5;
505
+ padding: 1px 0.25rem;
506
+ font-family:
507
+ Menlo,
508
+ Consolas,
509
+ Monaco,
510
+ monospace;
511
+ font-size: 94%;
512
+ border-radius: 3px;
513
+ }
514
+ .im-composer-toolbar-btn.active {
515
+ background-color: #e8e8e8;
516
+ color: #000;
517
+ }
518
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/IMComposer.css"],"sourcesContent":["/* IMComposer Base Styles */\n.im-composer {\n display: flex;\n flex-direction: column;\n background: #ffffff;\n height: 100%;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n position: relative;\n}\n\n.im-composer-disabled {\n opacity: 0.6;\n pointer-events: none;\n}\n\n/* Editor Container */\n.im-composer-editor-container {\n position: relative;\n min-height: 80px;\n height: 100%;\n overflow-y: auto;\n}\n\n.im-composer-editor {\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"MozillaTwemojiColr\", \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", sans-serif;\n height: 100%;\n min-height: 80px;\n padding: 6px 10px;\n outline: none;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.im-composer-editor:focus {\n outline: none;\n}\n\n.im-composer-placeholder {\n position: absolute;\n top: 6px;\n left: 12px;\n color: #999;\n pointer-events: none;\n font-size: 14px;\n}\n\n/* Toolbar */\n.im-composer-toolbar {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: 8px;\n border-bottom: 1px solid #e0e0e0;\n background: #f9f9f9;\n flex-wrap: wrap;\n}\n\n.im-composer-toolbar-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: 1px solid transparent;\n background: transparent;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n color: #555;\n transition: all 0.2s;\n padding: 0;\n margin-right: 2px;\n}\n\n.im-composer-toolbar-btn svg {\n width: 16px;\n height: 16px;\n pointer-events: none;\n}\n\n.im-composer-toolbar-btn:hover {\n background: #e0e0e0;\n}\n\n.im-composer-toolbar-btn:active {\n background: #d0d0d0;\n}\n\n.im-composer-toolbar-divider {\n width: 1px;\n height: 24px;\n background: #e0e0e0;\n margin: 0 4px;\n}\n\n/* Link Dialog */\n.im-composer-link-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 320px;\n z-index: 1000;\n background: #fff;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);\n padding: 12px;\n}\n\n.im-composer-link-dialog-content {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.im-composer-link-input {\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n font-size: 14px;\n}\n\n.im-composer-link-input:focus {\n outline: none;\n border-color: #007bff;\n}\n\n.im-composer-link-dialog-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 8px;\n}\n\n.im-composer-link-dialog-buttons button {\n padding: 8px 16px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n}\n\n.im-composer-link-dialog-buttons button:first-child {\n background: #f0f0f0;\n color: #333;\n}\n\n.im-composer-link-dialog-buttons button:last-child {\n background: #007bff;\n color: #fff;\n}\n\n/* Link Edit Popup */\n.im-composer-link-edit-popup {\n z-index: 1001;\n background: #fff;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n box-shadow: 0 2px 12px rgba(0, 0, 0, 0.15);\n padding: 8px;\n}\n\n.im-composer-link-edit-content {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.im-composer-link-edit-field {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.im-composer-link-edit-field label {\n font-size: 11px;\n color: #666;\n font-weight: 500;\n}\n\n.im-composer-link-edit-field input {\n padding: 5px 8px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n font-size: 12px;\n}\n\n.im-composer-link-edit-field input:focus {\n outline: none;\n border-color: #007bff;\n}\n\n.im-composer-link-edit-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 6px;\n margin-top: 2px;\n}\n\n.im-composer-link-edit-buttons button {\n padding: 4px 10px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n}\n\n.im-composer-link-edit-buttons button.remove {\n background: #f5f5f5;\n color: #e53935;\n}\n\n.im-composer-link-edit-buttons button.remove:hover {\n background: #ffebee;\n}\n\n.im-composer-link-edit-buttons button.save {\n background: #007bff;\n color: #fff;\n}\n\n.im-composer-link-edit-buttons button.save:hover {\n background: #0056b3;\n}\n\n/* Mention */\n.im-composer-mention {\n background: #e8f0fe;\n color: #1a73e8;\n padding: 1px 4px;\n border-radius: 3px;\n font-weight: 500;\n}\n\n.im-composer-mention-menu {\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n max-height: 200px;\n overflow-y: auto;\n z-index: 1000;\n min-width: 200px;\n}\n\n.im-composer-mention-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n cursor: pointer;\n transition: background 0.15s;\n}\n\n.im-composer-mention-item:hover,\n.im-composer-mention-item.selected {\n background: #f3f8ff;\n}\n\n.im-composer-mention-avatar {\n width: 24px;\n height: 24px;\n border-radius: 50%;\n object-fit: cover;\n}\n\n.im-composer-mention-name {\n font-size: 14px;\n color: #333;\n}\n\n/* Attachments */\n.im-composer-attachments {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 8px 12px;\n background: #f9f9f9;\n}\n\n.im-composer-attachments-top {\n border-bottom: 1px solid #e0e0e0;\n}\n\n.im-composer-attachments-bottom {\n border-top: 1px solid #e0e0e0;\n}\n\n.im-composer-attachment-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px;\n background: #fff;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n max-width: 200px;\n}\n\n.im-composer-attachment-preview {\n width: 40px;\n height: 40px;\n object-fit: cover;\n border-radius: 4px;\n}\n\n.im-composer-attachment-icon {\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n background: #f0f0f0;\n border-radius: 4px;\n}\n\n.im-composer-attachment-info {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n.im-composer-attachment-name {\n font-size: 12px;\n color: #333;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.im-composer-attachment-size {\n font-size: 11px;\n color: #999;\n}\n\n.im-composer-attachment-remove {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border: none;\n background: #f0f0f0;\n border-radius: 50%;\n cursor: pointer;\n font-size: 14px;\n color: #666;\n flex-shrink: 0;\n}\n\n.im-composer-attachment-remove:hover {\n background: #e0e0e0;\n color: #333;\n}\n\n/* Image */\n.im-composer-image-container {\n display: block;\n margin: 8px 0;\n text-align: center;\n}\n\n.im-composer-image-wrapper {\n display: inline-block;\n position: relative;\n cursor: pointer;\n border: 2px solid transparent;\n border-radius: 6px;\n transition: border-color 0.15s ease;\n}\n\n.im-composer-image-wrapper.selected {\n border-color: #1890ff;\n outline: 2px solid rgba(24, 144, 255, 0.3);\n}\n\n.im-composer-image-wrapper:hover {\n border-color: #91d5ff;\n}\n\n.im-composer-image {\n display: block;\n max-width: 100%;\n max-height: 300px;\n border-radius: 4px;\n user-select: none;\n}\n\n/* Uploading indicator */\n.im-composer-uploading {\n position: absolute;\n bottom: 8px;\n right: 8px;\n padding: 4px 8px;\n background: rgba(0, 0, 0, 0.7);\n color: #fff;\n border-radius: 4px;\n font-size: 12px;\n}\n\n/* Rich text formatting */\n.im-composer-editor h1 {\n font-size: 24px;\n font-weight: 700;\n margin: 16px 0 8px;\n}\n\n.im-composer-editor h2 {\n font-size: 20px;\n font-weight: 600;\n margin: 14px 0 6px;\n}\n\n.im-composer-editor h3 {\n font-size: 16px;\n font-weight: 600;\n margin: 12px 0 4px;\n}\n\n.im-composer-editor blockquote {\n border-left: 3px solid #e0e0e0;\n margin: 8px 0;\n padding-left: 12px;\n color: #666;\n}\n\n.im-composer-editor code {\n background: #f5f5f5;\n padding: 2px 4px;\n border-radius: 3px;\n font-family: 'SF Mono', Monaco, monospace;\n font-size: 13px;\n}\n\n.im-composer-editor pre {\n background: #f5f5f5;\n padding: 12px;\n border-radius: 6px;\n overflow-x: auto;\n margin: 8px 0;\n}\n\n.im-composer-editor pre code {\n background: transparent;\n padding: 0;\n}\n\n.im-composer-editor ul,\n.im-composer-editor ol {\n margin: 8px 0;\n padding-left: 24px;\n}\n\n.im-composer-editor a {\n color: #007bff;\n text-decoration: none;\n}\n\n.im-composer-editor a:hover {\n text-decoration: underline;\n}\n\n.im-composer-editor p,\n.im-composer-paragraph {\n margin: 0;\n}\n\n.im-composer-editor p:last-child {\n margin-bottom: 0;\n}\n\n/* Emoji */\n.im-composer-emoji {\n display: inline;\n vertical-align: middle;\n}\n\n.im-composer-emoji-img {\n width: 1.2em;\n height: 1.2em;\n vertical-align: -0.2em;\n margin: 0 1px;\n display: inline-block;\n}\n\n/* Quote Message */\n.im-composer-quote-wrapper {\n display: block;\n margin-bottom: 8px;\n user-select: none;\n}\n\n.im-composer-quote {\n display: inline-flex;\n align-items: center;\n background-color: #f0f2f5;\n color: #666;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n max-width: 100%;\n box-sizing: border-box;\n gap: 6px;\n}\n\n.im-composer-quote-close {\n order: -1;\n background: none;\n border: none;\n cursor: pointer;\n padding: 0;\n margin: 0;\n color: #999;\n font-size: 14px;\n line-height: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n}\n\n.im-composer-quote-close:hover {\n color: #666;\n background-color: rgba(0, 0, 0, 0.05);\n border-radius: 50%;\n}\n\n.im-composer-quote-text {\n font-family: system-ui, -apple-system, BlinkMacSystemFont, \"MozillaTwemojiColr\", \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Noto Color Emoji\", sans-serif;\n display: flex;\n align-items: center;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n gap: 4px;\n color: #8e9ab0;\n}\n\n.im-composer-quote-title {\n font-weight: 500;\n}\n\n.im-composer-quote-content {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Theme Classes */\n.im-composer-text-bold {\n font-weight: bold;\n}\n\n.im-composer-text-italic {\n font-style: italic;\n}\n\n.im-composer-text-underline {\n text-decoration: underline;\n}\n\n.im-composer-text-strikethrough {\n text-decoration: line-through;\n}\n\n.im-composer-text-underline-strikethrough {\n text-decoration: underline line-through;\n}\n\n.im-composer-text-code {\n background-color: #f0f2f5;\n padding: 1px 0.25rem;\n font-family: Menlo, Consolas, Monaco, monospace;\n font-size: 94%;\n border-radius: 3px;\n}\n\n.im-composer-toolbar-btn.active {\n background-color: #e8e8e8;\n color: #000;\n}"],"mappings":"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","names":[]}