Margin is an open annotation layer for the internet. Powered by the AT Protocol. margin.at
extension web atproto comments
111
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v0.1.10 335 lines 8.0 kB view raw
1export function HeartIcon({ filled = false, size = 18 }) { 2 return filled ? ( 3 <svg 4 width={size} 5 height={size} 6 viewBox="0 0 24 24" 7 fill="currentColor" 8 stroke="none" 9 > 10 <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" /> 11 </svg> 12 ) : ( 13 <svg 14 width={size} 15 height={size} 16 viewBox="0 0 24 24" 17 fill="none" 18 stroke="currentColor" 19 strokeWidth="2" 20 strokeLinecap="round" 21 strokeLinejoin="round" 22 > 23 <path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z" /> 24 </svg> 25 ); 26} 27 28export function MessageIcon({ size = 18 }) { 29 return ( 30 <svg 31 width={size} 32 height={size} 33 viewBox="0 0 24 24" 34 fill="none" 35 stroke="currentColor" 36 strokeWidth="2" 37 strokeLinecap="round" 38 strokeLinejoin="round" 39 > 40 <path d="m3 21 1.9-5.7a8.5 8.5 0 1 1 3.8 3.8z" /> 41 </svg> 42 ); 43} 44 45export function ShareIcon({ size = 18 }) { 46 return ( 47 <svg 48 width={size} 49 height={size} 50 viewBox="0 0 24 24" 51 fill="none" 52 stroke="currentColor" 53 strokeWidth="2" 54 strokeLinecap="round" 55 strokeLinejoin="round" 56 > 57 <path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8" /> 58 <polyline points="16 6 12 2 8 6" /> 59 <line x1="12" x2="12" y1="2" y2="15" /> 60 </svg> 61 ); 62} 63 64export function TrashIcon({ size = 18 }) { 65 return ( 66 <svg 67 width={size} 68 height={size} 69 viewBox="0 0 24 24" 70 fill="none" 71 stroke="currentColor" 72 strokeWidth="2" 73 strokeLinecap="round" 74 strokeLinejoin="round" 75 > 76 <path d="M3 6h18" /> 77 <path d="M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6" /> 78 <path d="M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2" /> 79 </svg> 80 ); 81} 82 83export function LinkIcon({ size = 18 }) { 84 return ( 85 <svg 86 width={size} 87 height={size} 88 viewBox="0 0 24 24" 89 fill="none" 90 stroke="currentColor" 91 strokeWidth="2" 92 strokeLinecap="round" 93 strokeLinejoin="round" 94 > 95 <path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" /> 96 <path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" /> 97 </svg> 98 ); 99} 100 101export function ExternalLinkIcon({ size = 14 }) { 102 return ( 103 <svg 104 width={size} 105 height={size} 106 viewBox="0 0 24 24" 107 fill="none" 108 stroke="currentColor" 109 strokeWidth="2" 110 strokeLinecap="round" 111 strokeLinejoin="round" 112 > 113 <path d="M15 3h6v6" /> 114 <path d="M10 14 21 3" /> 115 <path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" /> 116 </svg> 117 ); 118} 119 120export function PenIcon({ size = 18 }) { 121 return ( 122 <svg 123 width={size} 124 height={size} 125 viewBox="0 0 24 24" 126 fill="none" 127 stroke="currentColor" 128 strokeWidth="2" 129 strokeLinecap="round" 130 strokeLinejoin="round" 131 > 132 <path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z" /> 133 </svg> 134 ); 135} 136 137export function HighlightIcon({ size = 18 }) { 138 return ( 139 <svg 140 width={size} 141 height={size} 142 viewBox="0 0 24 24" 143 fill="none" 144 stroke="currentColor" 145 strokeWidth="2" 146 strokeLinecap="round" 147 strokeLinejoin="round" 148 > 149 <path d="m9 11-6 6v3h9l3-3" /> 150 <path d="m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4" /> 151 </svg> 152 ); 153} 154 155export function BookmarkIcon({ size = 18 }) { 156 return ( 157 <svg 158 width={size} 159 height={size} 160 viewBox="0 0 24 24" 161 fill="none" 162 stroke="currentColor" 163 strokeWidth="2" 164 strokeLinecap="round" 165 strokeLinejoin="round" 166 > 167 <path d="m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z" /> 168 </svg> 169 ); 170} 171 172export function TagIcon({ size = 18 }) { 173 return ( 174 <svg 175 width={size} 176 height={size} 177 viewBox="0 0 24 24" 178 fill="none" 179 stroke="currentColor" 180 strokeWidth="2" 181 strokeLinecap="round" 182 strokeLinejoin="round" 183 > 184 <path d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z" /> 185 <circle cx="7.5" cy="7.5" r=".5" fill="currentColor" /> 186 </svg> 187 ); 188} 189 190export function AlertIcon({ size = 18 }) { 191 return ( 192 <svg 193 width={size} 194 height={size} 195 viewBox="0 0 24 24" 196 fill="none" 197 stroke="currentColor" 198 strokeWidth="2" 199 strokeLinecap="round" 200 strokeLinejoin="round" 201 > 202 <circle cx="12" cy="12" r="10" /> 203 <line x1="12" x2="12" y1="8" y2="12" /> 204 <line x1="12" x2="12.01" y1="16" y2="16" /> 205 </svg> 206 ); 207} 208 209export function FileTextIcon({ size = 18 }) { 210 return ( 211 <svg 212 width={size} 213 height={size} 214 viewBox="0 0 24 24" 215 fill="none" 216 stroke="currentColor" 217 strokeWidth="2" 218 strokeLinecap="round" 219 strokeLinejoin="round" 220 > 221 <path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" /> 222 <path d="M14 2v4a2 2 0 0 0 2 2h4" /> 223 <path d="M10 9H8" /> 224 <path d="M16 13H8" /> 225 <path d="M16 17H8" /> 226 </svg> 227 ); 228} 229 230export function SearchIcon({ size = 18 }) { 231 return ( 232 <svg 233 width={size} 234 height={size} 235 viewBox="0 0 24 24" 236 fill="none" 237 stroke="currentColor" 238 strokeWidth="2" 239 strokeLinecap="round" 240 strokeLinejoin="round" 241 > 242 <circle cx="11" cy="11" r="8" /> 243 <path d="m21 21-4.3-4.3" /> 244 </svg> 245 ); 246} 247 248export function InboxIcon({ size = 18 }) { 249 return ( 250 <svg 251 width={size} 252 height={size} 253 viewBox="0 0 24 24" 254 fill="none" 255 stroke="currentColor" 256 strokeWidth="2" 257 strokeLinecap="round" 258 strokeLinejoin="round" 259 > 260 <polyline points="22 12 16 12 14 15 10 15 8 12 2 12" /> 261 <path d="M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" /> 262 </svg> 263 ); 264} 265 266export function BlueskyIcon({ size = 18, color = "currentColor" }) { 267 return ( 268 <svg 269 xmlns="http://www.w3.org/2000/svg" 270 viewBox="0 0 512 512" 271 width={size} 272 height={size} 273 > 274 <path 275 fill={color} 276 d="M111.8 62.2C170.2 105.9 233 194.7 256 242.4c23-47.6 85.8-136.4 144.2-180.2c42.1-31.6 110.3-56 110.3 21.8c0 15.5-8.9 130.5-14.1 149.2C478.2 298 412 314.6 353.1 304.5c102.9 17.5 129.1 75.5 72.5 133.5c-107.4 110.2-154.3-27.6-166.3-62.9l0 0c-1.7-4.9-2.6-7.8-3.3-7.8s-1.6 3-3.3 7.8l0 0c-12 35.3-59 173.1-166.3 62.9c-56.5-58-30.4-116 72.5-133.5C100 314.6 33.8 298 15.7 233.1C10.4 214.4 1.5 99.4 1.5 83.9c0-77.8 68.2-53.4 110.3-21.8z" 277 /> 278 </svg> 279 ); 280} 281 282export function LogoutIcon({ size = 18 }) { 283 return ( 284 <svg 285 width={size} 286 height={size} 287 viewBox="0 0 24 24" 288 fill="none" 289 stroke="currentColor" 290 strokeWidth="2" 291 strokeLinecap="round" 292 strokeLinejoin="round" 293 > 294 <path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" /> 295 <polyline points="16 17 21 12 16 7" /> 296 <line x1="21" x2="9" y1="12" y2="12" /> 297 </svg> 298 ); 299} 300 301export function BellIcon({ size = 18 }) { 302 return ( 303 <svg 304 width={size} 305 height={size} 306 viewBox="0 0 24 24" 307 fill="none" 308 stroke="currentColor" 309 strokeWidth="2" 310 strokeLinecap="round" 311 strokeLinejoin="round" 312 > 313 <path d="M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9" /> 314 <path d="M10.3 21a1.94 1.94 0 0 0 3.4 0" /> 315 </svg> 316 ); 317} 318 319export function ReplyIcon({ size = 18 }) { 320 return ( 321 <svg 322 width={size} 323 height={size} 324 viewBox="0 0 24 24" 325 fill="none" 326 stroke="currentColor" 327 strokeWidth="2" 328 strokeLinecap="round" 329 strokeLinejoin="round" 330 > 331 <polyline points="9 17 4 12 9 7" /> 332 <path d="M20 18v-2a4 4 0 0 0-4-4H4" /> 333 </svg> 334 ); 335}