@atproto-ui/core 0.13.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 (51) hide show
  1. package/dist/backlinks.d.ts +18 -0
  2. package/dist/backlinks.js +15 -0
  3. package/dist/blob-fetch.d.ts +42 -0
  4. package/dist/blob-fetch.js +53 -0
  5. package/dist/cache.d.ts +155 -0
  6. package/dist/cache.js +345 -0
  7. package/dist/client.d.ts +45 -0
  8. package/dist/client.js +118 -0
  9. package/dist/fetch-and-cache-handler.d.ts +84 -0
  10. package/dist/fetch-and-cache-handler.js +63 -0
  11. package/dist/grain.d.ts +22 -0
  12. package/dist/grain.js +30 -0
  13. package/dist/icons.d.ts +11 -0
  14. package/dist/icons.js +11 -0
  15. package/dist/identity.d.ts +28 -0
  16. package/dist/identity.js +55 -0
  17. package/dist/index.d.ts +27 -0
  18. package/dist/index.js +22 -0
  19. package/dist/leaflet.d.ts +22 -0
  20. package/dist/leaflet.js +85 -0
  21. package/dist/music.d.ts +35 -0
  22. package/dist/music.js +88 -0
  23. package/dist/paginated.d.ts +61 -0
  24. package/dist/paginated.js +111 -0
  25. package/dist/records.d.ts +171 -0
  26. package/dist/records.js +321 -0
  27. package/dist/rpc.d.ts +21 -0
  28. package/dist/rpc.js +24 -0
  29. package/dist/styles.d.ts +40 -0
  30. package/dist/styles.js +1728 -0
  31. package/dist/tangled-fetch.d.ts +9 -0
  32. package/dist/tangled-fetch.js +15 -0
  33. package/dist/types/blob.d.ts +14 -0
  34. package/dist/types/bluesky.d.ts +4 -0
  35. package/dist/types/grain.d.ts +31 -0
  36. package/dist/types/leaflet.d.ts +173 -0
  37. package/dist/types/record.d.ts +28 -0
  38. package/dist/types/record.js +7 -0
  39. package/dist/types/tangled.d.ts +19 -0
  40. package/dist/types/teal.d.ts +36 -0
  41. package/dist/utils/at-uri.d.ts +10 -0
  42. package/dist/utils/at-uri.js +33 -0
  43. package/dist/utils/blob.d.ts +5 -0
  44. package/dist/utils/blob.js +26 -0
  45. package/dist/utils/profile.d.ts +2 -0
  46. package/dist/utils/profile.js +5 -0
  47. package/dist/utils/richtext.d.ts +28 -0
  48. package/dist/utils/richtext.js +95 -0
  49. package/dist/utils/time.d.ts +2 -0
  50. package/dist/utils/time.js +41 -0
  51. package/package.json +41 -0
