Write on the margins of the internet. Powered by the AT Protocol. margin.at
extension web atproto comments
at main 8.5 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} 336 337export function AturiIcon({ size = 18 }) { 338 return ( 339 <svg 340 width={size} 341 height={size} 342 viewBox="0 0 24 24" 343 fill="none" 344 stroke="currentColor" 345 strokeWidth="2" 346 strokeLinecap="round" 347 strokeLinejoin="round" 348 > 349 <path d="M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z" /> 350 <path d="M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12" /> 351 </svg> 352 ); 353}