@brdgapp/ui 0.1.2 → 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.
Files changed (123) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/README.md +37 -201
  3. package/components/action-menu.d.ts +65 -0
  4. package/components/action-menu.js +48 -0
  5. package/components/avatar.d.ts +50 -0
  6. package/components/avatar.js +91 -0
  7. package/components/badge.d.ts +12 -0
  8. package/components/badge.js +23 -0
  9. package/components/bottom-sheet.d.ts +17 -0
  10. package/components/bottom-sheet.js +12 -0
  11. package/components/brand-mark.d.ts +20 -0
  12. package/components/brand-mark.js +44 -0
  13. package/components/button-group.d.ts +25 -0
  14. package/components/button-group.js +53 -0
  15. package/components/button.d.ts +33 -0
  16. package/components/button.js +82 -0
  17. package/components/card.d.ts +78 -0
  18. package/components/card.js +75 -0
  19. package/components/checkbox.d.ts +22 -0
  20. package/components/checkbox.js +35 -0
  21. package/components/collapsible.d.ts +29 -0
  22. package/components/collapsible.js +38 -0
  23. package/components/column-filter-menu.d.ts +15 -0
  24. package/components/column-filter-menu.js +30 -0
  25. package/components/column-sort-button.d.ts +18 -0
  26. package/components/column-sort-button.js +14 -0
  27. package/components/confirm-dialog.d.ts +20 -0
  28. package/components/confirm-dialog.js +17 -0
  29. package/components/copy-field.d.ts +17 -0
  30. package/components/copy-field.js +36 -0
  31. package/components/data-state.d.ts +44 -0
  32. package/components/data-state.js +25 -0
  33. package/components/data-table.d.ts +65 -0
  34. package/components/data-table.js +84 -0
  35. package/components/dialog.d.ts +19 -0
  36. package/components/dialog.js +10 -0
  37. package/components/drawer.d.ts +21 -0
  38. package/components/drawer.js +17 -0
  39. package/components/expandable-bio.d.ts +8 -0
  40. package/components/expandable-bio.js +26 -0
  41. package/components/field.d.ts +29 -0
  42. package/components/field.js +27 -0
  43. package/components/filter-chip.d.ts +11 -0
  44. package/components/filter-chip.js +8 -0
  45. package/components/filter-pill.d.ts +34 -0
  46. package/components/filter-pill.js +35 -0
  47. package/components/hover-card.d.ts +21 -0
  48. package/components/hover-card.js +20 -0
  49. package/components/icon-button.d.ts +16 -0
  50. package/components/icon-button.js +32 -0
  51. package/components/illustration.d.ts +33 -0
  52. package/components/illustration.js +70 -0
  53. package/components/info-hint.d.ts +29 -0
  54. package/components/info-hint.js +42 -0
  55. package/components/input.d.ts +9 -0
  56. package/components/input.js +15 -0
  57. package/components/network-graph.d.ts +48 -0
  58. package/components/network-graph.js +37 -0
  59. package/components/page-banner.d.ts +20 -0
  60. package/components/page-banner.js +29 -0
  61. package/components/scene.d.ts +12 -0
  62. package/components/scene.js +7 -0
  63. package/components/search-input.d.ts +8 -0
  64. package/components/search-input.js +14 -0
  65. package/components/segmented-control.d.ts +18 -0
  66. package/components/segmented-control.js +14 -0
  67. package/components/skeleton.d.ts +12 -0
  68. package/components/skeleton.js +21 -0
  69. package/components/skip-link.d.ts +8 -0
  70. package/components/skip-link.js +7 -0
  71. package/components/stat-box.d.ts +23 -0
  72. package/components/stat-box.js +29 -0
  73. package/components/switch.d.ts +13 -0
  74. package/components/switch.js +8 -0
  75. package/components/tabs.d.ts +6 -0
  76. package/components/tabs.js +25 -0
  77. package/components/tag-input.d.ts +15 -0
  78. package/components/tag-input.js +40 -0
  79. package/components/tag.d.ts +27 -0
  80. package/components/tag.js +35 -0
  81. package/components/textarea.d.ts +12 -0
  82. package/components/textarea.js +78 -0
  83. package/components/theme-switch.d.ts +6 -0
  84. package/components/theme-switch.js +16 -0
  85. package/components/toast.d.ts +25 -0
  86. package/components/toast.js +44 -0
  87. package/hooks/use-is-mobile.d.ts +2 -0
  88. package/hooks/use-is-mobile.js +16 -0
  89. package/hooks/use-mock-query.d.ts +23 -0
  90. package/hooks/use-mock-query.js +36 -0
  91. package/hooks/use-theme.d.ts +11 -0
  92. package/hooks/use-theme.js +34 -0
  93. package/lib/demo-controls.d.ts +24 -0
  94. package/lib/demo-controls.js +24 -0
  95. package/lib/format.d.ts +17 -0
  96. package/lib/format.js +55 -0
  97. package/lib/layout.d.ts +19 -0
  98. package/lib/layout.js +24 -0
  99. package/lib/motion.d.ts +16 -0
  100. package/lib/motion.js +18 -0
  101. package/lib/theme.d.ts +21 -0
  102. package/lib/theme.js +63 -0
  103. package/lib/utils.d.ts +22 -0
  104. package/lib/utils.js +27 -0
  105. package/package.json +32 -16
  106. package/styles/globals.css +595 -0
  107. package/src/index.ts +0 -18
  108. package/src/network-people-helper/README.md +0 -130
  109. package/src/network-people-helper/api.ts +0 -174
  110. package/src/network-people-helper/contact-avatar.tsx +0 -63
  111. package/src/network-people-helper/domain.ts +0 -14
  112. package/src/network-people-helper/icons.tsx +0 -130
  113. package/src/network-people-helper/index.ts +0 -6
  114. package/src/network-people-helper/network-people-helper.tsx +0 -397
  115. package/src/network-people-helper/network-people-nudge.tsx +0 -98
  116. package/src/network-people-helper/open-helper.ts +0 -22
  117. package/src/network-people-helper/person-menu.tsx +0 -211
  118. package/src/network-people-helper/styles.css +0 -848
  119. package/src/network-people-helper/types.ts +0 -23
  120. package/src/network-people-helper/use-network-people-list.ts +0 -122
  121. package/src/network-people-helper/use-network-preview.ts +0 -43
  122. package/src/provider.tsx +0 -59
  123. package/src/styles.css +0 -1