package/dist/styles.js ADDED
@@ -0,0 +1,1728 @@
1
+ var UNITLESS = new Set([
2
+ "fontWeight",
3
+ "lineHeight",
4
+ "opacity",
5
+ "zIndex",
6
+ "flex",
7
+ "flexGrow",
8
+ "flexShrink",
9
+ "order",
10
+ "aspectRatio"
11
+ ]);
12
+ function camelToKebab(e) {
13
+ return e.replace(/[A-Z]/g, (e) => `-${e.toLowerCase()}`);
14
+ }
15
+ function styleString(g) {
16
+ return Object.entries(g).map(([g, _]) => {
17
+ let v = typeof _ == "number" && !UNITLESS.has(g) ? `${_}px` : _;
18
+ return `${camelToKebab(g)}: ${v}`;
19
+ }).join("; ");
20
+ }
21
+ function mergeStyles(...e) {
22
+ return Object.assign({}, ...e.filter(Boolean));
23
+ }
24
+ var C = {
25
+ bg: "var(--atproto-color-bg)",
26
+ bgElevated: "var(--atproto-color-bg-elevated)",
27
+ bgSecondary: "var(--atproto-color-bg-secondary)",
28
+ text: "var(--atproto-color-text)",
29
+ textSecondary: "var(--atproto-color-text-secondary)",
30
+ textMuted: "var(--atproto-color-text-muted)",
31
+ border: "var(--atproto-color-border)",
32
+ link: "var(--atproto-color-link)",
33
+ imageBg: "var(--atproto-color-image-bg)",
34
+ error: "var(--atproto-color-error)"
35
+ };
36
+ const profileStyles = {
37
+ card: {
38
+ display: "flex",
39
+ flexDirection: "column",
40
+ height: "100%",
41
+ borderRadius: 12,
42
+ padding: 16,
43
+ fontFamily: "system-ui, sans-serif",
44
+ maxWidth: 480,
45
+ transition: "background-color 180ms ease, border-color 180ms ease, color 180ms ease",
46
+ position: "relative",
47
+ background: C.bg,
48
+ borderColor: C.border,
49
+ color: C.text
50
+ },
51
+ header: {
52
+ display: "flex",
53
+ gap: 12,
54
+ marginBottom: 8
55
+ },
56
+ avatar: {
57
+ width: 64,
58
+ height: 64,
59
+ borderRadius: "50%",
60
+ background: C.bgElevated
61
+ },
62
+ avatarImg: {
63
+ width: 64,
64
+ height: 64,
65
+ borderRadius: "50%",
66
+ objectFit: "cover"
67
+ },
68
+ info: { flex: 1 },
69
+ display: {
70
+ fontSize: 20,
71
+ fontWeight: 600,
72
+ color: C.text
73
+ },
74
+ handleLine: {
75
+ fontSize: 13,
76
+ color: C.textSecondary
77
+ },
78
+ desc: {
79
+ whiteSpace: "pre-wrap",
80
+ fontSize: 14,
81
+ lineHeight: 1.4,
82
+ color: C.text
83
+ },
84
+ meta: {
85
+ marginTop: 0,
86
+ fontSize: 12,
87
+ color: C.textSecondary
88
+ },
89
+ pronouns: {
90
+ display: "inline-flex",
91
+ alignItems: "center",
92
+ gap: 4,
93
+ fontSize: 12,
94
+ fontWeight: 500,
95
+ borderRadius: 999,
96
+ padding: "2px 8px",
97
+ marginTop: 6,
98
+ background: C.bgElevated,
99
+ color: C.textSecondary
100
+ },
101
+ link: {
102
+ display: "inline-flex",
103
+ alignItems: "center",
104
+ gap: 4,
105
+ fontSize: 12,
106
+ fontWeight: 600,
107
+ textDecoration: "none",
108
+ color: C.link
109
+ },
110
+ bottomRow: {
111
+ display: "flex",
112
+ alignItems: "flex-end",
113
+ justifyContent: "space-between",
114
+ marginTop: "auto",
115
+ paddingTop: 12
116
+ },
117
+ bottomLeft: {
118
+ display: "flex",
119
+ flexDirection: "column",
120
+ gap: 8
121
+ },
122
+ stateAlert: {
123
+ padding: 8,
124
+ color: C.error
125
+ },
126
+ stateLoading: { padding: 8 }
127
+ }, postStyles = {
128
+ card: {
129
+ borderRadius: 12,
130
+ padding: 12,
131
+ fontFamily: "system-ui, sans-serif",
132
+ display: "flex",
133
+ flexDirection: "column",
134
+ gap: 8,
135
+ maxWidth: 600,
136
+ transition: "background-color 180ms ease, border-color 180ms ease, color 180ms ease",
137
+ position: "relative",
138
+ border: "1px solid var(--atproto-color-border)",
139
+ background: C.bg,
140
+ color: C.text
141
+ },
142
+ header: {
143
+ display: "flex",
144
+ alignItems: "center",
145
+ gap: 8
146
+ },
147
+ headerIcon: {
148
+ marginLeft: "auto",
149
+ display: "flex",
150
+ alignItems: "center"
151
+ },
152
+ avatarPlaceholder: {
153
+ width: 40,
154
+ height: 40,
155
+ borderRadius: "50%",
156
+ background: C.bgElevated
157
+ },
158
+ avatarImg: {
159
+ width: 40,
160
+ height: 40,
161
+ borderRadius: "50%",
162
+ objectFit: "cover"
163
+ },
164
+ identity: {
165
+ display: "flex",
166
+ flexDirection: "column"
167
+ },
168
+ name: {
169
+ fontSize: 14,
170
+ fontWeight: 700
171
+ },
172
+ handle: {
173
+ fontSize: 12,
174
+ color: C.textSecondary
175
+ },
176
+ repostBanner: {
177
+ fontSize: 12,
178
+ color: C.textSecondary
179
+ },
180
+ replyLine: {
181
+ fontSize: 12,
182
+ color: C.textSecondary
183
+ },
184
+ replyLink: {
185
+ textDecoration: "none",
186
+ fontWeight: 500,
187
+ color: C.link
188
+ },
189
+ body: {
190
+ fontSize: 14,
191
+ lineHeight: 1.4
192
+ },
193
+ text: {
194
+ margin: 0,
195
+ fontSize: 14,
196
+ lineHeight: 1.4,
197
+ whiteSpace: "pre-wrap",
198
+ overflowWrap: "anywhere",
199
+ color: C.text
200
+ },
201
+ embedContainer: {
202
+ marginTop: 12,
203
+ padding: 8,
204
+ borderRadius: 12,
205
+ border: `1px solid ${C.border}`,
206
+ background: C.bgElevated,
207
+ display: "flex",
208
+ flexDirection: "column",
209
+ gap: 8
210
+ },
211
+ timestampRow: {
212
+ display: "flex",
213
+ justifyContent: "flex-end",
214
+ alignItems: "center",
215
+ gap: 12,
216
+ marginTop: 12,
217
+ flexWrap: "wrap"
218
+ },
219
+ time: {
220
+ fontSize: 11,
221
+ color: C.textMuted
222
+ },
223
+ postLink: {
224
+ fontSize: 11,
225
+ textDecoration: "none",
226
+ fontWeight: 600,
227
+ color: C.link
228
+ },
229
+ linkWithIcon: {
230
+ display: "inline-flex",
231
+ alignItems: "center",
232
+ gap: 6
233
+ },
234
+ inlineIcon: {
235
+ display: "inline-flex",
236
+ alignItems: "center"
237
+ },
238
+ iconCorner: {
239
+ position: "absolute",
240
+ right: 12,
241
+ bottom: 12,
242
+ display: "flex",
243
+ alignItems: "center",
244
+ justifyContent: "flex-end"
245
+ },
246
+ threadContainer: {
247
+ display: "flex",
248
+ flexDirection: "column",
249
+ maxWidth: 600,
250
+ width: "100%",
251
+ background: C.bg,
252
+ position: "relative",
253
+ borderRadius: 12,
254
+ overflow: "hidden"
255
+ },
256
+ threadPost: { position: "relative" },
257
+ threadLayout: {
258
+ display: "flex",
259
+ gap: 8,
260
+ alignItems: "flex-start"
261
+ },
262
+ threadMain: {
263
+ flex: 1,
264
+ minWidth: 0
265
+ },
266
+ threadHeader: {
267
+ display: "flex",
268
+ alignItems: "center",
269
+ gap: 8,
270
+ marginBottom: 4
271
+ },
272
+ threadIcon: { marginLeft: "auto" },
273
+ authorInline: {
274
+ display: "flex",
275
+ flexDirection: "row",
276
+ alignItems: "center",
277
+ gap: 8
278
+ },
279
+ authorStack: {
280
+ display: "flex",
281
+ flexDirection: "column",
282
+ alignItems: "flex-start",
283
+ gap: 0
284
+ },
285
+ threadCornerIcon: {
286
+ position: "relative",
287
+ right: 0,
288
+ bottom: 0,
289
+ justifyContent: "flex-start",
290
+ marginTop: 8,
291
+ display: "flex"
292
+ },
293
+ quoteWrapper: {
294
+ display: "flex",
295
+ flexDirection: "column",
296
+ gap: 8
297
+ },
298
+ imagesGrid: {
299
+ display: "grid",
300
+ gap: 8,
301
+ width: "100%"
302
+ },
303
+ imageItem: {
304
+ margin: 0,
305
+ display: "flex",
306
+ flexDirection: "column",
307
+ gap: 4
308
+ },
309
+ imageMedia: {
310
+ position: "relative",
311
+ width: "100%",
312
+ borderRadius: 12,
313
+ overflow: "hidden",
314
+ background: C.imageBg
315
+ },
316
+ imageImg: {
317
+ width: "100%",
318
+ height: "100%",
319
+ objectFit: "cover"
320
+ },
321
+ imagePlaceholder: {
322
+ display: "flex",
323
+ alignItems: "center",
324
+ justifyContent: "center",
325
+ width: "100%",
326
+ minHeight: 120,
327
+ color: C.textMuted
328
+ },
329
+ imageCaption: {
330
+ fontSize: 12,
331
+ lineHeight: 1.3,
332
+ color: C.textSecondary
333
+ },
334
+ imageAltBadge: {
335
+ position: "absolute",
336
+ bottom: 8,
337
+ right: 8,
338
+ padding: "4px 8px",
339
+ fontSize: 10,
340
+ fontWeight: 600,
341
+ letterSpacing: "0.5px",
342
+ border: "none",
343
+ borderRadius: 4,
344
+ cursor: "pointer",
345
+ transition: "background 150ms ease, color 150ms ease",
346
+ fontFamily: "system-ui, sans-serif"
347
+ },
348
+ stateAlert: {
349
+ padding: 8,
350
+ color: C.error
351
+ },
352
+ stateLoading: { padding: 8 }
353
+ }, blueskyPostListStyles = {
354
+ card: {
355
+ borderRadius: 16,
356
+ borderWidth: "1px",
357
+ borderStyle: "solid",
358
+ borderColor: C.border,
359
+ boxShadow: "0 8px 18px -12px rgba(15, 23, 42, 0.25)",
360
+ overflow: "hidden",
361
+ display: "flex",
362
+ flexDirection: "column",
363
+ background: C.bg,
364
+ color: C.text
365
+ },
366
+ header: {
367
+ display: "flex",
368
+ alignItems: "center",
369
+ justifyContent: "space-between",
370
+ padding: "14px 18px",
371
+ fontSize: 14,
372
+ fontWeight: 500,
373
+ borderBottom: `1px solid ${C.border}`,
374
+ background: C.bgElevated,
375
+ color: C.text
376
+ },
377
+ headerInfo: {
378
+ display: "flex",
379
+ alignItems: "center",
380
+ gap: 12
381
+ },
382
+ headerIcon: {
383
+ width: 28,
384
+ height: 28,
385
+ display: "flex",
386
+ alignItems: "center",
387
+ justifyContent: "center",
388
+ borderRadius: "50%"
389
+ },
390
+ headerText: {
391
+ display: "flex",
392
+ flexDirection: "column",
393
+ gap: 2
394
+ },
395
+ title: {
396
+ fontSize: 15,
397
+ fontWeight: 600
398
+ },
399
+ subtitle: {
400
+ fontSize: 12,
401
+ fontWeight: 500,
402
+ color: C.textSecondary
403
+ },
404
+ pageMeta: {
405
+ fontSize: 12,
406
+ color: C.textSecondary
407
+ },
408
+ items: {
409
+ display: "flex",
410
+ flexDirection: "column"
411
+ },
412
+ empty: {
413
+ padding: "24px 18px",
414
+ fontSize: 13,
415
+ textAlign: "center",
416
+ color: C.textSecondary
417
+ },
418
+ rowContainer: {
419
+ padding: 16,
420
+ display: "flex",
421
+ flexDirection: "column",
422
+ gap: 8,
423
+ transition: "background-color 120ms ease",
424
+ position: "relative"
425
+ },
426
+ rowDivider: { borderBottom: `1px solid ${C.border}` },
427
+ repostIndicator: {
428
+ display: "flex",
429
+ alignItems: "center",
430
+ gap: 8,
431
+ fontSize: 13,
432
+ fontWeight: 500,
433
+ paddingLeft: 8,
434
+ marginBottom: 4
435
+ },
436
+ repostAvatar: {
437
+ width: 16,
438
+ height: 16,
439
+ borderRadius: "50%",
440
+ objectFit: "cover"
441
+ },
442
+ repostText: {
443
+ fontSize: 13,
444
+ fontWeight: 500,
445
+ color: C.textSecondary
446
+ },
447
+ replyIndicator: {
448
+ display: "flex",
449
+ alignItems: "center",
450
+ gap: 8,
451
+ fontSize: 13,
452
+ fontWeight: 500,
453
+ paddingLeft: 8,
454
+ marginBottom: 4
455
+ },
456
+ replyAvatar: {
457
+ width: 16,
458
+ height: 16,
459
+ borderRadius: "50%",
460
+ objectFit: "cover"
461
+ },
462
+ replyText: {
463
+ fontSize: 13,
464
+ fontWeight: 500,
465
+ color: C.textSecondary
466
+ },
467
+ replyHandle: {
468
+ color: "#1185FE",
469
+ fontWeight: 600
470
+ },
471
+ postContent: {
472
+ display: "flex",
473
+ gap: 12
474
+ },
475
+ avatarContainer: { flexShrink: 0 },
476
+ avatar: {
477
+ width: 48,
478
+ height: 48,
479
+ borderRadius: "50%",
480
+ objectFit: "cover"
481
+ },
482
+ avatarPlaceholder: {
483
+ width: 48,
484
+ height: 48,
485
+ borderRadius: "50%",
486
+ background: C.bgElevated,
487
+ color: C.textSecondary,
488
+ display: "flex",
489
+ alignItems: "center",
490
+ justifyContent: "center",
491
+ fontSize: 18,
492
+ fontWeight: 600
493
+ },
494
+ postMain: {
495
+ flex: 1,
496
+ minWidth: 0,
497
+ display: "flex",
498
+ flexDirection: "column",
499
+ gap: 6
500
+ },
501
+ postHeader: {
502
+ display: "flex",
503
+ alignItems: "baseline",
504
+ gap: 6,
505
+ flexWrap: "wrap"
506
+ },
507
+ authorName: {
508
+ fontWeight: 700,
509
+ fontSize: 15,
510
+ textDecoration: "none",
511
+ maxWidth: 200,
512
+ overflow: "hidden",
513
+ textOverflow: "ellipsis",
514
+ whiteSpace: "nowrap",
515
+ color: C.text
516
+ },
517
+ authorHandle: {
518
+ fontSize: 15,
519
+ fontWeight: 400,
520
+ maxWidth: 150,
521
+ overflow: "hidden",
522
+ textOverflow: "ellipsis",
523
+ whiteSpace: "nowrap",
524
+ color: C.textSecondary
525
+ },
526
+ separator: {
527
+ fontSize: 15,
528
+ fontWeight: 400,
529
+ color: C.textSecondary
530
+ },
531
+ timestamp: {
532
+ fontSize: 15,
533
+ fontWeight: 400,
534
+ color: C.textSecondary
535
+ },
536
+ postLink: {
537
+ textDecoration: "none",
538
+ display: "block",
539
+ color: C.text
540
+ },
541
+ postText: {
542
+ margin: 0,
543
+ whiteSpace: "pre-wrap",
544
+ fontSize: 15,
545
+ lineHeight: 1.5,
546
+ wordBreak: "break-word"
547
+ },
548
+ emptyPostText: {
549
+ margin: 0,
550
+ whiteSpace: "pre-wrap",
551
+ fontSize: 15,
552
+ lineHeight: 1.5,
553
+ wordBreak: "break-word",
554
+ fontStyle: "italic",
555
+ color: C.textSecondary
556
+ },
557
+ footer: {
558
+ display: "flex",
559
+ alignItems: "center",
560
+ justifyContent: "space-between",
561
+ padding: "12px 18px",
562
+ borderTop: `1px solid ${C.border}`,
563
+ fontSize: 13,
564
+ color: C.text
565
+ },
566
+ pageChips: {
567
+ display: "flex",
568
+ gap: 6,
569
+ alignItems: "center"
570
+ },
571
+ pageChip: {
572
+ padding: "4px 10px",
573
+ borderRadius: 999,
574
+ fontSize: 13,
575
+ borderWidth: "1px",
576
+ borderStyle: "solid",
577
+ borderColor: C.border,
578
+ color: C.textSecondary,
579
+ background: C.bg
580
+ },
581
+ pageChipActive: {
582
+ padding: "4px 10px",
583
+ borderRadius: 999,
584
+ fontSize: 13,
585
+ fontWeight: 600,
586
+ borderWidth: "1px",
587
+ borderStyle: "solid",
588
+ borderColor: "var(--atproto-color-button-bg)",
589
+ color: "var(--atproto-color-button-text)",
590
+ background: "var(--atproto-color-button-bg)"
591
+ },
592
+ pageButton: {
593
+ border: "none",
594
+ borderRadius: 999,
595
+ padding: "6px 12px",
596
+ fontSize: 13,
597
+ fontWeight: 500,
598
+ background: "var(--atproto-color-button-bg)",
599
+ color: "var(--atproto-color-button-text)",
600
+ display: "flex",
601
+ alignItems: "center",
602
+ gap: 4,
603
+ transition: "background-color 120ms ease"
604
+ },
605
+ loadingBar: {
606
+ padding: "4px 18px 14px",
607
+ fontSize: 12,
608
+ textAlign: "right",
609
+ background: C.bgElevated,
610
+ color: C.textSecondary
611
+ },
612
+ stateAlert: {
613
+ padding: 8,
614
+ color: C.error
615
+ }
616
+ }, cardStyles = {
617
+ card: {
618
+ border: `1px solid ${C.border}`,
619
+ background: C.bg,
620
+ color: C.text,
621
+ borderRadius: 12,
622
+ padding: 12,
623
+ fontFamily: "system-ui, sans-serif"
624
+ },
625
+ cardWide: {
626
+ maxWidth: 720,
627
+ width: "100%",
628
+ border: `1px solid ${C.border}`,
629
+ background: C.bg,
630
+ color: C.text,
631
+ borderRadius: 12,
632
+ padding: 20,
633
+ fontFamily: "system-ui, sans-serif"
634
+ },
635
+ stateAlert: {
636
+ padding: 8,
637
+ color: C.error
638
+ },
639
+ stateLoading: { padding: 8 },
640
+ errorText: { color: C.error },
641
+ loadingText: { color: C.textSecondary },
642
+ muted: { color: C.textSecondary },
643
+ descBlock: {
644
+ margin: "0 0 10px",
645
+ color: C.textSecondary
646
+ },
647
+ heading: { margin: "0 0 6px" },
648
+ headingLg: { margin: "0 0 8px" },
649
+ pill: {
650
+ border: `1px solid ${C.border}`,
651
+ borderRadius: 999,
652
+ padding: "2px 8px"
653
+ }
654
+ }, tangledStyles = {
655
+ container: {
656
+ fontFamily: "system-ui, sans-serif",
657
+ borderRadius: 6,
658
+ overflow: "hidden",
659
+ transition: "background-color 180ms ease, border-color 180ms ease, color 180ms ease, box-shadow 180ms ease",
660
+ width: "100%",
661
+ background: C.bg,
662
+ borderWidth: "1px",
663
+ borderStyle: "solid",
664
+ borderColor: C.border,
665
+ color: C.text
666
+ },
667
+ header: {
668
+ padding: 16,
669
+ display: "flex",
670
+ flexDirection: "column",
671
+ background: C.bg
672
+ },
673
+ headerTop: {
674
+ display: "flex",
675
+ justifyContent: "space-between",
676
+ alignItems: "flex-start",
677
+ gap: 12
678
+ },
679
+ headerRight: {
680
+ display: "flex",
681
+ alignItems: "center",
682
+ gap: 8
683
+ },
684
+ repoName: {
685
+ fontFamily: "SFMono-Regular, ui-monospace, Menlo, Monaco, \"Courier New\", monospace",
686
+ fontSize: 18,
687
+ fontWeight: 600,
688
+ wordBreak: "break-word",
689
+ margin: 0,
690
+ color: C.text
691
+ },
692
+ iconLink: {
693
+ display: "flex",
694
+ alignItems: "center",
695
+ textDecoration: "none",
696
+ opacity: .7,
697
+ transition: "opacity 150ms ease",
698
+ color: C.text
699
+ },
700
+ description: {
701
+ padding: "0 16px 16px 16px",
702
+ fontSize: 14,
703
+ lineHeight: 1.5,
704
+ background: C.bg,
705
+ color: C.textSecondary
706
+ },
707
+ languageSection: {
708
+ padding: "0 16px 16px 16px",
709
+ display: "flex",
710
+ justifyContent: "space-between",
711
+ alignItems: "center",
712
+ gap: 12,
713
+ flexWrap: "wrap",
714
+ background: C.bg
715
+ },
716
+ languageTags: {
717
+ display: "flex",
718
+ gap: 8,
719
+ flexWrap: "wrap"
720
+ },
721
+ languageTag: {
722
+ fontSize: 12,
723
+ fontWeight: 500,
724
+ padding: "4px 10px",
725
+ background: C.bg,
726
+ borderRadius: 12,
727
+ border: `1px solid ${C.border}`
728
+ },
729
+ rightSection: {
730
+ display: "flex",
731
+ alignItems: "center",
732
+ gap: 12
733
+ },
734
+ starCountContainer: {
735
+ display: "flex",
736
+ alignItems: "center",
737
+ gap: 4,
738
+ fontSize: 13,
739
+ color: C.textSecondary
740
+ },
741
+ starCount: {
742
+ fontSize: 13,
743
+ fontWeight: 500
744
+ },
745
+ viewLink: {
746
+ fontSize: 13,
747
+ fontWeight: 500,
748
+ textDecoration: "none",
749
+ color: C.link
750
+ }
751
+ };
752
+ var MONO = "SFMono-Regular, ui-monospace, Menlo, Monaco, \"Courier New\", monospace";
753
+ const tangledStringStyles = {
754
+ container: {
755
+ fontFamily: "system-ui, sans-serif",
756
+ borderRadius: 6,
757
+ overflow: "hidden",
758
+ transition: "background-color 180ms ease, border-color 180ms ease, color 180ms ease, box-shadow 180ms ease",
759
+ width: "100%",
760
+ background: C.bgElevated,
761
+ borderWidth: "1px",
762
+ borderStyle: "solid",
763
+ borderColor: C.border,
764
+ color: C.text
765
+ },
766
+ header: {
767
+ padding: "10px 16px",
768
+ display: "flex",
769
+ justifyContent: "space-between",
770
+ alignItems: "center",
771
+ gap: 12,
772
+ background: C.bgElevated,
773
+ borderBottomWidth: "1px",
774
+ borderBottomStyle: "solid",
775
+ borderBottomColor: C.border
776
+ },
777
+ headerRight: {
778
+ display: "flex",
779
+ alignItems: "center",
780
+ gap: 12,
781
+ flexWrap: "wrap",
782
+ justifyContent: "flex-end"
783
+ },
784
+ filename: {
785
+ fontFamily: MONO,
786
+ fontSize: 13,
787
+ wordBreak: "break-all",
788
+ color: C.text
789
+ },
790
+ timestamp: {
791
+ fontSize: 12,
792
+ color: C.textSecondary
793
+ },
794
+ headerLink: {
795
+ fontSize: 12,
796
+ fontWeight: 600,
797
+ textDecoration: "none",
798
+ color: C.link
799
+ },
800
+ description: {
801
+ padding: "10px 16px",
802
+ fontSize: 13,
803
+ background: C.bg,
804
+ borderTopWidth: "1px",
805
+ borderTopStyle: "solid",
806
+ borderTopColor: C.border,
807
+ borderBottomWidth: "1px",
808
+ borderBottomStyle: "solid",
809
+ borderBottomColor: C.border,
810
+ color: C.text
811
+ },
812
+ codeBlock: {
813
+ margin: 0,
814
+ padding: 16,
815
+ fontSize: 13,
816
+ overflowX: "auto",
817
+ background: C.bg,
818
+ color: C.text,
819
+ borderTopWidth: "1px",
820
+ borderTopStyle: "solid",
821
+ borderTopColor: C.border,
822
+ fontFamily: MONO
823
+ }
824
+ }, leafletStyles = {
825
+ article: cardStyles.cardWide,
826
+ title: { margin: "0 0 8px" },
827
+ desc: { color: C.textSecondary },
828
+ page: { marginTop: 16 },
829
+ pageText: {
830
+ whiteSpace: "pre-wrap",
831
+ lineHeight: 1.55
832
+ }
833
+ }, grainStyles = {
834
+ card: cardStyles.card,
835
+ title: { margin: "0 0 6px" },
836
+ desc: cardStyles.descBlock,
837
+ grid: {
838
+ display: "grid",
839
+ gridTemplateColumns: "repeat(auto-fit, minmax(120px, 1fr))",
840
+ gap: 8
841
+ },
842
+ tile: {
843
+ aspectRatio: 1,
844
+ borderRadius: 8,
845
+ background: C.bgSecondary,
846
+ display: "grid",
847
+ placeItems: "center",
848
+ color: C.textMuted,
849
+ fontSize: 12
850
+ }
851
+ }, tealStyles = {
852
+ card: cardStyles.card,
853
+ label: {
854
+ fontSize: 11,
855
+ fontWeight: 700,
856
+ letterSpacing: ".08em",
857
+ color: C.textSecondary
858
+ },
859
+ trackName: {
860
+ fontSize: 18,
861
+ fontWeight: 700,
862
+ marginTop: 6
863
+ },
864
+ artist: { color: C.textSecondary },
865
+ list: {
866
+ display: "flex",
867
+ flexDirection: "column",
868
+ gap: 10,
869
+ fontFamily: "system-ui, sans-serif"
870
+ },
871
+ grid: {
872
+ display: "grid",
873
+ gridTemplateColumns: "repeat(auto-fit, minmax(160px, 1fr))",
874
+ gap: 8
875
+ },
876
+ songCard: {
877
+ border: `1px solid ${C.border}`,
878
+ borderRadius: 10,
879
+ padding: 10,
880
+ background: C.bg,
881
+ color: C.text
882
+ },
883
+ songName: { fontWeight: 700 },
884
+ songArtist: {
885
+ fontSize: 13,
886
+ color: C.textSecondary
887
+ },
888
+ pager: {
889
+ display: "flex",
890
+ justifyContent: "space-between",
891
+ gap: 8
892
+ }
893
+ }, tealStatusStyles = {
894
+ container: {
895
+ fontFamily: "system-ui, -apple-system, sans-serif",
896
+ display: "flex",
897
+ flexDirection: "column",
898
+ background: C.bg,
899
+ borderRadius: 16,
900
+ overflow: "hidden",
901
+ maxWidth: 420,
902
+ color: C.text,
903
+ boxShadow: "0 8px 24px rgba(0, 0, 0, 0.4)",
904
+ border: `1px solid ${C.border}`
905
+ },
906
+ artworkContainer: {
907
+ width: "100%",
908
+ aspectRatio: "1 / 1",
909
+ position: "relative",
910
+ overflow: "hidden"
911
+ },
912
+ artwork: {
913
+ width: "100%",
914
+ height: "100%",
915
+ objectFit: "cover",
916
+ display: "block"
917
+ },
918
+ artworkPlaceholder: {
919
+ width: "100%",
920
+ height: "100%",
921
+ display: "flex",
922
+ alignItems: "center",
923
+ justifyContent: "center",
924
+ background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
925
+ color: "rgba(255, 255, 255, 0.5)"
926
+ },
927
+ loadingSpinner: {
928
+ width: 40,
929
+ height: 40,
930
+ border: `3px solid ${C.border}`,
931
+ borderTop: "3px solid var(--atproto-color-primary)",
932
+ borderRadius: "50%",
933
+ animation: "atproto-spin 1s linear infinite"
934
+ },
935
+ content: {
936
+ padding: 24,
937
+ display: "flex",
938
+ flexDirection: "column",
939
+ gap: 8
940
+ },
941
+ label: {
942
+ fontSize: 11,
943
+ fontWeight: 600,
944
+ letterSpacing: "0.1em",
945
+ textTransform: "uppercase",
946
+ color: C.textSecondary,
947
+ marginBottom: 4
948
+ },
949
+ trackName: {
950
+ fontSize: 28,
951
+ fontWeight: 700,
952
+ margin: 0,
953
+ lineHeight: 1.2,
954
+ color: C.text
955
+ },
956
+ artistName: {
957
+ fontSize: 16,
958
+ color: C.textSecondary,
959
+ marginTop: 4
960
+ },
961
+ releaseName: {
962
+ fontSize: 14,
963
+ color: C.textSecondary,
964
+ marginTop: 2
965
+ },
966
+ listenButton: {
967
+ display: "inline-flex",
968
+ alignItems: "center",
969
+ gap: 8,
970
+ marginTop: 16,
971
+ padding: "12px 20px",
972
+ background: C.bgElevated,
973
+ border: `1px solid ${C.border}`,
974
+ borderRadius: 24,
975
+ color: C.text,
976
+ fontSize: 14,
977
+ fontWeight: 600,
978
+ textDecoration: "none",
979
+ cursor: "pointer",
980
+ transition: "all 0.2s ease",
981
+ alignSelf: "flex-start"
982
+ },
983
+ modalOverlay: {
984
+ position: "fixed",
985
+ top: 0,
986
+ left: 0,
987
+ right: 0,
988
+ bottom: 0,
989
+ backgroundColor: "rgba(0, 0, 0, 0.85)",
990
+ display: "flex",
991
+ alignItems: "center",
992
+ justifyContent: "center",
993
+ zIndex: 9999,
994
+ backdropFilter: "blur(4px)"
995
+ },
996
+ modalContent: {
997
+ background: C.bg,
998
+ borderRadius: 16,
999
+ maxWidth: 450,
1000
+ width: "90%",
1001
+ maxHeight: "80vh",
1002
+ overflow: "auto",
1003
+ boxShadow: "0 20px 60px rgba(0, 0, 0, 0.8)",
1004
+ border: `1px solid ${C.border}`
1005
+ },
1006
+ modalHeader: {
1007
+ display: "flex",
1008
+ justifyContent: "space-between",
1009
+ alignItems: "center",
1010
+ padding: "24px 24px 16px 24px",
1011
+ borderBottom: `1px solid ${C.border}`
1012
+ },
1013
+ modalTitle: {
1014
+ margin: 0,
1015
+ fontSize: 20,
1016
+ fontWeight: 700,
1017
+ color: C.text
1018
+ },
1019
+ closeButton: {
1020
+ background: "transparent",
1021
+ border: "none",
1022
+ color: C.textSecondary,
1023
+ fontSize: 32,
1024
+ cursor: "pointer",
1025
+ padding: 0,
1026
+ width: 32,
1027
+ height: 32,
1028
+ display: "flex",
1029
+ alignItems: "center",
1030
+ justifyContent: "center",
1031
+ borderRadius: "50%",
1032
+ lineHeight: 1
1033
+ },
1034
+ platformList: {
1035
+ padding: 16,
1036
+ display: "flex",
1037
+ flexDirection: "column",
1038
+ gap: 8
1039
+ },
1040
+ platformItem: {
1041
+ display: "flex",
1042
+ alignItems: "center",
1043
+ gap: 16,
1044
+ padding: 16,
1045
+ background: "var(--atproto-color-bg-hover)",
1046
+ borderRadius: 12,
1047
+ textDecoration: "none",
1048
+ color: C.text,
1049
+ cursor: "pointer",
1050
+ border: `1px solid ${C.border}`
1051
+ },
1052
+ platformIcon: {
1053
+ width: 32,
1054
+ height: 32,
1055
+ display: "flex",
1056
+ alignItems: "center",
1057
+ justifyContent: "center"
1058
+ },
1059
+ platformName: {
1060
+ flex: 1,
1061
+ fontSize: 16,
1062
+ fontWeight: 600
1063
+ },
1064
+ platformArrow: { opacity: .5 },
1065
+ notListeningContainer: {
1066
+ fontFamily: "system-ui, -apple-system, sans-serif",
1067
+ display: "flex",
1068
+ flexDirection: "column",
1069
+ alignItems: "center",
1070
+ justifyContent: "center",
1071
+ background: C.bg,
1072
+ borderRadius: 16,
1073
+ padding: "80px 40px",
1074
+ maxWidth: 420,
1075
+ color: C.textSecondary,
1076
+ border: `1px solid ${C.border}`,
1077
+ textAlign: "center"
1078
+ },
1079
+ notListeningIcon: {
1080
+ width: 120,
1081
+ height: 120,
1082
+ borderRadius: "50%",
1083
+ background: C.bgElevated,
1084
+ display: "flex",
1085
+ alignItems: "center",
1086
+ justifyContent: "center",
1087
+ marginBottom: 24,
1088
+ color: C.textMuted
1089
+ },
1090
+ notListeningTitle: {
1091
+ fontSize: 18,
1092
+ fontWeight: 600,
1093
+ color: C.text,
1094
+ marginBottom: 8
1095
+ },
1096
+ notListeningSubtitle: {
1097
+ fontSize: 14,
1098
+ color: C.textSecondary
1099
+ }
1100
+ }, songHistoryStyles = {
1101
+ card: {
1102
+ borderRadius: 16,
1103
+ borderWidth: "1px",
1104
+ borderStyle: "solid",
1105
+ borderColor: C.border,
1106
+ boxShadow: "0 8px 18px -12px rgba(15, 23, 42, 0.25)",
1107
+ overflow: "hidden",
1108
+ display: "flex",
1109
+ flexDirection: "column",
1110
+ background: C.bg
1111
+ },
1112
+ header: {
1113
+ display: "flex",
1114
+ alignItems: "center",
1115
+ justifyContent: "space-between",
1116
+ padding: "14px 18px",
1117
+ fontSize: 14,
1118
+ fontWeight: 500,
1119
+ borderBottom: `1px solid ${C.border}`,
1120
+ background: C.bgElevated,
1121
+ color: C.text
1122
+ },
1123
+ headerInfo: {
1124
+ display: "flex",
1125
+ alignItems: "center",
1126
+ gap: 12
1127
+ },
1128
+ headerIcon: {
1129
+ width: 28,
1130
+ height: 28,
1131
+ display: "flex",
1132
+ alignItems: "center",
1133
+ justifyContent: "center",
1134
+ borderRadius: "50%",
1135
+ color: C.text
1136
+ },
1137
+ headerText: {
1138
+ display: "flex",
1139
+ flexDirection: "column",
1140
+ gap: 2
1141
+ },
1142
+ title: {
1143
+ fontSize: 15,
1144
+ fontWeight: 600
1145
+ },
1146
+ subtitle: {
1147
+ fontSize: 12,
1148
+ fontWeight: 500,
1149
+ color: C.textSecondary
1150
+ },
1151
+ pageMeta: {
1152
+ fontSize: 12,
1153
+ color: C.textSecondary
1154
+ },
1155
+ items: {
1156
+ display: "flex",
1157
+ flexDirection: "column"
1158
+ },
1159
+ empty: {
1160
+ padding: "24px 18px",
1161
+ fontSize: 13,
1162
+ textAlign: "center",
1163
+ color: C.textSecondary
1164
+ },
1165
+ row: {
1166
+ padding: 18,
1167
+ display: "flex",
1168
+ gap: 16,
1169
+ alignItems: "center",
1170
+ position: "relative",
1171
+ color: C.text
1172
+ },
1173
+ rowDivider: { borderBottom: `1px solid ${C.border}` },
1174
+ albumArtContainer: {
1175
+ width: 96,
1176
+ height: 96,
1177
+ flexShrink: 0,
1178
+ borderRadius: 8,
1179
+ overflow: "hidden",
1180
+ boxShadow: "0 4px 12px rgba(0, 0, 0, 0.15)"
1181
+ },
1182
+ albumArt: {
1183
+ width: "100%",
1184
+ height: "100%",
1185
+ objectFit: "cover",
1186
+ display: "block"
1187
+ },
1188
+ albumArtPlaceholder: {
1189
+ width: "100%",
1190
+ height: "100%",
1191
+ display: "flex",
1192
+ alignItems: "center",
1193
+ justifyContent: "center",
1194
+ background: "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
1195
+ color: "rgba(255, 255, 255, 0.6)"
1196
+ },
1197
+ loadingSpinner: {
1198
+ width: 28,
1199
+ height: 28,
1200
+ border: "3px solid rgba(255, 255, 255, 0.3)",
1201
+ borderTop: "3px solid rgba(255, 255, 255, 0.9)",
1202
+ borderRadius: "50%",
1203
+ animation: "atproto-spin 1s linear infinite"
1204
+ },
1205
+ songInfo: {
1206
+ flex: 1,
1207
+ display: "flex",
1208
+ flexDirection: "column",
1209
+ gap: 4,
1210
+ minWidth: 0
1211
+ },
1212
+ trackName: {
1213
+ fontSize: 16,
1214
+ fontWeight: 600,
1215
+ lineHeight: 1.3,
1216
+ color: C.text,
1217
+ overflow: "hidden",
1218
+ textOverflow: "ellipsis",
1219
+ whiteSpace: "nowrap"
1220
+ },
1221
+ artistName: {
1222
+ fontSize: 14,
1223
+ fontWeight: 500,
1224
+ color: C.textSecondary,
1225
+ overflow: "hidden",
1226
+ textOverflow: "ellipsis",
1227
+ whiteSpace: "nowrap"
1228
+ },
1229
+ releaseName: {
1230
+ fontSize: 13,
1231
+ color: C.textSecondary,
1232
+ overflow: "hidden",
1233
+ textOverflow: "ellipsis",
1234
+ whiteSpace: "nowrap"
1235
+ },
1236
+ playedTime: {
1237
+ fontSize: 12,
1238
+ fontWeight: 500,
1239
+ marginTop: 2,
1240
+ color: C.textSecondary
1241
+ },
1242
+ externalLink: {
1243
+ flexShrink: 0,
1244
+ width: 36,
1245
+ height: 36,
1246
+ display: "flex",
1247
+ alignItems: "center",
1248
+ justifyContent: "center",
1249
+ borderRadius: "50%",
1250
+ background: C.bgElevated,
1251
+ border: `1px solid ${C.border}`,
1252
+ color: C.textSecondary,
1253
+ cursor: "pointer",
1254
+ textDecoration: "none"
1255
+ },
1256
+ footer: {
1257
+ display: "flex",
1258
+ alignItems: "center",
1259
+ justifyContent: "space-between",
1260
+ padding: "12px 18px",
1261
+ borderTop: `1px solid ${C.border}`,
1262
+ fontSize: 13,
1263
+ color: C.text
1264
+ },
1265
+ pageChips: {
1266
+ display: "flex",
1267
+ gap: 6,
1268
+ alignItems: "center"
1269
+ },
1270
+ pageChip: {
1271
+ padding: "4px 10px",
1272
+ borderRadius: 999,
1273
+ fontSize: 13,
1274
+ borderWidth: "1px",
1275
+ borderStyle: "solid",
1276
+ borderColor: C.border,
1277
+ color: C.textSecondary,
1278
+ background: C.bg
1279
+ },
1280
+ pageChipActive: {
1281
+ padding: "4px 10px",
1282
+ borderRadius: 999,
1283
+ fontSize: 13,
1284
+ fontWeight: 600,
1285
+ borderWidth: "1px",
1286
+ borderStyle: "solid",
1287
+ borderColor: "var(--atproto-color-button-bg)",
1288
+ color: "var(--atproto-color-button-text)",
1289
+ background: "var(--atproto-color-button-bg)"
1290
+ },
1291
+ pageButton: {
1292
+ border: "none",
1293
+ borderRadius: 999,
1294
+ padding: "6px 12px",
1295
+ fontSize: 13,
1296
+ fontWeight: 500,
1297
+ background: "var(--atproto-color-button-bg)",
1298
+ color: "var(--atproto-color-button-text)",
1299
+ display: "flex",
1300
+ alignItems: "center",
1301
+ gap: 4
1302
+ },
1303
+ loadingBar: {
1304
+ padding: "4px 18px 14px",
1305
+ fontSize: 12,
1306
+ textAlign: "right",
1307
+ background: C.bgElevated,
1308
+ color: C.textSecondary
1309
+ }
1310
+ }, grainGalleryStyles = {
1311
+ card: {
1312
+ borderRadius: 12,
1313
+ border: `1px solid ${C.border}`,
1314
+ background: C.bg,
1315
+ color: C.text,
1316
+ fontFamily: "system-ui, sans-serif",
1317
+ display: "flex",
1318
+ flexDirection: "column",
1319
+ maxWidth: 600,
1320
+ transition: "background-color 180ms ease, border-color 180ms ease, color 180ms ease",
1321
+ overflow: "hidden"
1322
+ },
1323
+ header: {
1324
+ display: "flex",
1325
+ alignItems: "center",
1326
+ gap: 12,
1327
+ padding: 12,
1328
+ paddingBottom: 0
1329
+ },
1330
+ avatarPlaceholder: {
1331
+ width: 32,
1332
+ height: 32,
1333
+ borderRadius: "50%",
1334
+ background: C.border
1335
+ },
1336
+ avatarImg: {
1337
+ width: 32,
1338
+ height: 32,
1339
+ borderRadius: "50%",
1340
+ objectFit: "cover"
1341
+ },
1342
+ authorInfo: {
1343
+ display: "flex",
1344
+ flexDirection: "column",
1345
+ gap: 2
1346
+ },
1347
+ displayName: {
1348
+ fontSize: 14,
1349
+ fontWeight: 600
1350
+ },
1351
+ handle: {
1352
+ fontSize: 12,
1353
+ color: C.textSecondary
1354
+ },
1355
+ galleryInfo: {
1356
+ padding: 12,
1357
+ paddingBottom: 8
1358
+ },
1359
+ title: {
1360
+ margin: 0,
1361
+ fontSize: 18,
1362
+ fontWeight: 600,
1363
+ marginBottom: 4
1364
+ },
1365
+ description: {
1366
+ margin: 0,
1367
+ fontSize: 14,
1368
+ lineHeight: 1.4,
1369
+ whiteSpace: "pre-wrap",
1370
+ color: C.textSecondary
1371
+ },
1372
+ singlePhotoContainer: { padding: 0 },
1373
+ carouselContainer: {
1374
+ position: "relative",
1375
+ padding: 4
1376
+ },
1377
+ photosGrid: {
1378
+ display: "grid",
1379
+ gridTemplateColumns: "repeat(2, 1fr)",
1380
+ gridTemplateRows: "repeat(2, 1fr)",
1381
+ gap: 4,
1382
+ minHeight: 400
1383
+ },
1384
+ navButton: {
1385
+ position: "absolute",
1386
+ top: "50%",
1387
+ transform: "translateY(-50%)",
1388
+ width: 28,
1389
+ height: 28,
1390
+ border: "none",
1391
+ borderRadius: "50%",
1392
+ boxSizing: "border-box",
1393
+ padding: 0,
1394
+ fontSize: 18,
1395
+ fontWeight: 600,
1396
+ cursor: "pointer",
1397
+ display: "flex",
1398
+ alignItems: "center",
1399
+ justifyContent: "center",
1400
+ zIndex: 10,
1401
+ transition: "opacity 150ms ease",
1402
+ userSelect: "none",
1403
+ opacity: .7,
1404
+ color: "#fff",
1405
+ background: "rgba(0, 0, 0, 0.5)",
1406
+ boxShadow: "0 2px 4px rgba(0, 0, 0, 0.1)"
1407
+ },
1408
+ navButtonLeft: { left: 8 },
1409
+ navButtonRight: { right: 8 },
1410
+ photoItem: {
1411
+ margin: 0,
1412
+ display: "flex",
1413
+ flexDirection: "column",
1414
+ gap: 4
1415
+ },
1416
+ singlePhotoItem: {
1417
+ margin: 0,
1418
+ display: "flex",
1419
+ flexDirection: "column",
1420
+ gap: 8
1421
+ },
1422
+ photoContainer: {
1423
+ position: "relative",
1424
+ width: "100%",
1425
+ height: "100%",
1426
+ overflow: "hidden",
1427
+ borderRadius: 4,
1428
+ background: C.imageBg
1429
+ },
1430
+ singlePhotoMedia: {
1431
+ position: "relative",
1432
+ width: "100%",
1433
+ overflow: "hidden",
1434
+ borderRadius: 0,
1435
+ background: C.imageBg
1436
+ },
1437
+ photo: {
1438
+ width: "100%",
1439
+ height: "100%",
1440
+ objectFit: "cover",
1441
+ display: "block"
1442
+ },
1443
+ photoGrid: {
1444
+ width: "100%",
1445
+ height: "100%",
1446
+ objectFit: "cover",
1447
+ display: "block"
1448
+ },
1449
+ placeholder: {
1450
+ display: "flex",
1451
+ alignItems: "center",
1452
+ justifyContent: "center",
1453
+ width: "100%",
1454
+ height: "100%",
1455
+ minHeight: 100,
1456
+ fontSize: 12,
1457
+ color: C.textMuted
1458
+ },
1459
+ caption: {
1460
+ fontSize: 12,
1461
+ lineHeight: 1.3,
1462
+ padding: "0 12px 8px",
1463
+ color: C.textSecondary
1464
+ },
1465
+ altBadge: {
1466
+ position: "absolute",
1467
+ bottom: 8,
1468
+ right: 8,
1469
+ padding: "4px 8px",
1470
+ fontSize: 10,
1471
+ fontWeight: 600,
1472
+ letterSpacing: "0.5px",
1473
+ border: "none",
1474
+ borderRadius: 4,
1475
+ cursor: "pointer",
1476
+ transition: "background 150ms ease, color 150ms ease",
1477
+ fontFamily: "system-ui, sans-serif"
1478
+ },
1479
+ footer: {
1480
+ display: "flex",
1481
+ alignItems: "center",
1482
+ justifyContent: "space-between",
1483
+ padding: 12,
1484
+ paddingTop: 8
1485
+ },
1486
+ time: {
1487
+ fontSize: 11,
1488
+ color: C.textMuted
1489
+ },
1490
+ paginationDots: {
1491
+ display: "flex",
1492
+ gap: 6,
1493
+ alignItems: "center"
1494
+ },
1495
+ paginationDot: {
1496
+ width: 6,
1497
+ height: 6,
1498
+ borderRadius: "50%",
1499
+ border: "none",
1500
+ padding: 0,
1501
+ cursor: "pointer",
1502
+ transition: "background 200ms ease, transform 150ms ease",
1503
+ flexShrink: 0
1504
+ }
1505
+ }, leafletDocStyles = {
1506
+ container: {
1507
+ display: "flex",
1508
+ flexDirection: "column",
1509
+ gap: 24,
1510
+ padding: "24px 28px",
1511
+ borderRadius: 20,
1512
+ borderWidth: "1px",
1513
+ borderStyle: "solid",
1514
+ borderColor: C.border,
1515
+ maxWidth: 720,
1516
+ width: "100%",
1517
+ fontFamily: "system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif",
1518
+ background: C.bg,
1519
+ color: C.text
1520
+ },
1521
+ header: {
1522
+ display: "flex",
1523
+ flexDirection: "column",
1524
+ gap: 16
1525
+ },
1526
+ headerContent: {
1527
+ display: "flex",
1528
+ flexDirection: "column",
1529
+ gap: 8
1530
+ },
1531
+ title: {
1532
+ fontSize: 32,
1533
+ margin: 0,
1534
+ lineHeight: 1.15,
1535
+ color: C.text
1536
+ },
1537
+ subtitle: {
1538
+ margin: 0,
1539
+ fontSize: 16,
1540
+ lineHeight: 1.5,
1541
+ color: C.textSecondary
1542
+ },
1543
+ meta: {
1544
+ display: "flex",
1545
+ flexWrap: "wrap",
1546
+ gap: 8,
1547
+ alignItems: "center",
1548
+ fontSize: 14,
1549
+ color: C.textSecondary
1550
+ },
1551
+ body: {
1552
+ display: "flex",
1553
+ flexDirection: "column",
1554
+ gap: 18
1555
+ },
1556
+ page: {
1557
+ display: "flex",
1558
+ flexDirection: "column",
1559
+ gap: 18
1560
+ },
1561
+ paragraph: {
1562
+ margin: "1em 0 0",
1563
+ lineHeight: 1.65,
1564
+ fontSize: 16,
1565
+ color: C.text
1566
+ },
1567
+ heading: {
1568
+ margin: "0.5em 0 0",
1569
+ fontWeight: 700,
1570
+ color: C.text
1571
+ },
1572
+ blockquote: {
1573
+ margin: "1em 0 0",
1574
+ padding: "0.6em 1em",
1575
+ borderLeftWidth: "4px",
1576
+ borderLeftStyle: "solid",
1577
+ borderColor: C.border,
1578
+ background: C.bgElevated,
1579
+ color: C.text
1580
+ },
1581
+ figure: {
1582
+ margin: "1.2em 0 0",
1583
+ display: "flex",
1584
+ flexDirection: "column",
1585
+ gap: 12
1586
+ },
1587
+ imageWrapper: {
1588
+ borderRadius: 16,
1589
+ overflow: "hidden",
1590
+ width: "100%",
1591
+ position: "relative",
1592
+ background: C.bgElevated
1593
+ },
1594
+ image: {
1595
+ width: "100%",
1596
+ height: "100%",
1597
+ objectFit: "cover",
1598
+ display: "block"
1599
+ },
1600
+ imagePlaceholder: {
1601
+ width: "100%",
1602
+ padding: "24px 16px",
1603
+ textAlign: "center",
1604
+ color: C.textSecondary
1605
+ },
1606
+ caption: {
1607
+ fontSize: 13,
1608
+ lineHeight: 1.4,
1609
+ color: C.textSecondary
1610
+ },
1611
+ list: {
1612
+ paddingLeft: 28,
1613
+ margin: "1em 0 0",
1614
+ listStyleType: "disc",
1615
+ listStylePosition: "outside",
1616
+ color: C.text
1617
+ },
1618
+ nestedList: {
1619
+ paddingLeft: 20,
1620
+ marginTop: 8,
1621
+ listStyleType: "circle",
1622
+ listStylePosition: "outside"
1623
+ },
1624
+ listItem: {
1625
+ marginTop: 8,
1626
+ display: "list-item"
1627
+ },
1628
+ linkCard: {
1629
+ borderRadius: 16,
1630
+ borderWidth: "1px",
1631
+ borderStyle: "solid",
1632
+ borderColor: C.border,
1633
+ display: "flex",
1634
+ flexDirection: "column",
1635
+ overflow: "hidden",
1636
+ textDecoration: "none",
1637
+ background: C.bgElevated,
1638
+ color: C.text
1639
+ },
1640
+ linkPreview: {
1641
+ width: "100%",
1642
+ height: 180,
1643
+ objectFit: "cover"
1644
+ },
1645
+ linkPreviewPlaceholder: {
1646
+ width: "100%",
1647
+ height: 180,
1648
+ display: "flex",
1649
+ alignItems: "center",
1650
+ justifyContent: "center",
1651
+ fontSize: 14,
1652
+ background: C.bgElevated,
1653
+ color: C.textSecondary
1654
+ },
1655
+ linkContent: {
1656
+ display: "flex",
1657
+ flexDirection: "column",
1658
+ gap: 6,
1659
+ padding: "16px 18px"
1660
+ },
1661
+ linkTitle: {
1662
+ fontSize: 16,
1663
+ color: C.text
1664
+ },
1665
+ linkDescription: {
1666
+ margin: 0,
1667
+ fontSize: 14,
1668
+ color: C.textSecondary,
1669
+ lineHeight: 1.5
1670
+ },
1671
+ linkSrc: {
1672
+ fontSize: 13,
1673
+ color: C.link,
1674
+ wordBreak: "break-all"
1675
+ },
1676
+ iframe: {
1677
+ width: "100%",
1678
+ height: 360,
1679
+ border: `1px solid ${C.border}`,
1680
+ borderRadius: 16
1681
+ },
1682
+ math: {
1683
+ margin: "1em 0 0",
1684
+ padding: "14px 16px",
1685
+ borderRadius: 12,
1686
+ fontFamily: "Menlo, Consolas, \"SFMono-Regular\", ui-monospace",
1687
+ overflowX: "auto",
1688
+ background: C.bgElevated,
1689
+ color: C.text,
1690
+ border: `1px solid ${C.border}`
1691
+ },
1692
+ embedFallback: {
1693
+ padding: "12px 16px",
1694
+ borderRadius: 12,
1695
+ border: `1px solid ${C.border}`,
1696
+ fontSize: 14
1697
+ },
1698
+ code: {
1699
+ margin: "1em 0 0",
1700
+ padding: "14px 16px",
1701
+ borderRadius: 12,
1702
+ overflowX: "auto",
1703
+ fontSize: 14,
1704
+ background: C.bg,
1705
+ color: C.text,
1706
+ border: `1px solid ${C.border}`,
1707
+ fontFamily: "Menlo, Consolas, \"SFMono-Regular\", ui-monospace"
1708
+ },
1709
+ hr: {
1710
+ border: 0,
1711
+ borderTopWidth: "1px",
1712
+ borderTopStyle: "solid",
1713
+ borderColor: C.border,
1714
+ margin: "24px 0 0"
1715
+ },
1716
+ inlineCode: {
1717
+ fontFamily: "Menlo, Consolas, \"SFMono-Regular\", ui-monospace",
1718
+ background: C.bgElevated,
1719
+ padding: "0 4px",
1720
+ borderRadius: 4
1721
+ },
1722
+ link: {
1723
+ color: C.link,
1724
+ textDecoration: "underline"
1725
+ },
1726
+ highlight: { background: "var(--atproto-color-highlight)" }
1727
+ };
1728
+ export { blueskyPostListStyles, cardStyles, grainGalleryStyles, grainStyles, leafletDocStyles, leafletStyles, mergeStyles, postStyles, profileStyles, songHistoryStyles, styleString, tangledStringStyles, tangledStyles, tealStatusStyles, tealStyles };