2026-05-06 13:48:54 +02:00

1701 lines
91 KiB
TypeScript

// frontend\src\components\ui\Icons.tsx
'use client'
import type { JSX, ReactNode, SVGProps } from 'react'
export type IconProps = SVGProps<SVGSVGElement> & {
title?: string
}
type IconComponent = (props: IconProps) => JSX.Element
function iconClassName(className: string | undefined, extra: string) {
return [className, extra].filter(Boolean).join(' ')
}
function IconBase({
title,
children,
viewBox = '0 0 24 24',
className,
...props
}: IconProps & {
children: ReactNode
}) {
return (
<svg
viewBox={viewBox}
fill="none"
xmlns="http://www.w3.org/2000/svg"
className={className}
stroke="currentColor"
strokeWidth={1.8}
strokeLinecap="round"
strokeLinejoin="round"
aria-hidden={title ? undefined : true}
role={title ? 'img' : undefined}
{...props}
>
{title ? <title>{title}</title> : null}
{children}
</svg>
)
}
/* ---------------------------------- */
/* Einzelne Icons */
/* ---------------------------------- */
export function FemaleBreastIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 211 158"
>
<g transform="translate(0,158) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M355 1308 c-54 -168 -88 -256 -140 -363 -35 -71 -71 -157 -80 -190 -41 -159 4 -323 124 -448 86 -90 180 -137 307 -152 180 -20 387 90 471 252 15 29 30 53 33 53 3 0 18 -24 33 -53 41 -78 129 -162 213 -202 183 -89 393 -58 542 80 180 166 209 398 79 635 -42 77 -67 137 -117 285 -33 99 -39 110 -61 110 -16 0 -25 -6 -27 -20 -5 -33 75 -251 143 -391 75 -154 93 -230 76 -325 -24 -137 -117 -262 -240 -322 -63 -30 -72 -32 -181 -32 -109 0 -119 2 -183 32 -135 64 -228 194 -244 338 -8 66 -10 70 -33 70 -23 0 -25 -5 -37 -75 -25 -148 -113 -269 -242 -333 -62 -30 -71 -32 -181 -32 -108 0 -119 2 -180 31 -168 80 -261 240 -247 424 5 67 13 89 77 218 77 157 158 378 147 405 -7 20 -46 23 -52 5z" />
<path d="M506 579 c-20 -16 -26 -29 -26 -57 1 -43 16 -67 53 -81 78 -30 142 75 82 134 -30 31 -73 32 -109 4z" />
<path d="M1525 575 c-74 -73 35 -186 110 -115 52 49 16 140 -55 140 -19 0 -40 -9 -55 -25z" />
</g>
</IconBase>
)
}
export function ButtocksIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 221 260"
>
<g transform="translate(0,260) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M451 2388 c-5 -13 -15 -63 -21 -113 -16 -115 -48 -228 -107 -369 -93 -225 -127 -357 -143 -557 -17 -203 15 -444 95 -726 38 -133 117 -336 159 -407 l27 -46 289 0 c335 0 309 -9 331 112 7 38 15 68 19 68 4 0 12 -30 19 -68 22 -121 -4 -112 331 -112 l289 0 27 46 c42 71 121 274 159 407 80 282 112 523 95 726 -16 200 -50 332 -143 557 -59 141 -91 254 -107 369 -6 50 -16 100 -21 113 l-9 22 -640 0 -640 0 -9 -22z m1244 -155 c25 -136 43 -194 119 -385 76 -191 112 -332 125 -501 24 -291 -53 -670 -205 -1009 l-39 -88 -242 0 -242 0 -11 37 c-19 69 -49 269 -56 379 -7 114 6 291 32 449 23 136 19 131 65 92 116 -100 286 -140 438 -105 64 14 87 37 71 68 -10 19 -18 21 -48 16 -117 -20 -200 -18 -265 3 -119 40 -216 129 -269 248 -16 36 -23 74 -26 156 -4 92 -7 109 -23 118 -13 6 -25 6 -38 0 -16 -9 -19 -26 -23 -118 -3 -82 -10 -120 -26 -156 -53 -119 -150 -208 -268 -247 -54 -18 -80 -21 -147 -16 -45 3 -98 8 -119 12 -31 5 -38 3 -48 -16 -16 -31 7 -54 71 -68 152 -35 322 5 438 105 34 29 40 31 45 16 13 -45 36 -203 47 -332 14 -163 4 -328 -34 -521 l-22 -115 -246 -3 -246 -2 -48 111 c-229 537 -259 1020 -90 1432 74 181 114 305 137 425 l21 112 577 0 578 0 17 -97z m-575 -880 c14 -24 14 -35 0 -100 -8 -40 -17 -73 -21 -73 -3 0 -11 32 -18 71 -10 55 -10 76 -1 100 15 36 21 36 40 2z" />
</g>
</IconBase>
)
}
export function FemaleGenitaliaIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 145 251"
>
<g transform="translate(0,251) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M668 2270 c-133 -100 -276 -276 -358 -439 -46 -92 -106 -280 -126 -396 -23 -132 -23 -367 -1 -492 49 -271 172 -516 347 -693 78 -79 197 -170 222 -170 24 0 146 96 225 177 170 174 290 416 339 684 23 128 23 362 0 494 -20 116 -80 304 -126 396 -52 103 -135 222 -216 308 -80 85 -199 181 -224 181 -8 0 -45 -23 -82 -50z m109 -242 c5 -7 25 -51 43 -98 19 -47 80 -177 136 -290 132 -263 149 -321 148 -500 -1 -104 -6 -153 -23 -214 -41 -155 -125 -321 -240 -474 -82 -109 -95 -112 -152 -40 -221 279 -324 573 -291 831 15 123 35 176 150 406 54 108 113 234 131 281 38 96 46 110 71 110 10 0 22 -6 27 -12z" />
<path d="M717 1817 c-25 -58 -26 -65 -14 -106 23 -80 71 -81 94 -2 11 39 10 48 -14 107 -15 35 -29 64 -33 64 -3 0 -18 -28 -33 -63z" />
<path d="M572 1513 c-34 -71 -71 -164 -82 -207 -47 -184 -12 -385 101 -596 49 -90 148 -240 160 -240 4 0 32 37 63 83 161 243 225 429 213 626 -7 119 -32 202 -105 348 l-56 113 -34 -33 c-28 -27 -40 -32 -82 -32 -42 0 -54 5 -83 33 l-33 32 -62 -127z m248 -151 c97 -96 119 -395 43 -565 -32 -70 -63 -97 -113 -97 -50 0 -81 27 -113 97 -47 106 -60 262 -31 400 19 92 42 141 84 177 46 38 84 35 130 -12z" />
<path d="M711 1281 c-46 -89 -53 -316 -14 -430 48 -143 119 -59 130 155 12 224 -58 390 -116 275z" />
</g>
</IconBase>
)
}
export function FingeringIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 600 596"
>
<g
transform="translate(0,596) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M2930 5289 c-276 -40 -490 -290 -490 -572 0 -106 15 -170 60 -265 82 -172 245 -294 431 -323 148 -23 296 8 411 86 128 86 204 188 245 327 79 273 -39 559 -283 686 -124 64 -234 82 -374 61z" />
<path d="M2308 4552 c-52 -31 -114 -104 -145 -172 -23 -50 -44 -137 -68 -285 -28 -167 -73 -239 -167 -266 -24 -7 -47 -15 -51 -19 -14 -12 95 -42 169 -47 l72 -5 81 76 c59 55 105 87 165 116 84 41 84 41 119 113 68 139 71 181 18 251 -46 62 -97 163 -112 222 -6 24 -16 44 -23 44 -6 0 -32 -13 -58 -28z" />
<path d="M2810 3984 c-268 -25 -493 -112 -581 -226 -18 -24 -36 -45 -39 -48 -38 -34 -241 -429 -401 -780 -85 -186 -93 -210 -93 -265 0 -71 27 -131 78 -171 18 -15 134 -74 257 -131 276 -129 279 -130 290 -112 23 38 79 232 81 284 l3 58 -142 65 c-79 36 -143 69 -143 74 0 10 155 359 188 423 20 38 27 45 29 30 11 -65 42 -133 82 -177 52 -58 95 -82 178 -99 59 -12 103 -9 193 16 l25 7 -24 -20 c-67 -55 -207 -70 -300 -33 l-53 22 6 -28 c15 -71 28 -246 23 -323 -3 -66 -14 -112 -44 -200 -130 -370 -128 -365 -148 -364 -11 1 -146 50 -300 109 -472 180 -462 177 -537 177 -250 -2 -397 -304 -245 -504 29 -38 153 -141 272 -225 52 -36 291 -216 331 -248 17 -14 67 -51 110 -82 44 -32 147 -109 229 -173 484 -373 486 -374 584 -374 49 0 77 5 107 21 78 41 133 131 134 217 0 118 -34 162 -270 341 -79 61 -174 135 -210 165 -36 31 -132 109 -213 175 -81 66 -170 138 -197 160 -167 137 -265 226 -219 200 39 -23 681 -484 749 -538 75 -59 99 -77 106 -77 5 0 15 12 21 28 7 15 36 56 65 91 32 38 48 66 41 68 -29 10 -62 46 -73 78 -15 47 10 99 68 140 23 16 83 61 133 98 105 79 156 105 234 115 l55 7 176 235 175 235 -8 65 c-14 110 -9 248 13 375 l7 39 -27 -17 c-66 -44 -216 -36 -308 16 -45 24 -34 36 15 16 18 -8 66 -14 107 -14 60 0 86 5 130 26 76 36 133 96 160 169 12 33 26 58 30 55 4 -2 13 -26 20 -52 7 -27 21 -75 32 -108 11 -33 35 -120 53 -193 l34 -134 -69 -96 c-38 -54 -168 -227 -287 -386 l-218 -290 -72 -12 c-75 -12 -137 -42 -196 -93 -18 -16 -67 -51 -109 -80 -88 -59 -92 -63 -84 -96 11 -44 49 -43 138 4 56 30 76 36 69 24 -5 -10 -62 -81 -126 -158 -117 -142 -136 -175 -118 -204 22 -35 44 -23 129 66 76 80 83 86 84 61 0 -32 29 -51 64 -42 20 5 25 2 28 -18 3 -20 8 -23 45 -22 23 0 41 -2 39 -5 -2 -3 -22 -38 -45 -78 -36 -60 -41 -75 -31 -92 6 -12 21 -21 34 -21 19 0 41 24 104 113 74 103 569 769 641 862 232 298 322 418 335 444 40 77 30 156 -64 486 -70 247 -102 332 -185 500 -140 283 -234 357 -536 420 -108 23 -152 27 -349 30 -124 1 -245 1 -270 -1z" />
<path d="M4585 2273 c-38 -4 -102 -21 -140 -38 -36 -15 -148 -59 -155 -61 -5 -1 -44 -16 -100 -39 -39 -15 -246 -94 -270 -102 -8 -2 -63 -68 -121 -146 -59 -78 -153 -203 -209 -277 -183 -242 -182 -236 -28 -122 140 105 555 403 642 462 74 50 -91 -99 -274 -247 -36 -29 -74 -61 -85 -71 -11 -10 -54 -45 -95 -78 -41 -32 -77 -61 -80 -64 -3 -3 -25 -21 -50 -41 -25 -20 -55 -45 -67 -55 -12 -11 -54 -44 -93 -74 -274 -209 -321 -250 -346 -303 -64 -138 6 -299 150 -342 106 -32 146 -17 344 132 87 65 159 120 162 123 3 3 59 46 125 95 66 50 122 92 125 95 3 3 113 86 245 185 132 99 247 185 255 192 8 7 71 53 139 103 226 168 255 209 256 360 0 71 -4 93 -25 135 -43 85 -128 153 -213 170 -56 11 -61 12 -92 8z" />
</g>
</IconBase>
)
}
export function BlowjobIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.35]')}
viewBox="30 20 230 390"
>
<g
transform="translate(0,432) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M703 3936 c-174 -57 -260 -250 -185 -419 28 -62 103 -132 169 -157 245 -92 484 149 392 394 -25 68 -92 140 -157 168 -58 26 -162 33 -219 14z" />
<path d="M812 3271 c-60 -21 -114 -68 -143 -124 -11 -20 -94 -163 -184 -317 -112 -190 -165 -289 -165 -309 0 -23 31 -66 148 -205 81 -96 174 -209 207 -250 61 -77 87 -96 130 -96 15 0 42 -18 73 -47 l49 -48 -13 -355 c-9 -254 -22 -438 -44 -648 l-32 -293 24 -47 c42 -84 142 -112 222 -62 60 37 70 72 115 410 52 400 59 460 50 466 -4 2 -69 85 -143 184 -127 168 -136 183 -136 224 0 35 6 50 29 75 28 30 47 36 101 31 34 -3 58 -23 125 -103 32 -37 59 -66 62 -64 2 3 11 63 18 134 l15 128 -35 205 c-19 113 -51 302 -70 420 -67 404 -95 542 -120 586 -30 51 -83 92 -143 110 -58 18 -76 17 -140 -5z m-87 -770 c14 -85 23 -156 21 -158 -7 -7 -136 181 -136 197 0 18 83 137 87 124 1 -5 14 -78 28 -163z" />
<path d="M1580 2564 c-157 -60 -228 -142 -238 -274 -7 -111 39 -224 115 -278 16 -11 58 -30 93 -42 170 -57 341 27 391 192 48 156 -14 308 -153 379 -43 22 -173 36 -208 23z" />
<path d="M2055 2186 c-38 -16 -84 -82 -92 -130 -7 -46 20 -119 54 -146 15 -11 49 -27 77 -35 93 -27 151 -68 180 -127 15 -29 26 -70 26 -92 1 -41 1 -41 15 -15 25 46 48 187 43 268 -11 195 -166 337 -303 277z" />
<path d="M1603 1854 c-17 -9 -83 -69 -145 -135 -76 -80 -120 -119 -134 -119 -15 0 -46 30 -104 101 -45 55 -93 105 -106 111 -49 23 -113 -24 -100 -75 3 -12 31 -56 62 -97 217 -284 203 -269 251 -270 23 0 47 13 92 51 l61 51 0 -73 c0 -62 4 -77 26 -106 28 -37 72 -63 106 -63 13 0 42 9 66 20 l43 19 45 -62 c69 -94 124 -191 130 -228 4 -33 1 -36 -162 -168 -91 -73 -174 -147 -185 -165 -38 -62 -16 -158 44 -191 30 -16 64 -16 472 -8 484 9 489 10 515 72 9 23 9 38 0 66 -21 62 -58 72 -308 80 l-214 7 124 65 c67 36 134 75 146 87 52 46 77 133 60 209 -9 43 -25 65 -127 176 -64 69 -137 153 -162 186 -48 64 -136 209 -187 311 -61 121 -119 164 -219 164 -32 0 -72 -7 -90 -16z" />
</g>
</IconBase>
)
}
export function HandjobIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 204 230"
>
<g transform="translate(0,230) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M961 2075 c-55 -17 -98 -57 -123 -114 -18 -39 -20 -57 -13 -145 11 -161 -6 -146 159 -147 77 0 166 -4 196 -8 30 -5 57 -7 59 -5 3 2 -1 66 -8 142 -14 165 -33 212 -102 254 -55 33 -111 41 -168 23z" />
<path d="M207 1782 l-88 -88 3 -74 c4 -96 21 -110 73 -60 l35 34 0 -424 0 -424 -28 27 c-31 30 -67 35 -76 11 -3 -9 -6 -45 -6 -81 l0 -65 78 -80 c42 -44 85 -84 96 -90 15 -8 32 4 107 79 l89 89 0 66 c0 37 -3 73 -6 82 -9 24 -45 19 -76 -11 l-28 -27 0 424 0 424 33 -32 c18 -18 38 -32 45 -32 20 0 32 37 32 101 l0 62 -87 88 c-48 49 -92 89 -98 89 -6 0 -50 -40 -98 -88z" />
<path d="M798 1605 c-57 -32 -66 -108 -19 -155 l28 -29 104 5 c85 5 108 3 124 -10 18 -14 7 -15 -143 -16 -190 0 -224 -9 -248 -65 -8 -19 -12 -46 -8 -60 9 -37 59 -75 100 -75 24 0 34 -5 34 -15 0 -12 -14 -15 -66 -15 -59 0 -68 -3 -95 -29 -40 -41 -40 -91 0 -132 27 -26 36 -29 95 -29 52 0 66 -3 66 -15 0 -11 -12 -15 -51 -15 -43 0 -55 -5 -80 -29 -33 -34 -40 -91 -14 -128 17 -25 75 -44 118 -39 18 2 27 -1 27 -10 0 -8 -9 -14 -21 -14 -12 0 -37 -16 -56 -35 -31 -31 -35 -40 -30 -71 13 -80 50 -94 254 -94 112 0 211 7 338 25 133 18 597 65 641 65 2 0 4 166 4 369 l0 368 -127 6 c-158 6 -211 24 -320 108 -93 72 -169 112 -240 128 -29 6 -128 13 -220 16 -141 5 -172 3 -195 -10z" />
<path d="M1255 500 c-73 -10 -196 -19 -279 -19 l-148 -1 7 -37 c45 -241 342 -341 524 -177 58 52 97 127 107 202 l7 52 -44 -1 c-24 -1 -102 -10 -174 -19z" />
</g>
</IconBase>
)
}
export function SixtyNineIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.65]')}
viewBox="45 45 410 165"
>
<g transform="translate(0,262) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M2794 2030 c-72 -15 -162 -68 -239 -142 -41 -39 -75 -74 -75 -79 0 -4 19 1 43 11 85 39 155 21 264 -68 71 -58 104 -68 164 -52 81 22 130 100 116 185 -8 50 -33 81 -91 114 -57 33 -121 44 -182 31z" />
<path d="M3213 1780 c-85 -17 -177 -89 -219 -170 -26 -52 -30 -165 -9 -231 24 -72 110 -159 179 -182 63 -21 149 -22 210 -1 64 22 147 100 177 166 71 161 -20 356 -192 409 -65 20 -81 21 -146 9z" />
<path d="M1672 1714 c-29 -14 -65 -42 -80 -61 -15 -19 -103 -188 -197 -376 l-170 -342 -205 -7 c-365 -14 -433 -21 -474 -49 -40 -27 -70 -89 -60 -123 11 -37 46 -66 98 -81 72 -22 732 -21 824 0 120 28 123 31 280 273 126 194 147 222 181 235 63 26 179 45 313 52 122 7 127 7 140 -14 12 -19 21 -21 130 -21 l118 0 0 -32 c-1 -18 -11 -120 -24 -227 -18 -148 -21 -201 -13 -219 23 -49 43 -52 370 -52 361 0 388 3 428 42 56 57 27 149 -52 162 -19 3 -133 11 -254 17 -121 6 -220 12 -221 13 0 0 26 114 59 251 69 292 73 341 34 407 -32 55 -71 85 -133 104 -36 11 -87 11 -272 3 -263 -12 -297 -10 -523 36 -201 42 -230 43 -297 9z" />
<path d="M3632 1304 l-264 -175 -234 1 -233 1 -6 -23 c-27 -117 -35 -161 -32 -164 2 -3 94 -9 203 -15 109 -6 216 -15 237 -20 91 -23 132 -110 88 -185 -12 -20 -19 -39 -16 -42 8 -8 123 26 181 55 80 39 204 142 280 232 37 45 73 81 80 81 6 0 87 -64 179 -142 225 -193 241 -203 326 -203 61 0 72 3 95 27 40 40 45 118 12 190 -21 44 -56 82 -204 218 -267 246 -381 340 -412 340 -10 0 -136 -79 -280 -176z" />
<path d="M1335 1431 c-117 -56 -179 -153 -178 -276 0 -67 20 -136 43 -150 5 -3 61 97 125 225 129 258 129 258 10 201z" />
<path d="M1902 1125 c-159 -81 -188 -288 -57 -403 66 -59 84 -62 349 -62 132 0 257 3 277 6 l37 6 -16 28 c-15 25 -14 43 7 229 13 111 20 205 17 209 -4 4 -132 8 -284 10 l-277 3 -53 -26z" />
</g>
</IconBase>
)
}
export function CowgirlIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.35]')}
viewBox="45 15 350 270"
>
<g transform="translate(0,300) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M2253 2766 c-91 -30 -148 -80 -190 -171 -70 -151 -4 -326 151 -399 112 -53 245 -29 341 63 151 143 101 407 -93 493 -58 26 -154 32 -209 14z" />
<path d="M2672 2283 c-42 -20 -69 -55 -82 -104 -17 -62 2 -111 71 -185 33 -36 67 -80 75 -99 18 -45 18 -116 -1 -162 -20 -48 -19 -50 11 -22 42 39 114 139 147 204 39 77 48 182 23 250 -43 111 -152 164 -244 118z" />
<path d="M2255 2076 c-48 -22 -89 -73 -156 -196 -147 -269 -157 -302 -107 -378 30 -45 83 -67 145 -60 32 4 34 2 48 -46 43 -144 61 -386 34 -439 -8 -14 -99 -117 -202 -228 -104 -112 -195 -219 -203 -237 -22 -54 -18 -150 9 -202 40 -82 36 -81 482 -78 l390 3 55 30 c37 20 65 45 87 78 35 53 308 280 331 275 7 -2 91 -70 188 -153 97 -82 195 -160 217 -173 55 -30 143 -31 180 -2 32 26 51 81 44 131 -11 86 -40 120 -295 362 -291 273 -306 287 -336 287 -15 0 -139 -84 -322 -218 -398 -289 -416 -302 -442 -302 -12 0 -22 4 -22 8 0 4 69 59 153 122 153 113 194 155 215 219 21 61 13 103 -58 305 -79 223 -93 291 -110 521 -7 88 -19 184 -27 213 -17 63 -70 127 -128 153 -47 22 -127 24 -170 5z" />
<path d="M664 766 c-218 -71 -285 -346 -124 -506 148 -149 397 -105 490 85 35 70 35 189 2 257 -30 60 -87 117 -147 147 -58 29 -161 37 -221 17z" />
<path d="M1265 676 c-56 -25 -107 -78 -130 -133 -35 -83 -6 -202 66 -270 62 -59 82 -62 345 -63 132 0 246 -1 255 0 13 0 11 10 -13 56 -23 47 -28 70 -28 128 0 90 26 150 101 230 30 32 56 62 57 67 2 5 -127 9 -300 9 -296 0 -304 -1 -353 -24z" />
</g>
</IconBase>
)
}
export function CunnilingusIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.8]')}
viewBox="15 40 455 125"
>
<g transform="translate(0,204) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M3140 1498 c-23 -16 -68 -76 -133 -181 -94 -150 -100 -157 -131 -157 -22 0 -40 -8 -55 -24 -23 -25 -24 -44 -6 -103 6 -18 -7 -36 -76 -106 -46 -46 -117 -110 -157 -141 -41 -32 -87 -79 -104 -105 -27 -42 -29 -52 -26 -121 4 -89 26 -128 91 -162 57 -29 153 -29 342 1 163 25 232 25 419 -5 122 -19 159 -11 217 47 100 100 105 222 13 297 -92 75 -239 176 -272 187 -24 9 -46 10 -69 3 -31 -8 -38 -6 -79 27 -24 20 -44 43 -44 52 0 8 43 94 96 191 110 201 124 250 82 289 -37 34 -68 37 -108 11z m-125 -678 l29 -30 -47 0 -48 0 16 30 c9 17 17 30 18 30 2 0 16 -13 32 -30z" />
<path d="M2422 1199 c-96 -48 -154 -157 -138 -262 9 -59 58 -131 110 -162 75 -43 83 -42 166 26 113 91 200 181 200 204 0 64 -83 171 -156 201 -50 21 -132 18 -182 -7z" />
<path d="M1975 974 c-55 -14 -212 -52 -350 -84 -291 -68 -292 -68 -342 -114 -34 -30 -56 -38 -173 -66 -351 -83 -332 -80 -592 -80 -259 0 -275 -3 -317 -56 -26 -33 -28 -95 -4 -135 33 -55 55 -59 344 -59 374 0 698 23 864 61 72 16 137 32 145 34 11 4 19 -5 25 -27 6 -19 21 -38 35 -45 31 -16 640 -18 721 -3 97 19 129 83 68 134 -30 26 -31 26 -212 26 -100 0 -188 4 -195 9 -9 5 19 16 80 30 51 12 107 30 124 40 143 87 115 307 -44 351 -50 14 -62 12 -177 -16z" />
<path d="M3816 856 c-94 -35 -148 -106 -154 -202 -10 -146 87 -254 228 -254 155 0 264 142 225 292 -33 128 -180 208 -299 164z" />
<path d="M4229 645 c-36 -20 -59 -58 -59 -99 0 -56 16 -84 67 -116 98 -62 223 -31 348 85 33 31 51 53 40 50 -61 -21 -81 -24 -116 -16 -38 9 -79 33 -137 83 -37 32 -98 37 -143 13z" />
</g>
</IconBase>
)
}
export function FacesittingSexIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.25]')}
viewBox="0 0 24 24"
>
{/* sitzende Person oben */}
<circle cx="12" cy="4.2" r="1.8" fill="currentColor" stroke="none" />
<path d="M10.2 6.8C9.2 8.2 8.8 9.8 9 11.6" />
<path d="M13.8 6.8C14.8 8.2 15.2 9.8 15 11.6" />
<path d="M8.5 10.6C10.4 11.8 13.6 11.8 15.5 10.6" />
<path d="M9.1 11.7L6.4 14.2" />
<path d="M14.9 11.7L17.6 14.2" />
{/* Gesicht unten */}
<circle cx="12" cy="17.1" r="3.2" />
<circle cx="10.8" cy="16.3" r="0.35" fill="currentColor" stroke="none" />
<circle cx="13.2" cy="16.3" r="0.35" fill="currentColor" stroke="none" />
<path d="M10.7 18.3C11.5 18.8 12.5 18.8 13.3 18.3" />
{/* Kontakt / Richtung */}
<path d="M10.4 13.2C11 12.7 13 12.7 13.6 13.2" />
</IconBase>
)
}
export function ProneBoneIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.18]')}
viewBox="0 0 215 167"
>
<g
transform="translate(0,167) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M1062 1383 c-90 -44 -109 -175 -34 -246 15 -14 48 -31 73 -38 43 -11 50 -10 95 12 92 45 119 156 57 230 -50 59 -124 75 -191 42z" />
<path d="M1394 1162 c-85 -41 -107 -100 -103 -282 1 -69 -1 -133 -6 -144 -5 -11 -1 -56 10 -115 20 -108 28 -131 40 -111 6 9 12 7 25 -10 9 -12 32 -25 50 -29 32 -6 35 -11 59 -86 l26 -80 174 -3 c119 -2 178 1 187 9 18 14 18 63 1 77 -7 6 -69 16 -137 22 -68 6 -127 14 -131 18 -4 4 -21 87 -37 184 -17 98 -36 186 -42 197 -5 11 -26 25 -45 32 -50 18 -45 38 8 32 148 -14 219 190 96 278 -44 31 -121 36 -175 11z" />
<path d="M1075 1060 c-11 -4 -30 -18 -42 -31 -43 -48 -284 -405 -289 -429 -3 -14 -7 -30 -9 -37 -2 -6 -31 -30 -64 -52 l-60 -41 -156 0 c-117 0 -163 -4 -184 -15 -49 -25 -56 -78 -15 -116 l26 -24 401 0 c396 0 403 0 442 22 22 12 45 26 52 31 9 6 4 37 -22 131 -18 68 -35 124 -37 126 -2 1 -27 -8 -56 -21 -41 -19 -56 -32 -69 -61 -10 -21 -18 -39 -18 -39 0 -1 -15 -5 -34 -9 -33 -7 -33 -7 50 95 46 56 94 114 106 128 l21 27 6 -40 c10 -66 97 -372 109 -384 17 -17 52 -13 72 9 18 19 17 26 -13 203 -17 100 -34 236 -38 302 -3 66 -11 136 -18 155 -20 61 -99 96 -161 70z" />
</g>
</IconBase>
)
}
export function SittingSexIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.15]')}
viewBox="0 0 24 24"
>
{/* sitzende Person */}
<circle cx="12" cy="4.1" r="1.6" fill="currentColor" stroke="none" />
<path d="M10.2 6.7C9.6 8.1 9.3 9.6 9.6 11.1" />
<path d="M13.8 6.7C14.4 8.1 14.7 9.6 14.4 11.1" />
<path d="M8.2 11.7C10.1 12.8 13.9 12.8 15.8 11.7" />
<path d="M9 12.4L6.3 16.5" />
<path d="M15 12.4L17.7 16.5" />
{/* zweite Person unten / Schoß */}
<circle cx="12" cy="18.5" r="1.5" fill="currentColor" stroke="none" />
<path d="M8 18.1C9.2 16.6 10.5 15.9 12 15.9C13.5 15.9 14.8 16.6 16 18.1" />
<path d="M8.8 20.6H15.2" />
{/* Kontakt */}
<path d="M10.4 14.4C11.2 13.9 12.8 13.9 13.6 14.4" />
</IconBase>
)
}
export function SpooningSexIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.1]')}
viewBox="0 0 24 24"
>
{/* hintere Person */}
<circle cx="6.1" cy="7.7" r="1.5" fill="currentColor" stroke="none" />
<path d="M7.4 8.9C9.6 9.3 11.5 10.5 12.8 12.4" />
<path d="M5.3 11.7C7.1 12.2 8.9 13.1 10.4 14.4" />
<path d="M8.9 16.9C10.3 16.8 11.8 17.1 13.1 17.8" />
{/* vordere Person */}
<circle cx="10.2" cy="6.3" r="1.5" fill="currentColor" stroke="none" />
<path d="M11.5 7.5C14 8.1 16 9.6 17.3 12" />
<path d="M9.4 10.4C11.4 10.9 13.3 12.1 14.7 13.8" />
<path d="M13.1 16.2C14.8 16.2 16.4 16.6 17.9 17.5" />
{/* umarmender Arm */}
<path d="M6.6 12.4C8.8 12.1 11 12.8 12.7 14.3" />
<path d="M12.7 14.3L14.4 13.7" />
</IconBase>
)
}
export function DoggyIcon(props: IconProps) {
return (
<IconBase {...props} viewBox="25 20 285 275">
<g transform="translate(0,322) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M1251 2965 c-129 -36 -221 -159 -221 -296 0 -119 91 -248 201 -284 113 -38 251 -5 326 78 58 65 78 120 77 212 -1 95 -17 137 -77 202 -79 86 -194 119 -306 88z" />
<path d="M1074 2314 c-65 -23 -120 -76 -143 -139 -22 -58 -153 -470 -233 -730 -56 -181 -56 -206 -8 -292 25 -45 35 -84 65 -279 19 -125 35 -237 35 -250 l0 -24 -182 0 c-207 0 -238 -8 -295 -73 -57 -65 -53 -154 9 -214 62 -60 77 -63 431 -70 178 -3 335 -3 350 1 48 12 57 48 57 218 0 84 -9 262 -19 396 l-19 242 24 83 c81 267 127 413 133 420 4 4 15 -16 24 -45 14 -43 43 -83 157 -213 267 -304 302 -331 375 -301 70 30 83 89 34 156 -38 52 -28 63 51 55 188 -18 183 -18 219 7 58 39 76 72 76 137 -1 95 -51 147 -153 157 -85 9 -150 -15 -213 -78 -27 -27 -59 -68 -70 -91 l-21 -41 -22 30 c-11 16 -31 40 -44 53 -13 13 -49 57 -79 98 -53 73 -55 77 -115 301 -33 125 -67 254 -76 287 -44 170 -191 254 -348 199z" />
<path d="M2485 1737 c-103 -34 -171 -97 -205 -187 -75 -202 71 -415 283 -413 267 3 401 313 222 511 -71 79 -207 119 -300 89z" />
<path d="M1383 1280 c-58 -12 -95 -33 -133 -76 -67 -77 -76 -153 -36 -294 20 -71 76 -377 76 -418 0 -6 -10 -12 -22 -12 -65 -1 -68 -5 -68 -99 0 -54 -5 -96 -14 -113 -12 -23 -12 -27 1 -32 8 -3 94 -6 192 -6 242 0 221 -27 221 286 0 229 1 245 18 241 9 -3 86 -16 171 -29 l153 -23 25 -50 c72 -144 179 -184 272 -101 l24 21 -6 -35 c-18 -107 -29 -230 -23 -253 11 -45 48 -49 384 -40 l304 8 29 33 c32 36 37 67 14 99 -22 32 -64 39 -280 53 -104 7 -193 14 -196 16 -3 1 12 97 32 211 21 114 38 222 39 239 0 45 -49 135 -89 161 -51 34 -93 37 -238 18 -91 -12 -158 -16 -213 -11 l-80 6 -43 -45 c-41 -43 -46 -45 -98 -45 -66 1 -108 24 -169 95 -104 120 -185 205 -194 204 -6 -1 -30 -5 -53 -9z" />
</g>
</IconBase>
)
}
export function MissionaryIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.55]')}
viewBox="25 35 415 195"
>
<g transform="translate(0,266) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M2750 2166 c-72 -19 -117 -45 -156 -88 -78 -86 -103 -208 -65 -309 64 -170 253 -252 411 -178 72 34 117 79 153 157 26 57 29 71 25 135 -9 141 -90 240 -228 281 -63 19 -79 19 -140 2z" />
<path d="M2194 1771 c-30 -14 -385 -243 -413 -267 -10 -8 173 -420 186 -417 5 1 92 47 192 102 101 56 187 99 191 96 4 -2 13 -18 20 -34 10 -26 9 -36 -9 -74 -12 -24 -21 -61 -21 -84 l0 -40 -167 -7 c-93 -4 -183 -8 -201 -9 l-34 -2 -104 235 c-57 129 -104 239 -104 245 0 5 23 25 51 43 28 19 47 37 43 42 -5 4 -54 33 -110 64 -117 65 -166 72 -225 33 -47 -31 -82 -101 -75 -152 3 -22 26 -218 51 -435 25 -217 53 -419 61 -447 36 -128 178 -182 366 -138 177 41 378 65 622 75 219 10 256 9 288 -4 88 -37 163 27 146 124 -1 8 4 35 11 60 10 36 11 56 1 98 -15 67 -50 108 -149 175 -42 28 -79 55 -83 61 -7 10 -60 143 -173 434 -28 75 -60 138 -79 160 -66 75 -192 104 -282 63z" />
<path d="M1360 1199 c-16 -23 -35 -61 -41 -83 -6 -23 -14 -48 -18 -55 -7 -14 -165 -131 -270 -202 l-44 -29 -317 0 c-312 0 -318 0 -350 -23 -75 -50 -95 -143 -48 -215 47 -70 53 -71 455 -78 l358 -7 196 95 196 95 -28 249 c-16 137 -30 258 -31 268 -5 34 -26 28 -58 -15z" />
<path d="M3222 1154 c-136 -42 -233 -205 -203 -343 41 -191 223 -297 407 -234 67 23 154 110 177 177 67 197 -61 399 -261 411 -44 3 -85 -1 -120 -11z" />
<path d="M3785 911 c-48 -12 -82 -39 -105 -85 -40 -84 -17 -152 72 -213 122 -81 280 -41 450 116 38 35 67 65 66 67 -2 1 -30 -6 -62 -17 -90 -31 -154 -12 -248 70 -45 40 -104 72 -130 70 -7 -1 -27 -4 -43 -8z" />
</g>
</IconBase>
)
}
export function ReverseCowgirlIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.35]')}
viewBox="0 0 418 300"
>
<g transform="translate(0,300) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M2422 2770 c-64 -14 -142 -60 -175 -105 -54 -74 -69 -122 -65 -205 7 -126 69 -214 186 -268 46 -21 65 -24 126 -20 120 8 212 71 261 179 24 55 27 71 23 138 -4 60 -11 88 -34 131 -60 110 -200 175 -322 150z" />
<path d="M2026 2290 c-69 -21 -136 -130 -136 -221 0 -49 32 -147 67 -202 30 -49 124 -169 128 -165 2 2 -3 27 -11 57 -23 89 9 174 100 259 49 47 62 84 53 154 -6 46 -45 93 -94 114 -36 16 -64 16 -107 4z" />
<path d="M2415 2079 c-45 -13 -110 -72 -133 -121 -15 -32 -23 -83 -32 -193 -21 -272 -34 -341 -106 -549 -91 -265 -90 -261 -70 -330 14 -46 29 -70 69 -110 29 -28 68 -59 87 -69 33 -16 14 -17 -443 -17 -523 0 -511 1 -581 -60 -105 -93 -106 -251 -1 -353 64 -62 97 -67 444 -67 l306 0 -34 32 c-76 71 -81 169 -13 242 28 30 95 65 125 66 29 0 19 -17 -14 -24 -77 -15 -139 -86 -139 -158 0 -51 38 -108 90 -135 l44 -24 452 3 c442 3 453 3 481 24 40 30 64 75 70 136 9 92 -7 126 -117 245 -55 59 -147 160 -204 225 -101 112 -105 118 -112 174 -8 69 9 222 39 342 l22 87 50 0 c71 0 112 20 136 66 30 61 25 107 -24 201 -155 295 -179 331 -241 359 -44 20 -101 23 -151 8z" />
<path d="M3124 1027 c-33 -19 -302 -217 -313 -230 -7 -9 14 -37 72 -97 45 -47 101 -107 125 -133 l43 -48 46 41 c25 22 55 40 67 40 12 -1 90 -60 186 -142 91 -77 185 -153 209 -169 116 -75 236 -29 234 90 -1 101 -12 113 -505 579 -91 86 -116 97 -164 69z" />
<path d="M635 746 c-69 -32 -112 -70 -140 -127 -37 -73 -48 -132 -35 -196 32 -150 146 -246 295 -247 59 0 79 4 130 31 111 58 165 146 165 269 0 123 -65 221 -181 274 -64 29 -168 27 -234 -4z" />
</g>
</IconBase>
)
}
export function StandingSexIcon(props: IconProps) {
return (
<IconBase {...props} viewBox="20 20 195 375">
<g transform="translate(0,420) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M1280 3832 c-54 -22 -119 -62 -142 -88 -35 -40 -71 -135 -71 -190 0 -143 70 -239 213 -295 192 -74 404 76 404 286 0 116 -66 222 -171 275 -64 32 -169 38 -233 12z" />
<path d="M510 3776 c-135 -29 -233 -154 -233 -298 0 -225 235 -369 438 -269 210 104 227 392 32 525 -34 23 -73 39 -111 45 -33 6 -62 11 -65 10 -3 0 -31 -6 -61 -13z" />
<path d="M1763 3400 c-70 -31 -107 -115 -85 -188 7 -22 38 -64 76 -104 36 -37 72 -83 81 -104 18 -43 20 -108 4 -153 -6 -18 -9 -34 -7 -36 8 -8 110 129 138 185 81 160 74 276 -22 367 -59 56 -113 66 -185 33z" />
<path d="M1345 3166 c-27 -12 -145 -133 -256 -261 -54 -63 -99 -134 -99 -155 0 -9 14 -45 31 -79 33 -66 67 -91 124 -91 24 0 25 -2 25 -67 l0 -68 108 -77 c59 -42 150 -99 202 -127 52 -29 103 -62 112 -74 61 -80 -4 -227 -101 -227 -40 0 -123 30 -233 86 -37 19 -72 34 -78 34 -5 0 -10 -22 -10 -48 0 -45 -3 -51 -42 -83 -135 -107 -466 -403 -476 -424 -17 -37 -15 -85 6 -122 17 -31 324 -386 390 -450 41 -40 84 -43 133 -10 51 34 53 100 5 148 -13 13 -74 84 -135 157 -110 133 -124 160 -98 192 13 17 111 80 198 127 158 86 434 261 464 295 48 52 70 131 56 200 -50 249 -61 485 -36 723 19 183 19 221 -6 275 -41 90 -113 140 -201 140 -29 -1 -66 -7 -83 -14z" />
<path d="M592 3101 c-65 -22 -126 -79 -148 -138 -24 -61 -16 -139 56 -573 33 -201 66 -405 74 -454 17 -101 46 -154 109 -195 32 -21 37 -29 37 -64 0 -21 4 -37 9 -35 5 2 83 68 173 147 89 80 166 147 170 150 4 3 -2 60 -12 126 -10 66 -16 122 -15 124 6 6 195 -90 195 -98 0 -11 154 -81 210 -96 52 -14 81 -6 104 27 19 27 21 98 4 120 -7 9 -58 42 -113 73 -55 32 -137 84 -183 116 -45 33 -86 59 -90 59 -22 1 -81 74 -143 178 -70 115 -71 119 -94 249 -13 72 -33 149 -44 171 -28 54 -82 98 -143 117 -66 19 -91 19 -156 -4z" />
<path d="M1370 1623 c-91 -57 -173 -107 -182 -110 -16 -5 -18 -23 -18 -192 0 -175 1 -187 20 -199 30 -18 70 -106 70 -151 0 -30 -7 -49 -29 -73 l-28 -33 30 -215 c36 -264 41 -286 73 -307 33 -21 103 -21 136 1 54 36 58 97 29 460 l-19 229 49 336 c53 363 53 361 42 360 -5 0 -82 -48 -173 -106z" />
<path d="M1033 1419 c-29 -17 -53 -36 -53 -42 0 -7 25 -39 55 -72 l54 -60 1 103 c0 56 -1 102 -2 102 -2 0 -27 -14 -55 -31z" />
<path d="M744 1108 c7 -93 5 -105 -53 -367 -34 -149 -61 -288 -61 -309 0 -80 75 -152 158 -152 42 0 104 32 126 64 9 15 44 137 77 273 60 242 61 247 42 263 -11 8 -75 78 -142 155 -68 77 -130 147 -138 155 -14 13 -15 4 -9 -82z" />
</g>
</IconBase>
)
}
export function StandingDoggySexIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.25]')}
viewBox="0 0 212 402"
>
<g
transform="translate(0,402) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M325 3703 c-70 -25 -107 -55 -148 -115 -47 -73 -60 -119 -54 -193 12 -158 133 -275 294 -283 60 -4 80 0 127 21 194 89 246 330 106 490 -73 83 -217 118 -325 80z" />
<path d="M1503 3640 c-64 -26 -137 -95 -166 -158 -16 -36 -22 -66 -22 -127 0 -94 24 -154 88 -218 60 -60 117 -82 212 -82 98 0 155 23 219 90 143 146 99 391 -86 486 -62 32 -176 36 -245 9z" />
<path d="M1070 3281 c-73 -26 -134 -92 -156 -169 -20 -69 -15 -214 12 -317 l18 -69 11 54 c21 102 64 147 180 185 44 15 92 36 106 46 59 42 78 148 37 209 -51 75 -116 94 -208 61z" />
<path d="M450 3045 c-87 -27 -162 -113 -175 -202 -8 -46 146 -989 171 -1052 9 -23 38 -61 66 -86 l50 -45 16 -353 16 -353 -28 -129 c-15 -72 -43 -199 -63 -283 -23 -103 -33 -165 -29 -188 8 -39 47 -89 87 -109 63 -33 174 -3 204 55 9 17 48 158 87 313 l70 282 14 415 14 415 -30 194 c-17 106 -28 196 -25 199 3 4 16 0 28 -8 36 -23 309 -156 359 -175 59 -22 93 -14 118 28 43 69 19 114 -92 172 -91 48 -281 173 -330 217 -20 18 -68 88 -106 155 -67 118 -70 126 -90 247 -12 69 -30 143 -41 164 -29 56 -92 108 -152 126 -63 19 -80 19 -139 1z" />
<path d="M1431 2974 c-51 -19 -117 -81 -137 -129 -8 -19 -30 -117 -49 -217 -19 -101 -46 -223 -60 -271 -14 -48 -25 -89 -25 -91 0 -8 125 -83 198 -120 49 -25 76 -45 87 -65 17 -34 20 -88 6 -124 -14 -36 -61 -76 -96 -83 -35 -6 -145 30 -246 82 -36 19 -70 34 -76 34 -6 0 -20 -26 -33 -59 -17 -46 -20 -69 -15 -107 8 -58 35 -121 62 -150 12 -12 35 -75 57 -160 21 -76 55 -202 76 -279 21 -77 48 -177 59 -222 l21 -82 -45 -283 c-44 -280 -45 -309 -20 -371 16 -39 110 -61 156 -37 27 15 47 59 64 142 8 40 39 181 69 313 l55 240 -14 109 c-29 218 -75 609 -75 637 0 15 5 40 11 56 11 26 13 21 39 -80 31 -126 53 -157 111 -157 29 0 43 7 63 31 15 17 26 43 26 59 0 16 -21 168 -46 338 -38 264 -43 317 -34 352 l11 41 54 -6 c79 -10 137 19 161 81 16 42 16 48 0 107 -22 78 -138 348 -171 399 -47 71 -157 103 -244 72z" />
</g>
</IconBase>
)
}
export function MaleGenitaliaIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 177 253"
>
<g transform="translate(0,253) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M770 2343 c-126 -44 -218 -157 -235 -289 -12 -87 -24 -84 344 -84 303 0 319 1 336 20 15 17 16 26 7 79 -25 142 -134 257 -269 286 l-33 7 0 -50 c0 -33 -6 -56 -16 -66 -18 -19 -20 -19 -45 -6 -15 9 -19 22 -19 65 0 62 -1 62 -70 38z" />
<path d="M565 1878 c-9 -26 -44 -247 -54 -338 -19 -185 -22 -318 -10 -496 19 -265 19 -268 -9 -272 -33 -5 -49 12 -55 59 -3 22 -8 44 -12 47 -3 4 -35 -8 -71 -27 -74 -38 -132 -99 -171 -180 -25 -50 -28 -67 -28 -161 0 -88 4 -113 23 -154 48 -105 130 -178 240 -215 91 -31 159 -27 277 14 163 58 219 56 400 -9 187 -68 390 14 477 192 31 62 33 73 33 172 0 93 -3 112 -26 161 -43 92 -144 185 -220 204 -24 6 -27 4 -33 -32 -12 -65 -16 -73 -40 -73 -43 0 -48 19 -34 121 7 54 12 198 12 334 0 242 -12 369 -51 578 l-17 87 -313 0 c-242 0 -315 -3 -318 -12z" />
</g>
</IconBase>
)
}
export function AnusIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 205 200"
>
<g transform="translate(0,200) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M875 1829 c-341 -63 -618 -334 -690 -674 -19 -92 -19 -257 1 -353 60 -293 289 -549 574 -640 304 -98 629 -26 857 191 364 346 364 908 0 1254 -120 114 -264 188 -425 219 -82 15 -240 17 -317 3z m345 -84 c89 -22 232 -93 307 -155 125 -102 229 -265 269 -425 24 -95 24 -275 0 -370 -40 -160 -144 -323 -269 -425 -72 -59 -214 -131 -307 -156 -99 -27 -292 -24 -393 4 -232 66 -409 216 -511 433 -125 263 -90 576 88 808 122 158 298 264 504 301 64 12 233 4 312 -15z" />
<path d="M921 1404 c-120 -32 -221 -112 -277 -220 -142 -268 18 -585 321 -637 129 -22 263 22 366 119 181 174 182 454 1 626 -117 112 -264 152 -411 112z m261 -93 c70 -34 130 -92 169 -163 33 -60 34 -67 34 -168 0 -101 -1 -108 -34 -168 -39 -71 -98 -129 -169 -163 -71 -35 -206 -39 -287 -8 -83 31 -173 121 -204 204 -74 194 22 406 218 481 57 22 214 13 273 -15z" />
<path d="M1002 1218 c-7 -7 -12 -40 -12 -76 l0 -65 -50 47 c-54 51 -53 50 -81 36 -29 -16 -23 -36 27 -90 l46 -49 -68 -3 c-51 -2 -70 -7 -78 -21 -21 -34 4 -52 78 -55 l68 -3 -46 -49 c-50 -54 -56 -74 -27 -90 28 -14 27 -15 81 36 l50 47 0 -65 c0 -66 10 -88 42 -88 25 0 38 31 38 96 l0 57 50 -47 c54 -51 61 -53 84 -30 23 23 21 30 -30 84 l-47 50 57 0 c66 0 96 13 96 40 0 27 -30 40 -96 40 l-57 0 47 50 c51 54 53 61 30 84 -23 23 -30 21 -84 -30 l-50 -47 0 57 c0 32 -5 66 -10 77 -12 21 -40 25 -58 7z" />
</g>
</IconBase>
)
}
export function CoveredContentIcon(props: IconProps) {
return (
<IconBase {...props}>
<circle cx="12" cy="12" r="8.5" />
<path d="M6 6L18 18" />
</IconBase>
)
}
export function MaleBreastIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M6 9.5C7.2 8.2 9.1 7.5 12 7.5C14.9 7.5 16.8 8.2 18 9.5" />
<path d="M6.5 15.5C8 14.3 9.8 13.8 12 13.8C14.2 13.8 16 14.3 17.5 15.5" />
<circle cx="12" cy="11.1" r="0.9" fill="currentColor" stroke="none" />
</IconBase>
)
}
export function BellyIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M9 4.5C8.4 6.6 8 8.8 8 11C8 14.8 9.2 17.8 12 19.5C14.8 17.8 16 14.8 16 11C16 8.8 15.6 6.6 15 4.5" />
<circle cx="12" cy="12.7" r="0.8" fill="currentColor" stroke="none" />
</IconBase>
)
}
export function FeetIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M8.2 6.5C8.2 9.8 7.6 12.1 6 14.5C5.2 15.7 5.2 17.3 6.3 18.1C7.1 18.7 8.2 18.7 9.1 18.2L11.2 17" />
<path d="M15.8 6.5C15.8 9.8 16.4 12.1 18 14.5C18.8 15.7 18.8 17.3 17.7 18.1C16.9 18.7 15.8 18.7 14.9 18.2L12.8 17" />
<path d="M9.3 7.2H9.31" />
<path d="M14.7 7.2H14.71" />
</IconBase>
)
}
export function FaceIcon(props: IconProps) {
return (
<IconBase {...props}>
<circle cx="12" cy="12" r="8.5" />
<circle cx="9" cy="10" r="0.8" fill="currentColor" stroke="none" />
<circle cx="15" cy="10" r="0.8" fill="currentColor" stroke="none" />
<path d="M9.2 15C10 15.7 10.9 16 12 16C13.1 16 14 15.7 14.8 15" />
</IconBase>
)
}
export function FemalePersonIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 148 222"
>
<g transform="translate(0,222) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M675 2120 c-223 -40 -398 -191 -471 -407 -34 -98 -38 -244 -10 -338 64 -213 226 -370 438 -424 l73 -19 0 -128 0 -129 -125 -3 c-98 -2 -128 -6 -142 -19 -27 -24 -23 -68 8 -92 24 -19 40 -21 145 -21 l118 0 3 -142 3 -143 28 -13 c22 -11 32 -11 55 0 l27 13 3 143 3 142 118 0 c105 0 121 2 145 21 31 24 35 68 8 92 -14 13 -44 17 -142 19 l-125 3 0 129 0 128 73 19 c212 54 375 211 438 424 24 81 24 229 0 310 -58 197 -200 346 -387 409 -85 28 -208 40 -284 26z m270 -224 c88 -44 155 -112 198 -204 29 -61 32 -76 32 -162 0 -86 -3 -101 -32 -162 -44 -94 -109 -160 -202 -206 -71 -35 -80 -37 -171 -37 -91 0 -101 3 -172 37 -259 128 -316 451 -117 654 87 88 187 126 313 120 65 -4 91 -10 151 -40z" />
</g>
</IconBase>
)
}
export function MalePersonIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 208 219"
>
<g transform="translate(0,219) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M1715 2018 c-237 -21 -258 -28 -263 -90 -2 -29 2 -40 25 -58 24 -19 35 -21 103 -15 41 3 91 8 110 11 32 5 16 -14 -215 -245 -236 -237 -250 -250 -270 -236 -52 38 -146 86 -210 107 -60 20 -90 23 -205 23 -122 0 -143 -3 -215 -28 -354 -125 -550 -498 -443 -846 36 -118 85 -199 178 -291 140 -141 284 -201 480 -201 118 0 190 16 294 64 375 172 512 657 282 999 l-35 53 246 247 c136 136 248 246 250 244 2 -1 -2 -49 -7 -107 -9 -95 -8 -106 8 -129 30 -39 101 -40 122 -1 5 11 19 118 30 238 19 209 19 219 2 242 -10 13 -26 27 -37 31 -11 3 -114 -2 -230 -12z m-800 -730 c126 -32 239 -127 301 -253 34 -69 38 -84 42 -178 3 -86 1 -112 -17 -166 -43 -126 -126 -222 -242 -280 -309 -154 -680 77 -679 424 0 122 43 226 133 321 120 129 288 177 462 132z" />
</g>
</IconBase>
)
}
export function BraIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 248 234"
>
<g
transform="translate(0,234) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M260 1815 l0 -316 -60 -239 c-72 -289 -75 -359 -23 -525 26 -84 202 -428 234 -457 l29 -28 789 0 c776 0 789 0 814 20 27 21 189 326 227 427 28 76 50 190 50 264 0 40 -20 140 -60 299 l-60 239 0 316 0 316 -72 -3 -73 -3 -3 -343 -2 -342 -35 -46 c-20 -25 -38 -63 -41 -85 -6 -35 -9 -39 -37 -39 -50 0 -105 -21 -147 -58 -42 -36 -80 -97 -80 -130 0 -16 -10 -20 -49 -25 -98 -12 -180 -78 -203 -164 -11 -39 -14 -42 -57 -48 -55 -8 -115 -38 -146 -71 l-23 -25 -25 25 c-34 34 -94 63 -149 71 -45 7 -46 8 -57 52 -21 82 -131 163 -223 163 -22 0 -28 5 -28 20 0 31 -34 91 -72 127 -37 36 -103 63 -153 63 -30 0 -33 3 -39 39 -3 22 -21 60 -41 85 l-35 46 -2 342 -3 343 -72 3 -73 3 0 -316z m870 -1130 c66 -33 134 -33 200 0 27 14 55 22 63 20 7 -3 23 -26 35 -50 21 -44 21 -46 4 -63 -11 -9 -27 -22 -36 -27 -17 -9 -14 -16 28 -67 25 -31 46 -61 46 -66 0 -20 -50 -122 -60 -122 -12 0 -28 18 -102 115 -71 93 -85 93 -156 0 -74 -97 -90 -115 -102 -115 -11 0 -60 103 -60 125 0 7 6 17 13 23 7 6 28 31 45 56 l33 45 -31 16 c-18 9 -30 23 -30 36 0 32 38 98 58 99 1 0 25 -11 52 -25z" />
<path d="M1077 643 c-13 -13 -7 -23 26 -43 40 -25 47 -25 47 0 0 11 -12 26 -30 35 -33 17 -34 17 -43 8z" />
<path d="M1338 634 c-16 -8 -28 -23 -28 -34 0 -24 2 -24 43 -4 41 21 39 18 31 38 -7 19 -11 19 -46 0z" />
<path d="M1193 604 c-2 -7 -3 -23 -1 -36 2 -19 9 -23 38 -23 32 0 35 3 38 31 3 30 1 32 -33 36 -24 3 -39 0 -42 -8z" />
<path d="M1082 480 c-27 -34 -38 -57 -35 -71 8 -28 15 -22 68 45 34 44 42 61 33 68 -21 13 -24 10 -66 -42z" />
<path d="M1312 522 c-9 -6 0 -24 34 -68 53 -68 59 -72 67 -45 3 14 -8 37 -35 71 -42 52 -45 55 -66 42z" />
</g>
</IconBase>
)
}
export function PantiesIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 235 136"
>
<g
transform="translate(0,136) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M1026 1224 c-8 -20 -10 -17 31 -38 41 -20 43 -20 43 4 0 11 -12 26 -30 35 -36 19 -36 19 -44 -1z" />
<path d="M1288 1224 c-16 -8 -28 -23 -28 -34 0 -24 2 -24 43 -4 41 21 39 18 31 38 -7 19 -11 19 -46 0z" />
<path d="M116 1204 c-12 -32 -7 -262 7 -271 6 -4 51 -17 98 -29 176 -45 358 -154 510 -304 107 -107 181 -212 223 -315 15 -39 31 -77 35 -85 26 -52 356 -52 382 0 4 8 20 46 35 85 112 277 459 563 759 626 33 6 66 19 73 27 13 17 18 235 6 266 -5 14 -53 16 -431 16 -269 0 -422 -4 -418 -10 6 -10 -19 -37 -49 -55 -15 -9 -12 -16 28 -69 25 -32 46 -62 46 -67 0 -5 -11 -34 -25 -64 -16 -36 -30 -55 -39 -53 -8 2 -46 45 -85 96 -47 60 -78 92 -91 92 -13 0 -44 -32 -91 -92 -39 -51 -77 -94 -85 -96 -8 -2 -23 18 -39 54 -14 31 -25 60 -25 64 0 4 21 34 46 66 40 53 43 60 28 69 -30 18 -55 45 -49 55 4 6 -149 10 -418 10 -378 0 -426 -2 -431 -16z" />
<path d="M1142 1168 c3 -30 6 -33 38 -33 32 0 35 3 38 33 3 31 3 32 -38 32 -41 0 -41 -1 -38 -32z" />
<path d="M1032 1069 c-25 -32 -38 -59 -35 -70 8 -30 18 -23 67 43 34 45 43 64 34 70 -21 13 -26 10 -66 -43z" />
<path d="M1262 1112 c-9 -6 0 -25 34 -70 49 -66 59 -73 67 -43 3 11 -10 38 -35 70 -40 53 -45 56 -66 43z" />
</g>
</IconBase>
)
}
export function LingerieIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 167 218"
>
<g transform="translate(0,218) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M520 1976 c0 -149 -53 -314 -167 -521 -120 -219 -163 -374 -163 -592 0 -191 42 -373 131 -563 22 -46 45 -88 52 -92 7 -4 112 -8 233 -8 187 0 224 2 234 15 10 12 11 56 7 188 -7 193 -29 320 -72 411 -19 40 -24 61 -17 68 14 14 210 14 224 0 7 -7 2 -28 -17 -68 -43 -92 -65 -217 -72 -413 -6 -161 -5 -175 12 -188 14 -10 68 -13 224 -13 113 0 216 3 227 6 16 4 34 32 62 93 89 191 132 374 132 564 0 218 -43 373 -163 592 -114 207 -167 372 -167 521 0 36 -4 64 -10 64 -15 0 -12 -155 4 -225 8 -33 13 -61 12 -63 -2 -1 -23 5 -47 13 -164 58 -454 58 -618 0 -24 -8 -45 -14 -47 -13 -1 2 4 30 12 63 16 70 19 225 4 225 -6 0 -10 -28 -10 -64z m515 -341 c112 -23 222 -83 293 -160 65 -69 73 -88 98 -225 32 -178 -1 -326 -97 -443 -32 -39 -62 -49 -215 -66 -49 -6 -104 -14 -123 -17 -33 -5 -33 -5 -27 23 4 15 16 47 27 70 l20 42 39 -14 c21 -7 60 -17 85 -21 38 -5 47 -4 43 7 -3 8 -26 17 -57 20 -107 14 -186 90 -217 210 -32 126 0 247 78 298 42 27 41 48 -1 26 -39 -20 -88 -78 -96 -114 -8 -39 -21 -40 -30 -3 -7 36 -58 98 -95 117 -43 22 -45 1 -2 -26 79 -51 110 -172 78 -298 -31 -120 -110 -196 -218 -210 -53 -6 -80 -31 -35 -31 22 0 89 18 128 34 12 5 22 -7 42 -52 35 -77 35 -84 -5 -77 -18 3 -73 10 -122 16 -153 17 -183 27 -215 66 -96 117 -129 265 -97 443 24 132 34 156 89 216 114 125 257 182 462 183 55 0 132 -6 170 -14z m-746 -714 c12 -29 35 -73 51 -96 17 -24 30 -46 30 -49 0 -3 -30 -28 -67 -56 -47 -36 -70 -47 -77 -40 -7 7 -11 72 -11 173 0 127 4 180 20 247 l20 85 6 -105 c4 -74 12 -121 28 -159z m1235 -58 c1 -111 -3 -176 -10 -183 -7 -7 -30 4 -77 40 -37 28 -67 53 -67 56 0 3 14 26 31 51 52 75 78 164 80 268 l1 90 20 -75 c17 -60 21 -108 22 -247z m-666 115 c-2 -33 1 -43 12 -43 12 0 14 10 12 45 -2 24 0 42 2 39 6 -6 56 -98 56 -104 0 -2 -31 -3 -70 -3 -38 0 -70 2 -70 4 0 6 54 104 58 104 1 0 1 -19 0 -42z" />
<path d="M860 1975 c0 -37 4 -65 10 -65 6 0 10 28 10 65 0 37 -4 65 -10 65 -6 0 -10 -28 -10 -65z" />
</g>
</IconBase>
)
}
export function DressIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 140 231"
>
<g transform="translate(0,231) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M341 2179 c-47 -16 -88 -35 -93 -41 -4 -7 -8 -49 -8 -93 0 -110 -15 -194 -53 -300 -27 -76 -32 -104 -32 -180 0 -83 3 -97 37 -170 20 -44 42 -101 49 -127 l11 -48 427 0 427 0 18 58 c10 31 32 86 50 122 28 60 31 73 31 165 0 90 -4 111 -38 206 -33 94 -38 122 -45 240 l-7 134 -92 32 c-83 29 -93 30 -97 15 -3 -9 -17 -80 -32 -157 l-27 -140 -89 -142 c-50 -79 -93 -143 -98 -143 -4 0 -46 62 -94 137 l-88 138 -30 155 c-17 85 -34 158 -37 161 -3 4 -44 -6 -90 -22z" />
<path d="M264 1158 c3 -13 6 -38 6 -55 l0 -33 410 0 410 0 0 33 c0 17 3 42 6 55 l6 22 -422 0 -422 0 6 -22z" />
<path d="M273 1033 c-7 -2 -13 -15 -13 -27 0 -35 -27 -118 -86 -268 -30 -75 -64 -172 -75 -215 -25 -97 -39 -230 -27 -263 10 -31 90 -81 138 -87 29 -4 43 1 80 31 55 44 104 48 147 12 69 -57 105 -59 163 -11 58 48 102 48 160 0 56 -47 94 -47 150 0 58 48 102 48 161 -1 37 -31 49 -35 80 -31 50 7 128 54 140 86 24 61 -26 286 -105 481 -50 122 -86 232 -86 265 0 15 -8 25 -22 29 -27 7 -788 7 -805 -1z" />
</g>
</IconBase>
)
}
export function CropTopIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 229 207"
>
<g transform="translate(0,207) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M511 1943 c-98 -16 -132 -34 -199 -108 -64 -70 -108 -173 -127 -302 -11 -74 -67 -1101 -65 -1195 0 -31 102 -60 228 -66 62 -2 117 -1 122 4 4 5 31 144 59 309 29 165 55 309 59 319 6 13 12 -13 21 -78 l14 -96 517 0 517 0 14 96 c9 65 15 91 21 78 4 -10 30 -154 59 -319 28 -165 55 -304 59 -309 5 -5 60 -6 122 -4 126 6 228 35 228 66 2 92 -54 1121 -65 1195 -26 171 -104 311 -209 376 -29 18 -222 58 -232 48 -3 -2 1 -28 7 -57 16 -74 6 -161 -25 -224 -33 -67 -115 -145 -193 -185 -119 -60 -244 -179 -280 -268 -10 -24 -20 -43 -23 -43 -3 0 -13 20 -23 44 -37 90 -148 197 -278 267 -91 48 -169 125 -202 196 -23 51 -30 163 -14 236 9 43 16 42 -112 20z" />
</g>
</IconBase>
)
}
export function StockingsIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 118 243"
>
<g transform="translate(0,243) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M429 2281 c-20 -11 -58 -44 -86 -74 -90 -99 -107 -219 -43 -312 30 -43 31 -50 35 -163 2 -64 -1 -160 -7 -212 -5 -52 -13 -153 -18 -225 -4 -71 -13 -169 -20 -217 -11 -74 -10 -108 4 -230 21 -177 21 -177 49 -171 48 12 74 50 113 167 20 58 24 89 24 193 0 117 3 133 45 281 25 86 45 163 45 170 0 16 -105 172 -182 270 -27 35 -47 66 -45 69 12 11 325 -434 342 -486 4 -14 -4 -35 -25 -67 -45 -64 -100 -187 -154 -339 -25 -71 -60 -159 -79 -195 -29 -58 -38 -66 -78 -80 -62 -22 -73 -48 -52 -130 9 -39 16 -105 15 -165 0 -86 3 -106 24 -147 22 -43 28 -48 57 -48 18 0 41 6 51 13 18 13 18 15 1 47 -20 39 -16 68 37 235 48 150 257 549 395 752 88 129 85 179 -22 395 -29 59 -88 166 -130 238 -87 147 -88 155 -28 221 40 44 39 54 -14 132 -56 81 -179 119 -254 78z" />
<path d="M471 365 c-29 -95 -26 -119 14 -123 17 -2 53 -9 80 -17 28 -8 82 -17 121 -20 57 -5 73 -3 84 9 19 24 6 41 -41 55 -75 22 -114 47 -172 110 -31 34 -58 61 -60 61 -2 0 -14 -34 -26 -75z" />
</g>
</IconBase>
)
}
export function HighHeelsIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 198 249"
>
<g transform="translate(0,249) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M537 2286 c-11 -11 -13 -41 -9 -143 l4 -128 -40 -50 c-22 -27 -72 -77 -111 -109 -110 -91 -197 -218 -215 -313 -5 -29 -1 -35 43 -67 26 -20 93 -82 148 -139 194 -202 340 -462 398 -713 41 -177 170 -321 338 -377 57 -19 91 -21 399 -25 303 -3 339 -2 344 12 3 9 -1 27 -10 40 -8 13 -122 98 -252 188 -130 89 -244 174 -252 187 -32 48 -42 139 -42 416 0 284 -13 456 -50 650 -11 61 -31 202 -44 314 -25 218 -34 243 -75 222 -11 -7 -21 -19 -21 -29 1 -53 53 -448 75 -567 24 -127 27 -175 35 -515 6 -275 13 -391 24 -435 8 -33 13 -62 10 -64 -11 -12 -112 50 -159 97 -72 72 -122 172 -186 367 -86 266 -191 492 -314 682 -30 46 -55 86 -55 89 0 3 16 24 35 47 47 55 55 91 47 235 -5 93 -11 125 -22 132 -20 13 -26 12 -43 -4z" />
<path d="M170 826 c0 -568 1 -586 19 -596 11 -5 82 -10 160 -10 158 0 176 7 166 63 -2 18 -19 111 -36 207 -48 271 -59 349 -59 435 0 87 14 121 51 127 19 3 15 11 -41 88 -68 92 -163 194 -222 242 l-38 30 0 -586z" />
</g>
</IconBase>
)
}
export function CollarIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 270 179"
>
<g transform="translate(0,179) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M1190 1640 c0 -5 -15 -10 -33 -10 -58 0 -287 -30 -387 -50 -235 -48 -400 -115 -493 -200 -82 -75 -87 -90 -87 -279 0 -141 3 -167 20 -200 74 -145 384 -269 780 -311 177 -19 167 -16 175 -58 8 -48 47 -115 78 -135 22 -14 24 -21 19 -66 -2 -29 1 -64 8 -81 17 -41 65 -80 100 -80 35 0 83 39 100 80 7 17 10 52 8 81 -5 45 -3 52 19 66 30 20 70 87 78 135 8 42 10 43 140 53 44 4 139 17 210 30 328 60 544 163 604 288 19 38 21 62 21 201 0 135 -3 162 -19 194 -21 42 -86 105 -142 140 -141 86 -446 162 -751 187 -49 4 -88 11 -88 16 0 5 -81 9 -180 9 -113 0 -180 -4 -180 -10z m140 -130 c0 -29 -4 -40 -15 -40 -11 0 -15 11 -15 40 0 29 4 40 15 40 11 0 15 -11 15 -40z m120 0 c0 -33 -3 -40 -20 -40 -16 0 -20 7 -20 33 0 36 6 47 27 47 9 0 13 -13 13 -40z m-520 -15 c16 -19 10 -45 -15 -61 -39 -26 -86 31 -53 64 16 16 53 15 68 -3z m950 0 c16 -19 9 -45 -16 -62 -19 -12 -24 -11 -45 6 -21 16 -22 22 -11 45 13 29 52 36 72 11z m-1312 -77 c19 -19 14 -56 -9 -68 -16 -9 -26 -8 -45 5 -27 17 -29 27 -14 56 12 21 50 25 68 7z m1676 -10 c12 -20 2 -44 -27 -62 -19 -12 -57 17 -57 44 0 40 62 53 84 18z m-1050 -33 c8 -22 343 -22 360 -1 20 26 314 -10 526 -65 130 -33 281 -102 324 -148 l30 -31 -24 -25 c-58 -62 -255 -140 -455 -180 -208 -41 -313 -50 -605 -49 -231 0 -298 4 -418 23 -290 44 -488 111 -604 204 -26 20 -23 31 19 68 108 95 408 181 723 208 52 5 100 9 106 10 7 0 14 -6 18 -14z m-606 -507 c16 -16 15 -53 -3 -68 -19 -16 -45 -10 -61 15 -26 39 31 86 64 53z m1626 -7 c23 -25 13 -59 -20 -67 -30 -8 -54 11 -54 40 0 45 44 61 74 27z m-1292 -78 c32 -29 16 -73 -27 -73 -58 0 -59 88 -1 90 5 0 18 -7 28 -17z m949 7 c21 -12 25 -50 7 -68 -39 -39 -100 17 -63 58 21 23 29 24 56 10z m-371 -236 c0 -27 -31 -82 -55 -98 -16 -11 -31 -13 -52 -7 -15 5 -39 4 -51 0 -14 -6 -31 -5 -43 2 -26 13 -59 68 -59 97 0 22 2 22 130 22 112 0 130 -2 130 -16z m-73 -222 c11 -47 -22 -112 -58 -112 -27 0 -59 48 -59 90 0 20 2 39 4 41 2 2 27 4 56 4 44 0 52 -3 57 -23z" />
</g>
</IconBase>
)
}
export function SkirtIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 231 225"
>
<g
transform="translate(0,225) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M651 2023 c-7 -27 -14 -56 -17 -65 -5 -17 22 -18 480 -18 382 0 486 3 486 13 0 6 -6 35 -13 62 l-13 50 -456 3 -456 2 -11 -47z" />
<path d="M590 1863 c-118 -218 -242 -548 -401 -1063 l-69 -224 27 -28 c58 -61 244 -129 264 -97 5 8 9 24 9 35 1 107 232 1190 260 1218 17 17 12 -18 -19 -142 -93 -366 -231 -1059 -231 -1155 0 -31 64 -50 155 -47 44 1 110 3 147 4 l67 1 5 50 c2 28 16 304 30 614 14 310 28 567 31 569 3 3 8 3 11 0 3 -3 -6 -241 -20 -529 -42 -888 -41 -831 -16 -854 35 -31 86 -25 148 18 78 53 118 62 226 48 49 -6 91 -9 94 -6 3 3 -5 282 -18 620 -20 547 -21 640 -6 624 2 -2 13 -274 25 -604 12 -330 25 -625 29 -655 l7 -55 57 -3 c69 -4 67 -9 51 158 -27 283 -103 1158 -103 1190 0 20 4 30 9 25 7 -8 112 -1145 111 -1207 0 -15 10 -16 88 -11 79 5 93 3 150 -21 55 -23 68 -25 97 -16 18 6 38 16 43 23 11 14 -22 287 -63 507 -60 331 -132 578 -217 743 -50 98 -59 135 -19 78 52 -73 139 -297 185 -476 33 -131 86 -410 111 -585 14 -101 27 -185 28 -185 1 -1 41 2 89 6 88 8 160 34 171 62 7 20 -43 259 -88 414 -76 263 -192 553 -332 823 -47 91 -90 171 -95 178 -8 9 -121 12 -503 12 l-493 0 -32 -57z m540 -389 c0 -223 -4 -344 -10 -344 -6 0 -10 124 -10 351 0 231 3 348 10 344 6 -4 10 -132 10 -351z" />
</g>
</IconBase>
)
}
export function ToyIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.05]')}
viewBox="0 0 256 237"
>
<g
transform="translate(0,237) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M370 1984 c-67 -57 -74 -110 -34 -261 18 -69 28 -134 31 -218 6 -135 -5 -212 -41 -291 -22 -47 -23 -54 -9 -65 21 -18 46 17 75 106 20 61 23 89 22 215 -1 130 -4 157 -33 263 -37 140 -33 184 22 218 39 24 77 19 124 -17 27 -20 33 -31 29 -49 -4 -15 1 -28 14 -40 17 -16 18 -20 5 -38 -18 -26 -19 -84 -2 -113 17 -31 915 -1051 940 -1069 37 -26 83 -19 126 20 34 31 40 33 51 20 11 -13 7 -22 -24 -54 -23 -24 -39 -51 -43 -74 -5 -36 -3 -40 87 -132 111 -112 157 -138 250 -138 197 0 325 202 240 378 -11 22 -60 80 -110 130 -83 83 -93 90 -130 90 -32 0 -47 -7 -79 -39 -34 -34 -42 -37 -56 -26 -14 12 -13 17 15 45 38 39 49 94 26 129 -12 20 -905 813 -1044 929 -38 31 -86 36 -131 12 -26 -13 -30 -13 -46 5 -12 14 -22 17 -30 10 -8 -7 -20 0 -41 21 -63 66 -148 80 -204 33z m260 -114 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m445 -400 c31 -32 29 -51 -8 -74 -13 -8 -23 -4 -47 19 -35 34 -36 39 -10 65 26 26 31 25 65 -10z m94 -94 c26 -28 25 -53 -5 -72 -18 -13 -23 -11 -52 19 -30 31 -31 34 -16 55 20 29 45 28 73 -2z m101 -91 c15 -19 6 -61 -16 -69 -42 -16 -82 35 -54 69 16 19 54 19 70 0z m524 -523 c3 -5 -10 -23 -28 -41 -43 -41 -61 -23 -20 20 29 30 39 35 48 21z" />
</g>
</IconBase>
)
}
export function DildoIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.18]')}
viewBox="0 0 99 145"
>
<g
transform="translate(0,145) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M213 1331 c-41 -26 -58 -81 -44 -143 6 -24 7 -69 4 -101 -5 -48 -3 -60 11 -70 20 -15 61 -161 77 -277 6 -41 20 -110 31 -154 20 -78 21 -158 2 -312 -6 -56 9 -84 47 -84 25 0 24 -8 -6 -32 -14 -11 -25 -26 -25 -34 0 -12 37 -14 230 -14 194 0 230 2 230 15 0 7 -7 18 -16 23 -13 7 -9 11 20 16 20 4 36 9 36 11 0 2 7 30 15 62 20 76 6 154 -35 195 -32 32 -61 35 -152 16 -37 -8 -61 -9 -67 -3 -6 6 -17 73 -26 150 -9 77 -34 212 -56 300 -23 88 -45 182 -51 210 -11 55 -74 168 -116 207 -38 37 -70 43 -109 19z" />
</g>
</IconBase>
)
}
export function BottleIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M10 3.8H14" />
<path d="M10.7 3.8V7.3C9.4 8.1 8.5 9.5 8.5 11.1V18.5C8.5 19.4 9.1 20 10 20H14C14.9 20 15.5 19.4 15.5 18.5V11.1C15.5 9.5 14.6 8.1 13.3 7.3V3.8" />
<path d="M8.5 12.5H15.5" />
</IconBase>
)
}
export function BedIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M4.5 10.5V19" />
<path d="M19.5 13.5V19" />
<path d="M4.5 14H19.5" />
<path d="M4.5 10.5H10.5C11.3 10.5 12 11.2 12 12V14" />
<path d="M12 12H17.2C18.5 12 19.5 13 19.5 14.3V14" />
<path d="M6 8.5H9.5" />
</IconBase>
)
}
export function ChairIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M8 4.5H16V12H8V4.5Z" />
<path d="M6.5 12H17.5" />
<path d="M8 12V20" />
<path d="M16 12V20" />
<path d="M9 16H15" />
</IconBase>
)
}
export function PhoneIcon(props: IconProps) {
return (
<IconBase {...props}>
<rect x="8" y="3.5" width="8" height="17" rx="1.8" />
<path d="M10.5 6H13.5" />
<circle cx="12" cy="17.5" r="0.7" fill="currentColor" stroke="none" />
</IconBase>
)
}
export function CameraIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M8.5 7L9.8 5H14.2L15.5 7H18.5C19.3 7 20 7.7 20 8.5V17C20 17.8 19.3 18.5 18.5 18.5H5.5C4.7 18.5 4 17.8 4 17V8.5C4 7.7 4.7 7 5.5 7H8.5Z" />
<circle cx="12" cy="12.8" r="3" />
<circle cx="17" cy="9.5" r="0.6" fill="currentColor" stroke="none" />
</IconBase>
)
}
export function HandcuffsIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.12]')}
viewBox="0 0 194 149"
>
<g
transform="translate(0,149) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M1377 1330 c-85 -22 -183 -93 -207 -150 -8 -20 -20 -30 -34 -30 -49 -1 -49 -22 0 -171 4 -10 -14 -32 -50 -63 -73 -62 -81 -77 -61 -115 21 -42 19 -60 -9 -70 -24 -10 -36 -29 -36 -60 0 -10 26 -47 58 -82 75 -82 89 -116 68 -157 -20 -38 -31 -45 -57 -37 -18 6 -20 12 -15 49 9 56 1 73 -39 86 -46 15 -100 71 -134 138 -83 164 -224 238 -379 198 -117 -30 -199 -96 -257 -208 -27 -53 -29 -60 -16 -90 7 -18 17 -50 22 -71 23 -93 79 -168 161 -212 47 -26 65 -30 155 -33 71 -3 106 -8 114 -18 19 -23 36 -16 66 26 32 46 40 47 135 10 75 -29 104 -22 126 30 15 34 22 40 47 40 17 0 41 -7 53 -16 36 -25 64 -14 99 41 49 74 52 108 17 174 -16 30 -37 59 -48 65 -10 6 -36 29 -57 51 -31 33 -35 42 -23 48 11 6 26 -1 51 -27 20 -20 43 -36 51 -36 8 0 38 13 66 29 46 26 62 29 171 34 177 8 266 45 324 136 88 139 81 285 -20 395 -33 37 -59 56 -74 56 -12 0 -43 9 -68 20 -53 24 -147 33 -200 20z m178 -94 c43 -28 104 -116 121 -171 18 -64 8 -120 -33 -173 -52 -69 -166 -96 -246 -57 -81 38 -177 166 -177 234 0 68 71 150 154 177 51 17 148 11 181 -10z m-912 -480 c99 -36 137 -133 106 -276 -25 -117 -142 -177 -270 -138 -49 14 -114 69 -138 117 -31 61 -34 95 -13 144 58 130 193 196 315 153z m441 -115 c26 -27 27 -31 13 -46 -15 -14 -19 -12 -52 20 -19 20 -33 40 -30 46 11 18 41 9 69 -20z m28 -73 c-7 -7 -12 -8 -12 -2 0 14 12 26 19 19 2 -3 -1 -11 -7 -17z m68 -28 c11 -22 20 -42 20 -45 0 -3 -15 -5 -33 -5 -25 0 -37 6 -46 24 -12 21 -11 28 5 49 23 30 28 27 54 -23z m20 -78 c0 -14 -11 -21 -26 -15 -21 8 -17 23 6 23 11 0 20 -4 20 -8z m-10 -56 c0 -13 -49 -76 -59 -76 -17 0 -21 63 -6 86 13 20 18 21 40 11 13 -7 25 -16 25 -21z" />
</g>
</IconBase>
)
}
export function HandIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M8.5 12V6.5C8.5 5.7 9.1 5.1 9.9 5.1C10.7 5.1 11.3 5.7 11.3 6.5V11" />
<path d="M11.3 11V5.5C11.3 4.7 11.9 4.1 12.7 4.1C13.5 4.1 14.1 4.7 14.1 5.5V11.5" />
<path d="M14.1 11.5V7.2C14.1 6.4 14.7 5.8 15.5 5.8C16.3 5.8 16.9 6.4 16.9 7.2V14.5C16.9 18.2 14.7 20.5 11.7 20.5C9.7 20.5 8.2 19.5 7 17.8L5.5 15.6C5.1 15 5.3 14.2 5.9 13.8C6.5 13.4 7.2 13.6 7.7 14.1L8.5 15" />
</IconBase>
)
}
export function MouthIcon(props: IconProps) {
return (
<IconBase {...props}>
<path d="M4.5 12C6.5 9.8 8.4 8.8 12 10.8C15.6 8.8 17.5 9.8 19.5 12" />
<path d="M4.5 12C6.5 15.2 9.1 16.5 12 16.5C14.9 16.5 17.5 15.2 19.5 12" />
<path d="M7.5 12.2H16.5" />
</IconBase>
)
}
export function TongueIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 185 174"
>
<g transform="translate(0,174) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M520 1543 c-69 -24 -113 -59 -274 -222 l-149 -150 91 -99 c110 -120 289 -292 302 -292 6 0 10 30 10 66 l0 66 -85 116 c-47 64 -85 124 -85 134 0 27 29 41 220 109 196 70 243 77 304 41 46 -27 85 -28 128 -3 68 40 88 37 298 -35 198 -68 230 -84 230 -114 0 -9 -38 -65 -85 -124 l-85 -107 0 -75 c0 -52 4 -74 12 -74 14 0 388 375 388 388 0 5 -75 83 -167 173 -195 192 -224 210 -349 217 -98 5 -153 -10 -238 -68 -32 -22 -62 -40 -66 -40 -4 0 -32 17 -61 37 -30 20 -75 45 -102 55 -59 22 -175 23 -237 1z" />
<path d="M674 1030 c-31 -12 -72 -66 -79 -103 -4 -18 -5 -153 -3 -302 3 -268 3 -270 29 -326 35 -73 85 -128 151 -164 43 -23 68 -30 134 -33 72 -4 89 -1 137 21 77 35 131 88 169 165 l33 66 3 276 c2 172 0 288 -7 310 -35 119 -203 135 -255 26 -11 -24 -16 -63 -16 -133 0 -106 -13 -143 -50 -143 -37 0 -50 37 -50 143 0 114 -14 156 -65 187 -33 21 -93 25 -131 10z" />
</g>
</IconBase>
)
}
export function ShowerIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 212 212"
>
<g transform="translate(0,212) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M837 1850 c-15 -12 -37 -40 -48 -62 l-20 -39 36 -64 c48 -87 123 -166 213 -225 78 -51 100 -58 119 -39 6 6 21 9 34 7 34 -4 83 -91 209 -363 l106 -230 34 -3 c28 -2 41 3 64 27 l29 30 -63 143 c-177 401 -305 611 -450 734 -112 94 -210 126 -263 84z" />
<path d="M753 1701 c-7 -12 -13 -29 -13 -39 0 -62 243 -292 308 -292 11 0 25 6 31 14 10 11 1 20 -44 46 -98 56 -185 147 -260 274 -9 15 -11 15 -22 -3z" />
<path d="M692 1558 c-44 -27 -45 -57 -1 -31 17 10 35 23 40 30 18 21 -6 22 -39 1z" />
<path d="M572 1478 c-22 -13 -30 -24 -23 -31 10 -10 71 27 71 44 0 14 -12 11 -48 -13z" />
<path d="M698 1457 c-26 -21 -37 -47 -20 -47 12 1 62 48 62 60 0 15 -12 12 -42 -13z" />
<path d="M805 1440 c-16 -16 -25 -33 -22 -37 8 -7 67 45 67 59 0 16 -17 8 -45 -22z" />
<path d="M456 1397 c-16 -13 -25 -26 -20 -30 11 -7 74 31 74 44 0 16 -24 10 -54 -14z" />
<path d="M596 1369 c-14 -11 -26 -25 -26 -30 0 -17 26 -9 48 14 38 40 23 51 -22 16z" />
<path d="M712 1347 c-22 -23 -29 -47 -14 -47 10 0 62 53 62 63 0 15 -28 6 -48 -16z" />
<path d="M820 1329 c-12 -16 -19 -33 -16 -36 8 -9 56 37 56 54 0 22 -18 15 -40 -18z" />
<path d="M933 1348 c-23 -28 -33 -57 -23 -63 9 -5 50 50 50 68 0 11 -17 8 -27 -5z" />
<path d="M353 1329 c-33 -21 -43 -39 -22 -39 15 0 69 39 69 51 0 14 -12 11 -47 -12z" />
<path d="M495 1280 c-16 -16 -26 -32 -23 -36 9 -8 68 37 68 53 0 21 -14 15 -45 -17z" />
<path d="M627 1252 c-30 -31 -33 -42 -14 -42 17 0 60 57 48 64 -4 3 -20 -7 -34 -22z" />
<path d="M238 1252 c-24 -14 -39 -42 -23 -42 10 0 75 45 75 53 0 12 -23 7 -52 -11z" />
<path d="M743 1228 c-12 -17 -19 -36 -16 -41 7 -12 53 41 53 61 0 21 -14 13 -37 -20z" />
<path d="M857 1221 c-19 -33 -22 -51 -7 -51 10 0 40 52 40 70 0 19 -16 10 -33 -19z" />
<path d="M398 1197 c-27 -22 -37 -47 -20 -47 10 0 62 53 62 63 0 12 -14 7 -42 -16z" />
<path d="M125 1176 c-16 -13 -27 -27 -23 -31 10 -10 79 35 72 46 -8 14 -16 11 -49 -15z" />
<path d="M530 1149 c-12 -16 -19 -33 -16 -36 7 -7 66 46 66 59 0 19 -30 6 -50 -23z" />
<path d="M661 1121 c-24 -33 -26 -41 -10 -41 14 0 48 41 49 58 0 21 -18 13 -39 -17z" />
<path d="M292 1107 c-25 -27 -28 -37 -9 -37 14 0 57 41 57 53 0 15 -28 6 -48 -16z" />
<path d="M787 1101 c-19 -33 -22 -51 -7 -51 10 0 40 52 40 70 0 19 -16 10 -33 -19z" />
<path d="M445 1060 c-31 -33 -26 -63 7 -33 11 10 24 25 29 35 16 29 -7 28 -36 -2z" />
<path d="M197 1022 c-15 -16 -24 -31 -21 -35 9 -9 64 34 64 50 0 20 -14 16 -43 -15z" />
<path d="M583 1018 c-31 -44 -16 -59 18 -18 25 30 30 50 11 50 -4 0 -17 -15 -29 -32z" />
<path d="M717 981 c-19 -33 -22 -51 -7 -51 5 0 19 18 30 40 24 48 5 57 -23 11z" />
<path d="M355 960 c-16 -16 -25 -33 -22 -37 8 -7 67 45 67 59 0 16 -17 8 -45 -22z" />
<path d="M502 910 c-25 -33 -27 -40 -11 -40 14 0 48 41 49 58 0 20 -15 14 -38 -18z" />
<path d="M651 866 c-25 -39 -26 -46 -8 -46 16 0 50 67 38 75 -5 3 -19 -10 -30 -29z" />
<path d="M1573 831 c-38 -19 -39 -45 -2 -49 32 -4 55 21 43 47 -8 17 -11 18 -41 2z" />
<path d="M431 817 c-22 -24 -28 -47 -12 -47 14 0 53 58 43 64 -5 3 -19 -5 -31 -17z" />
<path d="M1604 773 c-22 -14 -22 -14 36 -153 67 -159 116 -240 173 -281 79 -57 167 -64 167 -14 0 19 -5 25 -21 25 -46 0 -102 25 -139 62 -48 49 -76 98 -130 230 -61 150 -61 149 -86 131z" />
<path d="M582 748 c-19 -30 -21 -48 -3 -48 6 0 41 63 41 75 0 15 -21 0 -38 -27z" />
</g>
</IconBase>
)
}
export function BlindfoldIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.15]')}
viewBox="0 0 151 130"
>
<g
transform="translate(0,130) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M1130 1161 c-187 -76 -338 -155 -444 -233 -63 -45 -145 -102 -183 -126 -51 -33 -85 -65 -135 -130 -111 -144 -167 -222 -184 -254 -20 -39 -20 -112 0 -143 19 -29 85 -49 137 -42 32 4 40 1 57 -23 27 -36 98 -70 148 -70 48 0 142 43 210 97 35 28 61 62 88 112 46 88 96 141 134 141 49 0 159 28 214 54 138 65 212 217 168 346 l-18 54 25 51 c31 61 32 99 1 132 -49 54 -135 67 -218 34z m192 -38 c40 -36 41 -51 8 -103 l-32 -49 -51 34 c-93 61 -206 66 -312 12 -100 -50 -391 -264 -470 -345 -102 -104 -153 -225 -141 -333 6 -47 4 -58 -9 -63 -29 -11 -91 -6 -110 8 -27 19 -23 76 8 129 32 54 214 283 253 318 35 31 282 215 339 252 47 31 354 157 405 167 42 8 85 -3 112 -27z" />
</g>
</IconBase>
)
}
export function ButtPlugIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.18]')}
viewBox="0 0 97 137"
>
<g
transform="translate(0,137) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M446 1208 c-16 -25 -119 -633 -119 -704 0 -28 7 -51 21 -69 27 -34 29 -100 4 -133 -12 -16 -45 -31 -102 -47 -94 -28 -95 -28 -86 -50 5 -13 44 -15 333 -13 284 3 328 5 328 18 0 10 -28 24 -85 43 -47 15 -94 37 -105 48 -28 28 -27 96 3 133 12 16 22 43 22 60 0 50 -101 679 -113 706 -17 36 -79 41 -101 8z" />
</g>
</IconBase>
)
}
export function StrapOnIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.18]')}
viewBox="0 0 456 333"
>
<g transform="translate(0,333) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M1830 3149 c-322 -29 -561 -90 -627 -161 -48 -51 -142 -303 -150 -403 -5 -58 -4 -61 29 -91 54 -51 277 -208 374 -263 87 -49 90 -52 116 -113 46 -106 89 -231 84 -243 -11 -30 -575 -243 -827 -313 -79 -22 -171 -44 -203 -47 -33 -4 -71 -11 -85 -17 -14 -5 -48 -11 -74 -14 -106 -9 -159 -49 -272 -208 -118 -168 -137 -216 -110 -283 19 -48 52 -74 120 -96 114 -36 262 -28 376 21 26 11 82 26 125 32 137 20 268 58 699 201 230 76 422 136 426 131 4 -4 21 -56 39 -117 40 -135 59 -174 118 -238 85 -91 285 -202 436 -241 134 -35 363 -29 532 14 203 52 356 173 516 409 118 173 190 392 220 667 l11 110 88 17 c242 46 570 197 662 306 35 42 34 60 -3 261 -45 237 -57 259 -175 317 -266 128 -946 280 -1520 338 -349 35 -698 44 -925 24z m740 -309 c256 -25 754 -101 772 -118 3 -4 10 -103 14 -219 l7 -213 -199 0 c-290 1 -379 11 -494 56 -157 61 -350 124 -440 144 -113 25 -325 43 -420 34 -75 -6 -77 -6 -160 36 -45 23 -124 67 -173 97 l-90 56 36 18 c104 54 313 99 544 119 127 10 440 5 603 -10z m1265 -226 c100 -28 277 -90 313 -108 22 -12 18 -15 -65 -53 -82 -38 -245 -93 -320 -108 l-33 -7 0 105 c0 57 -3 125 -6 151 -8 56 -10 55 111 20z m-672 -740 l177 -7 0 -41 c0 -77 -30 -280 -55 -376 -14 -52 -48 -142 -77 -200 -45 -90 -65 -118 -143 -195 -100 -101 -154 -132 -272 -159 -142 -32 -216 -15 -297 69 -79 81 -125 214 -111 323 19 151 80 276 185 383 95 96 153 142 232 185 57 32 68 34 123 30 33 -3 140 -9 238 -12z" />
</g>
</IconBase>
)
}
export function TowelIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 242 260"
>
<g
transform="translate(0,260) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M538 2360 c-50 -15 -93 -48 -116 -88 l-22 -40 0 -656 0 -656 700 0 700 0 0 680 c0 582 2 686 15 717 8 19 15 39 15 44 0 11 -1255 10 -1292 -1z" />
<path d="M1943 2355 c-18 -8 -33 -17 -33 -20 0 -3 35 -5 77 -5 67 0 75 2 63 14 -23 22 -72 27 -107 11z" />
<path d="M188 2240 c-17 -14 -19 -20 -9 -38 10 -19 20 -22 75 -22 63 0 64 0 70 31 3 17 6 36 6 41 0 16 -120 6 -142 -12z" />
<path d="M1880 2221 l0 -41 175 0 c169 0 175 1 186 22 10 18 8 24 -9 38 -16 13 -50 17 -186 19 l-166 2 0 -40z" />
<path d="M1880 1275 l0 -835 110 0 110 0 0 835 0 835 -110 0 -110 0 0 -835z" />
<path d="M400 775 l0 -75 700 0 700 0 0 75 0 75 -700 0 -700 0 0 -75z" />
<path d="M400 460 l0 -170 700 0 700 0 0 170 0 170 -700 0 -700 0 0 -170z" />
</g>
</IconBase>
)
}
export function BikiniIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.1]')}
viewBox="0 0 175 217"
>
<g
transform="translate(0,217) scale(0.1,-0.1)"
fill="currentColor"
stroke="none"
>
<path d="M581 1928 c-50 -127 -55 -135 -142 -229 -52 -56 -94 -112 -100 -131 -19 -66 14 -160 78 -220 29 -27 116 -58 162 -58 76 0 173 63 201 130 20 48 57 41 98 -19 49 -73 100 -104 177 -109 74 -5 115 11 174 69 56 53 75 94 75 159 1 67 -15 96 -117 217 -58 68 -86 114 -128 206 -50 108 -69 137 -69 103 0 -7 22 -60 49 -117 48 -101 49 -105 34 -134 -31 -60 -101 -162 -157 -227 -54 -64 -60 -68 -99 -68 -39 0 -47 5 -117 78 -47 48 -89 103 -111 146 l-36 69 48 120 c27 66 49 127 49 134 0 37 -22 0 -69 -119z" />
<path d="M212 698 c-6 -6 -12 -20 -12 -29 0 -26 66 -78 114 -91 l43 -11 -33 -54 c-40 -66 -66 -140 -53 -148 5 -4 12 2 15 12 16 46 77 163 93 178 17 15 26 13 127 -31 145 -61 254 -127 330 -196 34 -32 69 -58 77 -58 9 0 60 37 114 82 113 94 276 216 316 237 26 14 29 13 58 -15 17 -16 45 -53 61 -81 16 -29 32 -53 34 -53 15 0 -2 46 -36 98 l-39 61 44 20 c44 19 66 55 50 80 -18 30 -114 -8 -157 -62 -16 -21 -23 -22 -476 -29 l-460 -8 -31 29 c-56 53 -156 92 -179 69z m1288 -16 c0 -23 -86 -68 -112 -60 -17 6 69 68 94 68 10 0 18 -4 18 -8z m-1192 -26 c27 -14 54 -32 61 -40 12 -14 9 -16 -25 -16 -43 0 -97 28 -114 59 -9 18 -8 21 10 21 11 0 42 -11 68 -24z" />
</g>
</IconBase>
)
}
export function HotpantsIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 255 234"
>
<g transform="translate(0,234) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M570 1875 l0 -75 198 2 197 3 0 70 0 70 -197 3 -198 2 0 -75z" />
<path d="M1050 1875 l0 -75 250 0 250 0 0 75 0 75 -250 0 -250 0 0 -75z" />
<path d="M1634 1936 c-3 -7 -4 -40 -2 -72 l3 -59 198 -3 197 -2 0 75 0 75 -195 0 c-156 0 -197 -3 -201 -14z" />
<path d="M535 1678 c-9 -24 -26 -65 -36 -92 l-20 -49 51 7 c91 12 160 45 217 102 29 29 53 57 53 63 0 7 -43 11 -124 11 l-124 0 -17 -42z" />
<path d="M866 1672 c-28 -54 -105 -131 -162 -160 -51 -26 -114 -43 -193 -51 l-65 -6 -127 -315 c-69 -173 -124 -318 -120 -322 6 -6 798 -423 869 -456 l33 -16 79 79 80 80 0 607 0 608 -185 0 -185 0 -24 -48z" />
<path d="M1340 1490 c0 -202 2 -229 15 -223 38 14 45 55 45 258 l0 195 -30 0 -30 0 0 -230z" />
<path d="M1480 1523 c-1 -251 -12 -288 -102 -334 l-38 -19 0 -333 0 -332 80 -80 c77 -76 80 -78 107 -66 33 15 705 365 810 422 l71 39 -127 318 -127 317 -65 6 c-79 8 -142 25 -193 51 -57 29 -138 110 -165 163 l-22 45 -115 0 -114 0 0 -197z" />
<path d="M1800 1710 c0 -20 85 -102 130 -125 49 -25 146 -49 172 -44 14 3 11 17 -19 92 l-35 87 -124 0 c-78 0 -124 -4 -124 -10z" />
</g>
</IconBase>
)
}
export function UnknownContentIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 171 259"
>
<g transform="translate(0,259) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M638 2440 c-207 -52 -375 -175 -479 -350 -35 -59 -109 -252 -109 -284 0 -12 416 -129 429 -121 5 2 16 31 24 62 35 123 117 215 220 245 66 19 183 14 249 -11 73 -28 154 -101 184 -166 29 -60 32 -158 8 -228 -35 -102 -148 -185 -291 -213 -128 -24 -202 -83 -243 -192 -17 -45 -20 -78 -20 -217 l0 -165 228 0 228 0 -4 55 c-6 84 1 100 50 114 145 44 313 174 401 313 80 125 117 252 117 409 0 343 -218 628 -565 739 -102 33 -319 38 -427 10z" />
<path d="M747 656 c-194 -72 -256 -305 -123 -463 43 -51 138 -93 209 -93 79 0 125 15 183 59 133 100 148 307 30 424 -20 20 -56 47 -79 59 -53 27 -166 34 -220 14z" />
</g>
</IconBase>
)
}
export function OtherContentIcon(props: IconProps) {
return (
<IconBase
{...props}
className={iconClassName(props.className, 'origin-center scale-[1.08]')}
viewBox="0 0 234 245"
>
<g transform="translate(0,245) scale(0.1,-0.1)" fill="currentColor" stroke="none">
<path d="M1052 2362 c-295 -105 -385 -471 -171 -697 87 -92 185 -135 309 -135 124 0 222 43 309 135 94 99 135 229 113 356 -24 142 -111 258 -239 321 -60 29 -77 33 -167 36 -79 2 -113 -2 -154 -16z" />
<path d="M182 1853 c-42 -20 -82 -88 -82 -137 0 -54 206 -683 237 -725 51 -67 157 -89 242 -51 23 11 77 53 118 92 l75 73 -7 -205 c-16 -466 -20 -662 -12 -689 4 -17 19 -39 33 -50 26 -20 38 -21 404 -21 365 0 378 1 403 20 15 12 30 35 34 53 5 18 3 196 -3 397 -7 201 -13 394 -13 429 l-1 64 78 -75 c50 -48 96 -82 125 -93 89 -34 184 -6 235 69 11 17 69 179 128 361 85 265 105 337 101 369 -11 77 -79 136 -159 136 -55 0 -80 -10 -121 -48 -22 -21 -42 -71 -98 -245 l-71 -218 -66 69 c-116 120 -185 139 -280 75 -90 -59 -180 -86 -292 -86 -115 1 -198 24 -289 83 -76 50 -115 52 -187 10 -28 -16 -77 -57 -107 -91 -37 -40 -58 -57 -61 -48 -77 240 -142 424 -158 444 -11 14 -33 32 -48 40 -38 20 -117 19 -158 -2z" />
</g>
</IconBase>
)
}
/* ---------------------------------- */
/* Label-Mapping */
/* ---------------------------------- */
type SegmentLabelMeta = {
match: string[]
text: string
icon: IconComponent
}
const SEGMENT_LABEL_META: SegmentLabelMeta[] = [
// Sex positions
{
match: ['69', 'sixty_nine', 'sixty-nine', 'sixtynine'],
text: '69',
icon: SixtyNineIcon,
},
{
match: ['missionary'],
text: 'Missionary',
icon: MissionaryIcon,
},
{
match: ['reverse_cowgirl', 'reverse-cowgirl', 'reverse cowgirl'],
text: 'Reverse Cowgirl',
icon: ReverseCowgirlIcon,
},
{
match: ['cowgirl', 'riding', 'ride'],
text: 'Cowgirl',
icon: CowgirlIcon,
},
{
match: ['blowjob', 'fellatio'],
text: 'Blowjob',
icon: BlowjobIcon,
},
{
match: ['cunnilingus'],
text: 'Cunnilingus',
icon: CunnilingusIcon,
},
{
match: ['facesitting', 'face_sitting', 'face-sitting', 'face sitting'],
text: 'Facesitting',
icon: FacesittingSexIcon,
},
{
match: ['prone_bone', 'prone-bone', 'prone bone'],
text: 'Prone Bone',
icon: ProneBoneIcon,
},
{
match: ['sitting', 'sitting_sex', 'sitting-sex', 'seated', 'seated_sex'],
text: 'Sitting',
icon: SittingSexIcon,
},
{
match: ['spooning', 'spoons', 'spoon'],
text: 'Spooning',
icon: SpooningSexIcon,
},
{
match: ['handjob', 'hand_job', 'hand-job', 'manual'],
text: 'Handjob',
icon: HandjobIcon,
},
{
match: ['fingering', 'fingered'],
text: 'Fingering',
icon: FingeringIcon,
},
{
match: ['oral'],
text: 'Oral',
icon: MouthIcon,
},
{
match: ['anal'],
text: 'Anal',
icon: AnusIcon,
},
{
match: ['standing_doggy', 'standing-doggy', 'standing doggy'],
text: 'Standing Doggy',
icon: StandingDoggySexIcon,
},
{
match: ['standing', 'standing_sex', 'standing-sex', 'standing sex'],
text: 'Stehend',
icon: StandingSexIcon,
},
{
match: ['doggy', 'doggystyle', 'doggy_style'],
text: 'Doggy',
icon: DoggyIcon,
},
{
match: ['unknown'],
text: 'Unbekannt',
icon: UnknownContentIcon,
},
{
match: ['other', 'misc', 'miscellaneous'],
text: 'Andere',
icon: OtherContentIcon,
},
// People
{
match: ['person_female', 'female_person'],
text: 'Weibliche Person',
icon: FemalePersonIcon,
},
{
match: ['person_male', 'male_person'],
text: 'Männliche Person',
icon: MalePersonIcon,
},
{
match: ['person_unknown', 'person'],
text: 'Person',
icon: UnknownContentIcon,
},
// Bodyparts
{
match: ['anus_exposed', 'anus'],
text: 'Anus',
icon: AnusIcon,
},
{
match: ['ass', 'buttocks_exposed', 'buttocks', 'bottom'],
text: 'Hintern',
icon: ButtocksIcon,
},
{
match: ['breasts', 'female_breast_exposed', 'breast_exposed', 'breasts_exposed', 'female_breast'],
text: 'Brüste',
icon: FemaleBreastIcon,
},
{
match: ['penis', 'male_genitalia_exposed', 'penis_exposed'],
text: 'Penis',
icon: MaleGenitaliaIcon,
},
{
match: ['tongue'],
text: 'Zunge',
icon: TongueIcon,
},
{
match: ['mouth', 'lips'],
text: 'Mund',
icon: MouthIcon,
},
{
match: ['pussy', 'female_genitalia_exposed', 'vulva_exposed', 'labia_exposed', 'vagina'],
text: 'Vagina',
icon: FemaleGenitaliaIcon,
},
{
match: ['belly_exposed', 'stomach_exposed', 'abdomen_exposed', 'navel_exposed', 'belly', 'stomach', 'abdomen', 'navel'],
text: 'Bauch',
icon: BellyIcon,
},
{
match: ['feet_exposed', 'foot_exposed', 'feet', 'foot'],
text: 'Füße',
icon: FeetIcon,
},
{
match: ['face_female', 'face_male', 'face', 'female_face', 'male_face'],
text: 'Gesicht',
icon: FaceIcon,
},
{
match: ['hand', 'hands', 'finger', 'fingers'],
text: 'Hand',
icon: HandIcon,
},
// Objects
{
match: ['blindfold'],
text: 'Augenbinde',
icon: BlindfoldIcon,
},
{
match: ['buttplug', 'butt_plug'],
text: 'Buttplug',
icon: ButtPlugIcon,
},
{
match: ['collar', 'choker'],
text: 'Halsband / Choker',
icon: CollarIcon,
},
{
match: ['dildo'],
text: 'Dildo',
icon: DildoIcon,
},
{
match: ['handcuffs', 'cuffs'],
text: 'Handschellen',
icon: HandcuffsIcon,
},
{
match: ['shower'],
text: 'Dusche',
icon: ShowerIcon,
},
{
match: ['strapon', 'strap_on', 'strap-on'],
text: 'Strap-on',
icon: StrapOnIcon,
},
{
match: ['towel'],
text: 'Handtuch',
icon: TowelIcon,
},
{
match: ['vibrator'],
text: 'Vibrator',
icon: ToyIcon,
},
{
match: ['toy_position', 'toy-position', 'toy sex', 'toy_sex', 'toy_play', 'toy-play'],
text: 'Toy',
icon: ToyIcon,
},
// Clothing
{
match: ['bikini'],
text: 'Bikini',
icon: BikiniIcon,
},
{
match: ['bra', 'brassiere'],
text: 'BH',
icon: BraIcon,
},
{
match: ['dress'],
text: 'Kleid',
icon: DressIcon,
},
{
match: ['heels', 'heel', 'high_heels', 'high-heels'],
text: 'High Heels',
icon: HighHeelsIcon,
},
{
match: ['hotpants', 'shorts'],
text: 'Hotpants',
icon: HotpantsIcon,
},
{
match: ['lingerie'],
text: 'Lingerie',
icon: LingerieIcon,
},
{
match: ['panties', 'underwear', 'briefs', 'boxers', 'thong'],
text: 'Panties',
icon: PantiesIcon,
},
{
match: ['skirt'],
text: 'Rock',
icon: SkirtIcon,
},
{
match: ['stockings', 'stocking'],
text: 'Stockings',
icon: StockingsIcon,
},
{
match: ['top', 'crop_top', 'crop-top', 'croptop'],
text: 'Crop Top',
icon: CropTopIcon,
},
]
function normalizeSegmentLabel(label?: string): string {
return String(label || '').trim().toLowerCase()
}
function normalizeLabelKey(value?: string): string {
return String(value || '')
.trim()
.toLowerCase()
.replace(/^(object|position|body|clothing|detector):/, '')
.replaceAll('-', '_')
.replaceAll(' ', '_')
}
function labelMatches(normalizedLabel: string, key: string): boolean {
const label = normalizeLabelKey(normalizedLabel)
const matchKey = normalizeLabelKey(key)
if (!label || !matchKey) return false
return (
label === matchKey ||
label.startsWith(`${matchKey}_`) ||
label.endsWith(`_${matchKey}`) ||
label.includes(`_${matchKey}_`)
)
}
function findSegmentLabelMeta(label?: string): SegmentLabelMeta | null {
const normalized = normalizeSegmentLabel(label)
if (!normalized) return null
const labelKey = normalizeLabelKey(normalized)
// Wichtig:
// Personen-Labels exakt vor jedem Fuzzy-Matching behandeln.
// Sonst kann "person" auch "person_male" / "person_female" matchen.
if (labelKey === 'person_male' || labelKey === 'male_person') {
return {
match: ['person_male', 'male_person'],
text: 'Männliche Person',
icon: MalePersonIcon,
}
}
if (labelKey === 'person_female' || labelKey === 'female_person') {
return {
match: ['person_female', 'female_person'],
text: 'Weibliche Person',
icon: FemalePersonIcon,
}
}
if (labelKey === 'person' || labelKey === 'person_unknown') {
return {
match: ['person_unknown', 'person'],
text: 'Person',
icon: UnknownContentIcon,
}
}
// Erst exakte Matches prüfen.
for (const item of SEGMENT_LABEL_META) {
if (item.match.some((key) => labelKey === normalizeLabelKey(key))) {
return item
}
}
// Danach erst weiche Matches prüfen.
for (const item of SEGMENT_LABEL_META) {
if (item.match.some((key) => labelMatches(normalized, key))) {
return item
}
}
// Covered-Fallback vor Bodypart-Fallbacks.
if (labelKey.includes('_covered') || labelKey.includes('covered_')) {
return {
match: [],
text:
prettifyUnknownLabel(normalized)
.replace(/\berkannt\b/gi, '')
.replace(/\bexposed\b/gi, '')
.trim() || 'Bedeckt',
icon: CoveredContentIcon,
}
}
// Bodyparts
// Spezialfall zuerst, weil "male_breast" sonst vom allgemeinen "breast" gefangen wird.
if (labelKey.includes('male_breast')) {
return { match: [], text: 'Männliche Brust', icon: MaleBreastIcon }
}
if (
labelKey.includes('ass') ||
labelKey.includes('butt') ||
labelKey.includes('bottom')
) {
return { match: [], text: 'Hintern', icon: ButtocksIcon }
}
if (
labelKey.includes('pussy') ||
labelKey.includes('vagina') ||
labelKey.includes('vulva') ||
labelKey.includes('labia')
) {
return { match: [], text: 'Vagina', icon: FemaleGenitaliaIcon }
}
if (labelKey.includes('penis')) {
return { match: [], text: 'Penis', icon: MaleGenitaliaIcon }
}
if (labelKey.includes('breast')) {
return { match: [], text: 'Brüste', icon: FemaleBreastIcon }
}
if (labelKey.includes('tongue')) {
return { match: [], text: 'Zunge', icon: TongueIcon }
}
if (labelKey.includes('mouth') || labelKey.includes('lips')) {
return { match: [], text: 'Mund', icon: MouthIcon }
}
if (
labelKey === 'face' ||
labelKey === 'face_female' ||
labelKey === 'face_male' ||
labelKey === 'female_face' ||
labelKey === 'male_face' ||
labelKey.includes('face_exposed') ||
labelKey.includes('face_covered') ||
labelKey.endsWith('_face') ||
labelKey.startsWith('face_')
) {
return { match: [], text: 'Gesicht', icon: FaceIcon }
}
if (
labelKey.includes('belly') ||
labelKey.includes('stomach') ||
labelKey.includes('abdomen') ||
labelKey.includes('navel')
) {
return { match: [], text: 'Bauch', icon: BellyIcon }
}
if (labelKey.includes('foot') || labelKey.includes('feet')) {
return { match: [], text: 'Füße', icon: FeetIcon }
}
// Objects
if (labelKey.includes('shower')) {
return { match: [], text: 'Dusche', icon: ShowerIcon }
}
if (labelKey.includes('blindfold')) {
return { match: [], text: 'Augenbinde', icon: BlindfoldIcon }
}
if (labelKey.includes('collar') || labelKey.includes('choker')) {
return { match: [], text: 'Halsband / Choker', icon: CollarIcon }
}
if (labelKey.includes('buttplug') || labelKey.includes('butt_plug')) {
return { match: [], text: 'Buttplug', icon: ButtPlugIcon }
}
if (
labelKey.includes('strapon') ||
labelKey.includes('strap_on')
) {
return { match: [], text: 'Strap-on', icon: StrapOnIcon }
}
if (labelKey.includes('dildo')) {
return { match: [], text: 'Dildo', icon: DildoIcon }
}
if (labelKey.includes('vibrator')) {
return { match: [], text: 'Vibrator', icon: ToyIcon }
}
if (labelKey.includes('handcuff') || labelKey.includes('cuff')) {
return { match: [], text: 'Handschellen', icon: HandcuffsIcon }
}
if (labelKey.includes('towel')) {
return { match: [], text: 'Handtuch', icon: TowelIcon }
}
// Clothing
if (labelKey.includes('bikini')) {
return { match: [], text: 'Bikini', icon: BikiniIcon }
}
if (labelKey.includes('bra') || labelKey.includes('brassiere')) {
return { match: [], text: 'BH', icon: BraIcon }
}
if (labelKey.includes('dress')) {
return { match: [], text: 'Kleid', icon: DressIcon }
}
if (labelKey.includes('skirt')) {
return { match: [], text: 'Rock', icon: SkirtIcon }
}
if (labelKey.includes('heel')) {
return { match: [], text: 'High Heels', icon: HighHeelsIcon }
}
if (labelKey.includes('hotpants') || labelKey.includes('shorts')) {
return { match: [], text: 'Hotpants', icon: HotpantsIcon }
}
if (labelKey.includes('lingerie')) {
return { match: [], text: 'Lingerie', icon: LingerieIcon }
}
if (
labelKey.includes('panties') ||
labelKey.includes('underwear') ||
labelKey.includes('briefs') ||
labelKey.includes('boxers') ||
labelKey.includes('thong')
) {
return { match: [], text: 'Panties', icon: PantiesIcon }
}
if (labelKey.includes('stocking')) {
return { match: [], text: 'Stockings', icon: StockingsIcon }
}
if (
labelKey === 'top' ||
labelKey.includes('crop_top') ||
labelKey.includes('croptop')
) {
return { match: [], text: 'Crop Top', icon: CropTopIcon }
}
if (labelKey.includes('other') || labelKey.includes('misc')) {
return { match: [], text: 'Andere', icon: OtherContentIcon }
}
return null
}
function prettifyUnknownLabel(label?: string): string {
const normalized = normalizeSegmentLabel(label)
if (!normalized) return 'Unbekannt'
return normalized
.replaceAll('_', ' ')
.replace(/\bcrop top\b/g, 'Crop Top')
.replace(/\bcroptop\b/g, 'Crop Top')
.replace(/\bmale\b/g, 'männlich')
.replace(/\bfemale\b/g, 'weiblich')
.replace(/\bgenitalia\b/g, 'Genitalien')
.replace(/\bbreasts\b/g, 'Brüste')
.replace(/\bbreast\b/g, 'Brust')
.replace(/\bbuttocks\b/g, 'Gesäß')
.replace(/\bass\b/g, 'Hintern')
.replace(/\bback\b/g, 'Rücken')
.replace(/\banus\b/g, 'Anus')
.replace(/\bpussy\b/g, 'Vagina')
.replace(/\bpenis\b/g, 'Penis')
.replace(/\btongue\b/g, 'Zunge')
.replace(/\bblindfold\b/g, 'Augenbinde')
.replace(/\bbuttplug\b/g, 'Buttplug')
.replace(/\bbutt plug\b/g, 'Buttplug')
.replace(/\bcollar\b/g, 'Halsband')
.replace(/\bdildo\b/g, 'Dildo')
.replace(/\bhandcuffs\b/g, 'Handschellen')
.replace(/\bshower\b/g, 'Dusche')
.replace(/\bstrapon\b/g, 'Strap-on')
.replace(/\bstrap on\b/g, 'Strap-on')
.replace(/\btowel\b/g, 'Handtuch')
.replace(/\bvibrator\b/g, 'Vibrator')
.replace(/\bbikini\b/g, 'Bikini')
.replace(/\bbra\b/g, 'BH')
.replace(/\bdress\b/g, 'Kleid')
.replace(/\bfishnet\b/g, 'Lingerie')
.replace(/\bheels\b/g, 'High Heels')
.replace(/\bheel\b/g, 'High Heel')
.replace(/\bhotpants\b/g, 'Hotpants')
.replace(/\blingerie\b/g, 'Lingerie')
.replace(/\bpanties\b/g, 'Panties')
.replace(/\bskirt\b/g, 'Rock')
.replace(/\bstockings\b/g, 'Stockings')
.replace(/\bstocking\b/g, 'Stocking')
.replace(/\btop\b/g, 'Crop Top')
.replace(/\bbelly\b/g, 'Bauch')
.replace(/\bstomach\b/g, 'Bauch')
.replace(/\babdomen\b/g, 'Bauch')
.replace(/\bnavel\b/g, 'Bauchnabel')
.replace(/\bfeet\b/g, 'Füße')
.replace(/\bfoot\b/g, 'Fuß')
.replace(/\bface\b/g, 'Gesicht')
.replace(/\bfacesitting\b/g, 'Facesitting')
.replace(/\bface sitting\b/g, 'Facesitting')
.replace(/\bprone bone\b/g, 'Prone Bone')
.replace(/\bpronebone\b/g, 'Prone Bone')
.replace(/\bfingering\b/g, 'Fingering')
.replace(/\bfingered\b/g, 'Fingering')
.replace(/\bblowjob\b/g, 'Blowjob')
.replace(/\bfellatio\b/g, 'Blowjob')
.replace(/\bhandjob\b/g, 'Handjob')
.replace(/\bhand job\b/g, 'Handjob')
.replace(/\bcovered\b/g, 'bedeckt')
.replace(/\bexposed\b/g, 'erkannt')
.replace(/\s+/g, ' ')
.trim()
.replace(/^./, (char) => char.toUpperCase())
}
export function getSegmentIcon(label?: string): IconComponent {
return findSegmentLabelMeta(label)?.icon ?? UnknownContentIcon
}
export function getSegmentLabelText(label?: string): string {
return findSegmentLabelMeta(label)?.text ?? prettifyUnknownLabel(label)
}
export function SegmentLabelIcon({
label,
...props
}: IconProps & {
label?: string
}) {
const Icon = getSegmentIcon(label)
return <Icon {...props} />
}
export type SegmentLabelItem = {
key: string
text: string
icon: IconComponent
}
export function getSegmentLabelItem(label?: string): SegmentLabelItem {
const meta = findSegmentLabelMeta(label)
if (meta) {
return {
key: normalizeSegmentLabel(label) || meta.text,
text: meta.text,
icon: meta.icon,
}
}
return {
key: normalizeSegmentLabel(label) || 'unknown',
text: prettifyUnknownLabel(label),
icon: UnknownContentIcon,
}
}
export function getSegmentLabelItems(labels: Array<string | undefined | null>): SegmentLabelItem[] {
const out: SegmentLabelItem[] = []
const seen = new Set<string>()
for (const raw of labels) {
const item = getSegmentLabelItem(raw || undefined)
const dedupeKey = `${item.text}::${item.icon.name}`
if (seen.has(dedupeKey)) continue
seen.add(dedupeKey)
out.push(item)
}
return out
}
export function getHighestPrioritySegmentLabelItem(
labels: Array<string | undefined | null>
): SegmentLabelItem {
const items = getSegmentLabelItems(labels)
if (items.length === 0) {
return getSegmentLabelItem(undefined)
}
const priority = (item: SegmentLabelItem): number => {
switch (item.text) {
case 'Vagina':
return 0
case 'Brüste':
return 1
case 'Gesäß':
return 2
case 'Penis':
return 3
case 'Anus':
return 4
case 'Männliche Brust':
return 5
case 'Bauch':
return 6
case 'Füße':
return 7
case 'Gesicht':
return 8
default:
return 999
}
}
return [...items].sort((a, b) => {
const pa = priority(a)
const pb = priority(b)
if (pa !== pb) return pa - pb
return a.text.localeCompare(b.text, 'de')
})[0]
}