@@ -1,848 +0,0 @@
1
- /* Bridge network people helper.
2
- Position defaults come from data-placement. Override with:
3
- --bridge-helper-top, --bridge-helper-right, --bridge-helper-bottom,
4
- --bridge-helper-left, --bridge-helper-z
5
- */
6
-
7
- .bridge-network-helper-anchor,
8
- .bridge-network-helper__person-menu-content,
9
- .bridge-network-nudge {
10
- --bridge-helper-fg: var(--foreground, #0f172a);
11
- --bridge-helper-bg: var(--background, #ffffff);
12
- --bridge-helper-muted: var(--muted, #f1f5f9);
13
- --bridge-helper-muted-fg: var(--muted-foreground, #64748b);
14
- --bridge-helper-border: var(--border, #e2e8f0);
15
- --bridge-helper-accent: #0038ff;
16
- color: var(--bridge-helper-fg);
17
- font-family: inherit;
18
- }
19
-
20
- .bridge-network-helper-anchor {
21
- position: fixed;
22
- z-index: var(--bridge-helper-z, 40);
23
- top: var(--bridge-helper-top, var(--bridge-helper-preset-top, auto));
24
- right: var(--bridge-helper-right, var(--bridge-helper-preset-right, auto));
25
- bottom: var(--bridge-helper-bottom, var(--bridge-helper-preset-bottom, auto));
26
- left: var(--bridge-helper-left, var(--bridge-helper-preset-left, auto));
27
- display: flex;
28
- width: min(100vw - 1.5rem, 22rem);
29
- pointer-events: none;
30
- box-sizing: border-box;
31
- }
32
-
33
- .bridge-network-helper-anchor *,
34
- .bridge-network-helper-anchor *::before,
35
- .bridge-network-helper-anchor *::after,
36
- .bridge-network-helper__person-menu-content,
37
- .bridge-network-helper__person-menu-content * {
38
- box-sizing: border-box;
39
- }
40
-
41
- .bridge-network-helper-anchor[data-placement="bottom-end"] {
42
- --bridge-helper-preset-bottom: 1.25rem;
43
- --bridge-helper-preset-right: 1.25rem;
44
- align-items: flex-end;
45
- justify-content: flex-end;
46
- }
47
-
48
- .bridge-network-helper-anchor[data-placement="bottom-start"] {
49
- --bridge-helper-preset-bottom: 1.25rem;
50
- --bridge-helper-preset-left: 1.25rem;
51
- align-items: flex-end;
52
- justify-content: flex-start;
53
- }
54
-
55
- .bridge-network-helper-anchor[data-placement="top-end"] {
56
- --bridge-helper-preset-top: 1.25rem;
57
- --bridge-helper-preset-right: 1.25rem;
58
- align-items: flex-start;
59
- justify-content: flex-end;
60
- }
61
-
62
- .bridge-network-helper-anchor[data-placement="top-start"] {
63
- --bridge-helper-preset-top: 1.25rem;
64
- --bridge-helper-preset-left: 1.25rem;
65
- align-items: flex-start;
66
- justify-content: flex-start;
67
- }
68
-
69
- @media (min-width: 640px) {
70
- .bridge-network-helper-anchor[data-placement="bottom-end"] {
71
- --bridge-helper-preset-bottom: 1.75rem;
72
- --bridge-helper-preset-right: 1.75rem;
73
- }
74
-
75
- .bridge-network-helper-anchor[data-placement="bottom-start"] {
76
- --bridge-helper-preset-bottom: 1.75rem;
77
- --bridge-helper-preset-left: 1.75rem;
78
- }
79
-
80
- .bridge-network-helper-anchor[data-placement="top-end"] {
81
- --bridge-helper-preset-top: 1.75rem;
82
- --bridge-helper-preset-right: 1.75rem;
83
- }
84
-
85
- .bridge-network-helper-anchor[data-placement="top-start"] {
86
- --bridge-helper-preset-top: 1.75rem;
87
- --bridge-helper-preset-left: 1.75rem;
88
- }
89
- }
90
-
91
- .bridge-network-helper .helper-icon,
92
- .bridge-network-nudge .helper-icon {
93
- width: 26px;
94
- height: auto;
95
- display: block;
96
- overflow: visible;
97
- }
98
-
99
- .bridge-network-helper .dot,
100
- .bridge-network-nudge .dot {
101
- fill: #ffffff;
102
- transform-box: fill-box;
103
- transform-origin: center;
104
- }
105
-
106
- .bridge-network-helper .nudge .dot {
107
- animation: bridgeHelperSubtleNudge 5.5s ease-in-out infinite;
108
- }
109
-
110
- .bridge-network-helper .nudge .d1 { animation-delay: 0s; }
111
- .bridge-network-helper .nudge .d2 { animation-delay: 0.04s; }
112
- .bridge-network-helper .nudge .d3 { animation-delay: 0.08s; }
113
- .bridge-network-helper .nudge .d4 { animation-delay: 0.12s; }
114
- .bridge-network-helper .nudge .d5 { animation-delay: 0.16s; }
115
- .bridge-network-helper .nudge .d6 { animation-delay: 0.2s; }
116
- .bridge-network-helper .nudge .d7 { animation-delay: 0.24s; }
117
- .bridge-network-helper .nudge .d8 { animation-delay: 0.28s; }
118
- .bridge-network-helper .nudge .d9 { animation-delay: 0.32s; }
119
- .bridge-network-helper .nudge .d10 { animation-delay: 0.36s; }
120
- .bridge-network-helper .nudge .d11 { animation-delay: 0.4s; }
121
- .bridge-network-helper .nudge .d12 { animation-delay: 0.44s; }
122
- .bridge-network-helper .nudge .d13 { animation-delay: 0.48s; }
123
- .bridge-network-helper .nudge .d14 { animation-delay: 0.52s; }
124
- .bridge-network-helper .nudge .d15 { animation-delay: 0.56s; }
125
-
126
- @keyframes bridgeHelperSubtleNudge {
127
- 0%, 82%, 100% { transform: translate(0, 0) scale(1); }
128
- 85% { transform: translateY(-2.5px) scale(1.04); }
129
- 88% { transform: translateY(2px) scale(0.985); }
130
- 91% { transform: translateY(-1px) scale(1.015); }
131
- 94% { transform: translate(0, 0) scale(1); }
132
- }
133
-
134
- .bridge-network-helper {
135
- display: flex;
136
- flex-direction: column;
137
- align-items: flex-end;
138
- width: 100%;
139
- pointer-events: auto;
140
- }
141
-
142
- .bridge-network-nudge {
143
- display: flex;
144
- width: 100%;
145
- align-items: center;
146
- gap: 0.55rem;
147
- margin: 0;
148
- padding: 0.35rem 0.55rem 0.35rem 0.35rem;
149
- border: 1px solid color-mix(in oklab, var(--bridge-helper-border) 70%, transparent);
150
- border-radius: 1.25rem;
151
- background: color-mix(in oklab, var(--bridge-helper-bg) 94%, transparent);
152
- box-shadow: 0 10px 40px rgba(15, 23, 42, 0.08);
153
- backdrop-filter: blur(10px);
154
- text-align: left;
155
- cursor: pointer;
156
- }
157
-
158
- .bridge-network-nudge:hover {
159
- border-color: color-mix(in oklab, var(--bridge-helper-accent) 28%, var(--bridge-helper-border));
160
- }
161
-
162
- .bridge-network-nudge__icon,
163
- .bridge-network-helper__icon-btn {
164
- display: inline-flex;
165
- width: 2.5rem;
166
- height: 2.5rem;
167
- flex-shrink: 0;
168
- align-items: center;
169
- justify-content: center;
170
- border: 0;
171
- border-radius: 9999px;
172
- background: var(--bridge-helper-accent);
173
- padding: 0;
174
- box-shadow: 0 8px 20px rgba(0, 56, 255, 0.28);
175
- cursor: pointer;
176
- }
177
-
178
- .bridge-network-nudge__line,
179
- .bridge-network-helper__line {
180
- margin: 0;
181
- min-width: 0;
182
- overflow: hidden;
183
- text-overflow: ellipsis;
184
- white-space: nowrap;
185
- font-size: 0.8125rem;
186
- line-height: 1.3;
187
- color: var(--bridge-helper-fg);
188
- }
189
-
190
- .bridge-network-nudge__line {
191
- flex: 1 1 auto;
192
- }
193
-
194
- .bridge-network-nudge__count,
195
- .bridge-network-helper__count {
196
- font-weight: 600;
197
- font-variant-numeric: tabular-nums;
198
- color: var(--bridge-helper-accent);
199
- text-decoration: underline;
200
- text-decoration-color: color-mix(in oklab, var(--bridge-helper-accent) 35%, transparent);
201
- text-underline-offset: 2px;
202
- }
203
-
204
- .bridge-network-helper__count {
205
- display: inline;
206
- padding: 0;
207
- border: 0;
208
- background: transparent;
209
- font: inherit;
210
- font-weight: 600;
211
- cursor: pointer;
212
- }
213
-
214
- .bridge-network-nudge__avatars,
215
- .bridge-network-helper__avatars {
216
- display: flex;
217
- flex-shrink: 0;
218
- align-items: center;
219
- }
220
-
221
- .bridge-network-helper__avatars {
222
- margin-left: 0.1rem;
223
- padding: 0;
224
- border: 0;
225
- background: transparent;
226
- cursor: pointer;
227
- border-radius: 9999px;
228
- }
229
-
230
- .bridge-network-nudge__avatars > * + *,
231
- .bridge-network-helper__avatars > * + * {
232
- margin-left: -0.35rem;
233
- }
234
-
235
- .bridge-network-nudge__toggle,
236
- .bridge-network-helper__toggle {
237
- display: inline-flex;
238
- width: 1.5rem;
239
- height: 1.5rem;
240
- flex-shrink: 0;
241
- align-items: center;
242
- justify-content: center;
243
- border: 0;
244
- border-radius: 9999px;
245
- background: color-mix(in oklab, var(--bridge-helper-muted) 55%, transparent);
246
- color: var(--bridge-helper-muted-fg);
247
- padding: 0;
248
- }
249
-
250
- .bridge-network-helper__toggle {
251
- cursor: pointer;
252
- }
253
-
254
- .bridge-network-nudge__toggle {
255
- margin-left: auto;
256
- }
257
-
258
- .bridge-network-nudge__toggle svg,
259
- .bridge-network-helper__toggle svg,
260
- .bridge-network-helper__person-menu > svg {
261
- width: 0.875rem;
262
- height: 0.875rem;
263
- }
264
-
265
- .bridge-network-helper__dismiss-bar {
266
- display: flex;
267
- justify-content: flex-end;
268
- width: 100%;
269
- margin-bottom: 0.35rem;
270
- padding-right: 0.2rem;
271
- }
272
-
273
- .bridge-network-helper__dismiss-link,
274
- .bridge-network-helper__dismiss-action,
275
- .bridge-network-helper__dismiss-cancel {
276
- border: 0;
277
- background: transparent;
278
- padding: 0;
279
- font: inherit;
280
- font-size: 0.6875rem;
281
- line-height: 1.2;
282
- cursor: pointer;
283
- }
284
-
285
- .bridge-network-helper__dismiss-link {
286
- display: inline-flex;
287
- align-items: center;
288
- gap: 0.3rem;
289
- border-radius: 9999px;
290
- border: 1px solid color-mix(in oklab, var(--bridge-helper-border) 70%, transparent);
291
- background: color-mix(in oklab, var(--bridge-helper-bg) 92%, transparent);
292
- padding: 0.25rem 0.55rem;
293
- color: var(--bridge-helper-muted-fg);
294
- box-shadow: 0 4px 14px rgba(15, 23, 42, 0.08);
295
- backdrop-filter: blur(8px);
296
- }
297
-
298
- .bridge-network-helper__dismiss-link svg {
299
- width: 0.75rem;
300
- height: 0.75rem;
301
- flex-shrink: 0;
302
- }
303
-
304
- .bridge-network-helper__dismiss-confirm {
305
- margin: 0;
306
- border-radius: 9999px;
307
- border: 1px solid color-mix(in oklab, var(--bridge-helper-border) 70%, transparent);
308
- background: color-mix(in oklab, var(--bridge-helper-bg) 92%, transparent);
309
- padding: 0.25rem 0.55rem;
310
- font-size: 0.6875rem;
311
- line-height: 1.2;
312
- color: var(--bridge-helper-muted-fg);
313
- box-shadow: 0 4px 14px rgba(15, 23, 42, 0.08);
314
- }
315
-
316
- .bridge-network-helper__dismiss-action {
317
- font-weight: 600;
318
- color: var(--bridge-helper-accent);
319
- }
320
-
321
- .bridge-network-helper__dismiss-sep {
322
- margin: 0 0.25rem;
323
- color: color-mix(in oklab, var(--bridge-helper-muted-fg) 50%, transparent);
324
- }
325
-
326
- .bridge-network-helper__shell {
327
- position: relative;
328
- display: flex;
329
- flex-direction: column;
330
- align-items: stretch;
331
- min-height: 2.5rem;
332
- width: max-content;
333
- max-width: 100%;
334
- margin-left: auto;
335
- border-radius: 1.25rem;
336
- overflow: hidden;
337
- transition: background-color 320ms ease, box-shadow 320ms ease, border-color 320ms ease, padding 320ms ease;
338
- }
339
-
340
- .bridge-network-helper__row {
341
- display: flex;
342
- align-items: center;
343
- justify-content: flex-end;
344
- gap: 0.5rem;
345
- min-height: 2.5rem;
346
- }
347
-
348
- .bridge-network-helper--icon .bridge-network-helper__shell {
349
- width: 2.5rem;
350
- padding: 0;
351
- background: transparent;
352
- border: 0;
353
- box-shadow: none;
354
- }
355
-
356
- .bridge-network-helper--icon .bridge-network-helper__row {
357
- gap: 0;
358
- }
359
-
360
- .bridge-network-helper--icon .bridge-network-helper__icon-btn {
361
- animation: bridgeHelperIconEnter 480ms cubic-bezier(0.22, 1, 0.36, 1) both;
362
- }
363
-
364
- .bridge-network-helper--revealing .bridge-network-helper__shell,
365
- .bridge-network-helper--expanded .bridge-network-helper__shell,
366
- .bridge-network-helper--list .bridge-network-helper__shell {
367
- width: max-content;
368
- max-width: 100%;
369
- padding: 0.25rem 0.4rem 0.25rem 0.25rem;
370
- border: 1px solid color-mix(in oklab, var(--bridge-helper-border) 70%, transparent);
371
- background: color-mix(in oklab, var(--bridge-helper-bg) 94%, transparent);
372
- box-shadow: 0 10px 40px rgba(15, 23, 42, 0.12);
373
- backdrop-filter: blur(10px);
374
- }
375
-
376
- .bridge-network-helper--list .bridge-network-helper__shell {
377
- width: 100%;
378
- padding-bottom: 0.45rem;
379
- }
380
-
381
- .bridge-network-helper--revealing .bridge-network-helper__row,
382
- .bridge-network-helper--expanded .bridge-network-helper__row,
383
- .bridge-network-helper--list .bridge-network-helper__row {
384
- min-width: 0;
385
- max-width: 100%;
386
- justify-content: flex-start;
387
- }
388
-
389
- .bridge-network-helper--list {
390
- align-items: stretch;
391
- }
392
-
393
- .bridge-network-helper--list .bridge-network-helper__note-reveal,
394
- .bridge-network-helper--list .bridge-network-helper__note-reveal-inner {
395
- flex: 1 1 auto;
396
- width: 100%;
397
- min-width: 0;
398
- }
399
-
400
- .bridge-network-helper--list .bridge-network-helper__toggle {
401
- margin-left: auto;
402
- }
403
-
404
- .bridge-network-helper__note-reveal {
405
- display: grid;
406
- grid-template-columns: 0fr;
407
- min-width: 0;
408
- opacity: 0;
409
- overflow: hidden;
410
- pointer-events: none;
411
- transition: grid-template-columns 620ms cubic-bezier(0.22, 1, 0.36, 1), opacity 420ms ease;
412
- }
413
-
414
- .bridge-network-helper--revealing .bridge-network-helper__note-reveal,
415
- .bridge-network-helper--expanded .bridge-network-helper__note-reveal,
416
- .bridge-network-helper--list .bridge-network-helper__note-reveal {
417
- grid-template-columns: 1fr;
418
- opacity: 1;
419
- pointer-events: auto;
420
- }
421
-
422
- .bridge-network-helper__note-reveal-inner {
423
- display: flex;
424
- min-width: 0;
425
- align-items: center;
426
- gap: 0.5rem;
427
- overflow: hidden;
428
- transform: translateX(0.85rem);
429
- transition: transform 620ms cubic-bezier(0.22, 1, 0.36, 1);
430
- }
431
-
432
- .bridge-network-helper--revealing .bridge-network-helper__note-reveal-inner,
433
- .bridge-network-helper--expanded .bridge-network-helper__note-reveal-inner,
434
- .bridge-network-helper--list .bridge-network-helper__note-reveal-inner {
435
- transform: translateX(0);
436
- }
437
-
438
- .bridge-network-helper__content {
439
- display: flex;
440
- min-width: 0;
441
- flex: 0 1 auto;
442
- align-items: center;
443
- overflow: hidden;
444
- }
445
-
446
- .bridge-network-helper__list {
447
- display: grid;
448
- grid-template-rows: 0fr;
449
- width: 0;
450
- max-width: 100%;
451
- opacity: 0;
452
- overflow: hidden;
453
- pointer-events: none;
454
- transition: grid-template-rows 480ms cubic-bezier(0.22, 1, 0.36, 1), opacity 280ms ease, margin-top 480ms cubic-bezier(0.22, 1, 0.36, 1), width 480ms cubic-bezier(0.22, 1, 0.36, 1);
455
- }
456
-
457
- .bridge-network-helper--list .bridge-network-helper__list {
458
- grid-template-rows: 1fr;
459
- width: 100%;
460
- margin-top: 0.45rem;
461
- opacity: 1;
462
- pointer-events: auto;
463
- }
464
-
465
- .bridge-network-helper__list-inner {
466
- min-height: 0;
467
- overflow: hidden;
468
- }
469
-
470
- .bridge-network-helper__list-panel {
471
- display: flex;
472
- flex-direction: column;
473
- max-height: min(22rem, 52vh);
474
- border-top: 1px solid color-mix(in oklab, var(--bridge-helper-border) 30%, transparent);
475
- padding: 0.45rem 0.1rem 0.1rem;
476
- }
477
-
478
- .bridge-network-helper__search {
479
- position: relative;
480
- flex-shrink: 0;
481
- margin: 0 0.2rem 0.4rem;
482
- }
483
-
484
- .bridge-network-helper__search-icon {
485
- position: absolute;
486
- top: 50%;
487
- left: 0.65rem;
488
- z-index: 1;
489
- width: 0.85rem;
490
- height: 0.85rem;
491
- transform: translateY(-50%);
492
- color: var(--bridge-helper-muted-fg);
493
- pointer-events: none;
494
- }
495
-
496
- .bridge-network-helper__search-input {
497
- width: 100%;
498
- height: 2rem;
499
- padding: 0 0.7rem 0 1.9rem;
500
- border-radius: 0.65rem;
501
- border: 1px solid color-mix(in oklab, var(--bridge-helper-border) 45%, transparent);
502
- background: color-mix(in oklab, var(--bridge-helper-bg) 80%, transparent);
503
- color: var(--bridge-helper-fg);
504
- font: inherit;
505
- font-size: 0.75rem;
506
- outline: none;
507
- }
508
-
509
- .bridge-network-helper__search-input:focus-visible {
510
- border-color: color-mix(in oklab, var(--bridge-helper-accent) 45%, var(--bridge-helper-border));
511
- box-shadow: 0 0 0 2px color-mix(in oklab, var(--bridge-helper-accent) 14%, transparent);
512
- }
513
-
514
- .bridge-network-helper__list-scroll {
515
- min-height: 0;
516
- flex: 1;
517
- overflow-x: hidden;
518
- overflow-y: auto;
519
- scrollbar-gutter: stable;
520
- }
521
-
522
- .bridge-network-helper__list-status {
523
- display: flex;
524
- align-items: center;
525
- justify-content: center;
526
- padding: 1.25rem 0.75rem;
527
- font-size: 0.75rem;
528
- color: var(--bridge-helper-muted-fg);
529
- }
530
-
531
- .bridge-network-helper__list-status.is-error {
532
- color: #e13535;
533
- }
534
-
535
- .bridge-network-helper__people {
536
- margin: 0;
537
- padding: 0;
538
- list-style: none;
539
- }
540
-
541
- .bridge-network-helper__person {
542
- display: flex;
543
- align-items: flex-start;
544
- gap: 0.65rem;
545
- padding: 0.55rem 0.6rem;
546
- border-radius: 0.75rem;
547
- animation: bridgeHelperPersonEnter 380ms cubic-bezier(0.22, 1, 0.36, 1) both;
548
- }
549
-
550
- .bridge-network-helper__person:hover {
551
- background: color-mix(in oklab, var(--bridge-helper-muted) 55%, transparent);
552
- }
553
-
554
- .bridge-network-helper__person--skeleton {
555
- animation: none;
556
- }
557
-
558
- .bridge-network-helper__person-copy {
559
- min-width: 0;
560
- flex: 1;
561
- }
562
-
563
- .bridge-network-helper__person-name,
564
- .bridge-network-helper__person-meta {
565
- margin: 0;
566
- overflow: hidden;
567
- text-overflow: ellipsis;
568
- white-space: nowrap;
569
- }
570
-
571
- .bridge-network-helper__person-name {
572
- font-size: 0.875rem;
573
- font-weight: 500;
574
- color: var(--bridge-helper-fg);
575
- }
576
-
577
- .bridge-network-helper__person-meta {
578
- font-size: 11px;
579
- color: color-mix(in oklab, var(--bridge-helper-muted-fg) 80%, transparent);
580
- }
581
-
582
- .bridge-network-helper__share-link {
583
- display: inline-flex;
584
- max-width: 100%;
585
- align-items: center;
586
- gap: 0.35rem;
587
- margin-top: 0.2rem;
588
- padding: 0;
589
- border: 0;
590
- background: transparent;
591
- color: var(--bridge-helper-muted-fg);
592
- font: inherit;
593
- font-size: 0.6875rem;
594
- line-height: 1.25;
595
- cursor: pointer;
596
- text-align: left;
597
- }
598
-
599
- .bridge-network-helper__share-link-text {
600
- min-width: 0;
601
- overflow: hidden;
602
- text-overflow: ellipsis;
603
- white-space: nowrap;
604
- color: var(--bridge-helper-accent);
605
- }
606
-
607
- .bridge-network-helper__share-link-icon {
608
- width: 0.75rem;
609
- height: 0.75rem;
610
- flex-shrink: 0;
611
- }
612
-
613
- .bridge-network-helper__share-link-icon.is-copied,
614
- .bridge-network-helper__person-menu-icon.is-copied {
615
- color: #0ea02e;
616
- }
617
-
618
- .bridge-network-helper__person-menu {
619
- display: inline-flex;
620
- width: 1.5rem;
621
- height: 1.5rem;
622
- flex-shrink: 0;
623
- align-items: center;
624
- justify-content: center;
625
- margin-top: 0.1rem;
626
- border: 0;
627
- border-radius: 9999px;
628
- background: transparent;
629
- padding: 0;
630
- color: color-mix(in oklab, var(--bridge-helper-muted-fg) 70%, transparent);
631
- cursor: pointer;
632
- }
633
-
634
- .bridge-network-helper__person-menu:hover,
635
- .bridge-network-helper__person-menu[data-state="open"] {
636
- color: var(--bridge-helper-fg);
637
- background: color-mix(in oklab, var(--bridge-helper-muted) 70%, transparent);
638
- }
639
-
640
- .bridge-network-helper__person-menu-content {
641
- position: fixed;
642
- z-index: 60;
643
- width: 15.5rem;
644
- overflow: hidden;
645
- border-radius: 0.9rem;
646
- border: 1px solid color-mix(in oklab, var(--bridge-helper-border) 55%, transparent);
647
- background: var(--bridge-helper-bg);
648
- padding: 0.35rem;
649
- box-shadow: 0 10px 28px rgba(15, 23, 42, 0.12);
650
- }
651
-
652
- .bridge-network-helper__person-menu-item {
653
- display: flex;
654
- width: 100%;
655
- align-items: center;
656
- gap: 0.7rem;
657
- border: 0;
658
- border-radius: 0.65rem;
659
- background: transparent;
660
- padding: 0.65rem 0.75rem;
661
- color: color-mix(in oklab, var(--bridge-helper-fg) 78%, transparent);
662
- font: inherit;
663
- font-size: 0.8125rem;
664
- line-height: 1.2;
665
- text-align: left;
666
- text-decoration: none;
667
- cursor: pointer;
668
- }
669
-
670
- .bridge-network-helper__person-menu-item.has-description {
671
- align-items: flex-start;
672
- }
673
-
674
- .bridge-network-helper__person-menu-item:hover,
675
- .bridge-network-helper__person-menu-item:focus-visible {
676
- background: color-mix(in oklab, var(--bridge-helper-muted) 55%, transparent);
677
- color: var(--bridge-helper-fg);
678
- }
679
-
680
- .bridge-network-helper__person-menu-icon {
681
- width: 1rem;
682
- height: 1rem;
683
- flex-shrink: 0;
684
- color: color-mix(in oklab, var(--bridge-helper-fg) 62%, transparent);
685
- }
686
-
687
- .bridge-network-helper__person-menu-icon svg,
688
- .bridge-network-helper__person-menu-item > svg {
689
- width: 1rem;
690
- height: 1rem;
691
- flex-shrink: 0;
692
- }
693
-
694
- .bridge-network-helper__person-menu-label,
695
- .bridge-network-helper__person-menu-description {
696
- display: block;
697
- }
698
-
699
- .bridge-network-helper__person-menu-description {
700
- margin-top: 0.125rem;
701
- font-size: 11px;
702
- font-weight: 400;
703
- line-height: 1.35;
704
- color: var(--bridge-helper-muted-fg);
705
- }
706
-
707
- .bridge-network-helper__load-more {
708
- height: 1px;
709
- width: 100%;
710
- }
711
-
712
- .bridge-network-helper__skeleton {
713
- display: block;
714
- border-radius: 9999px;
715
- background: color-mix(in oklab, var(--bridge-helper-muted) 80%, transparent);
716
- }
717
-
718
- .bridge-network-helper__skeleton--avatar {
719
- width: 2rem;
720
- height: 2rem;
721
- flex-shrink: 0;
722
- }
723
-
724
- .bridge-network-helper__skeleton--menu {
725
- width: 1.5rem;
726
- height: 1.5rem;
727
- flex-shrink: 0;
728
- }
729
-
730
- .bridge-network-helper__skeleton--line {
731
- height: 0.625rem;
732
- width: 9rem;
733
- margin-top: 0.35rem;
734
- }
735
-
736
- .bridge-network-helper__skeleton--line.is-name {
737
- height: 0.875rem;
738
- width: 7rem;
739
- margin-top: 0;
740
- }
741
-
742
- .bridge-network-helper__skeleton--line.is-long {
743
- width: 10rem;
744
- }
745
-
746
- .bridge-network-helper-avatar {
747
- position: relative;
748
- display: inline-block;
749
- flex-shrink: 0;
750
- }
751
-
752
- .bridge-network-helper-avatar--sm {
753
- width: 1.5rem;
754
- height: 1.5rem;
755
- font-size: 9px;
756
- }
757
-
758
- .bridge-network-helper-avatar--md {
759
- width: 2rem;
760
- height: 2rem;
761
- font-size: 10px;
762
- }
763
-
764
- .bridge-network-helper-avatar__face {
765
- display: block;
766
- width: 100%;
767
- height: 100%;
768
- overflow: hidden;
769
- border-radius: 9999px;
770
- background: var(--bridge-helper-muted);
771
- box-shadow: 0 0 0 2px var(--bridge-helper-bg);
772
- }
773
-
774
- .bridge-network-helper-avatar__face img,
775
- .bridge-network-helper-avatar__fallback {
776
- display: flex;
777
- width: 100%;
778
- height: 100%;
779
- align-items: center;
780
- justify-content: center;
781
- object-fit: cover;
782
- object-position: top;
783
- font-weight: 600;
784
- color: white;
785
- }
786
-
787
- .bridge-network-helper-avatar__fallback.is-0 { background: linear-gradient(to bottom right, #475569, #1e293b); }
788
- .bridge-network-helper-avatar__fallback.is-1 { background: linear-gradient(to bottom right, #0038ff, #1e4fd6); }
789
- .bridge-network-helper-avatar__fallback.is-2 { background: linear-gradient(to bottom right, #7450da, #5a3fb8); }
790
- .bridge-network-helper-avatar__fallback.is-3 { background: linear-gradient(to bottom right, #0ea02e, #0b7d24); }
791
- .bridge-network-helper-avatar__fallback.is-4 { background: linear-gradient(to bottom right, #e19500, #c47f00); }
792
- .bridge-network-helper-avatar__fallback.is-5 { background: linear-gradient(to bottom right, #e13535, #b82b2b); }
793
-
794
- .bridge-network-helper-avatar__badge {
795
- position: absolute;
796
- right: 0;
797
- bottom: 0;
798
- display: flex;
799
- width: 0.5rem;
800
- height: 0.5rem;
801
- align-items: center;
802
- justify-content: center;
803
- border-radius: 9999px;
804
- background: var(--bridge-helper-accent);
805
- color: white;
806
- box-shadow: 0 0 0 1px var(--bridge-helper-bg);
807
- }
808
-
809
- .bridge-network-helper-avatar--md .bridge-network-helper-avatar__badge {
810
- width: 0.625rem;
811
- height: 0.625rem;
812
- box-shadow: 0 0 0 1.5px var(--bridge-helper-bg);
813
- }
814
-
815
- .bridge-network-helper-avatar__badge svg {
816
- width: 0.35rem;
817
- height: 0.35rem;
818
- stroke-width: 3.5;
819
- }
820
-
821
- @keyframes bridgeHelperIconEnter {
822
- 0% { opacity: 0; transform: scale(0.62); }
823
- 100% { opacity: 1; transform: scale(1); }
824
- }
825
-
826
- @keyframes bridgeHelperPersonEnter {
827
- 0% { opacity: 0; transform: translateY(6px); }
828
- 100% { opacity: 1; transform: translateY(0); }
829
- }
830
-
831
- @media (prefers-reduced-motion: reduce) {
832
- .bridge-network-helper .dot,
833
- .bridge-network-helper__icon-btn,
834
- .bridge-network-helper__person {
835
- animation: none !important;
836
- }
837
-
838
- .bridge-network-helper__list,
839
- .bridge-network-helper__shell,
840
- .bridge-network-helper__note-reveal,
841
- .bridge-network-helper__note-reveal-inner {
842
- transition: none !important;
843
- }
844
-
845
- .bridge-network-helper__note-reveal-inner {
846
- transform: none !important;
847
- }
848
- }